📖 前言:数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。
目录
- 🕒 0. 思维导图
- 🕒 1. 消息认证 VS 数字签名
- 🕒 2. 数字签名的过程
- 🕒 3. 对数字签名的攻击
- 🕘 3.1 唯密钥攻击
- 🕘 3.2 已知消息攻击
- 🕘 3.3 一般选择消息攻击
- 🕘 3.4 定向选择消息攻击
- 🕒 4. 攻击的后果
- 🕘 4.1 完全破译
- 🕘 4.2 通用伪造
- 🕘 4.3 选择性伪造
- 🕘 4.4 存在性伪造
- 🕒 5. 数字签名的需求
- 🕒 6. EIGamal 数字签名
- 🕒 7. 数字签名标准
- 🕘 7.1 数字签名标准 DSS
- 🕤 7.1.1 基于RSA的数字签名
- 🕤 7.1.2 数字签名算法 DSA
- 🕘 7.2 数字签名的应用
🕒 0. 思维导图
🕒 1. 消息认证 VS 数字签名
【情况一】
- Alice 和Bob 使用对称加密来保护通信数据,第三方无法获取、伪造该信息,密钥K只有通信双方才已知
【问题】
- 假设双方在进行资金转账,Alice使用密钥K 给Bob 发送转账金额10元。
- Bob 现在伪造转账金额为100元,并使用他们共享的密钥K来加密消息,他声称这就是Alice发给他的转账金额
【情况二】
- 既然Bob 可以使用共享密钥K 伪造信息,Alice 也可以否认她曾经发出过某条信息
- 如Alice 给Bob 发送集资申请,Bob投入了大量资金。但后来生意失败,Alice声称集资申请的消息并不是由她本人发出的,而是Bob伪造的
- 消息认证只能防止第三方攻击,却无法防止通信双方之间的攻击。若通信双方不能完全信任,就需要数字签名
- 对 签名者身份、签名日期、签名时间、签名的消息内容 进行验证,且支持第三方仲裁来解决争执
🕒 2. 数字签名的过程
🕒 3. 对数字签名的攻击
🕘 3.1 唯密钥攻击
- Bob 对 消息M 生成数字签名S,并将S 附在M后一起发送
- 攻击者Darth 将其截获,但他仅知道Bob 的公钥PU-B
- 若要攻击成功,意味着获取了完整的签名方案
练习题:
若针对数字签名的唯密钥攻击成功,以下操作步骤顺序正确的是:
① 得到消息M的Hash值
② 猜出哪些部分是数字签名S
③ 对数字签名S使用公钥PU解密
答案:231
- Darth 猜出签名S的长度n,对这n位使用公钥PU-B 解密,得到消息M的Hash值
- 根据消息M与其Hash值,判断出使用的Hash算法
- 比较明文Hash 与 使用私钥PR-B 加密后的密文S,逐一推断出加密算法以及Bob的私钥
多选题:
针对数字签名的唯密钥攻击,说法正确的是:
A. 唯密钥指的是只知道发送方的私钥
B. 唯密钥指的是只知道发送方的公钥
C. 唯密钥攻击若要成功,一般都要做到完全破译
D. 唯密钥攻击若成功,对发送方的影响是最大的
答:选BCD
🕘 3.2 已知消息攻击
- Darth已知Bob 的公钥PU-B,一些消息M 与对应的数字签名S
- 获取到Bob的签名方案或部分
🕘 3.3 一般选择消息攻击
- Darth 选择一些消息M,使得Bob 为它们分别生成对应的数字签名S
- 无需知道Bob的公钥
🕘 3.4 定向选择消息攻击
- Darth 已知Bob的公钥
- 然后他选择一些消息M,使得Bob 为它们分别生成对应的数字签名S
🕒 4. 攻击的后果
🕘 4.1 完全破译
- Darth 通过上述某种攻击方法,成功获取到:
- Hash算法、加密算法、Bob的私钥PR-B
🕘 4.2 通用伪造
- Darth 通过上述某种攻击方法,掌握了一个有效的签名算法
- 使得对于任意消息都能等价地构造出合法签名
🕘 4.3 选择性伪造
- Darth 掌握了某种签名算法
- 对于所选择的特定消息能够构造出合法签名
🕘 4.4 存在性伪造
- Darth 通过上述某种攻击方法,至少可以成功伪造出一个消息的合法签名
- 但他不能控制是哪一个消息,这种伪造对于Bob的伤害最低
练习题:
关于数字签名的攻击后果,按照其影响程度从高到低排序正确的是:
① 存在性伪造
② 通用伪造
③ 完全破译
④ 选择性伪造
答:3241
🕒 5. 数字签名的需求
- 签名 必须是与消息M 相关的二进制位串
- 签名必须使用发送方独有的信息,以防伪造和否认
- 产生数字签名比较容易,识别和验证签名比较容易
- 伪造签名在计算上不可行,无论是从给定的数字签名伪造信息,还是从给定的消息伪造签名
- 保存数字签名的副本是可行的
🕒 6. EIGamal 数字签名
- Alice和Bob要进行数字签名的生成与验证,首先他们共享一个素数 𝒒 𝒒 q 以及整数 a a a
-
a
<
𝒒
a<𝒒
a<q,
a
a
a是素数
𝒒
𝒒
q的原根,满足
a 𝒎 𝒐 𝒅 𝒒 , a 𝟐 𝒎 𝒐 𝒅 𝒒 , a 𝟑 𝒎 𝒐 𝒅 𝒒 , . . . a 𝒒 − 𝟏 𝒎 𝒐 𝒅 𝒒 a \ 𝒎𝒐𝒅 \ 𝒒,a^𝟐 \ 𝒎𝒐𝒅 \ 𝒒,a^𝟑 \ 𝒎𝒐𝒅 \ 𝒒,... a^{𝒒−𝟏} \ 𝒎𝒐𝒅 \ 𝒒 a mod q,a2 mod q,a3 mod q,...aq−1 mod q它们的值各不相同 - a < 𝒒 a<𝒒 a<q, a a a是素数 𝒒 𝒒 q的原根,还满足
- a 𝒎 𝒎 𝒐 𝒅 𝒒 = 𝟏 a^𝒎 \ 𝒎𝒐𝒅 \ 𝒒=𝟏 am mod q=1 当且仅当 𝒎 = 𝟎 𝒎 𝒐 𝒅 ( 𝒒 − 𝟏 ) 𝒎=𝟎 \ 𝒎𝒐𝒅(𝒒−𝟏) m=0 mod(q−1)
- a 𝒊 = a 𝒋 𝒎 𝒐 𝒅 𝒒 a^𝒊=a^𝒋 \ 𝒎𝒐𝒅 \ 𝒒 ai=aj mod q 当且仅当 𝒊 = 𝒋 𝒎 𝒐 𝒅 ( 𝒒 − 𝟏 ) 𝒊=𝒋 \ 𝒎𝒐𝒅 \ (𝒒−𝟏) i=j mod (q−1)
- Alice 选择了素数 𝒒 = 19 𝒒 =19 q=19,它的原根 a = 10 a =10 a=10
- Alice 选择随机整数 𝟏 < 𝑿 𝑨 < 𝒒 − 𝟏 , 𝑿 𝑨 𝟏<𝑿_𝑨<𝒒−𝟏,𝑿_𝑨 1<XA<q−1,XA是私有的,只有Alice自己知道,即Alice的私钥
- Alice 选择 𝑿 𝑨 = 𝟏 𝟔 𝑿_𝑨=𝟏𝟔 XA=16
- Alice 计算 𝒀 𝑨 = a 𝑿 𝑨 𝒎 𝒐 𝒅 𝒒 = 𝟏 𝟎 𝟏 𝟔 𝒎 𝒐 𝒅 𝟏 𝟗 = 𝟒 𝒀_𝑨=a^{𝑿_𝑨} \ 𝒎𝒐𝒅 \ 𝒒=𝟏𝟎^{𝟏𝟔} \ 𝒎𝒐𝒅 \ 𝟏𝟗=𝟒 YA=aXA mod q=1016 mod 19=4,计算得到的 𝒀 𝑨 𝒀_𝑨 YA是公开可访问的
- Alice 的公钥为{𝟏𝟗,𝟏𝟎,𝟒},将其发送给Bob
- Alice 要发送的消息为M,为了对消息进行签名,首先计算Hash值: 𝒉 = 𝑯 ( 𝑴 ) , 𝟎 ≤ 𝒎 ≤ 𝒒 − 𝟏 𝒉=𝑯(𝑴),𝟎≤𝒎≤𝒒−𝟏 h=H(M),0≤m≤q−1
- 现在计算出Hash值 𝒉 = 𝟏 𝟒 𝒉=𝟏𝟒 h=14
- Alice 选择随机整数K,使得
𝟏
≤
𝑲
≤
𝒒
−
𝟏
𝟏≤𝑲≤𝒒−𝟏
1≤K≤q−1
𝒈 𝒄 𝒅 ( 𝑲 , 𝒒 − 𝟏 ) = 𝟏 𝒈𝒄𝒅(𝑲,𝒒−𝟏)=𝟏 gcd(K,q−1)=1 - Alice 选择 𝑲 = 𝟓 𝑲=𝟓 K=5
- 计算 𝑺 𝟏 = a 𝑲 𝒎 𝒐 𝒅 𝒒 = 𝟏 𝟎 𝟓 𝒎 𝒐 𝒅 𝟏 𝟗 = 𝟑 𝑺_𝟏=a^𝑲 \ 𝒎𝒐𝒅 \ 𝒒=𝟏𝟎^𝟓 \ 𝒎𝒐𝒅 \ 𝟏𝟗=𝟑 S1=aK mod q=105 mod 19=3
- 计算
𝑲
−
𝟏
𝒎
𝒐
𝒅
(
𝒒
−
𝟏
)
𝑲^{−𝟏} \ 𝒎𝒐𝒅 \ (𝒒−𝟏)
K−1 mod (q−1)
= 𝟓 − 𝟏 𝒎 𝒐 𝒅 ( 𝟏 𝟗 − 𝟏 ) =𝟓^{−𝟏} \ 𝒎𝒐𝒅 \ (𝟏𝟗−𝟏) =5−1 mod (19−1)
= 𝟓 − 𝟏 𝒎 𝒐 𝒅 𝟏 𝟖 = 𝟏 𝟏 =𝟓^{−𝟏} \ 𝒎𝒐𝒅 \ 𝟏𝟖 =𝟏𝟏 =5−1 mod 18=11 - 计算
𝑺
𝟐
=
𝑲
−
𝟏
(
𝒉
−
𝑿
𝑨
𝑺
𝟏
)
𝒎
𝒐
𝒅
(
𝒒
−
𝟏
)
𝑺_𝟐=𝑲^{−𝟏} (𝒉−𝑿_𝑨 𝑺_𝟏 ) \ 𝒎𝒐𝒅 \ (𝒒−𝟏)
S2=K−1(h−XAS1) mod (q−1)
= 𝟏 𝟏 ( 𝟏 𝟒 − 𝟏 𝟔 × 𝟑 ) 𝒎 𝒐 𝒅 𝟏 𝟖 =𝟏𝟏(𝟏𝟒−𝟏𝟔×𝟑) \ 𝒎𝒐𝒅 \ 𝟏𝟖 =11(14−16×3) mod 18
= ( − 𝟑 𝟕 𝟒 ) 𝒎 𝒐 𝒅 𝟏 𝟖 = 𝟒 =(−𝟑𝟕𝟒) \ 𝒎𝒐𝒅 \ 𝟏𝟖=𝟒 =(−374) mod 18=4 - Alice 将 𝒉 、 𝑺 𝟏 、 𝑺 𝟐 𝒉、𝑺_𝟏、𝑺_𝟐 h、S1、S2发送给Bob
- Bob计算
𝑽
𝟏
=
a
𝒉
𝒎
𝒐
𝒅
𝒒
=
𝟏
𝟔
𝑽_𝟏=a^𝒉 \ 𝒎𝒐𝒅 \ 𝒒=𝟏𝟔
V1=ah mod q=16
𝑽 𝟐 = ( 𝒀 𝑨 ) 𝑺 𝟏 ( 𝑺 𝟏 ) 𝑺 𝟐 𝒎 𝒐 𝒅 𝒒 𝑽_𝟐=(𝒀_𝑨)^{𝑺_𝟏} (𝑺_𝟏)^{𝑺_𝟐} \ 𝒎𝒐𝒅 \ 𝒒 V2=(YA)S1(S1)S2 mod q
= 𝟒 𝟑 𝟑 𝟒 𝒎 𝒐 𝒅 𝟏 𝟗 = 𝟏 𝟔 =𝟒^𝟑 𝟑^𝟒 \ 𝒎𝒐𝒅 \ 𝟏𝟗=𝟏𝟔 =4334 mod 19=16 - 若计算出的 𝑽 𝟏 、 𝑽 𝟐 𝑽_𝟏、𝑽_𝟐 V1、V2相同,数字签名就是合法的
练习题:
已知Alice要为一个Hash值为2的消息制作数字签名,使用ElGamal数字签名方案,她选取q=11,a=2,私钥为4,K=3。
请给出S1、S2;
答: m = 2 , q = 11 , a = 2 , X A = 4 , K = 3 m=2,q=11,a=2,X_A=4,K=3 m=2,q=11,a=2,XA=4,K=3
S 1 = a K m o d q = 2 3 m o d 11 = 8 S1=a^K \ mod \ q = 2^3 \ mod \ 11=8 S1=aK mod q=23 mod 11=8
q − 1 = 11 − 1 = 10 q-1=11-1=10 q−1=11−1=10
q − 1 K q ′ d ′ x y 10 3 3 1 1 − 3 3 1 3 1 0 1 1 0 1 1 0 \begin{array}{|c|c|c|c|c|c|} \hline q-1 & K & q^{\prime} & d^{\prime} & x & y \\ \hline 10 & 3 & 3 & 1 & 1 & -3 \\ \hline 3 & 1 & 3 & 1 & 0 & 1 \\ \hline 1 & 0 & & 1 & 1 & 0 \\ \hline \end{array} q−11031K310q′33d′111x101y−310
K − 1 = − 3 m o d 10 = 7 K^{-1}=-3 \ mod \ 10=7 K−1=−3 mod 10=7
S 2 = K − 1 ( m − X A S 1 ) m o d ( q − 1 ) S2=K^{-1}(m-X_AS1) \ mod \ (q-1) S2=K−1(m−XAS1) mod (q−1)
= 7 × ( 2 − 4 × 8 ) m o d 10 = 0 =7×(2-4×8) \ mod \ 10 = 0 =7×(2−4×8) mod 10=0
🕒 7. 数字签名标准
🕘 7.1 数字签名标准 DSS
- 数字签名标准DSS 由美国标准与技术研究所NIST于1991年提出,最新版本于2013年发布
- 包含:①数字签名算法DSA、②基于RSA的数字签名、③椭圆曲线数字签名
🕤 7.1.1 基于RSA的数字签名
【发送方】
- 消息M 输入到Hash函数中,输出定长的Hash值
- 用发送方的私钥PRa为该Hash值加密,形成数字签名
- 将数字签名附在消息M后一起发送
【接收方】
- 将数字签名取下,使用发送方的公钥解密,得到Hash
- 对消息M 计算Hash值,并与得到的进行比较,相同则说明签名有效
🕤 7.1.2 数字签名算法 DSA
【发送方】
- 为本次签名产生一个随机数k
- 将随机数k、Hash值、全局公钥PU-g、发送方的私钥PR-a 一起输入到签名函数中
【接收方】 - 对消息M 计算Hash值
- 将Hash值、签名s、签名r、全局公钥PU-g、发送方的公钥PU-a 一起输入到验证函数中,若输出r正确
【全局公钥PU-g 】
- 选择一个N位的素数q
- 选择一个长度在512-1024之间且满足q能整除(p-1)的素数p
选择 g = 𝒉 ( 𝒑 − 𝟏 ) / 𝒒 𝒎 𝒐 𝒅 𝒑 g=𝒉^{(𝒑−𝟏)/𝒒} \ 𝒎𝒐𝒅 \ 𝒑 g=h(p−1)/q mod p
【用户私钥】
- 用户私钥x是随机或伪随机整数 𝟎 < 𝒙 < 𝒒 𝟎<𝒙<𝒒 0<x<q
【密码值】
- 用户私钥k是随机或伪随机整数 𝟎 < 𝒌 < 𝒒 𝟎<𝒌<𝒒 0<k<q
【用户公钥】
- 用户公钥y是全局公钥g、p,私钥x的函数 𝒚 = 𝒈 𝒙 𝒎 𝒐 𝒅 𝒑 𝒚=𝒈^𝒙 𝒎𝒐𝒅 𝒑 y=gxmodp
【签名】
- 要进行签名,用户需计算两个量r和s
-
r
r
r和
s
s
s是全局公钥PU-g,用户私钥
x
x
x,密码值
k
k
k,消息的hash值的函数
【验证】 - 令 M ’ r ’ s ’ M’r’s’ M’r’s’为接收方收到的 M , r , s M,r,s M,r,s,接收方计算值 v v v
- v v v是全局公钥PU-g,发送方公钥 𝐲 = 𝒈 𝒙 𝒎 𝒐 𝒅 𝒑 𝐲=𝒈^𝒙 \ 𝒎𝒐𝒅 \ 𝒑 y=gx mod p,接收信息的hash码的函数
🕘 7.2 数字签名的应用
- IPsec是一种安全的网络协议套件,可对数据包进行身份验证和加密,常用于VPN的搭建。
- IPsec使用RSA签名完成对用户的身份验证
🔎 什么是IPSec?
OK,以上就是本期知识点“数字签名”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~