密码学12数字签名

13.数字签名

  • 概述数字签名过程:
    • 密钥生成。
    • 加密(签名生成):先哈希函数结果 S S S 和私钥放入数字签名算法,然后给消息加后缀
    • 解密(验证签名):先哈希函数,将哈希值、 S S S、公钥 放入数字签名算法,得出来判断。
  • 理解ElGamal数字签名方案:
    • 安全性基于离散对数困难问题
  • 理解Schnorr数字签名方案:
    • 安全性基于离散对数困难问题。
    • 算法相对简单。
    • 生成签名工作不依赖消息。
  • 理解NIST数字签名方案:
    • 核心是DSA数字签名算法
    • 哈希计算私钥签名公钥验证
    • 安全、高效。
  • 比较三者异同
    • ElGamal 和Schnorr都是基于离散对数问题,NIST基于椭圆曲线算法
    • Schnorr算法签名过程简洁性能高
    • NIST安全性最高,Schnorr安全性次之,ElGamal的安全性依赖于随机位生成器。
    • ElGamal 和Schnorr适用于加密协议和数字签名,NIST还被用于密码学应用中。
  • 理解椭圆曲线数字签名方案:
    • 基于椭圆曲线上的困难问题。
    • 更短的密钥长度保证相同的安全性。
  • 理解RSA-PSS数字签名方案:
    • 基于RSA数字签名方式,增加盐值填充机制
    • 克服了传统RSA算法的安全性问题,提高了数字签名的安全性。

13.1 数字签名概述

保证完整性和身份验证。

数字签名过程

  • 加密
    • 用哈希函数加密消息 M M M
    • 加密结果与Bob的私钥作为算法输入。
    • 得出结果 S S S 放在 M M M 之后,组成签名消息。
  • 解密
    • 计算消息的哈希值。
    • 将哈希值、 S S S、公钥 放入数字签名算法。
    • 根据结果判断签名有效性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

性质:(认证功能体现)

  • 能够验证签名者、签名日期和时间。
  • 能够认证消息内容。
  • 签名应由第三方仲裁。

13.2 ElGamal数字签名算法

地位仅次于RSA。

建立在离散对数的困难问题基础上。


算法过程

选取素数 q q q .

  • 密钥产生
    • 选取小于 q q q 的两个随机数 α , X A \alpha ,X_{A} α,XA
    • 计算 Y A = α X A m o d    q Y_{A} = \alpha^{X_{A}} \mod q YA=αXAmodq
    • 私钥 X A X_{A} XA 公钥 { q , α , Y A } \{q,\alpha,Y_{A}\} {q,α,YA}
  • 加密过程
    • 选取与 $q -1 $ 互素的整数 K K K
    • C 1 = α k m o d    q C_1 = \alpha^k \mod q C1=αkmodq.
    • C 2 = ( H ( m ) − x ∗ C 1 ) ∗ k − 1 m o d    ( q − 1 ) C_2 = (H(m)-x*C_1) * k^{-1} \mod (q-1) C2=(H(m)xC1)k1mod(q1).
    • ( C 1 , C 2 ) (C_1,C_2) (C1,C2) 为签名, m m m 为消息。
  • 验证过程
    • Y A C 1 ∗ C 1 C 2 = α H ( m ) m o d    q Y_{A}^{C_1} * C_1^{C_2} = \alpha^{H(m)} \mod q YAC1C1C2=αH(m)modq

13.3 Schnorr数字签名算法

基于离散对数的困难问题


算法过程

  • 密钥生成

    • 选取 p , q p,q p,q ,使得 q q q p − 1 p-1 p1 的一个素因子。
    • 选择整数 a a a ,使得 a q ≡ 1 m o d    p a^{q} \equiv 1 \mod p aq1modp
    • 全局公钥 ( a , p , q ) (a,p,q) (a,p,q)
    • 用户私钥:随机选择 S ∈ ( 0. q ) S \in (0.q) S(0.q)
    • 用户公钥 v = a − S m o d    p v = a^{-S} \mod p v=aSmodp
  • 用户签名

    • 选择消息 r ∈ ( 0 , q ) r \in (0,q) r(0,q) , 生成 x = a r m o d    p x = a^{r} \mod p x=armodp
    • 用哈希函数计算 e = H ( M ∣ ∣ x ) e = H(M||x) e=H(M∣∣x)
    • 计算 y = ( r + s e ) m o d    q y = (r+se) \mod q y=(r+se)modq
    • 签名 ( e , y ) (e,y) (e,y)
  • 验证

    • 计算 x ’ = a y v e m o d    p x^{’} = a^{y}v^{e} \mod p x=ayvemodp
    • 验证 e = H ( M ∣ ∣ x ′ ) e = H(M||x^{'}) e=H(M∣∣x)

13.4 NIST数字签名

13.4.1 DSA方法

安全性基于离散对数问题。


DSA签名方案的主要步骤如下:

  • 用发送者的私钥生成签名:
    • 随机选择一个数k,并计算 r = ( g k ( m o d p ) ) ( m o d q ) r=(g^k \pmod{p}) \pmod{q} r=(gk(modp))(modq),其中g是模p的一个原根,p和q是两个大质数。
    • 计算 s = k − 1 ( H ( m ) + x r ) ( m o d q ) s = k^{-1}(H(m) + xr) \pmod{q} s=k1(H(m)+xr)(modq),x是发送者的私钥。
    • 签名为 ( r , s ) (r,s) (r,s)
  • 用发送者的公钥和签名验证消息:
    • 计算 w = s − 1 ( m o d q ) w = s^{-1} \pmod{q} w=s1(modq)
    • 计算 u 1 = H ( m ) w ( m o d q ) u_1 = H(m)w \pmod{q} u1=H(m)w(modq) u 2 = r w ( m o d q ) u_2 = rw \pmod{q} u2=rw(modq)
  • 验证签名:
    • 计算 v = ( ( g u 1 x u 2 ( m o d p ) ) ( m o d q ) ) v = ((g^{u_1}x^{u_2} \pmod{p}) \pmod{q}) v=((gu1xu2(modp))(modq))
    • 如果 v = r v = r v=r,则消息m是合法的。

w \pmod{q}$ 和 u 2 = r w ( m o d q ) u_2 = rw \pmod{q} u2=rw(modq)

  • 验证签名:
    • 计算 v = ( ( g u 1 x u 2 ( m o d p ) ) ( m o d q ) ) v = ((g^{u_1}x^{u_2} \pmod{p}) \pmod{q}) v=((gu1xu2(modp))(modq))
    • 如果 v = r v = r v=r,则消息m是合法的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值