8. 密码学专题 - 消息认证码 (MAC)

密码学专题 - 消息认证码 (MAC)

消息认证码,或者 MAC,用于检测对消息的篡改。加密使 Eve 不能够获取消息的内容,但不能防止 Eve 对消息进行操纵,这时就需要消息认证码。与加密消息一样,MAC 也使用一个密钥 K,Alice 和 Bob 知道这个密钥但 Eve 不知道。当 Alice 向 Bob 发送消息 m 时,不仅仅发送消息 m,而且还发送一个由 MAC 函数计算得到的 MAC 值。Bob 检验接收到的消息的 MAC 值与收到的 MAC 值是否相等,如果不匹配则丢弃这个没能通过认证的消息。由于 Eve 不知道密钥 K,所以不能为篡改后的消息找到正确的 MAC 值,从而保证 Eve 不能对消息进行操纵。

8.1 MAC 的作用

MAC 函数有两个输入,其中一个是固定长度的密钥 K,另一个是任意长度的消息 m,产生固定长度的 MAC 值。这里将 MAC 函数表示为 MAC(K,m)。为了对一个消息进行认证,Alice 把消息 m 与 MAC 值 MAC(K,m) 一起发送,这个 MAC 值也称为标签 (tag)。假设 Bob (同样有密钥 K) 收到消息 m' 和标签 T 后,可以使用 MAC 验证算法来检验 T = MAC(K,m') 是否成立。

8.2 CBC-MAC 和 CMAC

CBC-MAC 是一种将分组密码转换为 MAC 的经典方法,密钥 K 被用作分组密码的密钥。CBC-MAC 所采用的方法是对消息 m 用 CBC 模式进行加密,而只保留密文的最后一个分组,其余全部丢弃。对一个由分组 P_1,...,P_k 组成的消息,MAC 计算过程为:
H_0 := IV

H_i := E_K(P_i \bigoplus H_{i-1})

MAC := H_k

有时也会取最后一个分组的一部分 (例如一半) 作为 CBC-MAC 函数的输出。CBC-MAC 的常见定义要求 IV 固定为 0。

8.3 HMAC

既然理想的 MAC 是一个以密钥和消息为输入的随机映射,而且我们已经有了与随机映射类似的散列函数,因此很自然地会想到用散列函数构造 MAC,这正是 HMAC 所要完成的工作。HMAC 的设计者当然非常了解散列函数的问题,正是由于这个原因,不能将 HMAC 简单地定义为 `h(K||m)h(m||K) 甚至 h(K||m||K) 等,因为如果使用标准的迭代散列函数会产生很多问题。

所以在 HMAC 中计算 h(K \bigoplus a || h(K \bigoplus b||m),其中 a 和 b 为指定的常数。即首先对消息进行一次散列运算,输出结果再与密钥一起进行散列运算。

附录 1. MAC

与密钥相关的单向散列函数通常称为 MAC,即消息认证码 (MAC, Message Authentication Code)。MAC 具有与先前讨论的单向散列函数同样的特性,但 MAC 还包括一个密钥。只有拥有相同密钥的人才能鉴别这个散列。这对于在有没有保密的情况下提供可鉴别性是非常有用的。

MAC 可在用户之间鉴别文件。它还可以被单个用户用来确定他的文件是否已改动,或是否感染了病毒。用户也可以计算出文件的 MAC,并将该值存入某个表中。如果用户采用了单向散列函数,在感染病毒后就可以计算出新的散列值,并用它代替表中的值。病毒就不能做到这一点,因为它不知道密钥。

将单向散列函数变成 MAC 的一个简单办法是用对称算法加密散列值。相反,将 MAC 变成单向散列函数则只需将密钥公开即可。

项目源代码

项目源代码会逐步上传到 Github,地址为 https://github.com/windstamp

Contributor

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