Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

非对称加密之RSA算法

有个胖子他姓杨
193 0 0
简介
- J$ N, R$ [' z* O7 \9 {
7 H  Y- x8 o6 {3 \+ A5 a    1977年,MIT的三位老师Rivest、Shamir和Adleman设计了一种算法,可以实现非对称加密。这种算法以他们三个人的名字命名为RSA。RSA算法是使用最为广泛的非对称加密算法。RSA加密利用了单向函数正向求解很简单,反向求解很复杂的特性。
+ _+ m" P& L3 x5 L0 x9 v
7 a: F4 ?# r, i" |# s    具体是利用了:' o' n5 `4 i6 K- j
, L8 u/ }! g3 O; F
    1.对两个质数相乘容易,而将其合数分解很难。即n=p1*p2,已知p1、p2求n简单,已知n求p1、p2困难。* G# @. Q6 b# e" y% y8 @7 T2 k8 }

, W) P( m. l+ M7 X" h  A8 M    2.(m^e)modn=c,已知m、e、n求c简单,已知e、n、c求m很难。
" x( [: T/ I9 M9 W. N, R+ H7 Q- @- d
    原理
1 Q2 [: C3 s* [8 d" J5 G: r( r; {  S8 \' I0 A3 l' |6 P  H% C
    RSA加密,实现了公开密钥,就是A可以给所有人发送公钥,其他人把要加密的信息用这把公钥加密后发送给A,A用私钥解密就可以获得加密的信息了。反过来,A要发送加密信息给B,只要知道B的公钥就可以了,而这个公钥是公开的。; a  f$ d! q( Z" ^6 U1 a5 e
) C, m! R7 w+ o* M; k% K
    公钥n、e的生成:随机选取两个质数p1、p2,n=p1*p2,再随机选取一个整数e,e与φ(n)互质。7 }% B7 Y! g$ F1 i- a
: C* ]( K6 c  v' w2 I
    加密过程:(m^e)modn=c,其中m为原信息,c为密文,n、e为公钥。
+ f: ?9 P5 j! P. D7 U9 s/ ^0 U/ K+ ~% D# m- d, z
    解密过程:(c^d)modn=m,其中d为解密密钥。
  ^5 a$ X  W, g9 p- g8 d5 F, F- g$ p/ U; v
    解密密钥d的求解:
8 H5 c7 A, F) ]2 W8 J+ x* d3 C, ^6 ~) O* s2 h
    (c^d)modn=(((m^e)modn)^d)modn=((m^e)^d)modn=(m^ed)modn
% o8 R7 p! N( g3 t
' r" N$ D0 p+ N" T) v+ b    费马定理:) G, c+ |! ~  M( h, i

( w+ z- g# X- ^# v    若p是素数,a与p互素,则a^(p-1)≡1(modp)
5 |1 g. X5 n5 J- M# u& [0 S0 S/ M' ]7 M4 C0 U3 R- q- b
    举例& C/ U  j0 H2 [5 a% H; P( Z; a, F
) T: H6 t3 p& `- D
    加密过程举例(1):
) r" k9 P  Y8 J- R3 D7 ?$ U# C" M3 j) Q8 q9 e/ @' X0 E3 J4 r+ M
    1.挑选两个质数,如p=61和q=53
8 H" k& V  Z( t3 D! ^) K+ w6 v* D) ]9 y6 h* ^
    2.计算N=p*q=3233
, W: M; B# r7 q8 C
  X7 y+ M# N5 f  d  J: F    3.计算(p-1)(q-1)=60*52=3120【这一步可以计算(p-1)和(q-1)的最小公倍数,从而使得计算的d比较小;17关于780的模逆是413,比2753要小】+ g4 |; L" j2 u2 X# E% g7 W" X. {
0 k9 p+ R' K; E& W$ y
    4.选择与3120互质的一个数e=17
5 Q7 ~3 k% |- J2 V* S* `. s; t8 t4 ~3 b5 V( ~% U+ j
    5.计算得出d,使得d是e关于3120的模逆,得出d=2753; \* C1 u3 I: N' f- U

- M3 Y! T5 [0 c7 u    6.如果明文是5,那么密文是5^17(mod3233)=3086
$ ^7 i0 h4 C. |- z8 v3 `1 t* p' R
. z7 G$ i, ]0 @5 ?7 S# C  H: N# \    7.解密,3086^2753(mod3233)=5: F- T# l* Y4 Q3 j. T# G. o$ P7 f

1 e- I3 Q) K! `1 K% Z- K    关于模逆:先用“辗转相除法”…
; O2 d  B0 Q4 j) F' l2 ~9 Q/ b3 F1 T: @6 A3 Y3 Z
    加密过程举例(2)-中间人:
" ?2 E( J: B+ M: y2 f7 \9 G4 Z( u' g7 O4 E
    A:有一个公钥n、e。例如:3127、3。7 W0 f. S$ Z- m6 Y$ Z
0 N4 h5 T0 f; H7 W/ ?
    B:有一个信息m。例如:89。
# o5 o/ d' v, g6 B4 g+ C9 {6 j" ]* p: u8 l9 d5 \- j5 [9 |4 S& z
    C:偷听者
3 y6 g( @* N4 q: C' }6 J/ E. x, G
9 \8 k# A' v3 Y: A9 A9 @    A:
6 x# Y0 J% x( e$ P8 m. J1 B
7 T- y- D& H$ j/ n7 p  d1 G    第一步:随机找两个质数p1、p2,一个奇数e。例如:53、59、3。
( l+ ~; J1 r4 p, N
7 P% ^3 [  J( i. ?    第二步:计算n=p1*p2得到n,计算欧拉函数φ(n)=(p1-1)*(p2-1)得到φ(n),计算钥匙d=(k*φ(n)+1)/e得到d。* u/ s  A' [+ x
0 J& x' R% k: j0 v4 {
    例如:53*59=3127、(53-1)*(59-1)=3016、(k*φ(n)+1)/e=(2*3016+1)/3=2011。
! I4 P+ N$ w% n8 Y: }* M8 o  G0 z
: E/ H/ H7 w# h, M* C; _9 _: m    第三步:发送n、e给大家知道//n、e就是公钥,d就是密钥。! q0 ~4 S$ P# j) ^. ^' R5 A
+ o* u0 Z+ ?6 T
    C:获得n、e
. n: Z8 |* t9 o. f! h) B8 _4 N- n" h: s* o' `
    B:! k# N* e) {/ y6 O

; [& e; E" B; W! C    第一步:获得n、e
6 `+ t7 D9 z7 b
: X- E" q- Z" B  P7 n- c/ B    第二步:加密信息m,(m^e)modn=c,获得加密信息c。例如:(89^3)mod3127=1394。
: k1 n0 S) Z3 ]" d$ D
. M0 a: i, [; v9 v! f/ j6 L  S    第三步:发送c给A
+ Q8 D$ V* D+ t8 b% k+ N& b- Q( W, x  X- J
    C:
1 x9 q5 p( E, Z# |, @0 C  P4 C+ U$ N3 @
( ?. {& r7 a6 h# Q+ ^0 ^6 F' i7 a    第一步:截获加密信息c
* ?- `' L6 @( D$ T' i! @7 S
7 g9 y" J; e! D& t& b6 a5 M    第二步:破解信息c,此时C只有n、e、c,只有把n分解质因数才能破解,而此分解很困难特别是当n很大的时候。
0 [8 A0 w( J: \3 R- }7 Y% C
8 \9 p, ?" f6 z  r( ?* [    A:: V; @  Q$ w5 r7 e& S

* d6 I* F: X, F" ?# {2 G    第一步:收到加密信息c& n7 C  _6 \. W' _7 t+ @' a
) T5 j" y+ @! N. ^2 y5 b
    第二步:解密信息c,(c^d)modn=m,获得信息m。例如:(1394^2011)mod3127=89。, j% `8 g" m4 s5 \& {

- T9 T7 u8 G- J2 ?* ~7 ^( C' {# m    完成
0 O$ w. C# |  c2 i+ K) ~
8 l6 A. f- R+ {  X    安全性/ z2 |8 u* {: W+ t
7 G2 @8 F* Q+ x
    为什么RSA是不会被破解的呢?
2 ]' a; _; m& {+ I2 a/ i4 ]4 u/ S
8 p: G# v7 x' J7 I0 O1 ?( X    为了解密,关键是要找出私钥。如果已知(p-1)(q-1),那么就很容易算出来私钥。而为了获得(p-1)(q-1),就需要知道p和q的值。为了获得p和q的值,就必须对N进行因式分解。
9 @/ i$ i( f8 U0 O. k) n# q, F
$ N8 }; \! T7 o$ F# o8 L    1874年,WilliamStanleyJevons就在自己的书《科学的原则》中写道:. ]1 f0 {( C* ]
  g; p2 T( E& H
    读者中有人能发现是哪两个数的乘积为8616460799吗?我想这个答案只有我自己知道。
! q  e5 f' q5 I/ X; B
  d6 T* R, P' y* t! _    书中他描述了单向函数(one-wayfunction)与密码学的关系,还提出了因子分解问题可以用作创建trapdoor函数。2 ?/ Z1 O6 }' u+ R

# a" k: @. _6 C. z    到目前为止,关于RSA可靠性的描述:
. X8 }9 o; b" k3 K6 n; Q5 `4 R1 D! h% S/ Z! z, J
    对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。6 }( j: x* s% H9 I5 W' @
& W( Q' `8 z. H9 n0 m" y7 g
    假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA密钥才可能被暴力破解。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。: w/ L- |) ^( s: l( g
$ Y& ?# E: g* w( U, h
    只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。
8 t' D1 e& Z  D9 |( n/ z7 K
  P" j" q2 c4 c% p    RSA的正确性:
1 `+ [4 Q/ {" b) W/ a2 x
: ~1 t5 D) K/ j( c5 Z2 M    可以使用欧拉函数和欧拉定理来证明。- w4 ]: M1 K- k6 F9 [3 ]$ J: C; K

0 H) l8 {1 c3 g4 f$ S    (这个证明还必须补充一部分就是m和n不互质的情况。欧拉定理只是在m和n互质时才有用。)$ d5 p+ v+ }& y; V$ p2 W
4 v$ f; f2 `; R6 r5 {, P; N8 D, f
    如果m和n不互质,因为n是两个质数p和q的乘积,所以m必然是p或q的倍数(因为要求m
( D. s! s* j: D: M1 W( M' {
, L& h, p2 g( R* y4 A9 ]    那么问题来了,如果黎曼猜想真的被证明了,那么RSA算法的可靠性是否会成空中楼阁呢?
$ j1 d( \. O8 U7 v' e9 K
: B1 u8 C$ i: k' F1 T$ e/ i  A    应用" @7 X2 Z# G, w7 }. ~, r
) V, {! u! U5 v1 }/ e; s9 M
    RSA的应用:数字签名
) S: i! h0 \; {7 K  L) t" i: S3 I; @3 w0 a
    最普遍的应用,网站身份认证。如何证明我们连上的网站就是支付宝alipay呢?如果因为各种原因,如域名污染,我们的浏览器访问了攻击者网站,这时一定要进行验证。
7 x' x- b& O$ B5 \. ~. X0 J8 O* r. f2 N* |) P5 u0 b
    验证,就是要检查一个证书。当我们以HTTPS的方式连上一个网站时,网站会首先给我们发送一个证书。这个证书里包含有它的域名、公钥等信息。同时这个证书是由专门的第三方公信机构CA使用自己的私钥签了名的。浏览器在拿到这个证书之后,首先用第三方公信机构CA的公钥对这个证书解密,然后查看和比对证书里的域名和浏览器地址栏的域名,完全匹配才认为是正确的网站。* Z4 [& ]9 C6 w* F! Q* C

0 u: Z* R3 k3 \    如果域名被污染,虽然攻击者网站可以拷贝一份正常网站的证书,但是因为证书中包括了正常网站的公钥,如果它不能获得正常网站的私钥,那么它就没有办法对加密信息进行解密。从而不能正常建立连接。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

有个胖子他姓杨 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    10