数字签名
- 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)=(p−1)×(q−1)。
-
选择一个公钥指数 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×e≡1 (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(根据d和e之间的关系)=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×r−1=(m′)d (mod n)×r−1=(m×re(mod n))d (mod n)×r−1=(m×re)d (mod n)×r−1=(md×re×d×r−1) (mod n)=(md×r1+k×ϕ(n)×r−1) (mod n)=(md×r1×r−1) (mod n)(欧拉定理)=md (mod n)
CG
- 欧拉定理的证明过程:群的拉格朗日定理的应用:欧拉定理的两种证明方法+RSA加密算法