数字签名复习

Elgamal数字签名

  1. 生成密钥
    Alice选择一个大素数 p p p和一个本原根 g g g,选择一个秘密整数 1 ≤ x ≤ p − 2 1 \leq x\leq p-2 1xp2,并计算 y = g x   m o d ( p ) , ( p , q , y ) 公开 x 秘密保存 y=g^x\ mod(p),(p,q,y)公开x秘密保存 y=gx mod(p),(p,q,y)公开x秘密保存
  2. 选择一个安全随机数 k k k,计算 r = g k   m o d ( p ) r=g^k\ mod (p) r=gk mod(p),计算 s = k − 1 ( m − x r )   m o d ( p − 1 ) s=k^{-1}(m-xr)\ mod(p-1) s=k1(mxr) mod(p1),Alice签署消息三元组 ( m , r , s ) (m,r,s) (m,r,s)
  3. Bob确认签名
    下载Alice的公钥 ( p , g , y ) (p,g,y) (p,g,y)
    计算 v 1 = y r ∗ r s   m o d   p , v 2 = g m   m o d   p v_1=y^r*r^s\ mod\ p,v_2=g^m \ mod\ p v1=yrrs mod p,v2=gm mod p
    当且仅当 v 1 = v 2   m o d   p v_1=v_2\ mod\ p v1=v2 mod p时,签名有效

ECC数字签名

签名过程:

  1. 选择一条椭圆曲线 E p ( a , b ) E_p(a,b) Ep(a,b)
  2. 选取一个随机数 k k k,n为 E p ( a , b ) E_p(a,b) Ep(a,b)的阶
  3. 选取 E p ( a , b ) E_p(a,b) Ep(a,b)的一个基点 G G G,计算 K = k ∗ G K=k*G K=kG
  4. 计算 r = x k   m o d   n r=x_k\ mod\ n r=xk mod n
  5. 如果 r = 0 r=0 r=0另选一个 k k k并重新计算
  6. 获取 M M M的哈希值 z z z,计算 s = k − 1 ( z + r d A )   m o d   n s=k^{-1}(z+rd_A)\ mod\ n s=k1(z+rdA) mod n
  7. 如果 s = 0 s=0 s=0另选一个 k k k并重新计算
  8. 输出签名 ( r , s ) (r,s) (r,s)

验证过程:

  1. 计算整数 u 1 = s − 1 z   m o d   n u_1=s^{-1}z\ mod\ n u1=s1z mod n
  2. 计算整数 u 2 = s − 1 r   m o d   n u_2=s^{-1}r\ mod\ n u2=s1r mod n
  3. 计算 P = u 1 G + u 2 H A = ( s − 1 z G + s − 1 r H A )   m o d   n = s − 1 G ( z + r d a )   m o d   n P=u_1G+u_2H_A=(s^{-1}zG+s^{-1}rH_A)\ mod\ n=s^{-1}G(z+rd_a)\ mod\ n P=u1G+u2HA=(s1zG+s1rHA) mod n=s1G(z+rda) mod n
  4. 当且仅当 r = x p   m o d   n r=x_p\ mod\ n r=xp mod n的时候,签名才能成功验证

你可能感兴趣的:(密码学)