前言:消息认证码 MAC(Message Authentication Code)是经过特定算法后产生的一小段信息,检查某段消息的完整性,以及作身份验证。它可以用来检查在消息传递过程中,其内容是否被更改过,不管更改的原因是来自意外或是蓄意攻击。同时可以作为消息来源的身份验证,确认消息的来源。
【确认消息是保密的】
如果其他人不知道K,那么可以提供保密性,因为任何人不能恢复出明文消息M
【确认消息的发送方】
B 能确认消息是由A 产生的,因为除B 外只有A 拥有K,才能产生出用K 解密成功的密文
【确认消息的完整性】
B 能确认消息是未被改变的,因为攻击者不知道密钥K,即使修改了密文的某些位,还原出的明文也是错误的
对称密码 既可以提供保密性,又可以提供消息认证
但有一个重要前提:接收方能判定M 是合法的明文
例如K=1的Ceasar密码,我们可以判定明文的合法性
nbsftfbupbutboeepftfbupbutboemjuumfmbnctfbujwz
↓ \hspace{3cm}↓ ↓
mareseatoatsanddoeseatoatsandlittlelambseativy
对密文解密后,得到的明文具有普通英语的特点
若攻击者产生如下所示的随机字符作为密文
zuvrsoevgqxlzwigamdvnmhpmccxiuureosfbcebtqxsxq
↓ \hspace{3cm}↓ ↓
ytuqrndufpwkyvhfzlcumlgolbbwhttqdnreabdaspwrwp
对密文解密后,得到的明文不具有普通英语的特点
若M 是可读文本消息,如何判别可读性,证明M正确呢?
若M 是不可读的文件,又如何证明M正确?
Q:现在密钥K是绝对保密的,若攻击者截获了传输的数据,他能看到消息M 是什么吗?那校验码FCS呢?
A:都不能
Q:现在密钥K是绝对保密的,若攻击者截获了传输的数据,他能看到消息M 是什么吗?那校验码FCS呢?
A:M不能,FCS能
Q:若攻击者截获了传输的数据,他能否伪造出一个新的密文,使得接收方解密后得到的是另外的消息M’?
A:能
【无法确认消息是真实的】
【确认消息是真实的】
Q:若攻击者截获了传输的数据,他能看到消息M 是什么吗?
A:能
Q:若攻击者截获了传输的数据,他能否伪造出一个新的密文,使得接收方解密后得到的是另外的消息M’?
A:不能
Q:若攻击者截获了传输的数据,并且已知MAC的长度为n位,他能看到消息M 是什么吗?
A:能
Q:现在密钥K是绝对保密的,若攻击者将消息M 篡改为M’,他能否也同时修改MAC,使得接收方无法察觉?
A:不能
Q:现在密钥K是绝对保密的,若接收方B 对M 计算得到的MAC 与收到的完全相同,他能否确定数据 一定来自于发送方A ?
A:能,因为身份认证的依据就是密钥K
若消息认证码MAC 匹配正确,则:
(1)消息M 未被修改;
(2)消息M 来自真正的发送方;
(3)消息M 若含有序列号,则消息顺序正确
为什么需要消息认证码?用Hash函数/消息加密函数不够么?
消息通信中,通信的某一方处理负荷很大,没有时间解密所有信息,应该做到随机选择消息验证
对明文形式的计算机程序进行认证,不必每次都加解密
有些应用,如SNMP 不关心消息的保密性,只关心认证性
❗ 转载请注明出处
作者:HinsCoder
博客链接: 作者博客主页
= ( , ) = ( , ) =(,) \\ =(,) Y=E(K,X)X=D(K,Y)
= ( , ) =({\color{red}},) X=D(K,Y)
2 k \hspace{1.4cm}\color{red}2^k 2k
= ( , ) =(,) MAC=C(K,M)
= ( , ) {\color{blue}}=({\color{green}},) MAC=C(K,M)
2 c 2 k \hspace{0.5cm}{\color{blue}2^c} \hspace{1.3cm} {\color{green}2^k} 2c2k
M A C 1 = C ( K , M 1 ) 2 k − c {\color{blue}MAC_1}=C\left(K, {\color{blue}M_{1}}\right) \hspace{0.5cm} {\color{red}2^{\boldsymbol{k - c}}} MAC1=C(K,M1)2k−c
M A C 2 = C ( K , M 2 ) 2 k − 2 c {\color{green}MAC_2}=C\left(K, {\color{green}M_{2}}\right) \hspace{0.5cm} {\color{red}2^{\boldsymbol{k}-2c}} MAC2=C(K,M2)2k−2c
…. ….
攻击者重复如上所示的循环,直到匹配数 − → ^{−}→ 2k−nc→1
练习题:
1、已知某MAC函数的密钥K 长度90位,MAC值为15位,现在攻击者对密钥K 发起穷举攻击,问:他在第几次循环可以得到唯一的正确密钥?
解答:
M A C 1 = C ( K , M 1 ) 2 90 − 15 {\color{blue}MAC_1}=C\left(K, {\color{blue}M_{1}}\right) \hspace{0.5cm} {\color{red}2^{\boldsymbol{90 - 15}}} MAC1=C(K,M1)290−15
M A C 2 = C ( K , M 2 ) 2 90 − 2 × 15 {\color{green}MAC_2}=C\left(K, {\color{green}M_{2}}\right) \hspace{0.5cm} {\color{red}2^{\boldsymbol{90}-2 \times 15}} MAC2=C(K,M2)290−2×15
M A C 3 = C ( K , M 3 ) 2 90 − 3 × 15 {\color{orange}MAC_3}=C\left(K, {\color{orange}M_{3}}\right) \hspace{0.5cm} {\color{red}2^{\boldsymbol{90 - 3 \times 15}}} MAC3=C(K,M3)290−3×15
. . . . . . . . . . . . \hspace{0.2cm}......\hspace{3cm}...... ............
M A C 6 = C ( K , M 6 ) 2 90 − 6 × 15 = 1 {\color{purple}MAC_6}=C\left(K, {\color{purple}M_{6}}\right) \hspace{0.5cm} {\color{red}2^{\boldsymbol{90}-6 \times 15}=1} MAC6=C(K,M6)290−6×15=1
所以需要循环 6 6 6次
2、已知某MAC函数的密钥K 长度90位,MAC值为15位,现在攻击者对密钥K 发起穷举攻击,问:他在第几次循环可以得到唯一的正确密钥?
解答: 90 ÷ 26 = 3...12 90 \div 26 =3...12 90÷26=3...12,所以需要循环 3 + 1 = 4 3+1=4 3+1=4次
Δ M = X 1 ⊕ X 2 … ⊕ X m − 1 ⊕ X m \Delta M=X_{1} \oplus X_{2} \quad \ldots \oplus X_{m-1} \oplus X_{m} ΔM=X1⊕X2…⊕Xm−1⊕Xm
M A C = E ( K , Δ M ) \qquad MAC=E(K, \Delta M) MAC=E(K,ΔM)
Δ M = Y 1 ⊕ Y 2 … ⊕ Y m − 1 ⊕ Y m \Delta M=Y_{1} \oplus Y_{2} \quad \ldots \oplus Y_{m-1} \oplus Y_{m} ΔM=Y1⊕Y2…⊕Ym−1⊕Ym
Y m = Y 1 ⊕ Y 2 … ⊕ Y m − 1 ⊕ Δ M Y_{m}=Y_{1} \oplus Y_{2} \quad \ldots \oplus Y_{m-1} \oplus \Delta M Ym=Y1⊕Y2…⊕Ym−1⊕ΔM
( , ) ≠ ( , ′ ) (,){\color{red}≠}(,{\color{red}^′} ) MAC(K,M)=MAC(K,M′)
( ( , ) = ( , ’ ) = − ((,)=(,^’ ) ={\color{red}^{−}} Pr(MAC(K,M)=MAC(K,M’)=2−c
练习题:
现在Hash函数是将所有分组进行按位异或,且分组长度b=8,填充内容P为10…00,消息长度区域共2位。
若密钥K=110,请给出消息001的HMAC。
解答: K + = 00000110 K^+ =00000110 K+=00000110
i p a d = 00110110 o p a d = 01011100 ipad = 00110110 \qquad opad = 01011100 ipad=00110110opad=01011100
S i = K + ⊕ i p a d = 00110000 S_i = K^+\oplus ipad = 00110000 Si=K+⊕ipad=00110000
Y = 001 100 11 Y = 001 \ 100 \ 11 Y=001 100 11(明文分组)
H 1 = H ( S i ∣ ∣ Y ) = S i ⊕ Y = 00000011 H_1=H(S_i \mid\mid Y) = S_i \oplus Y = 00000011 H1=H(Si∣∣Y)=Si⊕Y=00000011
S 0 = K + ⊕ o p a d = 01011010 S_0 = K^+\oplus opad = 01011010 S0=K+⊕opad=01011010
H 2 = H ( S 0 ∣ ∣ H 1 ) = S 0 ⊕ H 1 = 01011001 H_2=H(S_0 \mid\mid H_1) = S_0 \oplus H_1 = 01011001 H2=H(S0∣∣H1)=S0⊕H1=01011001
方案 协议 H->E / A->E SSL/TLS E->A IPSec E+A SSH/WEP \begin{array}{|c|c|} \hline 方案 & 协议 \\ \hline \text{H->E} & \text{/} \\ \hline \text{A->E}& \text{SSL/TLS} \\ \hline \text{E->A} & \text{IPSec} \\ \hline \text{E+A} & \text{SSH/WEP} \\ \hline \end{array} 方案H->EA->EE->AE+A协议/SSL/TLSIPSecSSH/WEP
先Hash再加密: h = H ( M ) , E ( K , ( M ∣ ∣ h ) ) h=H(M),E(K,(M||h)) h=H(M),E(K,(M∣∣h))
先认证再加密: T = M A C ( K 1 ) , E ( K 2 , M ∣ ∣ T ) T=MAC(K1),E(K2,M||T) T=MAC(K1),E(K2,M∣∣T)
先加密再认证: C = E ( K 2 , M ) , T = M A C ( K 1 , C ) C=E(K2,M),T=MAC(K1,C) C=E(K2,M),T=MAC(K1,C)
独立进行加密和认证: C = E ( K 2 , M ) , T = M A C ( K 1 , M ) , ( C , T ) C=E(K2,M), T=MAC(K1,M), (C, T) C=E(K2,M),T=MAC(K1,M),(C,T)
CCM:分组密码链-消息认证码
CCM由NIST提出的用于保护IEEE 802.11WIFI无线局域网安全的标准
CCM执行的是独立进行加密和认证(E+A)的方案
OK,以上就是本期知识点“消息认证码”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟~
如果有错误❌,欢迎批评指正呀~让我们一起相互进步
如果觉得收获满满,可以点点赞支持一下哟~
❗ 转载请注明出处
作者:HinsCoder
博客链接: 作者博客主页