Encryption 如何使用salsa20计数器? 我不确定我是否正确:消息计数器可以用作/而不是nonce

Encryption 如何使用salsa20计数器? 我不确定我是否正确:消息计数器可以用作/而不是nonce,encryption,cryptography,nonce,Encryption,Cryptography,Nonce,我的意思是这样的信息: 标题(2字节)|计数器(8字节)|正文(n字节加密)| HMAC-SHA1 计数器=1(位中63位=0)是否正常 我明白我不应该用同一把钥匙在同一个时间使用两次。 当新连接启动且计数器再次从1启动时,我该怎么办 我明白我不应该用同一把钥匙在同一个时间使用两次。当新连接启动且计数器再次从1启动时,我该怎么办 如果重新使用具有相同密钥的nonce。您应该将计数器存储在客户端的某个位置,将其用作临时值,为您发送的每条消息递增计数器,并在发送该消息之前将其写回存储器。这一点很重要

我的意思是这样的信息:

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

计数器=1(位中63位=0)是否正常

  • 我明白我不应该用同一把钥匙在同一个时间使用两次。 当新连接启动且计数器再次从1启动时,我该怎么办 我明白我不应该用同一把钥匙在同一个时间使用两次。当新连接启动且计数器再次从1启动时,我该怎么办

    如果重新使用具有相同密钥的nonce。您应该将计数器存储在客户端的某个位置,将其用作临时值,为您发送的每条消息递增计数器,并在发送该消息之前将其写回存储器。这一点很重要,因为如果您无法将其写回,但发送了消息,则下一条消息将使用相同的计数器。如果你不能写回计数器,你真的不应该发送消息

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

    我不确定我是否正确:消息计数器可以用作/而不是nonce


    Nonce表示一次使用的数字。如果您总是递增计数器,那么您将始终使用一次不同的数字。因此,是的,计数器可以用作临时值。

    WRT 2:使用新密钥。考虑做一个密钥交换的长期秘密插入加密。我没有保存新密钥的存储设备。我没有建议使用不同的密码,也没有建议将密钥临时存储在程序内存之外的任何位置。也许你应该向顾问更详细和/或更高层次地解释你的问题。顺便问一下,HMAC-SHA128应该是什么?您应该使用SHA1或SHA256的完整身份验证标记。@Artjom B是的,它被选为应用HMAC和SHA128后产生的标记。关于您关于将计数器用作nonce的评论,如果计数器存储在未签名的64位中,即使每次递增,它最终也将换行为0。。“那还会被认为是暂时的吗?”杰克不,那不再是暂时的了。在它缠绕之前,您需要在某个点使用新的关键点。如果您不想联系所有需要接收这些消息的人,您可以添加一个密钥计数器,每次使用nonce进行换行时,您都会对密钥进行哈希运算,以获得一个“新”密钥,并将nonce设置为0。然后,你可以用第二个计数器值来表示这个键的前进,这个计数器值存储在密文和nonce旁边。。。在它是HMAC(键、消息、当前值(计数器))之前。。然后当计数器复位时,我们会<代码>HMAC(散列(键)、消息、当前值(重置为0))。。还要放一个钥匙柜。所以基本上用散列链的概念来表示新的密钥。是的,没错。这将是完成这项任务的众多方法之一。