[英]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.