首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libgcrypt: CMAC是一种选择吗?

libgcrypt: CMAC是一种选择吗?
EN

Stack Overflow用户
提问于 2021-12-09 16:26:57
回答 1查看 75关注 0票数 1

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

代码语言:javascript
复制
GCRY_CIPHER_AES256, GCRY_CIPHER_MODE_GCM, GCRY_CIPHER_CBC_MAC

根据libgcrypt文档:

GCRY_CIPHER_CBC_MAC:计算CBC-MAC键控校验和.这与CBC模式相同,但只输出最后一个块。不能同时作为GCRY_CIPHER_CBC_CTS使用。

从研究和阅读来看,“CBC_MAC”与CMAC并不是一回事。但是,如果libgcrypt支持CMAC,我不能完全从文档中派生出来?有人能澄清CMAC在libgcrypt中是否是一种选择吗?这里列出了一个模式列表,没有明确列出CMAC:

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

EN

回答 1

Stack Overflow用户

发布于 2021-12-09 20:12:04

是的,看来你可以在gcrypt.h上找到它

代码语言:javascript
复制
GCRY_MAC_CMAC_AES           = 201,

在文档这里中。您可以使用gcry_mac_open创建MAC上下文(详见gcrypt.pdf )。

cipher.h中,您也可以找到您想要的函数,但是毫无疑问,最好使用上面的常量(而不是在特定模式下的密码)创建一个MAC上下文。

内部危害:

代码语言:javascript
复制
/*-- 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被添加到一个单独的上下文中。

请注意,GCM是一种使用GMAC的身份验证模式,比CMAC更快,因此使用GCM和CMAC对密文进行身份验证(同样)没有什么意义。如果您希望依赖CMAC (可以使用参数表示它更安全),那么您也可以选择AES-EAX模式;它是使用AES-CTR和AES-CMAC作为原语构建的。

简而言之,GCRY_CIPHER_CBC_MAC不是必需的,而且可能不应该使用;如果您有一个经过身份验证的密码,那么消息的完整性/真实性就已经提供了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70295611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档