首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于NaCL加密库的问题

关于NaCL加密库的问题
EN

Stack Overflow用户
提问于 2012-12-02 04:47:26
回答 2查看 7.3K关注 0票数 7

我正在寻找实现加密系统的库,并对使用NaCl:网络和密码学库感兴趣,特别是box function。显然,它使用对称加密XSalsa20、用于公私加密的Curve25519和用于身份验证的Poly1305作为其原语。

然而,这些文档在使用方式上看起来是不够的。例如,它提到,为了计算密钥,它使用发送方的私钥和接收方的公钥来计算秘密密钥。但这并不能解释为什么。有没有人能解释一下呢?

如果我使用相同的公钥和私钥,我就不会在下一次尝试时生成相同的密钥,这将是灾难性的。有没有人知道它背后的解释,或者给我更多关于函数如何工作而不是如何使用函数的文档?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-02 05:30:54

crypto_box是如何工作的?

box在两个密钥上使用Diffie-Hellman密钥交换,并对结果进行哈希处理。然后它使用它作为secret_box的密钥。

  • crypto_box等价于crypto_box_beforenm,其次是散列密钥交换,其工作原理如Curve25519论文中所述,在Curve25519上使用椭圆曲线迪菲-赫尔曼密钥交换,使用HSalsa对结果进行散列。这会产生一个32字节的共享密钥。

K=散列(Curve25519(b,A)) =散列(Curve25519(a,B))

  • crypto_box_afternmcrypto_secret_box相同。它需要一个24字节的nonce和一个32字节的密钥。它是一个经过身份验证的流密码,使用XSalsa20进行加密,使用Poly1305作为MAC。XSalsa20输出的前32个字节用于媒体访问控制,其余的被xor到明文中进行加密。

如果您多次使用它,会发生什么?

如果您采用两个固定的密钥对,则密钥交换的结果将始终相同。

但是,对称部分密钥是安全的,即使您多次使用一个密钥,只要您从不为该密钥重用现时值,即( secret_box,现时值)对必须是唯一的。

这个属性对于所有现代的经过身份验证的流密码几乎都是一样的,比如AES-GCM或XSalsa20-Poly1305。

创建唯一随机数的常见方法是:

  • 使用8字节前缀和随机16字节值(无状态,随机16字节很可能是唯一的)
  • 使用16字节前缀和8字节计数器(有状态,在为每个包递增的连接中很有用)
票数 16
EN

Stack Overflow用户

发布于 2016-02-03 23:55:17

例如,

提到,为了计算密钥,它使用发送方的私钥和接收方的公钥来计算秘密密钥。但这并不能解释为什么。有没有人能解释一下呢?

有一个不错的、容易理解的视频,但用的是德语:https://www.youtube.com/watch?v=aC05R9xqbgE。这个视频解释了“离散对数”和“椭圆曲线”的解决方案。

在“椭圆曲线”场景中,公钥P是曲线上的一个点(具有x和y坐标)。P是通过生成器G(由曲线定义)与秘密密钥K.To的乘积来计算的。计算秘密密钥S,只需将对等点P(对等点的公钥)与自己的秘密密钥K(标量数)相乘即可。两个对等体都执行此操作:

S_Alice = P_Bob多个K_Alice =G多个K_Bob多个K_Alice

S_Bob = P_Alice多个K_Bob =G多个K_Alice多个K_Bob

因为曲线是一个交换组,所以乘法的顺序并不重要,所以从上面的计算中可以看出,鲍勃和爱丽丝最终都计算了一个相同的密钥。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13663604

复制
相关文章

相似问题

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