我想创建一些软件来执行diffie集团的密钥协议,但是我不想重新发明轮子,即使我知道它是如何完成的。因此,我研究了NaCl库,特别是scalar_mult函数。
据我所知,您可以在椭圆曲线上执行Diffie密钥协议,因此,我的思想是,如果我将它与crypto_box密钥生成相结合,我就可以执行Diffie密钥协议。
我的想法(用某种伪码描述)如下图所示:

如上所示,你能推荐一下吗?
发布于 2019-03-23 07:28:19
是。
DH函数是\operatorname{X25519}(n, p) := x\bigl([\operatorname{clamp}(n)] x^{-1}(\operatorname{decode}(p))\bigr),在素数字段\operatorname F_{2^{255} - 19}上的曲线y^2 = x^3 + 486662 x^2 + x上有标量乘[\alpha]P,其中n是代表私钥的32字节字符串,p是代表公钥的32字节字符串。
这里,\operatorname{decode}(p)将一个32字节的字符串映射为\mathbb F_{2^{255} - 19}的一个元素,而\operatorname{clamp}(n)将一个统一的随机32字节字符串映射为\{2^{254}, 2^{254} + 8, 2^{254} + 16, \dots, 2^{255} - 8\}-that中的一个统一随机整数,即2^{254}和2^{255} - 1之间的整数倍数为8。
作为DH函数,它具有属性\operatorname{X25519}(n, \operatorname{X25519}(m, \underline 9)) = \operatorname{X25519}(m, \operatorname{X25519}(n, \underline 9)),其中\underline 9是标准基点的编码,x坐标为9,这意味着双方将到达相同的共享秘密。
安全契约要求您必须散列共享秘密:具体来说,使用H(\operatorname{X25519}(n, p))**.*,安全猜测是,即使您对攻击者选择的任何p显示\operatorname{X25519}(n, \underline 9)和p \mapsto H(\operatorname{X25519}(n, p)),攻击者也必须花费{\sim}2^{128}位操作来查找任何共享秘密。安全契约还要求,除了两个n函数之外,您永远不要将crypto_scalarmult用于任何目的:
crypto_scalarmult_base(p, n)将p设置为公钥\operatorname{X25519}(n, \underline 9)。您可以发布p。crypto_scalarmult(q, n, p)将q设置为未散列的共享秘密\operatorname{X25519}(n, p),私钥n和公钥p之间共享的秘密。在使用q之前,必须对其进行散列。https://crypto.stackexchange.com/questions/63906
复制相似问题