gpt4 book ai didi

encryption - AES加密计数器模式能否指定nonce和counter?

转载 作者:行者123 更新时间:2023-12-04 01:51:52 29 4
gpt4 key购买 nike

我正在尝试使用库 Crypto++ 进行基于 AES 计数器模式的加密/解密

我想将 IV 值拆分为随机数和计数器。
有没有直接用 nonce 和 counter 构造 IV 的 API?

我做了以下实现它

byte counter[AES::BLOCKSIZE/2] = {0x0};     // initialized to zero : 64 bit counter
string counterstr ;
byte nonce[AES::BLOCKSIZE/2]; // 64 bit nonce
string noncestr ;
prng.GenerateBlock(nonce, sizeof(nonce));
StringSource(nonce, sizeof(nonce), true,
new HexEncoder(
new StringSink(noncestr)
) // HexEncoder
);
StringSource(counter, sizeof(counter), true,
new HexEncoder(
new StringSink(counterstr)
) // HexEncoder
);
SecByteBlock no = HexDecodeString(noncestr);
SecByteBlock ctr = HexDecodeString(counterstr);
string ivv = noncestr + counterstr;
SecByteBlock ivvb = HexDecodeString(ivv);

然后我用

e.SetKeyWithIV(key, sizeof(key), iv);

问题:

  • 这是实现此目标的唯一方法还是有其他更简单的方法?

  • 在对 block 进行加密或解密时,计数器值会自动递增吗?

  • 这个很简单,我应该为每个 block 指定另一个 nonce 值吗?

最佳答案

Is this the only way to achieve this or is there any other easier way?

没有。递增函数对完整的 128 位 block 进行操作。参见 CTR mode and Counter Increment在 Crypto++ wiki 上。

较长的答案是"is"如果您提供自己的IncrementCounter 函数。更长的答案可以是"is"如果您使用高阶位作为随机数并使用低位位作为计数器(详见下文)。


Does the counter value increment automatically when doing encryption or decryption of blocks?

是的。


This one is trivial, should I specify another nonce value for each block?

没有。计数器递增。


Is there any API that directly takes the nonce and counter to construct the IV ?

没有。用更实际的术语来说,在 key /随机数对(或安全上下文)下可以加密多少纯文本是有限制的。我认为它远低于 2 GB。如果我没记错的话,那么在计数器进入高 64 位之前,您将不得不重新输入 key 。

实际上,这意味着您可以使用高 64 位作为随机数,并使用低 64 位作为计数器。所以你的代码看起来像这样:

byte counter[AES::BLOCKSIZE] = {0};
prng.GenerateBlock(counter, 8);

上述代码执行后,高64位随机,低64位从0开始,作为计数器。

由于 2 GB 大约是限制,您可以使用 12-4 拆分而不是 8-8 拆分:

byte counter[AES::BLOCKSIZE] = {0};
prng.GenerateBlock(counter, 12);

上述代码执行后,高96位随机,低32位从0开始,作为计数器。


相关,永远不要重复使用随机数。每条消息都必须有自己的、唯一的安全上下文。这通常意味着一个唯一的随机数(另一种选择是为每条消息提供一个唯一的 key )。否则,您可以使用 XOR 轻松恢复 key 。

关于encryption - AES加密计数器模式能否指定nonce和counter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30888018/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com