注:以下内容参考《新编密码学》范九伦 张雪锋 侯红霞 编著
8.6 身份认证
身份认证是证实客户的真实身份与其所声称的身份是否相符的验证过程。目前常用的身份认证技术主要有以下几种:
1. 用户名/密码方式
基于"what you know"的验证手段。用户自行设定密码,只有用户自己知道。缺点:密码易被猜测或泄露;静态密码在传输和内存中易被截获,安全性极低。
2. 智能卡认证
基于"what you have"的手段。智能卡内置不可复制的芯片,存储用户身份数据。缺点:读取的数据是静态的,易被内存扫描或网络监听截获。
3. 动态口令
采用"一次一密"技术,密码随时间或使用次数不断变化。用户使用动态令牌生成当前密码,认证服务器用相同算法验证。优点 :即使截获一次密码也无法伪造身份。缺点:需保持时间/次数同步;输入不便。
4. USB Key认证
软硬件结合、一次一密的强双因子认证模式。USB Key内置单片机或智能卡芯片,存储用户密钥或数字证书。主要应用模式:基于冲激响应的认证模式和基于PKI体系的认证模式。
5. 生物特征认证
基于"what you are"的手段,利用指纹、虹膜、人脸、签名、语音等唯一生物特征进行认证。优点 :理论上最可靠,几乎不可能被仿冒。缺点:生物特征伪造技术也在发展,存在安全挑战。
询问-应答式身份识别协议
为保证安全性,识别协议至少应满足:
-
识别者A能向验证者B证明他的确是A。
-
验证后,B未获得有用信息,不能冒充A向第三方证明身份。
询问-应答协议的基本观点:验证者提出问题(随机数),识别者回答,验证者验证真实性。一个简单例子:
-
A通过用户名和密码向B注册。
-
B发给A一个随机号码(询问)。
-
A用私钥加密随机号码(应答),B验证。
该过程具有不可重复性,攻击者无法伪造。
常见攻击类型
-
假冒:冒充他人身份
-
重放攻击:使用以前截获的信息进行欺骗
-
交织攻击:组合多个协议的信息进行欺骗
-
反射攻击:将信息反射回协议发起者
-
强迫延迟:截获并延迟消息后重放
-
选择文本攻击:有策略地选择询问消息以获取密钥信息
8.6.1 Schnorr身份认证协议
基于离散对数问题,具有计算量小、通信数据量少、适用于智能卡等优点。
系统建立(信任中心TA):
-
选择大素数p,q,满足q∣p−1
-
选择α∈Zp∗,阶为q
-
选择Hash函数h
-
用户A选定私钥b∈Zq∗,计算公钥v=α^(−b) mod p
用户注册:TA验证用户身份后,颁发证书C(A)=(Name,v,s),其中s=SignTA(Name,v)
认证过程:
-
A选择随机数k∈Zq∗,计算γ=α^k mod p
-
A将C(A)和γ发送给B
-
B验证TA签名VerTA(Name,v,s)
-
B选择随机数r(1≤r≤2^t)发送给A
-
A计算y=(k+br) mod q,发送给B
-
B验证α^y≡γ⋅v^r(mod p)
安全性:参数q长度≥140比特,p长度≥512比特,t≥72比特(Hash输出长度)。安全性基于离散对数问题。
8.6.2 Okamoto身份认证协议
Schnorr协议的改进方案。
系统建立:
-
选择大素数p,q,q∣p−1
-
选择α1,α2∈Zp∗,阶均为q
-
TA计算c=logα₁(α₂)(计算上不可行)
-
选择Hash函数h
用户注册:用户A选择私钥b1,b2∈Zq∗,计算公钥v=α₁^(−b₁)α₂^(−b₂) mod p,TA颁发证书C(A)=(Name,v,s)
认证过程:
-
A选择随机数k₁,k₂∈Zq∗,计算γ=α₁^k₁·α₂^k₂ mod p
-
A将C(A)和γ发送给B
-
B验证TA签名
-
B选择随机数r发送给A
-
A计算y₁=k₁+b₁r mod q,y₂=k₂+b₂r mod q,发送给B
-
B验证α₁^y₁·α₂^y₂≡γ⋅v^r (mod p)
8.6.3 Guillou--Quisquater身份认证协议
基于RSA公钥密码体制和大数分解困难问题。
系统建立:
-
信任中心TA选择RSA参数n=pq,公钥e,私钥d
-
用户A选择私钥b∈Zn∗,计算公钥v=b−emod n
-
TA颁发证书C(A)=(Name,v,s),其中s=SignTA(Name,v)
认证过程:
-
A选择随机数r∈Zn,计算X=remod n,将C(A)和X发送给B
-
B验证TA签名
-
B选择随机数e′∈Zn发送给A
-
A计算y=r⋅b^e′mod n,发送给B
-
B验证X≡y^e⋅v^e′ (mod n)
安全性基于大数分解的困难性。
习题8 解答
8-1 简述数字签名的基本原理
解答:
数字签名基于公钥密码体制。签名者用自己的私钥对消息(或消息的Hash值)进行加密运算,生成签名;验证者用签名者的公钥解密验证。由于私钥只有签名者本人拥有,因此签名具有不可否认性、完整性和真实性。
8-2 简述直接数字签名与可仲裁数字签名的特点及区别
解答:
| 类型 | 特点 | 缺点 |
|---|---|---|
| 直接数字签名 | 仅涉及通信双方,签名者用私钥签名,验证者用公钥验证 | 私钥泄露后签名可被伪造;签名者可否认签名 |
| 可仲裁数字签名 | 引入可信第三方仲裁者,签名经仲裁者验证后转发 | 仲裁者可能成为性能瓶颈,需绝对可信 |
区别:可仲裁签名解决了否认问题,但增加了系统复杂性和通信开销。
8-3 设计一个方案,能够同时实现对消息的签名和保密
解答:
采用"先签名后加密"的方案:
-
发送方A用自己的私钥skA对消息m签名:s=SIGskA(m)
-
A用接收方B的公钥pkB加密(m,s):c=EpkB(m∥s)
-
B收到后先用私钥skBskB解密得(m,s)
-
B用A的公钥pkA验证签名
注意:不能先加密后签名(易遭中间人攻击)。
8-4 假设某签名者使用系统参数为=31847、g=5和y=25703的EIGamal签名方案,对消息x₁=8990的签名是(23972,31396),对另一消息x₂=31415 的签名是(23972,20481),试计算签名者使用的秘密随机数k和签名私钥a(不需要求解离散对数问题)。
已知:p=31847,g=5,y=25703
-
消息x₁1=8990,签名(23972,31396)
-
消息x₂=31415,签名(23972,20481)
解答:
两签名有相同的r=23972,说明使用了相同的k。
由签名公式:
s₁=(x₁−ar)k^(−1) mod (p−1)
s₂=(x₂−ar)k^(−1) mod (p−1)
两式相减:
s₁−s₂≡(x₁−x₂)k^(−1)(mod p−1)
31396−20481=10915≡(8990−31415)k^(−1)=(−22425)k^(−1)(mod31846)
计算−22425mod 31846=9421,则:
10915≡9421⋅k^(−1)(mod31846)
k^(−1)≡10915⋅9421^(−1)(mod31846)
求得k^(−1)后可得k,再代入求a。
8-5 证明ElGamal或DSA中若s=0,攻击者可求出私钥a
证明:
ElGamal签名:s=(m−ar)k^(−1) mod (p−1)
若s=0,则m−ar≡0(mod p−1),即ar≡m(mod p−1)
若gcd(r,p−1)=1,则a≡m⋅r^(−1)(mod p−1),私钥直接泄露。
DSA中同理:s=k^(−1)(H(m)+ar)mod q,若s=0,则H(m)+ar≡0(mod q),可解出a。
因此签名时需检查s≠0。
8-6 证明DSA中若r=0,可确定k并伪造签名
证明:
DSA中r=(g^k mod p) mod q,若r=0,则g^k≡0(mod p)不可能(g,p互素)。实际上r=0意味着g^k mod p是q的倍数,这种情况概率极低,但若发生,则kk可由g^k mod p确定。一旦知道k,私钥a=(sk−H(m))r^(−1) mod q可求出,从而可伪造任何消息的签名。
8-7 正面是EIGamal签名方案的一种变型:密钥使用同EIGamal方案类似的方法构造,假设g是Z;的一个本原根,签名者选择秘密整数a满足 0≤a<(p-2)且 gcd(a,p-1)=1,计算 y=^a mod p。其中,(g,y,p)作为公钥公开,a是签名私钥。如果m∈Zp,是一则需要签名消息,签名者为其产生的数字签名为SIG(m)=(γ,δ),其中k是随机选取的秘密值,且
y=g^k mod p
δ=(m-ky)a^(-1) mod φ(p)
可见,该变型方案与原 EIGamal签名方案的唯一差别是δ的计算。请回答下列问题:
(1)描述如何使用签名者的公钥去验证消息m的数字签名 SIG(m)=(γ,δ)。(2)该变型方案在计算上有何优点?
(1) 验证公式:
由γ=g^k mod p,δ=(m−kγ)a^(−1) mod φ(p),可推导验证式为:
g^m≡y^γ⋅γ^δ( mod p)
(2) 计算优点:
变型方案中δ的计算避免了对k^(−1)的求逆运算,降低了计算复杂度。
8-8 请您使用系统参数与例8.3相同的DSA算法,即q=101,p=7879,g=170,a=87和 y=3226,选择随机值k=49,对消息摘要SHA-1(m)=52的消息m进行签名并说明该签名是如何被验证的。
已知:q=101,p=7879,g=170,a=87,y=3226,k=49,H(m)=52
签名:
-
k^(−1) mod 101=49^(−1) mod 101
49×33=1617=16×101+1,故k^(−1)=33 -
r=(g^k mod p) mod q=(170⁴⁹ mod 7879) mod 101
-
s=33×(52+87×r) mod 101
验证:
-
w=s^(−1) mod 101
-
u₁=52w mod 101
-
u₂=rw mod 101
-
v=(g^u₁·y^u₂ mod p) mod q
-
若v=r,签名有效
8-9 若DSA中重复使用k,攻击者如何求私钥
解答:
设同一k对消息m₁,m₂的签名为(r,s₁)、(r,s₂),则:
s₁=k^(−1)(H(m₁)+ar)mod q
s₂=k^(−1)(H(m₂)+ar)mod q
两式相减得s₁−s₂≡k^(−1)(H(m₁)−H(m₂))(mod q),可求出k,进而求出私钥a。
8-10 为什么对称密码体制不能实现消息的不可否认性?
解答:
对称密码中,通信双方共享同一密钥。发送方和接收方都能生成相同的消息认证码(MAC),因此发送方可否认曾发送过某消息(声称是接收方伪造),接收方也可伪造消息声称来自发送方。没有第三方能仲裁,因此无法实现不可否认性。
8-11 对消息同时签名和保密时,应以何种顺序?为什么?
解答:
应采用先签名后加密的顺序:
-
发送方用自己私钥签名
-
再用接收方公钥加密(消息+签名)
原因:若先加密后签名,攻击者可截获密文后用发送方公钥解密得到明文,再用自己私钥重签名,冒充发送方。先签名后加密可防止这种攻击。
8-12 在数字签名标准(DSS)中,设p=83,q=41,h=2。
(1) 求g:
g=h^(p−1)/q mod p=2^(83−1)/41 mod 83=2² mod 83=4
(2) 求公钥y:
y=g^x mod p=4⁵⁷ mod 83
计算得y=4⁵⁷ mod 83=4^(2×28+1)=(4²)²⁸×4=16²⁸×4 mod 83,最终y=49
(3) 对H(M)=56,k=23签名:
-
k^(−1) mod 41:23×16=368=8×41+40,23×25=575=14×41+123×25=575=14×41+1,故k^(−1)=25
-
r=(g^k mod p) mod q=(4²³ mod 83) mod 41
-
s=25×(56+57×r) mod 41
(4) 若k泄露:攻击者可计算私钥a=(sk−H(m))r^(−1) mod q,进而伪造任意消息的签名。
8-13 在基本RSA数字签名体制中,验证公钥为VER=(N,e),签名私钥为SIG=d,其中 ed= 1 modФ(N)。如果消息m₁的签名为t₁,消息m₂的签名为t₂,则消息m=m₁m₂ mod N的数字签名是什么?
解答:
RSA签名:t=m^d mod N
则:
t=(m₁m₂)^d mod N=m₁^d⋅m₂^d mod N=t₁⋅t₂ mod N
答案:t=t₁⋅t₂ mod N
8-14 简述数字签名和加密的基本原理及其区别
解答:
| 对比项 | 数字签名 | 加密 |
|---|---|---|
| 目的 | 验证消息来源和完整性,防止否认 | 保护消息机密性,防止窃听 |
| 密钥 | 签名用私钥,验证用公钥 | 加密用公钥,解密用私钥 |
| 操作顺序 | 先签名后加密 | --- |
| 不可否认性 | 支持 | 不支持 |
8-15 将Okamoto身份识别协议转变为签名方案
解答:
将交互式协议非交互化:用Hash函数模拟验证者的随机挑战。
签名方案:
-
系统参数:p,q,α₁,α₁,用户私钥b₁,b₂,公钥v=α₁^(−b₁)·α₂^(−b₂) mod p
-
签名:对消息m,选择随机数k₁,k₂∈Zq∗,计算
γ=α₁^k₁·α₂^k₂ mod p r=H(γ∥m) y₁=k₁+b₁r mod q y₂=k₂+b₂r mod q
-
签名为(r,y1,y2)(r,y1,y2)
-
验证:计算γ′=α₁^y₁·α₂^y₂·v^r mod p,检查r=H(γ′∥m)
注:以上内容的理解和计算,如果有任何错误,希望各位读者和大佬指出改正,非常感谢!!!