非对称加密算法——RSA

非对称加密算法——RSA

512位(或1024位)秘钥,计算量极大,难破解(实战中可以用脚本来加解密,通常ctf密码题中有大几率遇到)。

数学基础
1.欧拉函数:对于一个正整数n,小于且与n互素的正整数的个数,记为φ(n)。

对于一个素数n,可知φ(n)=n-1;

对于两个素数p和q,他们的乘积满足n=pq,则可知φ(n)=(p-1)(q-1)。

2.欧几里得算法:gcd(a,b)表示a和b的最大公因数,如gcd(a,b)=1,则表示a,b的最大公因数为1,说明a和b互素。

3.同余:两个整数a,b,若它们除以整数m所得的余数相等,则称a与b对于模m同余,或a同余于b模m,记作a≡b(mod m),表示a与b对模m同余。例如:26≡2(mod 12)。

RSA算法结构

是一种基于大合数因子分解困难性的公开密钥密码,简称为RSA密码,可以用于加密也可以用于数字签名,目前应用最广泛的公开密钥密码。

1.参数 -参数的定义和密钥生成

(1)随机地选择两个大素数p和q,而且保密;

(2)计算n=p*q,将n公开;

(3)计算φ(n)=(p-1)*(q-1),对φ(n)保密;

(4)随机地选取一个正整数e,1

(5)根据e*d≡1 modφ(n)时,求出d,并对d保密;

2.加密算法

C=Me mod n

3.解密算法

M=Cd mod n

原理很好理解,但计算起来比较复杂。

RSA算法实例

选取p=47,q=71;p和q保密。

计算n=47*71=3337;n公开。

计算φ(n)=46*70=3220;φ(n)保密;

随机选取e=79,满足1<79<3220,且gcd(79,3220)=1,e公开。

根据79*d≡1 mod 3220,求出d=1019,d保密。

设明文M=688 232 687 966 668 3,进行分组,M1=688,M2=232,M3=687,M4=996,M5=668,M6=003。

M1的密文C1=688^79 mod 3337=1570

(解密:M1=1570^1019mod3337=668)

C2=2756 C3=2091 C4 2276、 C5 2423 、C6 158

组合起来密文 C=1570 2756 2091 2276 2423 158

乘法逆元求法

例:5*d≡1 mod 64,求d

5d mod 64=1 mod 64设5d除以64商为x

则5d=64x+1 mod 64(商乘以除数加上余数等于被除数)

d=(64*x+1)/5

从x=1开始取值,带入直到(64*x+1)/5正好可以整除,所以d=13 (65/5=13)

例2:5*d=1 mod 72,求d。(可以自己尝试算一下)

推导通用公式:ad≡b mod m,一般已知a,b,m,求d,根据上面定义,本质上是b mod m=ad mod m,可以假设ad除以m的商为x,余数是b mod m,根据乘除法公式ad=m*x+b mod m,因此

d=(m*x+b mod m)/a

其中只有x是未知数,可以从1开始带入,直到右边能整除为止。

结语:还好现在实际应用中用不着手算。。。。。。。。

你可能感兴趣的:(网络安全)