图解密码技术学习-第八章 消息认证码

消息认证码

消息认证码的作用

  • 消息认证码同时解决消息的完整性发送者正确性
    • 消息完整性解决的是消息是否有被篡改的问题,也就是保证了消息的完整性
    • 消息认证解决的是消息的发送者正确性的问题,确保消息不是其他人伪装发送的。

什么是消息认证码

  • 是一种确认完整性并进行认证的技术,英文是message authentication code,简称MAC。
  • 消息认证码的输入是任意长度的消息和一个发送者与接收者之间共享的密钥输出固定长度的数据,这个数据称为MAC值
  • 从上面的输入和输出关系,我们很容易想到,消息认证码和单向散列函数有相似之处。所以可以理解为,消息认证码是一种与密钥相关联的单向散列函数
  • 单向散列函数保证了完整性,无法被篡改;共享密钥只有发送者和接收者知道,保证了可以检查发送者身份的正确性。

消息认证码使用过程

  1. 发送者发送消息后,使用发送的消息和共享密钥计算出MAC值,并发送给接收者
  2. 接收者接收到消息后,使用接收到的消息和共享密钥计算出MAC值
  3. 接收者接收到MAC值后,使用接收到的MAC值和自己计算的MAC值做比对。如果相同,则表示消息没有被篡改,且发送者的身份正确。

共享密钥配送问题

从上面的描述中可以得出,消息认证码能够检查发送者身份的关键因素就是共享密钥。所以,共享密钥的配送问题就是关键环节。
解决的办法在第五章的公钥章节中有总结,基本也就包括:公钥、Diffie-Hellman密钥交换等解决思路。

消息认证码实例

  • SWIFT
    全称是 Society for Worldwide Interbank Financial Telecommunication(环球银行金融电信协会),银行与银行之间传递交易消息是使用SWIFT,使用了消息认证码保障完整性和对消息进行验证。
    共享密钥在使用公钥密码之前,是用人进行配送的。
  • IPsec
    此协议是针对IP协议增加爱安全性的一种方式,使用消息认证码对消息内容进行认证和保证完整性。
  • SSL/TLS
    这个后续会有专门章节进行介绍。

消息认证码的实现方法

消息认证码有多种实现方式:

  • 使用SHA-1等单向散列函数实现,其中一种实现方式为HMAC。
  • 使用AES等分组密码实现。
    • 分组的密钥作为共享密钥。
    • 使用CBC模式进行加密。简单回顾一下CBC模式,就是前一个分组的密文与此分组的明文XOR后,再加密生成当前分组的密文。
    • 由于不需要进行解密,所以只保留最后一个分组。由于最后一个分组会受到密钥和整个消息的双重影响,所以可以作为消息认证码。
  • 流密码和公钥密码也可以实现消息认证码。

HMAC详细介绍

什么是HMAC

HMAC的H是hash的意思,就是使用单向散列函数来实现的消息认证码。
单向散列函数的具体算法随意选择,如果使用SHA-1,则被称为HMAC-SHA-1。

HMAC具体步骤

  1. 密钥填充
    如果共享密钥小于散列值的长度,则用0补充。
    如果共享密钥大于散列值的长度,则使用单向散列函数计算出共享密钥的散列值。
  2. 填充后的密钥与ipad的XOR
    ipad是一种比特序列,是使用00110110这一比特序列不断循环直到分组长度的比特序列。i是inner的意思。
    填充后的密钥和ipad XOR计算后的值称为 ipadkey。
  3. 与消息组合
    将ipadkey附在消息的开头。
  4. 计算散列值
    使用单向散列函数计算消息和ipadkey组合的散列值。
  5. 填充后的密钥与opad XOR
    opad是一种比特序列,是使用01011100这一比特序列不断循环直到分组长度的比特序列。o是outer的意思。
    填充后的密钥和opad XOR计算后的值称为 opadkey。
  6. 与散列值合并
    将第4步计算的散列值拼接在opadkey后面。
  7. 计算散列值
    将第6步组合后的值进行hash,计算出的散列值就是MAC值。

对消息认证码的攻击

  • 重放攻击
    • 攻击者可以截获发送者的请求消息和MAC值,然后对接收者重放发送。这时虽然攻击者没有破解消息认证码,但对于接收者来说消息和MAC值是匹配的,所以只能执行。
    • 解决的办法。
      • 序号。增加一个流水号,每次都加1。有效果,但是通信双方都需要记录最后一个消息的序号。
      • 时间戳。发送消息中包含当前时间,如果收到以前的消息则当做错误消息不执行。有效果,但是通信双方的时钟必须一致,不一致也会留下重放攻击的空间。
      • nonce。先发送一个伪随机数(称为nonce),然后发送消息计算MAC值时包含nonce。由于每次通信nonce都会发生变化,也就无法进行重放攻击。此办法的缺点是增加了通信量。
  • 密钥推测攻击
    如果是单向散列函数来进行生成MAC,则使用攻击单向散列函数的暴力破解生日攻击来完成攻击。

消息认证码无法解决的问题

  • 对第三方认证
    如果接收者想要让第三方来认证发送者,这点是没法办到的。因为共享密钥只有一个,对于第三方来说无法通过共享密钥来判断到底哪个是发送者,哪个是接收者。
  • 防止否认
    假设发送者否认自己没有发送消息,
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容