Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

RSA算法详解

小饱1
96 0 0
什么是RSA5 x" z4 G7 O, `9 I3 y
前面文章我们讲了AES算法,AES算法是一种是对称加密算法,本文我们来介绍一个十分常用的非对称加密算法RSA。
- I( g- `3 t* Z  u6 x0 W非对称加密算法也叫公钥密码算法,通过生成的公私钥来对明文密文进行加密解密。 RSA的名字是由它的三个开发者Ron Rivest, Adi Shamir和 Leonard Adleman的首字母而来的。
: K1 n$ K; T2 ]# FRSA公司在1983年为RSA算法申请了专利。5 m4 j7 F; o8 ]7 f9 W0 Y
RSA的加密
8 n3 r/ d7 G5 C6 z+ |  [/ N" }RSA的加密可以用下面的公式来表示:4 l2 X& E. o- m

5 p0 H* f- p9 a4 n) B0 k+ i通过公式我们可以知道RSA的密文是通过明文的E次方再对N进行mod运算得到的。这个加密过程只用到了阶乘和取模运算,可以算是非常简单明了了。" u4 q+ _( J0 y( p3 R
简洁的才是最好的,这可能也是RSA算法这么通用的原因吧。
8 f. E5 h/ F7 G- l# b如果知道了E和N,那么就可以得到密文,所以我们把E和N的组合称为公钥,可以这样表示 公钥{E,N}。! [7 {! u9 F/ {# ]; L  s
如何选择E和N是一个复杂的数学过程,我们会在后面讲到。
. |# }% F5 ]. M1 H% M) GRSA的解密  {5 P$ i  N2 y
先看一下RSA解密的公式:$ r# P0 ]4 x/ J+ X( k
; R8 f  y2 a( Z. |, G3 H' T
通过公式可以看到,明文是通过密文的D次方,再和N取模得到的。这里的N和加密的N是同一个数字。& m' x. }3 s2 n/ H" I8 `
D和N的组合表示为私钥{D,N}。& |3 E8 R- J* M6 V8 g$ \4 K
N,E,D的生成
9 u+ ]: @7 V1 @知道了RSA的加密和解密原理之后,接下来我们就要探讨一下加密和解密过程中的N,E,D是怎么生成的。
6 u: W4 ?, D" J8 J; R生成过程如下:
* R5 j0 e+ u5 O# u( z. u  ^, g1. 生成N! \3 H9 h  c( ?3 s/ g( S
生成N的公式如下:
! z! |  C2 a( h$ e( @( C2 m  g
* k, `, D* _( m- D: `, zp和q是两个很大的质数,太小的话容易被破译,太大的话会影响计算速度。通常p和q的大小为1024比特。这两个数是通过伪随机数生成器生成的。伪随机数生成器不能直接生成质数,它是通过不断的重试得到的。
( i* n# _- K+ Q% c. O, @2. 求L5 n, B& R+ ]7 R8 _$ A4 ~+ a
L是一个中间数,它和p,q一样,不会出现在RSA的加密和解密过程。7 K9 P( T7 D& F$ n6 j9 [& w/ a4 H
L的计算公式如下:! ?" H4 b7 w8 w4 |

7 m; R/ L3 p1 R! @L是p-1和q-1的最小公倍数
& E# A* K) p( A# @: R5 L5 z3. 求E
* Y! v: l  l) ~9 @E就是用来加密的公钥了,E是一个比1大,比L小的数。并且E和L必须互质。只有E和L互质才能计算出D值。0 q: I: a3 O, Z3 z& b

# o8 r  C) Y$ `* A+ ]2 q8 s这里E也是通过伪随机数生成器来生成的。+ Q# i0 Y' g7 K+ x% V, a/ x% Y
找到了E和N,我们的公钥就生成了。
* w$ _! E( x8 h2 y1 D4. 求D% t5 f* U# b( D- }8 f0 ]+ D
计算D的公式如下:* C" o; h2 X9 f
# Q$ T9 A* @, H5 r% W
破解RSA* ^: r5 D! i0 E* r" f3 S
如果想破解RSA, 对于密码破解者来说,他知道了公钥{E,N}, 知道了密文,根据公式:
) \) s/ @' C) d7 \" y& E/ g; T
4 p% k; C% B2 h$ P6 l3 E- c0 ^有没有可能直接通过已知的三个变量,求出未知变量明文呢?
* G+ @- _  j" T4 ~这个求解其实是一个离散对数的问题。目前还没有发现求离散对数的高效的方法。可以说是非常困难的。
" F  S2 p4 H6 z那么有没有可能通够暴力破解来得出密钥中的D呢?
, \$ v: g! c. W$ a  w- f目前RSA算法中p和q的长度一般为1024比特以上,生成的N的长度为2048比特以上,E和D的长度和N差不多,如果要暴力破解2048比特的D是非常困难的。
) p2 Q! Q# n' I6 f# r% n' S( d* O9 h: Y由公式:/ d( B( z+ O3 [( G( p
1 [1 p% }  \# L7 v2 ?6 F7 ^
可知,如果破解者知道了L的值,那么就可以轻易的求出D。而L是通过p和q计算出来的,所以p和q一定要保密,否则跟密码泄露是一样的。' }$ G$ {- d. n" S* J' M
因为 N= p * q , 而p和q都是质数, N又是已知的,那么我们可不可以通过质因数分解来得到?p和q呢?# v, N; G3 @. ^) m; ^
目前来说,还没有有效的对大整数进行质因素分解的高效算法,所以目前来说RSA算法还是很安全的,但是一旦有这样的算法出现,那么RSA将会很容易被攻破。0 Z  h$ O) C6 n% ]; r! h
所以官方推荐:1024比特的RSA算法不应该被用于新的用途。2048比特的RSA算法可以用到2030年,4096比特的算法可以用到2031年。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

小饱1 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    36