首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能用NaCl的标量乘法函数来实现Diffie Hellman密钥协议吗?

我能用NaCl的标量乘法函数来实现Diffie Hellman密钥协议吗?
EN

Cryptography用户
提问于 2018-11-12 13:11:18
回答 1查看 279关注 0票数 1

我想创建一些软件来执行diffie集团的密钥协议,但是我不想重新发明轮子,即使我知道它是如何完成的。因此,我研究了NaCl库,特别是scalar_mult函数。

据我所知,您可以在椭圆曲线上执行Diffie密钥协议,因此,我的思想是,如果我将它与crypto_box密钥生成相结合,我就可以执行Diffie密钥协议。

我的想法(用某种伪码描述)如下图所示:

如上所示,你能推荐一下吗?

EN

回答 1

Cryptography用户

回答已采纳

发布于 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之前,必须对其进行散列。
票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/63906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档