ECDH_SECP256R1 + HKDF-SHA256

2 篇文章 0 订阅

又有客户需要高级算法了,提出需要ECDH_SECP256R1 + HKDF-SHA256,一顿研究,总算搞定。

关于ECDH_SECP256R1,之前文章(ECDH产生共享密钥 http://t.csdn.cn/T4OYc
)已经介绍过,是一种密钥协商算法,主要利用彼此公私钥产生共享密钥。
这里重点介绍下HKDF-SHA256,这个主要是一种密钥分散方法。HKDF的原意是HMAC-based Extract-and-Expand Key Derivation Function,分散步骤如下:

1、首先用salt作为密钥对上面计算出来的共享密钥IKM进行计算,计算算法为HMAC-SHA256,得出PRK。
在这里插入图片描述
2、然后用PRK作为密钥,通过HMAC-SHA256算法,对T(n-1)+info+counter进行计算,得出T(n),不断计算,直到能得到L长度的密钥为止。
在这里插入图片描述
数据实例:

A.2.  Test Case 2

   Test with SHA-256 and longer inputs/outputs

   Hash = SHA-256
   IKM  = 0x000102030405060708090a0b0c0d0e0f
          101112131415161718191a1b1c1d1e1f
          202122232425262728292a2b2c2d2e2f
          303132333435363738393a3b3c3d3e3f
          404142434445464748494a4b4c4d4e4f (80 octets)
   salt = 0x606162636465666768696a6b6c6d6e6f
          707172737475767778797a7b7c7d7e7f
          808182838485868788898a8b8c8d8e8f
          909192939495969798999a9b9c9d9e9f
          a0a1a2a3a4a5a6a7a8a9aaabacadaeaf (80 octets)
   info = 0xb0b1b2b3b4b5b6b7b8b9babbbcbdbebf
          c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
          d0d1d2d3d4d5d6d7d8d9dadbdcdddedf
          e0e1e2e3e4e5e6e7e8e9eaebecedeeef
          f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff (80 octets)
   L    = 82

   PRK  = 0x06a6b88c5853361a06104c9ceb35b45c
          ef760014904671014a193f40c15fc244 (32 octets)
   OKM  = 0xb11e398dc80327a1c8e7f78c596a4934
          4f012eda2d4efad8a050cc4c19afa97c
          59045a99cac7827271cb41c65e590e09
          da3275600c2f09b8367793a9aca3db71
          cc30c58179ec3e87c14c01d5c1f3434f
          1d87 (82 octets)

3、整个ECDH_SECP256R1 + HKDF-SHA256演示
在这里插入图片描述

ECDH:
ecc_pub_B = 03EBDCEFDAF5C837BA32F79996C266FA70E82B62E9EA789BC6B33E6DDAB536E4CC
ecc_pri_A = C3E0A65F855C24726B157ED7E69E49D5F27FB402AEF7A4B7B38531A4EE93C911
GenerateSharedSecretKey: 70A522F6DB9652573E8871E17887F43DA0F29439B8CAC686BCD5FDD28F993473
DerivateSecretKey Calculate (HKDF-SHA256)
IKM = 70A522F6DB9652573E8871E17887F43DA0F29439B8CAC686BCD5FDD28F993473
Salt = 040010112233445566778899AABBCCDDEEFFADDB
Info = 040010112233445566778899AABBCCDDEEFFADDB
Olen = 0x30
HKDF DerivateSecretKey: 1F4F081A3F08562F438747063051BEB6215303489C910E4F6E003AEA7705A93DACC24BD1B877F128097F538D37D35E2B
DerivateSecretKey OK!

有问题请留言,或者联系我,tianshanjinyou

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Bluedroid 中,ecdh_p256_base_point_x 和 ecdh_p256_base_point_y 是用于 ECDH 密钥交换的 P-256 椭圆曲线的基点坐标。如果您需要修改这些值,可以按照以下步骤进行: 1. 打开 Bluedroid 的源代码目录,并找到 ecdh.c 文件。 2. 在 ecdh.c 文件中,您可以找到以下代码: ``` static const uint8_t ecdh_p256_base_point_x[] = { 0x41, 0x04, 0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47, 0xF8, 0xBC, 0xE6, 0xE5, 0x63, 0xA4, 0x40, 0xF2, 0x77, 0x03, 0x7D, 0x81, 0x2D, 0xEB, 0x33, 0xA0, 0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98, 0xC2, 0x96, 0x4F, 0xE3, 0x42, 0xE2, 0xFE, 0x1A, 0x7F, 0x9B, 0x8E, 0xE7, 0xEB, 0x4A, 0x7C, 0x0F, 0x9E, 0x16, 0x2B, 0xCE, 0x33, 0x57, 0x6B, 0x31, 0x5E, 0xCE, 0xCB, 0xB6, 0x40, 0x68, 0x37, 0xBF }; ``` 3. 将 ecdh_p256_base_point_x 数组中的值替换为您需要的值。请注意,这是一个十六进制数组,所以您需要按照十六进制格式进行修改。 4. 同样地,在 ecdh.c 文件中找到以下代码: ``` static const uint8_t ecdh_p256_base_point_y[] = { 0x41, 0x04, 0x32, 0x3A, 0x63, 0x55, 0x3A, 0x31, 0x6B, 0xD3, 0x2F, 0x24, 0x97, 0x44, 0x27, 0x3C, 0x6D, 0x16, 0x45, 0x7A, 0x72, 0x7A, 0x8E, 0x7F, 0x49, 0x99, 0x5A, 0x5E, 0xF3, 0x82, 0xAE, 0x34, 0x61, 0x1C, 0x77, 0x00, 0xC3, 0x9B, 0x3B, 0x5C, 0x81, 0x89, 0x6F, 0x8C, 0x0D, 0x90, 0x06, 0x4B, 0x7A, 0x2F, 0x6A, 0x76, 0x5E, 0x97, 0x0E, 0x5A, 0x16, 0x31, 0x74, 0x8C, 0x70, 0x17, 0xA4, 0xB2 }; ``` 5. 将 ecdh_p256_base_point_y 数组中的值替换为您需要的值。同样地,这也是一个十六进制数组,所以您需要按照十六进制格式进行修改。 6. 保存文件并重新编译 Bluedroid。现在,您已经成功地修改了 Bluedroid 中的 ecdh_p256_base_point_x 和 ecdh_p256_base_point_y 值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值