关于NaCl的密码库问题(Questions about the NaCL crypto libra

2019-08-03 10:07发布

我一直在寻找库来实现加密系统,并有兴趣使用氯化钠:网络和加密库专门的箱子功能 。 显然,它采用对称加密XSalsa20,Curve25519公私加密和Poly1305认证的原语吧。

然而,文件看起来是在已经使用它们的方式不够。 例如,它提到,计算它使用发件人的私钥和接收方的公钥来计算秘密密钥的密钥。 不过,这并不怎么解释。 任何人都可以摆脱任何光线就可以了?

如果我是使用相同的公钥和私钥,我不会被下一次尝试产生相同的密钥,这将是灾难性的。 有谁知道它背后的解释或钩我与功能是如何工作的,而不是功能如何使用一些更多的文档?

Answer 1:

如何crypto_box工作?

box上使用两个密钥的Diffie-Hellman密钥交换和散列结果。 然后,它使用了作为关键secret_box

  • crypto_box相当于crypto_box_beforenm随后crypto_box_afternm

  • crypto_box_beforenm是散列密钥交换如Curve25519论文中描述,使用在Curve25519椭圆曲线Diffie-Hellman密钥交换与散列HSalsa其结果起作用。 这产生一个32字节的共享密钥。

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

  • crypto_box_afternm相同crypto_secret_box 。 它需要一个24字节的随机数和一个32字节的密钥。 它是一个使用XSalsa20用于加密和Poly1305作为MAC经过身份验证的流密码。 第一个32个字节XSalsa20的输出被用于MAC,其余都是xor编入的明文进行加密。

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

如果你把两个固定的密钥对,密钥交换的结果总是相同的。

但是,对称部分secret_box甚至当你使用一键几次,只要你永远不重复使用该键的随机数,即(钥匙,随机数),对必须是唯一的安全。

这家酒店是非常对所有现代认证流密码,如AES-GCM或XSalsa20-Poly1305相同。

创造一个独特的现时常用的方法有:

  • 使用8个字节的前缀和一个随机的16字节的值(无状态的,随机的16个字节是最有可能是唯一的)
  • 使用(你增加每个数据包状态,在连接有用)一个16字节的前缀和8字节计数器


Answer 2:

例如,它提到,计算它使用发件人的私钥和接收方的公钥来计算秘密密钥的密钥。 不过,这并不怎么解释。 任何人都可以摆脱任何光线就可以了?

有一个很好的,可以理解的视频,但在德国语言: https://www.youtube.com/watch?v=aC05R9xqbg​​E 。 此视频介绍它用于“离散对数”和“椭圆曲线”的解决方案。

在“椭圆曲线”的情况下,公共密钥P是点(x和y坐标)曲线上。 P由发电机G(由曲线定义)的乘法密钥计算K.To calulate密钥S,只是做了对的点P(对方的公用密钥)用自己的秘密密钥K的乘法(一标量数量)。 两个同龄人做此操作:

S_Alice K_Alice = G = P_Bob比K_Bob K_Alice更

S_Bob K_Bob = G = P_Alice比K_Alice K_Bob更

由于曲线是交换群 ,乘法的顺序没有关系,所以从上述计算可以看到的是,在端部都Bob和Alice计算出的相同的密钥。



文章来源: Questions about the NaCL crypto library