RSA加密算法原理

一,基本数学知识

1.素数:

也叫质数,特点是除了1和自身,再没有其他数字能整除它。例如9除了1和9,还有3能整除9,因此9不是素数。

2.欧拉函数:

任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(比如,在1到8之中,有多少个数与8构成互质关系?),计算这个值的方法就叫做欧拉函数,以φ(n)表示。

3.因数分解

例如 15可以分解为 15 = 3x5 

4.互质关系

例如9和17之间没有公因数(当然1是不能算的),所以9和17之间构成互质关系。

5.同余

例如 ed ≡ 1 (mod φ(n)) 表示ed和1对n同余。意思是 ed对n求余的结果和 1对n求余的结果一样,即他们有同样的余数

 

二,RSA原理

RSA加密算法主要 由这几个参数有关:p,q,n,φ(n),e,d,m,c

p和q:首先p和q是两个质数,可以任取,但p,q越大RSA越安全

n:n=pxq,n为p和q的乘积,n表示密钥的长度(公钥和私钥)。

φ(n):φ(n) = (p-1)(q-1)

e:随机选择的一个整数,要满足 1<e<φ(n),且e与φ(n)互质。而且e为公钥的组成元素

d:e 的模反元素(下面有说怎么求),而且e为私钥的组成元素。求d的公式ed\equiv 1mod(\varphi (n)))

m:明文

c:密文

RSA的公钥,私钥和加密,解密方式如下表:

公钥KU

(由n和e组成)

n:两个素数p和q的乘积

e:与(p-1)和(q-1)互质的数

私钥KR

(由d和n组成)

d和n
加密方式c\equiv m^{^{e}} mod(n) 
解密方式m\equiv c^{​{d}} mod(n)

三,例子描述

(1)求得公钥和私钥

令p=3,q=11,则 n=p*q = 3x11 = 33,φ(n)=(p-1)(q-1)=20;再取 e =3( 3与20互质),接下来要求d:

d为e的模反元素,模反元素即是指有一个整数d,可以使得ed被φ(n)除的余数为1,写成数学式子是:

                                                                         ed\equiv 1mod(\varphi (n)))

又e=3,φ(n)=20所以:

                                                                         3d\equiv 1mod(20)

又因为1模上任何数都是1,所以上式又表示为 3d%20 = 1,这个式子正规的话要使用扩展欧几里得算法求解,但基于数字比较小,我们可以看出来,当d = 7时,21%20 = 1成立,所以取 d = 7 

n,e,d出来后,公钥和私钥就出来了:

公钥KU = (e,n)=(3,33)

私钥KR = (d,n)=(7,33)

(2)英文转数字

将明文的英文信息数字化,就需要一个编码表,假设我们的编码表a~z对应数字01~26:

字母abcdefghijklm
码值01020304050607080910111213
字母nopqrstuvwxyz
码值14151617181920212223242526

假设我们要编码的明文为 hi,则将hi转化为编码则是: 08,09

(3)明文加密

加密方式为:c\equiv m^{^{e}} mod(n),代入 e =3,n=33,得:c\equiv m^{^{3}} mod(33),代入明文08,09:

c1\equiv 8^{^{3}}mod(33)\Rightarrow c1\equiv 512mod(33),由于512%33 = 17,所以 c1%33也要等于17,所以取c1=17

c2\equiv 9^{^{3}}mod(33)\Rightarrow c2\equiv 729mod(33),由于729%33= 3,所以c2%33也要等于3,所以取c2=3

所以hi加密后的密文为:17,3

(4)密文解密

解密方式为:m\equiv c^{^{d}} mod(n)(n是公开的,所以d绝对不能泄露,d泄露了,就等于私钥泄露了),代入d=7,n=33,

得:m\equiv c^{^{7}} mod(33),代入密文17,3:

m1\equiv 17^{^{7}}mod(33)\Rightarrow m1\equiv 410338673mod(33),由于410338673%33=8,所以m1%33也要等于8,所以取m1为8

m2\equiv 3^{^{7}}mod(33)\Rightarrow m2\equiv2187mod(33),由于2187%33=9,所以m2%33也要等于9,所以取m2为9

所以解密后的明文为 8,9,对应编码表,则为 hi。

(5)破解RSA

由于公钥是公开的,若要破解RSA则要破解私钥,由于私钥KR为(d,n),n是公钥组成部分,所以n也是公开的,所以问题等价于破解d即可。

ed\equiv 1mod(\varphi (n))),e是公钥里的,所以e也是公开的,所以要求d就要知道φ(n)

由于:φ(n) = (p-1)(q-1),所以,问题又等价于要求p和q,根据已有的信息,n=p*q,所以从n入手,把 n 作因数分解就行了,

 

因数分解的意思是,例如45,可以分解为45=3x3x5,这样的分解结果是独一无二的,这也是p和q必须是质数的原因,因为当p和q都是质数,则 n = pxq 是独一无二的,p和q越大,则n越难被分解。

当n=629这样小的数时,通过程序可进行穷举式的暴力破解:

num = 629
for p in range(num):
    for q in range(num):
        if p*q==num:
            print('p=%d,q=%d' %(p,q))

但当n很大时,程序运行时间就会很长,所以一般p和q都是非常大的质数。

当p,q求出来后,d就可以算出来了,这样私钥也就出来了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值