赞
踩
在网络消息的传输过程中会遇到下述攻击:
消息认证的左右主要有两个:(1)验证信息来源的真实性(2)验证信息的完整性。即防止上述的3-6的攻击。
产生消息认证的函数类型共有三种:
对称加密由于只有通信双方共享密钥,也就是说,收到消息的一方能够确信该消息是由发送方产生的。
但是,这存在一种问题便是,接收方不管收到什么消息都需要经过Y=(D,K),Y可能并非是合法密文。
解决该方法的问题之一便是,加入一个易于识别的结构,并且不能通过加密函数是不能重复这种结构的。例如:FCS(帧校验和)或校验和。
直接使用公钥加密可提供保密性,但是不能提供认证。用公钥加密确实能够保证消息在发送过程中不被盗取。
但是若是仅仅用B的公钥加密,由于公钥的公开性,所以不能确定发送方,第三方可以伪装合法用户发送消息。
为了避免以上的情况,可以先用A的私钥对消息进行加密,再用B的公钥加密。但是,这样的加密和解密一共需要四次复杂的公钥运算。
消息认证码(Message authentication code,MAC)是经过特定算法后产生的一小段固定长度的信息,并附加在消息后面。用以检查某段消息的完整性,以及作身份验证。消息认证码的算法中,通常会使用带密钥的散列函数(HMAC),或者块密码的带认证工作模式(如GCM,CCM)。
要生成 Mac ,涉及三种算法:
若A、B共享密钥K,A向B发送消息M,则A计算MAC=C(K,M),其中C为认证函数。消息与MAC一同发送给B。B收到M‘后用相同的密钥进行相同认证函数的计算得到MAC,将MAC进行比对,若相同,且当只有A、B知道密钥K的情况下,可知道:
(1)接收方可以相信消息未被修改。因为,攻击者在不知道密钥的情况下修改消息,不知道如何才能修改MAC才能匹配。
(2)接收方可以确信消息的发送方,因为只有A和B知道密钥。
(3)若消息中含有序列号,则可以确信消息的顺序没有被修改。
Mac 跟数字签名也有很多区别和联系的。
Mac 跟数字签名也有类似的地方,因为都可以确认发出人身份,同时判断文件有无被篡改。
但是区别也是明显的,因为生成 Mac 和验证 Mac 需要的密钥是同一个,属于对称加密的范畴。而数字签名属于非对称加密,生成签名用私钥,而验证签名是否有效要用公钥。Mac 的工作方式决定了,发送方和接收方要事先共享同一个密钥,这也是对称加密算法的共性。数字签名的接收方是不能再生成签名的,也就是说不可伪造。但是 Mac 的接收方因为手里也有密钥,所以可以对其他信息生成 Mac 。
这就是 Mac 和数字签名的对比了。转自知乎
而消息认证码虽然属于对称加密的范畴,但是区别在于:MAC并不要求可逆,而加密要求。另外,MAC的输出是定长,而对称加密的输出与输入长度相关。
CBC-MAC 建立在DES之上,是使用最为广泛的MAC算法之一。该认证算法采用DES运算的米文库链接(CBC)方式。其初始向量为0,需要认证的数据需分成连续的64位分组D1、D2、…DN,若最后一组不足64位,则以0填充。
其主要算法为:
O
1
=
E
(
K
,
D
1
)
O_{1}=E(K,D_{1})
O1=E(K,D1)
O
2
=
E
(
K
,
[
D
2
⊕
O
1
]
)
O_{2}=E(K,[D_{2}⊕O_{1}])
O2=E(K,[D2⊕O1])
.
.
.
...
...
O
N
=
E
(
K
,
[
D
N
⊕
O
N
−
1
]
)
O_{N}=E(K,[D_{N}⊕O_{N-1}])
ON=E(K,[DN⊕ON−1])
该加密算法也可以由AES等代替。考虑到DAC的安全性,分组长度应当选的更长,还可以在
第一块之前添加一个新块填入原始消息长度。
近些年,基于Hash的消息认证逐渐走进人们的视野。主要原因是SHA等Hash散列函数一般都比对称加密的执行速度快。在诸多的基于散列函数的消息认证码中,HMAC是使用最多的方案,如SSL就使用HMAC来完成认证。
HMAC的设计目标:
消息认证可以保护消息不受第三方的恶意攻击,但是他不能保证通信的另一方的恶意攻击。
如:(1)A可以伪造一条消息说消息发自B。(2)因为A可以伪造消息,B可以否认他发送过某条消息。
所以数字签名的必须满足:
直接数字签名只涉及通信双方。
用共享的密钥(对称加密)对整个消息和签名加密,这里是先进行签名,然后再执加密。只有这样在发生争执时,第三方才可以查看消息,因为如果先加密再签名的话,第三方需要知道解密密钥才能知道消息。
但是这样的签名的安全依赖于发送方的密钥的保密性。如果发送方的密钥泄露,或者发送方声称密钥丢失否认发送了消息,我们可以要求签名的消息中包含一个时间戳,以及在密钥被泄密后立即向管理中心报告。即使用数字证书的证书管理中心(CA)。
同EIGamal加密一致,其基本元素是素数q和α,其中,α是q的原根。
用户A产生私钥XA;A的公钥是{q,α,YA}。
具体的密钥产生细节在EIGamal算法概述
A为了对M进行签名,用户A首先计算m=Hash(M),m∈[0,q-1]。
(1)选择证书K,使得满足1≤K≤q-1以及gcd(K,q-1)=1。
(2)计算S1=αKmod q。
(3)计算K-1mod (q-1)。
(4)计算S2=K-1(m-XAS1)mod (q-1)。
(5)签名对(S1,S2)。
(1)计算V1=αmmod q。
(2)计算V2=(YA)S1 S1S2
若V1=V2则签名合法。
当V1=V2时,
α
m
≡
Y
A
S
1
S
1
S
2
m
o
d
q
α^{m} \equiv Y_{A}^{S_{1}} S_{1}^{S_{2}} mod q
αm≡YAS1S1S2modq
已知,
Y
A
≡
α
X
A
m
o
d
q
Y_{A} \equiv α^{X_{A}} mod q
YA≡αXAmodq
S
1
≡
α
K
m
o
d
q
S_{1}\equivα^{K} mod q
S1≡αKmodq
所以
V 2 ≡ α X A S 1 + K S 2 m o d q V_{2}\equivα^{X_{A}S_{1}+K S_{2}} modq V2≡αXAS1+KS2modq
又因为
S
2
≡
K
−
1
(
m
−
X
A
S
1
)
m
o
d
(
q
−
1
)
S_{2} \equiv K^{-1}(m-X_{A}S_{1})mod (q-1)
S2≡K−1(m−XAS1)mod(q−1)
所以
K
S
2
≡
m
−
X
A
S
1
m
o
d
(
q
−
1
)
KS_{2} \equiv m -X_{A}S_{1} mod (q-1)
KS2≡m−XAS1mod(q−1)
由上式可得,
X
A
S
1
+
K
S
2
=
t
∗
(
q
−
1
)
+
m
X_{A}S_{1}+ KS_{2} = t*(q-1)+m
XAS1+KS2=t∗(q−1)+m
则
V
2
≡
α
X
A
S
1
+
K
S
2
≡
α
t
∗
(
q
−
1
)
+
m
m
o
d
q
V_{2}\equivα^{X_{A}S_{1}+K S_{2}} \equiv α^{ t*(q-1)+m} modq
V2≡αXAS1+KS2≡αt∗(q−1)+mmodq
由费马定理可得,
α
(
q
−
1
)
≡
1
m
o
d
q
α^{ (q-1)} \equiv 1 modq
α(q−1)≡1modq
所以,
V
2
≡
α
m
m
o
d
q
V_{2}\equiv α^{ m} mod q
V2≡αmmodq
得证V1=V2。
Schnorr数字签名方案也是基于离散对数的数字签名。但Schnorr数字签名方案所需消息计算量最小化,生成签名的主要工作不依赖于消息,可以等到处理器空闲时处理。
(1)素数p、q,且q是p-1的素因子。
(2)选择整数α,使得αq = 1 mod p 。
(3)选择随机整数s,0<s<q,作为用户私钥。
(4)计算v=a-s mod p ,作为用户公钥。
(1)选择随机整数r,0<r<q,计算x=armodp。
(2)将x附在消息后面一起计算Hash值h=H(M|x)。
(3)计算y=(r+sh)mod q。签名对为(h,y)。
ps:由于步骤一的产生与发送的消息M无关,可以在预处理时计算,在一定程度提高了效率。
(1)计算x‘=αyvhmod p。
(2)验证h 和 H(M|x’)是否相等
若传输过程中消息没有遭受破坏,
x
′
≡
α
y
v
h
≡
α
y
−
s
h
≡
α
r
≡
x
m
o
d
q
x' \equiv α^{y} v^{h}\equiv α^{y-sh} \equiv α^{r}\equiv x mod q
x′≡αyvh≡αy−sh≡αr≡xmodq
所以,h=H(M|x’)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。