Encryption一般并不能解决Message Integrity问题,对于这个问题最常用的工具是Message Authentication Code, MAC,MAC的目标就是检测message是否被敌手篡改。
这部分主要讲述MAC的定义以及如何使用。在对称加密中,通信双方首先共享密钥 k k k,sender发送 ( m , t ) (m,t) (m,t)给接收方,其中 t t t是MAC tag,计算方法为 t ← M a c k ( m ) t \leftarrow Mac_k(m) t←Mack(m);receiver接收 ( m , t ) (m,t) (m,t),并通过Vrfy验证 t t t是否有效,即 m m m是否被敌手篡改。
正式描述如DEFINITION 4.1所示。
Canonical verification的基本思想是再计算一遍 m m m的Mac值,计算出的 t ~ \tilde{t} t~和接收到的 t t t相等则通过验证。该方法隐含着 M a c k ( ) Mac_k() Mack()是一个确定算法。
MAC安全最直观的定义是:不存在Efficient Adversary对任何未经发送或者验证的信息生成Valid tag。
对于正式的模型来说允许敌手选择任意的message通过访问MAC o r a c l e oracle oracle M a c k ( ⋅ ) Mac_k(·) Mack(⋅)获得有效的tag。如果敌手能够对任意message都输出valid tag则称敌手可以破坏MAC方案,其中敌手并没有请求过对应message的valid tag。因此,Replay Attack并没有破坏MAC,但其在安全方面仍然备受关注。
故定义Message Authentication实验如下:其中 Π = ( G e n , M a c , V r f y ) Π=(Gen,Mac,Vrfy) Π=(Gen,Mac,Vrfy)
如果不存在Efficient Adversary在MAC-forge实验中以Non-negligible的概率成功,则称MAC是安全的。正式描述如下:
上述定义强在两个方面:
1.敌手被允许可以向oracle请求其选择的任意信息并获得tag;在现实中,敌手能够获得的相关信息的有效tag往往是受限的,并不是任意的。
2.如果敌手能够输入任意未经验证信息的有效tag,则称敌手就破坏了MAC安全;在现实中,敌手应该是能够输入未验证的有用信息的有效tag,而不是任意未验证信息的有效tag。
正如前面所述,MAC并不能抵抗Replay attack,因为Replay attack并没有破坏MAC的安全性。
那么如何抵抗Replay attack呢?
方法 | sequence numbers (or counters) | time-stamps |
---|---|---|
描述 | 序列号(计数),详细描述在4.5.3节 | sender发送当前时间 T T T,并通过 T ∥ m T\|m T∥m 计算tag t t t |
条件 | 通信双方保持同步状态 | 通信双方保持相近的同步时钟 |
缺点 | 概率性的丢包可能会产生一些问题 | Replay attack足够快时也有可能攻击成功 |
secure MAC保证敌手不能对New Message伪造有效的tag,但并没有限制敌手不能够对验证过的message伪造有效的tag:假设 M a c k ( ) Mac_k() Mack()是一个随机函数,即 M a c k ( m i ) Mac_k(m_i) Mack(mi)可能存在多个有效的tag t i t_i ti,那么敌手就能够对验证过得message m i m_i mi求得一个新的有效tag t i ~ ! = t i \tilde{t_i} != t_i ti~!=ti,这种情况在现实中可能会对通信双方造成某些损害。为了排除这种情况,需要定义Strong MAC。
首先定义Mac-sforge实验,和Mac-forge唯一的区别就在于:验证集合由 { m 1 , . . . , m n } \{m_1,...,m_n\} {m1,...,mn}变成 { ( m 1 , t 1 ) , . . . , ( m n , t n ) } \{(m_1,t_1),...,(m_n,t_n)\} {(m1,t1),...,(mn,tn)};这样定义后Mac-sforge就避免了敌手对已验证message伪造新的有效tag。
很容易得出,Mac-forge在canonical verification条件下和Mac-sforge是等价的。
Definition4.2和4.3中都允许敌手去访问verification oracle。
上面没有提到的一个问题是对MAC verification进行timing attack。敌手发送 ( m , t ) (m,t) (m,t)给接收方,不仅能够了解到是accepts或者rejects的状态,还能了解到接收方作出这个决定花费了多长的时间;由这一特性,提出了timing attack:已知敌手伪造的前 i i i位的tag是对的,现在需要验证第 i + 1 i+1 i+1位是否正确;如果第 i + 1 i+1 i+1位正确,那么rejects的时间会稍长,否则和前 i i i位正确时所花费的时间一样。
对于timing attack的应对措施就是:再进行验证时比较tag的all bytes。