RSA算法

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)=φ(pq)=φ(p)φ(q)

2.2 模反元素

如果两个正整数 e e e φ ( n ) \varphi(n) φ(n)互质,那么一定可以找到一个整数 d d d,使得 e d − 1 ed-1 ed1 φ ( 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 参数选择

  1. p和q

    1. p和q要足够大
      一般应用:p和q应512b,使n达到1024b
      重要应用:p和q应1024b,使n达到2048b
    2. p和q应为强素数
    3. p和q的差要大
    4. (p-1)和(q-1)的最大公因子要小
  2. e的选择

  3. d的选择

3.2 流程

  1. 随机地选择两个大素数 p p p q q q,而且保密
  2. 计算 n = p q n=pq n=pq,将 n n n公开
  3. 计算 φ ( n ) = ( p − 1 ) ( q − 1 ) \varphi (n)=(p-1)(q-1) φ(n)=(p1)(q1),对 φ ( n ) \varphi (n) φ(n)保密
  4. 随机地选取一个正整数 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公开
  5. 根据 e d = 1   m o d   φ ( n ) ed=1\bmod \varphi(n) ed=1modφ(n),求出 d d d,并对 d d d保密
  6. 公钥: 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)>
  7. 加密运算: C = M e   m o d   n C=M^e\bmod n C=Memodn
  8. 解密运算: 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=r1modn

攻击者让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=r1yd=r1xdCd=Cd=Mmodn

对策:A不对数据M签名,而是对 H A S H ( M ) HASH(M) HASH(M)签名

4.3 应用

PGP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值