Sky*_*eSM 2 c++ openssl cryptography crypto++ nonce
我想知道是否有办法使用OpenSSL或Crypto ++库生成Cryptographic Nonce.还有什么比使用autoseeded池生成一组随机字节更多的东西吗?
我想知道是否有办法使用OpenSSL或Crypto ++库生成加密nonce.
加密++:
SecByteBlock nonce(16);
AutoSeededRandomPool prng;
prng.GenerateBlock(nonce, nonce.size());
Run Code Online (Sandbox Code Playgroud)
OpenSSL:
unsigned char nonce[16];
int rc = RAND_bytes(nonce, sizeof(nonce));
unsigned long err = ERR_get_error();
if(rc != 1) {
/* RAND_bytes failed */
/* `err` is valid */
}
/* OK to proceed */
Run Code Online (Sandbox Code Playgroud)
还有什么比使用autoseeded池生成一组随机字节更多的东西吗?
nonce基本上是IV.它通常被认为是一个公共参数,如IV或Salt.
nonce在安全上下文中必须是唯一的.您可能还需要一个nonce不可预测.
唯一性和不可预测性是两个不同的属性.例如,从开始的计数器0000000000000000
是唯一的,但它也是可预测的.
当您需要唯一性和不可预测性时,可以将随机数分区为随机值和计数器.随机值将占用16字节随机数的8个字节; 而计数器将占用16字节随机数的剩余8个字节.然后使用递增函数基本上i++
每次需要一个值时执行.
你不需要8-8分裂.12-4工作,4-12工作.这取决于应用程序和重新加密前所需的随机数.重新加密通常由纯文本字节计数驱动.
16-0也有效.在这种情况下,您使用随机值,避开计数器,并避免增量函数.(增量函数基本上是级联添加).
NIST SP800-38C和SP800-38D提供了几种创建nonce的方法,因为CCM和GCM使用它们.
另请参阅nonce的要求是什么?在加密堆栈交换.
归档时间: |
|
查看次数: |
3621 次 |
最近记录: |