2
  1. 我不确定我是否正确:消息计数器可以用作/代替随机数?

我的意思是这样的消息:

标题(2字节) | 计数器(8bytes) | 正文(n 字节加密) | HMAC-SHA1

计数器 = 1(63 位 = 0)可以吗?

  1. 我知道我不应该两次使用相同的密钥和相同的随机数。当一个新的连接开始并且计数器再次从 1 开始时,我该怎么办?
4

1 回答 1

3

我知道我不应该两次使用相同的密钥和相同的随机数。当一个新的连接开始并且计数器再次从 1 开始时,我该怎么办?

如果您重新使用具有相同密钥的随机数,就会发生这种情况。您应该将用作随机数的计数器存储在客户端的某个位置,为您发送的每条消息递增它,然后在发送该消息之前将其写回存储。这很重要,因为如果您未能将其写回,但发送了消息,则下一条消息将使用相同的计数器。如果您无法将计数器写回,您真的不应该发送消息。

如果您无法在客户端上存储类似计数器之类的东西,那么您可以随机生成随机数。64位并没有为良好的抗碰撞提供太多空间。您应该期望在具有相同密钥的2 32条消息之后获得第一次随机数冲突。如果您的消息比这少得多,那么您可以简单地生成一个随机随机数并相当确定不会发生冲突。如果您想更加确定,请使用 XSalsa20,它使用 192 位 IV/nonce。

我不确定我是否正确:消息计数器可以用作/代替随机数?

Nonce表示使用过一次的数字。如果您总是增加计数器,那么您将始终拥有一个不同的数字,您可以使用一次。所以,是的,计数器可以用作随机数。

于 2016-01-23T20:44:33.890 回答