繁体   English   中英

libgcrypt:CMAC 是一种选择吗?

[英]libgcrypt: Is CMAC an option?

为项目使用 libgcrypt,使用以下设置打开密码句柄:

GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM, GCRY_CIPHER_CBC_MAC

根据 libgcrypt 文档:

GCRY_CIPHER_CBC_MAC:计算 CBC-MAC 密钥校验和。 这与 CBC 模式相同,但只有 output 最后一个块。 不能与 GCRY_CIPHER_CBC_CTS 同时使用。

从研究和阅读来看,“CBC_MAC”与 CMAC 不同。 但是,如果 libgcrypt 支持 CMAC,我不能完全从文档中获得? 有人可以澄清一下 CMAC 是否是 libgcrypt 中的一个选项吗? 这里有一个模式列表,没有明确列出 CMAC:

https://www.gnupg.org/documentation/manuals/gcrypt/Available-cipher-modes.html

是的,您似乎可以在gcrypt.h中找到它:

GCRY_MAC_CMAC_AES           = 201,

并在此处的文档中。 您可以使用gcry_mac_open创建 MAC 上下文(有关详细信息,请参阅 gcrypt.pdf)。

cipher.h ,您还可以找到您正在寻找的函数,但毫无疑问,创建 MAC 上下文而不是使用上面的常量(而不是特定模式下的密码)会更好。

内部危险品:

/*-- cipher-cmac.c --*/
gcry_err_code_t _gcry_cmac_generate_subkeys
/*           */ (gcry_cipher_hd_t c, gcry_cmac_context_t *ctx);
gcry_err_code_t _gcry_cmac_write
/*           */ (gcry_cipher_hd_t c, gcry_cmac_context_t *ctx,
         const byte * inbuf, size_t inlen);
gcry_err_code_t _gcry_cmac_final
/*           */ (gcry_cipher_hd_t c, gcry_cmac_context_t *ctx);
void _gcry_cmac_reset (gcry_cmac_context_t *ctx);

我猜发生的事情是 libgcrypt 刚开始使用 CBC-MAC 作为一种特殊的密码模式,之后使用单独的上下文添加了其他 MAC。


请注意,GCM 是一种使用 GMAC 的身份验证模式,它比 CMAC 更快,因此使用 GCM 和 CMAC 来验证密文(再次)没有什么意义。 如果您想依赖 CMAC(可以说它更安全),那么您也可以选择 AES-EAX 模式; 它是使用 AES-CTR 和 AES-CMAC 作为原语构建的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM