【问题标题】:Nonce reuse for different recipients?为不同的收件人重复使用随机数?
【发布时间】:2020-10-22 11:05:48
【问题描述】:

我正在生成一个新的随机对称密钥,并希望使用crypto_box_easy 将其传递给多个人。 可以为相同的消息和相同的发件人但为不同的收件人重复使用相同的(随机)随机数吗?可以使用随机密钥和crypto_secretbox_easy 进行对称加密吗?

由于 nonce 必须与加密消息一起提供,它无论如何都不能被隐藏,但是在多个不同的收件人之间重复使用是个问题吗?如果他们提供了一个生成错误的公钥,这是否会削弱加密,从而可以提取其他人的密钥?

非常感谢。

【问题讨论】:

  • 欢迎来到 Stackoverflow。请参阅en.wikipedia.org/wiki/Cryptographic_nonce 了解 nonce 的定义或简而言之:“nonce”表示一次,因此对于任何加密(无论是一人或多人)。为每一次加密生成一个随机数,并将其与密文一起传递给接收者。
  • @MichaelFehr,实际上crypto_box_easy 将使用收件人公钥和您的私钥执行 ECDH 以生成共享密钥,然后将其散列为对称密钥。因此,为每个接收者使用一次相同的 nonce 是可以接受的,因为每个 Diffie Hellman 进程都会生成一个唯一的密钥。

标签: cryptography libsodium nacl-cryptography


【解决方案1】:

只要(key, nonce)元组不被重用,一个nonce就可以被重用。

您是对的,使用相同的密钥重复使用 nonce 会导致使用像 XSalsa20 这样的流密码导致灾难性的隐私丢失。

问题是,crypto_box_easy 使用收件人公钥生成共享密钥,然后与 nonce 一起使用。

因此,即使使用静态随机数,每个收件人的(随机数,密钥)对也会不同

虽然可以两次使用相同的(随机数,密钥)对,但您可以为每个收件人使用相同的随机数,但只能使用一次

可以使用 crypto_box_easy 构造 ONCE 为每个收件人使用一次相同的 nonce。

它甚至在 libsodium 文档中说明了这一点:

nonce 不必保密,但它应该与 一次调用 crypto_box_easy() 一起用于特定的一对 公钥和密钥。

即每个收件人一封邮件。

【讨论】:

  • 谢谢。并且为对称加密操作重用相同的随机数也应该没问题,对吧?
  • 所以,澄清一下,当您将crypto_box_easy 与收件人一起使用时,您在调用crypto_box_easy 时使用他们的公钥...这将生成一个对称密钥。每个额外的接收者(都有不同的公钥),因此 crypto_box 将为每个接收者生成不同的对称密钥。您可以对每个收件人 (PER KEY) 使用相同的 nonce ONCE。如果您要向同一收件人发送另一条消息,则需要一个新的随机数。可以将 SAME nonce ONCE 与 不同 收件人一起使用的唯一原因是因为每个收件人的 Sym 密钥将不同,即不同的 (key, nonce) 对。
  • 为什么文档将私钥称为“密钥”?
  • 绝对。必须是唯一的(随机数,密钥)对,而不是随机数。但我总是想到代码,而不仅仅是加密,而且在收件人密钥之间共享一个 nonce 似乎很笨拙,这让我想知道 OP 到底在做什么。
  • @PresidentJamesK.Polk 完全同意该代码。糟糕的架构来做到这一点,我只想给出一个技术上准确的答案,而不是全权委托“永远不要重用”,所以人们理解更深,为什么......
猜你喜欢
  • 2017-09-22
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 1970-01-01
  • 2012-07-19
相关资源
最近更新 更多