• 密码技术 (4) - 消息认证码


    一. 前言

            消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术,简称为MAC。消息认证码由三部分组成:任意长度的消息,发送者和接收者之间共享的秘钥,输出的固定长度的数据,称为MAC值。消息认证码的生成也借助单向散列函数,和散列值生成都是一样的,除了生成MAC值需要共享秘钥,区别如下图:

            注意, 消息认证码和对称密码一样,也需要解决秘钥传送问题,这就需要配合公钥密吗等技术了。

    二. 消息认证码的用途

    1. SWIFT

            SWIFT的全称是Society for Worldwide Interbank Financial Telecommunication(环球银行金融电信协会)。于1973年成立,成立目的是为了保护国际银行间的交易,银行和银行间通过SWIFT来传递交易消息,为了验证消息的完整性以及对消息进行认证,SWIFT使用了消息认证码。

    2. IPsec

            IPsec是对IP协议通信增加安全性的一种方式,在IPsec中,对通信的内容的完整性和认证也是采用消息认证码。

    3. SSL/TLS

            SSL/TLS是一种应用于WEB场景的通信协议,SSL/TLS中对通信内容的认证和完整性校验也使用了消息认证码。

    三. 消息认证码的实现方式

    1. HMAC

            消息认证码可以使用单向散列函数来实现,其中的一种实现方式就是HMAC。其中的H就是hash的意思。

            使用SHA-1,SHA-224,SHA-256,SHA-384和SHA-512所构造的HMAC,分别称为HMAC-SHA1,HMAC-SHA-224,HMAC-SHA-256,HMAC-SHA-384和HMAC-SHA-512。

    2. 使用分组密码实现
    3. 其他办法

    四. openssl实践

    1. HMAC

    # echo -n 'hello,hmac' | openssl dgst -hmac '123456' -sha256
    (stdin)= 0c0731d78b729a5df92874654e7fa7298235c5b9df0cf11943a9488984ac81d4

    或者通过文件获取消息,如下

    infile内容:

    hello,hmac

    命令:

    openssl dgst -hmac '123456' -sha256 -out hmac.txt infile 

    hmac内容:

    HMAC-SHA256(infile)= 0c0731d78b729a5df92874654e7fa7298235c5b9df0cf11943a9488984ac81d4

    五. 消息认证码不能解决的问题

    1. 向第三方证明消息来源        

            消息的接收者无法向第三方(例如法庭)证明消息就是来自消息的合法发送者,因为消息的接收方和发送方都能生成相同的MAC值,甚至消息就是接收者自己伪造的,或是秘钥泄露,其他人发送给接收方的。

    2. 防止否认

            由于消息的发送者和接收者是预共享秘钥的,所以,接收者收到发送者的消息后,发送者可以否认消息是自己发送的,发送者可以说消息是接收者自己伪造的,也可以说接收者泄露了密码,消息是其他人发送给接收者的,所以,消息认证码无法解决否认问题

    六. 总结

            消息认证码的生成同散列值的生成非常类似,除了消息认证码需要共享的秘钥除外。消息认证码目前的主要的实现方式是通过HMAC的方式。由于消息的发送者和接收者都拥有秘钥,消息认证码不能解决消息的真实来源问题,会出现消息的发行者否认的情况。

  • 相关阅读:
    Oracle缓存表
    不知道HTTPS的加密原理,相信我,看这一篇就够了!
    APP订单管理软件生活中不可或缺|小程序系统定制开发|网站搭建
    【strapi系列】strapi在登录时调用api/auth/local获取token接口一直报401、403、400错误的问题解决
    使用参数非参数和机器学习方法分析印度降雨变化,能给我国带来什么警示?
    1338_龙书笔记_001_编译器的大概结构以及工作的基本流程
    多条件变量应用--传送与搬运问题
    李宏毅《DLHLP》学习笔记6 - 语言模型
    Android 蓝牙设备类型判断代码介绍
    单调栈和单调队列可以很简单
  • 原文地址:https://blog.csdn.net/to_be_better_wen/article/details/133465246