Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

RSA算法详解

小饱1
163 0 0
什么是RSA' d4 I7 e$ I: M' D* x
前面文章我们讲了AES算法,AES算法是一种是对称加密算法,本文我们来介绍一个十分常用的非对称加密算法RSA。0 }1 ~& |) s; H8 l0 Y! i) N
非对称加密算法也叫公钥密码算法,通过生成的公私钥来对明文密文进行加密解密。 RSA的名字是由它的三个开发者Ron Rivest, Adi Shamir和 Leonard Adleman的首字母而来的。
: ~3 I5 H/ U% L/ F- Q0 qRSA公司在1983年为RSA算法申请了专利。4 s5 v3 L1 [( h3 l1 y& t
RSA的加密  ]' C4 u  f' [
RSA的加密可以用下面的公式来表示:
3 [! U# ?$ Q, w+ o5 n7 L
8 @& s! N7 x- j+ }6 [, ]$ g( m通过公式我们可以知道RSA的密文是通过明文的E次方再对N进行mod运算得到的。这个加密过程只用到了阶乘和取模运算,可以算是非常简单明了了。
" X: @3 w+ T! |% t# O" V简洁的才是最好的,这可能也是RSA算法这么通用的原因吧。8 ^% W! W4 r+ Z$ Q- K# t, Q+ d# E
如果知道了E和N,那么就可以得到密文,所以我们把E和N的组合称为公钥,可以这样表示 公钥{E,N}。0 U" b1 o- {) A( w+ G, Y" T
如何选择E和N是一个复杂的数学过程,我们会在后面讲到。. C1 J6 Q' C) m( `
RSA的解密
* {1 G2 V/ H2 l  t. p先看一下RSA解密的公式:3 V9 V1 S: p4 o" s& n9 D
! P( l& l- v$ s
通过公式可以看到,明文是通过密文的D次方,再和N取模得到的。这里的N和加密的N是同一个数字。( Y, v+ T, y- h; t( o5 G" V, Q; [
D和N的组合表示为私钥{D,N}。
$ r* T- B5 z: h( o' w9 |N,E,D的生成% v# M* T* m8 w- r
知道了RSA的加密和解密原理之后,接下来我们就要探讨一下加密和解密过程中的N,E,D是怎么生成的。
8 k/ H# g2 h1 m6 k5 ?( |; q生成过程如下:* H/ K7 `. i5 B, @$ d
1. 生成N
( B3 D; ?; o3 p生成N的公式如下:
9 P7 W# k' d" W! X: k1 l5 j9 K* m/ M1 z9 I
p和q是两个很大的质数,太小的话容易被破译,太大的话会影响计算速度。通常p和q的大小为1024比特。这两个数是通过伪随机数生成器生成的。伪随机数生成器不能直接生成质数,它是通过不断的重试得到的。6 W( k5 ^4 n6 q6 s
2. 求L
/ ~. Z4 O+ b- h0 Z7 FL是一个中间数,它和p,q一样,不会出现在RSA的加密和解密过程。
8 w: }/ j4 \" K6 T# L5 DL的计算公式如下:
6 m4 g; n! Z+ q* G, O& X" i$ f9 p, M+ W8 E( A1 t( }# f6 n
L是p-1和q-1的最小公倍数
( {* i. W5 V- q$ j' P3. 求E
  R+ [4 ?) Y0 m  G, ~4 m3 bE就是用来加密的公钥了,E是一个比1大,比L小的数。并且E和L必须互质。只有E和L互质才能计算出D值。/ k+ X% i4 u6 f# j# E
8 y  h" o5 X/ y8 @% Z
这里E也是通过伪随机数生成器来生成的。8 l5 _7 e: n: V
找到了E和N,我们的公钥就生成了。7 ?! S( y8 n2 t. V3 D
4. 求D9 d+ d0 N( p& j" k) A8 T
计算D的公式如下:
: H2 e) ]8 ]4 g0 l7 m4 m  S( V
3 B6 K/ Y" B' r7 J! Z破解RSA
/ K/ I, h3 M, K7 b  o9 Z% B如果想破解RSA, 对于密码破解者来说,他知道了公钥{E,N}, 知道了密文,根据公式:6 Q$ I; U! ?: z5 V7 W5 x; p

+ J& U, P; l3 ^有没有可能直接通过已知的三个变量,求出未知变量明文呢?
* Z. M* n- N% M( j6 v  s/ ]& J$ U这个求解其实是一个离散对数的问题。目前还没有发现求离散对数的高效的方法。可以说是非常困难的。
/ Y5 A) |3 \% n3 G; b那么有没有可能通够暴力破解来得出密钥中的D呢?
! ?. d' z& K- w  q* }- ?目前RSA算法中p和q的长度一般为1024比特以上,生成的N的长度为2048比特以上,E和D的长度和N差不多,如果要暴力破解2048比特的D是非常困难的。
/ H1 i6 r5 B! B$ z由公式:
3 S7 {+ t) w+ `/ e* X! q5 f1 p; v4 M
可知,如果破解者知道了L的值,那么就可以轻易的求出D。而L是通过p和q计算出来的,所以p和q一定要保密,否则跟密码泄露是一样的。4 b  W  Y4 G2 W( [
因为 N= p * q , 而p和q都是质数, N又是已知的,那么我们可不可以通过质因数分解来得到?p和q呢?
+ k# u" u( N: v. I5 E2 a目前来说,还没有有效的对大整数进行质因素分解的高效算法,所以目前来说RSA算法还是很安全的,但是一旦有这样的算法出现,那么RSA将会很容易被攻破。+ Y& K) _6 M) j: _* A2 Z- B/ t
所以官方推荐:1024比特的RSA算法不应该被用于新的用途。2048比特的RSA算法可以用到2030年,4096比特的算法可以用到2031年。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

小饱1 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    36