OpenSSL EVP_aes_256_ctr使用什么计数器增量函数

OpenSSL EVP_aes_256_ctr使用什么计数器增量函数,openssl,cryptography,Openssl,Cryptography,我通过evp.h接口使用openssl v1.0.2。我正在使用heEVP\u aes\u 256\u ctr()函数,需要管理我的计数器并确保它们不会被重复使用。我在FIPS模式下使用EVP接口 openssl ctr模式使用什么增量函数?它是否执行128位计数器增量或其他操作?我想要一个32位的增量,有没有办法配置这个 代码与此类似:。这没什么关系。我宁愿确保我自己的代码确保计数器不会达到32的2次方,而不是检查并依赖可能永远不会出现的错误条件/溢出 如果您从32位值0(32位零)或值1(3

我通过evp.h接口使用openssl v1.0.2。我正在使用he
EVP\u aes\u 256\u ctr()
函数,需要管理我的计数器并确保它们不会被重复使用。我在FIPS模式下使用EVP接口

openssl ctr模式使用什么增量函数?它是否执行128位计数器增量或其他操作?我想要一个32位的增量,有没有办法配置这个


代码与此类似:。

这没什么关系。我宁愿确保我自己的代码确保计数器不会达到32的2次方,而不是检查并依赖可能永远不会出现的错误条件/溢出

如果您从32位值0(32位零)或值1(31位零后接1位)开始,那么您有大约64 GiB的数据可以加密。这应该足够正常使用。您可以假设最左边的位/字节用于nonce,最右边的位/字节用于计数器,因为OpenSSL确实使用计数器值的无符号、大端编码

我假设OpenSSL使用128位计数器,原因很简单,它允许您在计数器的nonce和low部分之间移动边界。如果OpenSSL假定使用低于128位的计数器,则这是不可能的


请注意,NIST没有对计数器设置任何实际限制,只是提出一些方案以确保其保持唯一性。这使得CTR模式非常灵活,但定义也非常模糊

openssl ctr模式使用什么增量函数?它是否执行128位计数器增量或其他操作

OpenSSL使用整个16字节缓冲区/128位整数作为计数器。发件人:


我想要一个32位的增量,有没有办法配置这个

否,不能使用配置参数更改


但是,调整
ctr128.c
并重新编译库的新副本非常容易。

酷,128位。但是,我永远不会重新编译库,而只是在应用程序端限制计数器值,特别是因为重复计数器值是灾难性的。对于128位计数器和精心选择的nonce,这种情况永远不会发生,但是对于32位计数器,您必须小心不要重复值-请注意,攻击者可能会故意让您陷入这种情况。除此之外,让您的软件依赖于已更改的库始终是维护性的噩梦。
/* increment counter (128-bit int) by 1 */
static void ctr128_inc(unsigned char *counter)
{
    u32 n = 16, c = 1;

    do {
        --n;
        c += counter[n];
        counter[n] = (u8)c;
        c >>= 8;
    } while (n);
}