如何使用 salsa20 counter nonce?

How to use salsa20 counter nonce?

  1. 我不确定我是否理解正确:可以使用随机数的 as/instead 消息计数器?

我的意思是这样的消息:

Header(2bytes) | counter(8bytes) | Body(n bytes encrypted) | HMAC-SHA1

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

  1. 我知道我永远不应该使用具有相同随机数的相同密钥两次。 新连接开启,计数器又从1开始,怎么办?

I understand that I should never use the same key with the same nonce twice. What do I do when a new connection is started and counter starts from 1 again?

如果您 re-use 具有相同密钥的随机数,this happens。您应该将用作随机数的计数器存储在客户端的某个位置,为您发送的每条消息递增它,并在发送该消息之前将其写回存储。这很重要,因为如果你写回失败,但发送消息,下一条消息将使用相同的计数器。如果你不能写回计数器,你真的不应该发送消息。

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

I am not sure if I got it right: a counter of messages can be used as/instead of the nonce?

Nonce表示号码使用一次。如果你总是增加计数器,那么你将永远有一个不同的数字,你使用 一次。所以,是的,计数器可以用作随机数。