假设我们在CTR模式下使用AES加密多个块(每个x字节)。
当前使用的IV (nonce+ctr)在两个通信实体之间是如何同步的?
我想现在可以用明文规定的方式交换。然后,可以将ctr值作为明文附加到每个密码中。这样,发送方和接收方都可以通过使用预交换的IV和附加的ctr来生成正确的当前。即使在数据包丢失的情况下,接收到的数据包也始终可以被解密。
发布于 2020-11-18 17:47:06
当前使用的IV (nonce+ctr)在两个通信实体之间是如何同步的?
在CTR模式中,计数器从0开始,因此不需要在CTR模式下发送初始值。
\text{64 bits nonce}||\underbrace{\text{00000...00000}}_{64 \, zeros}
使用多个文件(派生问题)
如果您想要在多个文件中使用nonce (是的,在CTR模式下是nonce ),那么请确保计数器不重复。这可以通过加密下一个文件的计数器到上一个文件的最后一个计数器+ 1来实现。也就是说,前一个文件使用了从i到j的计数器,而下一个文件的计数器必须从j+1启动,并且确保j<2^{64},如果超过$2^{64}$,则不返回$$0。
通过使用计数器的剩余值,您也需要发送计数器的启动,并将其存储在本地、您和另一边!一个人也可以弥补这个问题。预置是有用的,因为它是在流/文件的开头。
\text{nonce}\|\text{counter Value}\|\text{encrypted Message}
发送计数器的启动不会导致任何不安全问题,否则,我们应该已经与CTR,因为我们都知道它从0开始。
然而,以这种形式使用是有危险的。在系统故障期间,您可能会丢失最后一个值,而可能会使用计数器的前一个值。这可能导致灾难性的保密失败,因为观察者会注意到这一点,他们会使用婴儿床拖动技术。这并不意味着AES将丢失,请记住CTR模式是CPA安全的。缓解是使用一个新的现在,最好的是交换一个新的钥匙与ECDH和使用一个新的现在。
危险的一个有趣的例子是,如果双方同时用相同的计数器、当前和键值发送新消息。这是灾难性的!因此,如果消息在两个方向上使用相同的键-- nonce和计数器继续--则不建议将计数器保留在其所在的位置。至少,产生一个新的现在。
请记住,CTR模式有许多AES的缺点,因为缺乏完整和身份验证的AES-GCM处理。而AES-GCM很难使用.则使用ChaCha20-poly1305,其中AES不是强制性的。
Updated用于答复注释;
在CTR上下文中,现在意味着我可以将它与一个AES密钥一起使用,因为lons作为计数器值使用的次数不超过一次,对吗?也就是说,不能多次使用(键、名、计数器)的组合。我说的对吗?
是的,从这个角度看。
在CTR模式下,现在和计数器是用AES加密的。
因此,c_i = AES(k, nonce\|counter_i).在相同的键下,nonce\|counter_i的任何重复都会导致拖床攻击。
"...more而不是一个文件“是什么意思?我不明白这一点。如果您只使用一个给定的AES密钥来加密一个文件,那么我想现在不需要使用它(所以只有计数器)。但是,对于每个不同的文件,如果我们不想建立一个新的AES密钥,那么我们将使用一个新的nonce (然后再次从0启动计数器),并且-
我想我看过你关于寄出柜台的问题了。因为计数器总是从0开始,所以不需要发送。只有当您使用它的模式而不是一个文件时,它才是必要的。
正确的用法是对每个文件使用一个新的nonce。如果您没有建立一个新的密钥,生成一个新的现在,并发送它与附加。确保您不会再次生成nonce。
https://crypto.stackexchange.com/questions/86279
复制相似问题