【问题标题】:Questions about the NaCL crypto library关于 NaCL 加密库的问题
【发布时间】:2012-11-19 18:13:08
【问题描述】:

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

但是,文档的使用方式似乎不够充分。例如,它提到要计算密钥,它使用发送者的私钥和接收者的公钥来计算密钥。但它没有解释如何。有人能解释一下吗?

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

【问题讨论】:

  • 只要使用不同的随机数,密钥重用就没有问题。

标签: encryption cryptography encryption-symmetric encryption-asymmetric nacl-cryptography


【解决方案1】:

例如,它提到要计算密钥,它使用发送者的 私钥和接收者的公钥来计算密钥。 但它没有解释如何。有人能解释一下吗?

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

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

S_Alice = P_Bob 多 K_Alice = G 多 K_Bob 多 K_Alice

S_Bob = P_Alice 多 K_Bob = G 多 K_Alice 多 K_Bob

由于曲线是交换群,所以乘法的顺序无关紧要,所以从上面的计算可以看出,最终 Bob 和 Alice 都计算出了相同的密钥。 p>

【讨论】:

    【解决方案2】:

    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_afternmcrypto_secret_box 相同。它需要一个 24 字节的 nonce 和一个 32 字节的密钥。它是一种经过身份验证的流密码,使用 XSalsa20 进行加密,使用 Poly1305 作为 MAC。 XSalsa20输出的前32字节用于MAC,其余的xored到明文加密。

    如果多次使用会怎样?

    如果你取两个固定的密钥对,那么密钥交换的结果总是一样的。

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

    对于所有现代经过身份验证的流密码(例如 AES-GCM 或 XSalsa20-Poly1305)而言,此属性几乎相同。

    创建唯一随机数的常用方法有:

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

    【讨论】:

    • 添加到这个答案的第一部分:如果您不想深入研究整个 Curve25519 论文,也非常解释了 Diffie-Helman 可以用作公钥基础设施的一部分的方式en.wikipedia.org/wiki/….
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    相关资源
    最近更新 更多