ECDH_SECP256R1 + X9.63 KDF-SHA256

又是客户需要的算法,有需要就研究,毕竟知识有用到才能体现其价值。

关于ECDH_SECP256R1,之前文章( http://t..cn/T4OYc )已经介绍过,是一种密钥协商算法,主要利用彼此公私钥产生共享密钥。

这里重点介绍下

X9.63 KDF-SHA256

这个主要是一种密钥分散方法。X9.63是指美国佬出的标准规范“ANSI X9.63”,KDF是 Key Derivation Function,SHA256就是采用哈希256计算哈希值,具体算法过程介绍如下: 简单说就是用SHA256算法,对Z+counter+info进行计算,得出Hash(i),不断计算,直到能得到所需KeydataLen长度的密钥为止。

数据实例:

[SHA-256]
[shared secret length = 192]
[SharedInfo length = 128]
[key data length = 1024]

COUNT = 0
Z = 22518b10e70f2a3f243810ae3254139efbee04aa57c7af7d
SharedInfo = 75eef81aa3041e33b80971203d2c0c52
	Counter = 00000001
	Hash input 1 = 22518b10e70f2a3f243810ae3254139efbee04aa57c7af7d0000000175eef81aa3041e33b80971203d2c0c52
	K1 = c498af77161cc59f2962b9a713e2b215152d139766ce34a776df11866a69bf2e
	Counter = 00000002
	Hash input 2 = 22518b10e70f2a3f243810ae3254139efbee04aa57c7af7d0000000275eef81aa3041e33b80971203d2c0c52
	K2 = 52a13d9c7c6fc878c50c5ea0bc7b00e0da2447cfd874f6cf92f30d0097111485
	Counter = 00000003
	Hash input 3 = 22518b10e70f2a3f243810ae3254139efbee04aa57c7af7d0000000375eef81aa3041e33b80971203d2c0c52
	K3 = 500c90c3af8b487872d04685d14c8d1dc8d7fa08beb0ce0ababc11f0bd496269
	Counter = 00000004
	Hash input 4 = 22518b10e70f2a3f243810ae3254139efbee04aa57c7af7d0000000475eef81aa3041e33b80971203d2c0c52
	K4 = 142d43525a78e5bc79a17f59676a5706dc54d54d4d1f0bd7e386128ec26afc21
key_data = c498af77161cc59f2962b9a713e2b215152d139766ce34a776df11866a69bf2e52a13d9c7c6fc878c50c5ea0bc7b00e0da2447cfd874f6cf92f30d0097111485500c90c3af8b487872d04685d14c8d1dc8d7fa08beb0ce0ababc11f0bd496269142d43525a78e5bc79a17f59676a5706dc54d54d4d1f0bd7e386128ec26afc21

整个ECDH_SECP256R1 + X9.63 KDF-SHA256演示

ECDH:
ecc_pub_B = 03EBDCEFDAF5C837BA32F79996C266FA70E82B62E9EA789BC6B33E6DDAB536E4CC
ecc_pri_A = C3E0A65F855C24726B157ED7E69E49D5F27FB402AEF7A4B7B38531A4EE93C911
GenerateSharedSecretKey: 70A522F6DB9652573E8871E17887F43DA0F29439B8CAC686BCD5FDD28F993473
DerivateSecretKey Calculate (X963KDF-SHA256)
IKM = 70A522F6DB9652573E8871E17887F43DA0F29439B8CAC686BCD5FDD28F993473
Info = 040010112233445566778899AABBCCDDEEFFADDB
Olen = 0x30
IKM + Counter + Info= 70A522F6DB9652573E8871E17887F43DA0F29439B8CAC686BCD5FDD28F993473 00000001 040010112233445566778899AABBCCDDEEFFADDB
HashResult 0 = 2A2D81A60881CAA42F0D58B8725A07B8EF9FD3A3AFD06359954CE727E3A03A97
IKM + Counter + Info= 70A522F6DB9652573E8871E17887F43DA0F29439B8CAC686BCD5FDD28F993473 00000002 040010112233445566778899AABBCCDDEEFFADDB
HashResult 1 = 28D3FBF1E12A95DA85398AF4FCA2526A9858C4FC87FE3E448EB2D4F1A1DC0FA9
X963KDF DerivateSecretKey: 2A2D81A60881CAA42F0D58B8725A07B8EF9FD3A3AFD06359954CE727E3A03A9728D3FBF1E12A95DA85398AF4FCA2526A
DerivateSecretKey OK!
经验分享 程序员 微信小程序 职场和发展