数字签名基本概念

  • 数字签名的必要性:
    消息认证能够使通信双方对接收到的信息来源及完整性进行验证,防止第三方的攻击,然而却不能防止通信双方中的一方对另一方的欺诈。
    这种欺诈有多种形式,例如通信双方(发送方A、接收方B)利用双方共享的密钥对称加密进行消息认证时,B可以伪造一个消息并声称是由A发出的,由于A和B共享密钥,可以通过消息认证。
    因此,在通信双方未建立起完全的信任关系时,需要有新的信息安全技术来保证传输信息的真实性,解决通信双方的争端,这就是数字签名技术。
  • 数字签名(digital signature): 用于对数字消息签名,以防消息的伪造或篡改,也可用于通信双方的身份鉴别。
  • 消息认证与数字签名异同
    消息认证:身份认证性、数据完整性
    数字签名:身份认证性、数据完整性、不可否认性

RSA签名算法

密钥生成

  1. 选 取 两 个 保 密 的 大 素 数 p 、 q ; n = p ∗ q ; φ ( n ) = ( p − 1 ) ( q − 1 ) 选取两个保密的大素数p、q;n=p*q;\varphi(n)=(p-1)(q-1) 选取两个保密的大素数p、q;n=p∗q;φ(n)=(p−1)(q−1)
  2. 选 一 整 数 e ; 1 < e < φ ( n ) ; g c d ( e , φ ( n ) ) = 1 选一整数e;1<e<\varphi(n);gcd(e,\varphi(n))=1 选一整数e;1<e<φ(n);gcd(e,φ(n))=1
  3. d e ≡ 1 m o d φ ( n ) de\equiv1mod\varphi(n) de≡1modφ(n)
  4. d 为 私 钥 , e 为 公 钥 d为私钥,e为公钥 d为私钥,e为公钥

签名与验证算法

  1. m ∈ Z n ; s ≡ m d m o d n ; s 为 对 m 的 签 名 m\in Zn;s\equiv m^dmodn;s为对m的签名 m∈Zn;s≡mdmodn;s为对m的签名
  2. 接 收 方 收 到 m 、 s 后 , 验 证 s e ≡ m m o d n , 成 立 即 有 效 , 否 则 无 效 接收方收到m、s后,验证s^e\equiv mmodn,成立即有效,否则无效 接收方收到m、s后,验证se≡mmodn,成立即有效,否则无效

安全性

  1. 大 数 分 解 的 困 难 性 。 大数分解的困难性。 大数分解的困难性。

缺点

  1. 对任意 y ∈ Z n y\in Zn y∈Zn,任何人可计算 x ≡ y e m o d n x\equiv y^e mod n x≡yemodn,因此任何人可伪造对随机消息x的签名。伪造者随机选择s,找到接收者公钥e,se=mmodn,伪造者将(m,s)发送给接收者,接收者验证 s e ≡ m m o d n s^e\equiv mmodn se≡mmodn成功,但是消息一般没有意义,为存在性伪造。
  2. 如果消息m1和m2的签名分别为s1和s2,则知道m1 ,m2, s1, s2的人可伪造对消息m1m2的签名s1s2 。比如学生A提交论文m1,老师对其签名s1,学生B提交论文m2,老师对其签名m2,学生C提交论文m1m2,伪造签名s1s2,此时不仅伪造的签名正确,而且消息都是有意义的,为选择消息伪造。
  3. 在RSA签名方案中,需签名的消息x ∈ \in ∈Zn,所以每次只能对 [ log ⁡ 2 n ] [\log_{2}{n}] [log2​n]位长的消息进行签名。签名速度慢。

克服缺陷的方法:签名之前先求消息的Hash值。

  1. m ∈ Z n ; s = h ( m ) d m o d n ; m\in Zn;s=h(m)^dmodn; m∈Zn;s=h(m)dmodn;s为对m的签名
  2. 接收方收到m、s后,验证 s e ≡ h ( m ) m o d n s^e\equiv h(m)modn se≡h(m)modn , 成立即有效,否则无效;此时有小伙伴可能有疑问,说既然接收方还是验证 s e ≡ h ( m ) m o d n s^e\equiv h(m)modn se≡h(m)modn,既然有了s和h(m)那等式不也成立吗?其实接收方只接受m、s,而伪造签名者只知道h(m),哈希值求逆是不可行的,所以伪造者可以伪造签名但是不能发送正确的m。那此时接收方通过发送方m求h(m),在验证 s e ≡ h ( m ) m o d n s^e\equiv h(m)modn se≡h(m)modn,即可克服RSA签名算法任何人可伪造对随机消息的签名的缺陷且签名时用的是h(m)的e次方,签名速度大大提升,也可以用分组解决签名速度慢的问题。

ElGamal签名算法

密钥生成

  1. 选 取 公 开 大 整 数 p 、 g , g ∈ Z p ∗ 为 本 原 根 。 选取公开大整数p、g,g\in Z_p^*为本原根。 选取公开大整数p、g,g∈Zp∗​为本原根。
  2. 选 一 整 数 1 ≤ x ≤ p − 2 , y = g x m o d p 选一整数1\leq x\leq p-2,y=g^xmodp 选一整数1≤x≤p−2,y=gxmodp
  3. y 为 公 钥 , x 为 私 钥 y为公钥,x为私钥 y为公钥,x为私钥

签名与验证算法

  1. 随 机 选 取 k , 1 ≤ k ≤ p − 2 , r ≡ g k m o d p , s ≡ ( h ( m ) − x r ) k − 1 m o d ( p − 1 ) , 则 m 签 名 为 ( r , s ) 随机选取k,1\leq k\leq p-2,r\equiv g^kmodp,s\equiv(h(m)-xr)k^{-1}mod(p-1),则m签名为(r,s) 随机选取k,1≤k≤p−2,r≡gkmodp,s≡(h(m)−xr)k−1mod(p−1),则m签名为(r,s)
  2. 接 收 方 收 到 消 息 m 和 签 名 ( r , s ) 后 , 验 证 y r r s ≡ g h ( m ) m o d p , 成 立 即 有 效 , 否 则 无 效 接收方收到消息m和签名(r,s)后,验证y^rr^s\equiv g^{h(m)}modp,成立即有效,否则无效 接收方收到消息m和签名(r,s)后,验证yrrs≡gh(m)modp,成立即有效,否则无效

ElGamal签名的正确性

  1. s ≡ ( h ( m ) − x r ) k − 1 m o d ( p − 1 ) s\equiv(h(m)-xr)k^{-1}mod(p-1) s≡(h(m)−xr)k−1mod(p−1)
  2. k s + x r ≡ h ( m ) m o d ( p − 1 ) ks+xr\equiv h(m)mod(p-1) ks+xr≡h(m)mod(p−1)
  3. g h ( m ) ≡ g k s + x r ≡ r s y r m o d p g^{h(m)}\equiv g^{ks+xr}\equiv r^sy^rmodp gh(m)≡gks+xr≡rsyrmodp

ElGamal签名安全问题

  1. 随机数k不能泄露
  2. 不能用相同的k签名不同的消息,敌手可以求出k,从而求出私钥x

Schnorr签名体制

在这里插入图片描述

DSS数字签名标准

  • DSS是在ElGamal和Schnorr基础上发展而来的。
  • DSS相比于ElGamal签名更短。

DSA数字签名算法

数字签名算法是数字签名标准的一个子集,表示了只用作数字签名的一个特定的公钥算法。密钥运行在由SHA-1产生的消息哈希:为了验证一个签名,要重新计算消息的哈希,使用公钥解密签名然后比较结果。缩写为DSA。

密钥生成

在这里插入图片描述

签名与验证算法

在这里插入图片描述
在这里插入图片描述

离散对数签名算法

  • ElGamal签名方案、Schnorr签名方案、DSS签名方案都是基于离散对数的签名方案。

密钥生成

  1. 选 取 大 素 数 p 、 q , q ∣ p − 1 选取大素数p、q,q|p-1 选取大素数p、q,q∣p−1
  2. 选 取 q 阶 元 g , 1 < g < p − 1 , q 、 p 、 g 公 开 选取q阶元g,1<g<p-1,q、p、g公开 选取q阶元g,1<g<p−1,q、p、g公开
  3. 选 取 x , 1 ≤ x ≤ q − 1 , y = g x m o d p 选取x,1\leq x\leq q-1,y=g^xmodp 选取x,1≤x≤q−1,y=gxmodp
  4. 公 钥 为 y , 私 钥 为 x 公钥为y,私钥为x 公钥为y,私钥为x

签字验证

  1. 计 算 m 的 杂 凑 值 H ( m ) 。 计算m的杂凑值H(m)。 计算m的杂凑值H(m)。

  2. 选 择 随 机 数 k : 1 < k < q , 计 算 r ≡ g k ( m o d p ) 。 选择随机数k:1<k<q,计算r≡g^k(mod p)。 选择随机数k:1<k<q,计算r≡gk(modp)。

  3. 从 签 字 方 程 a k ≡ b + c x ( m o d q ) 中 解 出 s 。 从签字方程ak≡b+cx(mod q)中解出s。 从签字方程ak≡b+cx(modq)中解出s。
    在这里插入图片描述

  4. 接 收 方 收 到 m , ( r , s ) 后 , 验 证 g b y c ≡ r a m o d p 接收方收到m,(r,s)后,验证g^by^c\equiv r^amodp 接收方收到m,(r,s)后,验证gbyc≡ramodp

特殊性质的签名算法

盲签名

  • 盲签名是一种特殊的数字签名,签名者并不知道他所签名消息的具体内容,即用户B发送消息m给A,要求A对消息签名,但又不让A知道消息的内容,即签名者A所签的消息是经过加密盲化的,由签名者A的公钥和盲签名可以验证签名的正确性。
  • 盲签名在电子投票和数字货币协议中有广泛的应用。
  • 盲签名不仅保留有数字签名的基本特性,而且还拥有下列特殊性质:
    盲性:消息的内容对签名者是保密的,签名人看不到消息的内容。
    不可追踪性:签名者无法把他的盲签名同消息m联系起来,不可能对消息m的拥有者进行追踪。
  • 盲签名的基本实现过程 :
    发送方有一个消息m,希望得到签名人对该消息的签名:
    ① 在发送消息给签名人之前,发送方将消息盲化,即由消息m计算出盲消息m’,发送m’给签名人,这个过程称为盲化。
    ② 签名人对盲消息m’进行签名,得到盲签名s’,发回给发送方。
    ③ 发送方通过盲签名s’计算出对原始消息m的签名s,这个过程称为去盲。
    ④ 验证所得到的签名是否正确。
    任何人(包括发送方)都可以验证签名,消息发送方可以验证所得到的是不是来自签名者的正确签名,其他人也可以验证消息发送方所持有的签名是否来自于真实的签名者 。
    在这里插入图片描述

Chaum盲签名

在这里插入图片描述
在这里插入图片描述

Chaum-Antwerpen不可否认签名

密钥生成

  1. 选 取 大 素 数 p 且 p = 2 q + 1 , g ∈ Z p ∗ 是 一 个 本 原 根 , 阶 为 q 。 公 开 p 、 q 、 g 选取大素数p且p=2q+1,g\in Z_p^*是一个本原根,阶为q。公开p、q、g 选取大素数p且p=2q+1,g∈Zp∗​是一个本原根,阶为q。公开p、q、g
  2. 随 机 选 取 整 数 x , 1 ≤ x ≤ q − 1 , 计 算 y ≡ g x m o d p 随机选取整数x,1\leq x \leq q-1,计算y\equiv g^xmodp 随机选取整数x,1≤x≤q−1,计算y≡gxmodp
  3. 公 钥 y , 私 钥 为 x 公钥y,私钥为x 公钥y,私钥为x

签名验证

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

群签名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代理签名

在这里插入图片描述

MUO代理签名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

更多推荐