加密与解密 : RSA实现签名与盲签名实现(附带证明过程)

数字签名

  • RSA数字签名过程使用非对称加密技术,通过一对密钥(公钥和私钥)实现数据的签名和验证。下面是RSA数字签名的公式化表示:

1. 密钥对生成

  • 选择两个大质数 p p p q q q

  • 计算 n = p × q n = p \times q n=p×q ϕ ( n ) = ( p − 1 ) × ( q − 1 ) \phi(n) = (p-1) \times (q-1) ϕ(n)=(p1)×(q1)

  • 选择一个公钥指数 e e e,满足 1 < e < ϕ ( n ) 1 < e < \phi(n) 1<e<ϕ(n) e e e ϕ ( n ) \phi(n) ϕ(n) 互质。

  • 计算私钥指数 d d d,满足 d × e ≡ 1   ( mod  ϕ ( n ) ) d \times e \equiv 1 \ (\text{mod} \ \phi(n)) d×e1 (mod ϕ(n))

  • 公钥 ( e , n ) (e, n) (e,n)

  • 私钥 ( d , n ) (d, n) (d,n)

2. 签名生成

  • 对消息 m m m 使用哈希函数 H ( ⋅ ) H(\cdot) H() 计算消息的哈希值 h h h
    h = H ( m ) h = H(m) h=H(m)
  • 使用发送者的私钥 d d d 对哈希值 h h h 进行加密,生成签名 S S S
    S = h d  mod  n S = h^d \ \text{mod} \ n S=hd mod n
  • 签名 S S S 和原始消息 m m m 一起发送给接收者。

3. 签名验证

  • 接收者收到签名 S S S 和消息 m m m 后,使用相同的哈希函数 H ( ⋅ ) H(\cdot) H() 对消息 m m m 计算哈希值 h ′ h' h
    h ′ = H ( m ) h' = H(m) h=H(m)
  • 使用发送者的公钥 e e e 对签名 S S S 进行解密,得到解密后的哈希值 h s h_s hs
    h s = S e  mod  n = ( h d  mod  n ) e mod  n = ( h d   ) e mod  n = h d × e mod  n = h k × ϕ ( n ) + 1 mod  n ( 根据 d 和 e 之间的关系 ) = h 1 mod  n ( 欧拉定理, g c d ( h , n ) = 1 ) = h h_s = S^e \ \text{mod} \ n \\ = (h^d \ \text{mod} \ n)^e \text{mod} \ n \\ = (h^d \ )^e \text{mod} \ n \\ = h^{d\times e} \text{mod} \ n \\ = h^{k\times \phi(n)+1} \text{mod} \ n (根据d和e之间的关系) \\ = h^{1} \text{mod} \ n (欧拉定理,gcd(h,n)=1) \\ = h hs=Se mod n=(hd mod n)emod n=(hd )emod n=hd×emod n=hk×ϕ(n)+1mod n(根据de之间的关系)=h1mod n(欧拉定理,gcd(h,n)=1)=h
  • 比较 h s h_s hs h ′ h' h
    • 如果 h s = h ′ h_s = h' hs=h,则验证通过,说明签名是有效的,消息未被篡改。
    • 如果 h s ≠ h ′ h_s \neq h' hs=h,则验证失败,说明消息可能被篡改或签名无效。

盲签名

  • 盲签名的特点是消息m对于签名者不可见,如果A发出一个消息让B签名的话,按照上一部分的方式B应该发给A的签名消息为: m d   ( mod  n ) m^d \ (\text{mod} \ n) md (mod n)
  • 但是A为了保护信息,选定了一个与n互质的数 r r r,发送给了B : m ′ = m × r e ( m o d   n ) m'=m\times r^e (mod \ n) m=m×re(mod n)
  • B进行同样的签名程序,发给A为: S = ( m ′ ) d   ( mod  n ) S = (m')^d \ (\text{mod} \ n) S=(m)d (mod n)
  • A仍然可以获得消息的签名:
    S × r − 1 = ( m ′ ) d   ( mod  n ) × r − 1 = ( m × r e ( m o d   n ) ) d   ( mod  n ) × r − 1 = ( m × r e ) d   ( mod  n ) × r − 1 = ( m d × r e × d × r − 1 )   ( mod  n ) = ( m d × r 1 + k × ϕ ( n ) × r − 1 )   ( mod  n ) = ( m d × r 1 × r − 1 )   ( mod  n ) ( 欧拉定理 ) = m d   ( mod  n ) S\times r^{-1} = (m')^d \ (\text{mod} \ n)\times r^{-1} \\=(m\times r^e (mod \ n))^d \ (\text{mod} \ n)\times r^{-1} \\=(m\times r^e)^d \ (\text{mod} \ n)\times r^{-1} \\=(m^d \times r^{e\times d}\times r^{-1}) \ (\text{mod} \ n) \\=(m^d \times r^{1+k\times \phi(n)}\times r^{-1}) \ (\text{mod} \ n) \\=(m^d \times r^{1}\times r^{-1}) \ (\text{mod} \ n) (欧拉定理) \\=m^d \ (\text{mod} \ n) S×r1=(m)d (mod n)×r1=(m×re(mod n))d (mod n)×r1=(m×re)d (mod n)×r1=(md×re×d×r1) (mod n)=(md×r1+k×ϕ(n)×r1) (mod n)=(md×r1×r1) (mod n)(欧拉定理)=md (mod n)

CG

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值