RSA算法
文章目录
- 1. 前言
- 2. 基本概要
- 2.1 欧拉函数
- 2.2 模反元素
- 2.3 RSA
- 3. 加密过程
- 3.1 参数选择
- 3.2 流程
- 3.3 习题
- 4. 数字签名
- 4.1 签名算法
- 4.2 攻击
- 4.2.1 一般攻击
- 4.2.2 利用已有的签名进行攻击
- 4.2.3 攻击签名获得明文
- 4.3 应用
1. 前言
学习视频:【RSA加密算法】| RSA加密过程详解 | 公钥加密| 密码学| 信息安全|_哔哩哔哩_bilibili
2. 基本概要
2.1 欧拉函数
具体知识点学习《信息安全数学基础》
- 欧拉函数是小于 n n n的正整数中与 n n n互质的数的数目
- 互质是公约数只有1的两个整数,叫做互质整数
- 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
计算欧拉函数:
若 n = p q n=pq n=pq,且 p , q p,q p,q互质,则 φ ( n ) = φ ( p ∗ q ) = φ ( p ) ∗ φ ( q ) \varphi(n)=\varphi(p*q)=\varphi(p)*\varphi(q) φ(n)=φ(p∗q)=φ(p)∗φ(q)
2.2 模反元素
如果两个正整数 e e e和 φ ( n ) \varphi(n) φ(n)互质,那么一定可以找到一个整数 d d d,使得 e d − 1 ed-1 ed−1被 φ ( n ) \varphi(n) φ(n)整除,或者说 e d ed ed除以 φ ( n ) \varphi(n) φ(n)所得余数为1,此时, d d d就叫做 e e e的模反元素
2.3 RSA
RSA密码被誉为是一种风格幽雅的公开密钥密码,即可用于加密,又可用于数字签名,安全、易懂
3. 加密过程
3.1 参数选择
-
p和q
- p和q要足够大
一般应用:p和q应512b,使n达到1024b
重要应用:p和q应1024b,使n达到2048b - p和q应为强素数
- p和q的差要大
- (p-1)和(q-1)的最大公因子要小
- p和q要足够大
-
e的选择
-
d的选择
3.2 流程
- 随机地选择两个大素数 p p p和 q q q,而且保密
- 计算 n = p q n=pq n=pq,将 n n n公开
- 计算 φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi (n)=(p-1)(q-1) φ(n)=(p−1)(q−1),对 φ ( n ) \varphi (n) φ(n)保密
- 随机地选取一个正整数 e e e, 1 < e < φ ( n ) 1<e<\varphi(n) 1<e<φ(n)且 ( e , φ ( n ) ) = 1 (e, \varphi (n))=1 (e,φ(n))=1,将 e e e公开
- 根据 e d = 1 m o d φ ( n ) ed=1\bmod \varphi(n) ed=1modφ(n),求出 d d d,并对 d d d保密
- 公钥: K e = < e , n > K_{e}=<e,n> Ke=<e,n>;私钥: K d = < d , p , q , φ ( n ) > K_{d}=<d,p,q,\varphi(n)> Kd=<d,p,q,φ(n)>;
- 加密运算: C = M e m o d n C=M^e\bmod n C=Memodn
- 解密运算: M = C d m o d n M=C^d\bmod n M=Cdmodn
3.3 习题
4. 数字签名
对于RSA密码由于 D ( E ( M ) ) = ( M e ) d = M e d = ( M d ) e = E ( D ( M ) ) m o d n D(E(M))=(M^e)^d=M^{ed}=(M^d)^e=E(D(M))\bmod n D(E(M))=(Me)d=Med=(Md)e=E(D(M))modn,因此RSA可同时确保数据的秘密性和真实性
4.1 签名算法
设 M M M为明文, K e A = < e , n > K_{eA}=<e,n> KeA=<e,n>是 A A A的公开加密钥, K d A = < d , p , q , φ ( n ) > K_{dA}=<d,p,q,\varphi(n)> KdA=<d,p,q,φ(n)>是 A A A的保密的解密钥
😄则 A A A对 M M M的签名过程是: S A = D ( M , K d A ) = ( M d ) m o d n S_A=D(M,K_{dA})=(M^d)\bmod n SA=D(M,KdA)=(Md)modn, S A S_A SA便是 A A A对 M M M的签名
😄验证签名的过程: E ( S A , K e A ) = ( M d ) e m o d n = M E(S_A,K_{eA})=(M^d)^e \bmod n=M E(SA,KeA)=(Md)emodn=M
4.2 攻击
4.2.1 一般攻击
因为e和n是用户A的公开密钥,所以任何人都可以获得并使用e和n。攻击者可随意选择一个数据Y,并用A的公钥计算: X = ( Y ) e m o d n X=(Y)^e \bmod n X=(Y)emodn
因为 X = ( Y ) e m o d n X=(Y)^e \bmod n X=(Y)emodn,于是可以用Y伪造A的签名,因为Y是A对X的一个有效签名,这样的X往往无正确语义
4.2.2 利用已有的签名进行攻击
攻击者选择随机数据 M 3 M_3 M3,且 M 3 = M 1 M 2 m o d n M_3=M_1M_2\bmod n M3=M1M2modn,
攻击者设法让A对 M 1 M_1 M1和 M 2 M_2 M2签名: S 1 = M 1 d m o d n , S 2 = ( M 2 ) d m o d n S_1={M_1}^d \bmod n ,S_2=(M_2)^d \bmod n S1=M1dmodn,S2=(M2)dmodn,
于是可以由 S 1 S_1 S1和 S 2 S_2 S2计算出A对 M 3 M_3 M3的签名,因为 S 1 S 2 = ( M 1 ) d ( M 2 ) d m o d n = ( M 3 ) d m o d n = S 3 S_1S_2=(M_1)^d(M_2)^d \bmod n=(M_3)^d \bmod n=S_3 S1S2=(M1)d(M2)dmodn=(M3)dmodn=S3
对策:A不对数据M签名,而是对HASH(M)签名
4.2.3 攻击签名获得明文
攻击者截获C, C = ( M ) e m o d n C=(M)^e \bmod n C=(M)emodn
攻击者选择小的随机数r,计算 x = r e m o d , y = x C m o d n , t = r − 1 m o d n x=r^e \bmod ,y=xC \bmod n,t=r^{-1}\bmod n x=remod,y=xCmodn,t=r−1modn
攻击者让A对y签名,于是攻击者又获得: S = y d m o d n S=y^d \bmod n S=ydmodn
攻击者计算: t S = r − 1 y d = r − 1 x d C d = C d = M m o d n tS=r^{-1}y^d=r^{-1}x^dC^d=C^d=M\bmod n tS=r−1yd=r−1xdCd=Cd=Mmodn
对策:A不对数据M签名,而是对 H A S H ( M ) HASH(M) HASH(M)签名
4.3 应用
PGP