织梦CMS - 轻松建站从此开始!

罗索实验室

当前位置: 主页 > 基础技术 > 高性能服务器 >

openssl 消息认证码CMAC支持

jackyhwei 发布于 2016-07-13 09:31 点击:次 
消息认证码是一种认证技术,它利用密钥来生成一个固定长度的端数据块,并将该数据块附加在消息之后。通信中,消息和MAC一起被发给接收方,接收方利用收到的信息及密钥进行计算,若得到新的MAC值和接受到的值相等
TAG: OpenSSL  

消息认证码是一种认证技术,它利用密钥来生成一个固定长度的端数据块,并将该数据块附加在消息之后。通信中,消息和MAC一起被发给接收方,接收方利用收到的信息及密钥进行计算,若得到新的MAC值和接受到的值相等,则认为

1)接收到的信息未被篡改:因攻击者没有密钥,故篡改信息之后,得不到对应的MAC值。(消息的完整性保护)

2)接收到的消息来自真正的发送方:攻击者没用密钥,不能生成MAC值。(保证信息的合法性)

通常有基于HASH函数的MAC,我们成为HMAC。以及基于分组密码的MAC,我们成为CMAC。

之前在openssl0.9.8中还不支持CMAC,而现在的最新版开始支持CMAC 了,我目前下载了两个版本openssl-1.0.1c 及openssl-1.0.1e 中都支持。而HMAC在openssl-0.9.8 中就已经支持。下面首先简单介绍一下HMAC及CMCA的区别。

1,HMAC (keyed-hash message authentication code)

HAMAC 最主要的目的是用来保证消息的完整性。HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。HMAC 的生成如图所示(weiki):


图片1

2,CMAC

CMAC客服了DAA的缺点,CMAC的生成过程如下图:


图片2

3,openssl中的实现

openssl的crypto目录下有hmac和cmac两个目录分别实现了hmac和CMAC 其调用也非常简单,基本上按顺序调用下面几个函数即可,HMAC和CMAC调用基本类似。

  1. CMAC_CTX *CMAC_CTX_new(void);   
  2. int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen,
  3.  const EVP_CIPHER *cipher, ENGINE *impl);   
  4. int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen);   
  5. int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen);   
  6. void CMAC_CTX_free(CMAC_CTX *ctx); 

4,opnenssl对认证加密的支持

认证加密指在通信中同时提供保密性和认证(完整性)的加密系统。常见的同时提供认证和加密的通用方案有如下四种:

1)HtE:先hash再加密

2)MtE:先MAC再加密

3)EtM:先加密在MAC

4)E&M:加密并且MAC

现在可以在openssl中发现evp_aes_***_ccm和evp_aes_***_gcm。这就是实现认证加密的两个方案。而CCM可以看成是E&M方案的改进。

(kkxgx)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www1.rosoo.net/a/201607/17454.html]
本文出处:CSDN博客 作者:kkxgx 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容