Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

非对称加密之RSA算法

有个胖子他姓杨
107 0 0
简介
& @9 X0 B  p  y$ P  {) N: B2 C1 ~* ]# `) |0 ]9 X% r
    1977年,MIT的三位老师Rivest、Shamir和Adleman设计了一种算法,可以实现非对称加密。这种算法以他们三个人的名字命名为RSA。RSA算法是使用最为广泛的非对称加密算法。RSA加密利用了单向函数正向求解很简单,反向求解很复杂的特性。
; F+ e* k$ ?- ~. H1 G& D2 y) C( V( u1 F: @, a$ F2 O* o
    具体是利用了:
0 f- _, p. P- _8 c5 Q$ S3 Q( Z# L
    1.对两个质数相乘容易,而将其合数分解很难。即n=p1*p2,已知p1、p2求n简单,已知n求p1、p2困难。
4 T4 K* d0 U3 b4 }
' g0 b! ]" t4 D, M9 c    2.(m^e)modn=c,已知m、e、n求c简单,已知e、n、c求m很难。8 S8 T' D& L4 M8 e
( {6 O! k+ i  Z) J! Y; H
    原理
; ~5 {0 y& @: @% e7 X8 [) B7 K+ T, x% I/ @
4 x; V. _& Z- ]/ P- {* i8 [    RSA加密,实现了公开密钥,就是A可以给所有人发送公钥,其他人把要加密的信息用这把公钥加密后发送给A,A用私钥解密就可以获得加密的信息了。反过来,A要发送加密信息给B,只要知道B的公钥就可以了,而这个公钥是公开的。5 ?  k2 O; f" _7 N. w( S1 k: o
; D6 e8 f6 f/ N1 ?/ B3 W
    公钥n、e的生成:随机选取两个质数p1、p2,n=p1*p2,再随机选取一个整数e,e与φ(n)互质。" @2 R% ]1 \8 L3 n8 V% J

; f0 S6 Q( E% K/ C    加密过程:(m^e)modn=c,其中m为原信息,c为密文,n、e为公钥。" s. w# d! @2 V/ R

6 d5 Q8 H  e: s$ W3 s* `    解密过程:(c^d)modn=m,其中d为解密密钥。
# d" m% \2 Y8 q* C! r& J, [
8 Y$ C) S+ K- ]3 T  S9 ~0 k* z7 z    解密密钥d的求解:
' A# V# E& u. d9 _9 X
  l6 v7 i2 X2 A    (c^d)modn=(((m^e)modn)^d)modn=((m^e)^d)modn=(m^ed)modn; U/ w; t7 e" H# E5 R0 E
+ ~7 ?5 u/ R1 T
    费马定理:) f3 t9 h7 q' p# Z& K. L( Y  ?4 m% f5 ?

* L# B$ z5 Z3 k    若p是素数,a与p互素,则a^(p-1)≡1(modp)- a& D. B9 W& T

( H; \' ~/ k1 e: F1 R7 R3 }+ b    举例
0 ?. H( T4 ~' J8 i, `1 P* v( G+ G" x  g9 V+ Z  d; w
    加密过程举例(1):8 Q3 }/ t' \+ i% d! [

+ ]8 i, g' B9 H$ {1 T; p% f1 c+ a8 Y7 |    1.挑选两个质数,如p=61和q=532 X9 Z  p  X1 f9 S& f3 v

4 m& @$ c: ?6 y8 q$ w1 t+ R    2.计算N=p*q=3233
8 O. F  U  N. R9 M+ T8 H! N+ F1 u- F9 V0 @! h! ]6 d" B
    3.计算(p-1)(q-1)=60*52=3120【这一步可以计算(p-1)和(q-1)的最小公倍数,从而使得计算的d比较小;17关于780的模逆是413,比2753要小】
1 h- C7 M& `6 [' O- F
0 Y% [, P( }& a% I* O: ~    4.选择与3120互质的一个数e=17, ]( R7 T5 e" s4 D
4 z6 k0 w& d( x0 {1 F, H
    5.计算得出d,使得d是e关于3120的模逆,得出d=27531 k9 N" n8 N9 I5 I
$ B6 ^4 C4 m1 {
    6.如果明文是5,那么密文是5^17(mod3233)=30866 R' h5 u: S$ B
8 n% O2 T2 e# r3 U% T8 |5 [
    7.解密,3086^2753(mod3233)=5( Q- T! s7 T9 s
4 o& k! g/ I4 L# i4 O5 j
    关于模逆:先用“辗转相除法”…* u% O0 e1 V2 ^3 U$ ?: {- s3 w- h6 h

6 e- ]; G6 e. n; l    加密过程举例(2)-中间人:6 ?! e( e- t6 s' _$ e
9 u* z8 k# x' c; N: S' V! t; F
    A:有一个公钥n、e。例如:3127、3。
3 d  y0 W5 _/ [* C8 a) \0 w: M5 S% l, u9 ]! P+ I0 h
    B:有一个信息m。例如:89。
" d% K+ b% a$ c) W
) K8 M/ b/ f$ w, v% N# q    C:偷听者
& d- x" {7 F3 L
6 _7 x2 E5 Q1 U    A:
1 {, H) }0 U+ C# T; Y/ s. a3 T6 A
    第一步:随机找两个质数p1、p2,一个奇数e。例如:53、59、3。
1 e6 Q/ g8 M# h6 J7 y) r% V5 q5 a- N, S7 F7 C$ |" E
    第二步:计算n=p1*p2得到n,计算欧拉函数φ(n)=(p1-1)*(p2-1)得到φ(n),计算钥匙d=(k*φ(n)+1)/e得到d。# ]0 w3 n* O6 \+ R

- T; c! y0 h9 i9 v1 j# @+ N0 G, l    例如:53*59=3127、(53-1)*(59-1)=3016、(k*φ(n)+1)/e=(2*3016+1)/3=2011。
7 r1 [$ ?& V% W! n6 m0 h; z; R
) j3 |6 d2 q9 H! Z, L    第三步:发送n、e给大家知道//n、e就是公钥,d就是密钥。
% n! ^' ^+ e. K5 `/ V1 q8 H0 b) B4 @3 {; D, {
    C:获得n、e4 r4 C- x6 ~7 C' c! K: P# V
, _( ^; t# V$ l+ P& T# \
    B:
( U& G/ |9 U/ z- A" c+ t/ Z" W* j" [5 |- R' L
    第一步:获得n、e& H  `2 y$ {; W/ V5 e7 F" y
9 P' H; X2 }% G" o8 i5 C
    第二步:加密信息m,(m^e)modn=c,获得加密信息c。例如:(89^3)mod3127=1394。  O1 e) Z# E% L, Z+ s

( Q+ E8 ^: M& n, g2 Y7 @    第三步:发送c给A* n9 p" C3 D9 Y5 m' M; F( S

' F! m1 W+ ?! P0 _  z# i8 M    C:  ^  j% N7 E; c3 Z+ R% j
! ^- F, y7 N2 {" ~6 s4 r7 v
    第一步:截获加密信息c; B% f* N) l6 m% Y& Y
3 v$ S" K4 W- |" J& \& y7 }
    第二步:破解信息c,此时C只有n、e、c,只有把n分解质因数才能破解,而此分解很困难特别是当n很大的时候。
5 }6 M. _( c7 ?1 N, f$ c4 d5 E7 ~- x) u) Z. `
    A:
( u7 h8 \2 u6 ?2 ?. c3 s4 G* b! ?5 I: y4 w7 z
    第一步:收到加密信息c7 A; B; Z" V9 F8 J6 l  F2 B

* ~% X' Q& q$ [* G$ M: Q# T    第二步:解密信息c,(c^d)modn=m,获得信息m。例如:(1394^2011)mod3127=89。6 T% ~  U" r. ?

2 |) ^  m! J0 v$ s) _    完成
* R8 ]- x  \  t( z7 {9 k
  ?' D" m! h* ?. w$ `  f+ \    安全性9 C  K, o# s! E
# c8 [7 P7 B0 E
    为什么RSA是不会被破解的呢?; I9 c6 k9 T- e8 m  l
0 I4 |( U4 c6 _4 }
    为了解密,关键是要找出私钥。如果已知(p-1)(q-1),那么就很容易算出来私钥。而为了获得(p-1)(q-1),就需要知道p和q的值。为了获得p和q的值,就必须对N进行因式分解。/ D! z# B8 K) I) o5 s5 A2 M% k

6 Z& y  P* _9 v1 p- L    1874年,WilliamStanleyJevons就在自己的书《科学的原则》中写道:
* L8 f0 b' e* D' k* |/ x6 {# J3 |( Y' Z
    读者中有人能发现是哪两个数的乘积为8616460799吗?我想这个答案只有我自己知道。! x( g$ |, i7 `, d+ f
& K. ^1 E. g# I( y1 _" Y$ d& x+ ?/ {+ a
    书中他描述了单向函数(one-wayfunction)与密码学的关系,还提出了因子分解问题可以用作创建trapdoor函数。
" V6 g( c/ Y# _
3 T$ {/ y; \4 @9 B    到目前为止,关于RSA可靠性的描述:
9 u8 k& n  g* x" H7 r) M# T/ J. ^1 b
    对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。
9 X: r* G" @  r; S3 ?) O% x' K) O' S9 j
    假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA密钥才可能被暴力破解。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。
3 |5 y& w9 s( D) u; Z* w
4 l4 j% q% w- F0 g+ \: H- i6 ]    只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。: F( v4 @; E; n4 w% v4 D/ b
: l% n/ E0 Q) s- ?. t
    RSA的正确性:) o9 w9 o; R  `8 Q* L; u9 p1 B
: F- N5 u! ?: U6 t7 P
    可以使用欧拉函数和欧拉定理来证明。7 m7 f9 ]$ T- l6 f( O$ o

5 p/ `' F8 I% p& O0 O; w    (这个证明还必须补充一部分就是m和n不互质的情况。欧拉定理只是在m和n互质时才有用。)( c1 l% E' n0 l8 U

0 }3 \, c, r, ?0 a# \  }- y    如果m和n不互质,因为n是两个质数p和q的乘积,所以m必然是p或q的倍数(因为要求m
6 K4 d# U3 t" {7 u( X
' ~# T9 Z# J* \7 I    那么问题来了,如果黎曼猜想真的被证明了,那么RSA算法的可靠性是否会成空中楼阁呢?
2 X4 |) Q( l* P( z0 @7 {% n' V3 p, b0 j* e) `) j$ q
    应用
( h9 X4 V& X  L; ]/ H
" }& H! g/ P; O$ d( P, T" J    RSA的应用:数字签名
& p( O$ L4 e% P$ y  D8 A
5 m+ P- c& `; c/ Y4 p/ g1 a    最普遍的应用,网站身份认证。如何证明我们连上的网站就是支付宝alipay呢?如果因为各种原因,如域名污染,我们的浏览器访问了攻击者网站,这时一定要进行验证。
8 c/ _( [& t. D2 E6 _% R+ A+ e' e+ H% L: t4 H* _1 H1 W6 [
    验证,就是要检查一个证书。当我们以HTTPS的方式连上一个网站时,网站会首先给我们发送一个证书。这个证书里包含有它的域名、公钥等信息。同时这个证书是由专门的第三方公信机构CA使用自己的私钥签了名的。浏览器在拿到这个证书之后,首先用第三方公信机构CA的公钥对这个证书解密,然后查看和比对证书里的域名和浏览器地址栏的域名,完全匹配才认为是正确的网站。
& I, c: l& u$ B: v5 n4 W
: \. y8 I1 `$ I9 I6 E    如果域名被污染,虽然攻击者网站可以拷贝一份正常网站的证书,但是因为证书中包括了正常网站的公钥,如果它不能获得正常网站的私钥,那么它就没有办法对加密信息进行解密。从而不能正常建立连接。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

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

    0

  • 关注

    0

  • 主题

    10