Linux内核中CTR模式下的AES驱动程序中的计数器大小

时间:2015-04-10 19:09:47

标签: linux-kernel openssl cryptography aes embedded-linux

我已经看到针对不同加密硬件引擎的AES(CTR)模式的多个开源驱动程序,我不太确定计数器大小,nonce等。 请任何人提供以下

的一些信息

Q1:

AES驱动程序在CTR操作模式下如何识别计数器大小?

在点击模式下看起来像AES支持"反对"多种长度如下:

  
    

1:首先是一个由nonce和counter组成的计数器。随机数是随机的,其余字节是计数器字节(递增)。      例如,一个16字节的块密码可能使用高8字节作为nonce,而低8字节作为计数器。

         

2:秒是计数器块,其中所有字节都是计数器字节,并且可以在生成进位时递增。      例如,在16字节的块密码中,所有16个字节都是计数器字节

  

Q2:

Linux Kernel Crypto子系统是否会为每个输入块增加计数器值,还是需要内核驱动程序为相应的Crypto H / W进行处理?

Q3:

计数器和随机数是从IV中提取的东西,即IV = nonce + counter。注意如果" l"是IV的长度然后是第一个" l / 2"是nonce和next的长度" l / 2"是反对的长度。如果我对IV,计数器和nonce的理解是否正确,请告诉我?

有关上述内容的任何信息都非常明显。

BR, &安培; Sanumala

1 个答案:

答案 0 :(得分:1)

  

AES驱动程序在CTR操作模式下如何识别计数器大小?

很可能不会。只要它将IV视为一个大的128位计数器,那么就没有问题。如果计数器是64位并在所有零上初始化,那么在2 ^ 64 = 18,446,744,073,709,551,616(16字节)数据块之后你只会遇到问题;那不太可能发生。

  

Linux Kernel Crypto子系统是否会为每个输入块增加计数器值,还是需要内核驱动程序为相应的Crypto H / W进行处理?

内核驱动程序需要注意。我只在API中看到IV作为输入。这对于加密API来说通常就是这种情况。如果必须为要加密的每个16字节更新计数器,则无法获得任何性能。

  

计数器和随机数是从IV中提取的东西,即IV = nonce + counter。注意如果" l"是IV的长度然后是第一个" l / 2"是nonce和next的长度" l / 2"是反对的长度。如果我对IV,计数器和nonce的理解是否正确,请告诉我?

是的,你理解正确。如果协议使用单独的随机数和计数器并且两者是随机生成的,则只会出现问题。在这种情况下,您可能会遇到从计数器到nonce字段的进位问题。

请注意,最好将数据大小限制为,例如~68 GB,并将前12个字节用作随机数,以避免被生日问题所困扰。