首页 理论教育 RSA算法解析:原理与应用

RSA算法解析:原理与应用

时间:2023-07-02 理论教育 版权反馈
【摘要】:由于13=11+22=13-1111=5×2+11=11-5×2=11-5=6×11-5×13所以 11×6≡111-1≡62.RSA算法的加密和解密参数定义和密钥生成●选两个大素数p和q;●计算n=p×q,φ=(p-1)×(q-1);●随机选一整数e,满足1<e<φ,且gcd=1;(e公开)●计算d,满足d×e≡1即d是e在模φ下的乘法逆元,因e与φ互素,由模运算可知,它的乘法逆元一定存在。

RSA算法解析:原理与应用

1.相关数学基础

在对RSA算法描述之前,先介绍它的相关数学基础。

(1)欧拉函数

欧拉函数是指对于一个正整数n,小于n且和n互素的正整数的个数,记为φn)。显然,对于素数pφp)=p-1。对于两个素数pq,它们的乘积n=p×q满足φn)=(p-1)×(q-1)。

【例5-1】 求φ(21)。

【解析】 比21小而与21互素的正整数有

{1,2,4,5,8,10,11,13,16,17,19,20}

总共12个,故

φ(21)=12

又由于 21=3×7

所以 φ(21)=(3-1)×(7-1)=12

(2)欧拉定理

an互素,φn)为欧拉函数,则

aφn≡1(mod n

【例5-2】 已知a=7,n=19,求n)(mod n)。

【解析】 72≡11(mod 19)

74≡7(mod 19)

78≡11(mod 19)

716≡7(mod 19)

由于n=19是素数,则有φ(19)=19-1=18。

(3)欧几里得算法

ab是两个正整数,令r0=ar1=b,重复使用带余除法,即用每次的余数为除数去除上一次的除数,直至余数为0,可用如下方程来表示(其中,ri被除数ri+1是除数,ri+2是余数,qi+1是它们的商,i=0,1,2,…,m-1):

最后一个不为0的余数是ab的最大公因数gcd(ab)。此算法的正确性,由以下结论来保证:

gcd(ab)=gcd(ba(mod b))

【例5-3】 求gcd(224,34)。

【解析】 gcd(224,34)=gcd(34,20)=gcd(20,14)=gcd(14,6)=gcd(6,2)=2

【例5-4】 求11-1(mod 13)。

【解析】 由于13=11+2

2=13-11

11=5×2+1

1=11-5×2=11-5(13-11)=6×11-5×13

所以 11×6≡1(mod 13)

11-1≡6(mod 13)

2.RSA算法的加密和解密

(1)参数定义和密钥生成

●选两个大素数pq;(pq保密)

●计算n=p×qφn)=(p-1)×(q-1);(n公开,φn)保密)

●随机选一整数e,满足1<eφn),且gcd(φn),e)=1;(e公开)

●计算d,满足

d×e≡1(mod φn))

de在模φn)下的乘法逆元,因eφn)互素,由模运算可知,它的乘法逆元一定存在。(d保密)

(2)加密算法

加密时首先将明文比特串分组,使得每个分组对应的十进制数小于n,即分组长度小于log2n,然后对每个明文分组m,作加密运算

cme(mod n

(3)解密算法

对密文分组的解密运算为

mcd(mod n

下面证明RSA算法中解密过程的正确性。

证明:由加密过程知cme(mod n),所以

cdmed(mod n

m1(modφn))(mod n

mkφn)+1(mod n

下面分两种情况:

1)mn互素,即gcd(mn)=1,由欧拉定理得

n)≡1(mod n

mkφn)≡1(mod n

mkφn)+1≡m(mod n

cdm(mod n

2)gcd(mn)≠1,先看gcd(mn)=1的含义,由于n=pq,所以gcd(mn)=1意味着m不是p的倍数也不是q的倍数。因此gcd(mn)≠1意味着mp的倍数或q的倍数,不妨设m=cp,其中c为一正整数。此时必有gcd(mq)=1,否则m也是q的倍数,从而是pq的倍数,与mn=pq矛盾。(www.xing528.com)

由gcd(mq)=1及欧拉定理得q)≡1(mod q),所以

mkφq)≡1(mod q

[mkφq)]φp)≡1(mod q

mkφn)≡1(mod q

因此存在一整数r,使得mkφn)=1+rq,两边同乘以m=cp

mkφn)+1=m+rcpq=m+rcn

mkφn)+1≡m(mod n

所以cdm(mod n

【例5-5】 在RSA公钥密码体制中,选定p=7,q=13,取e=5,当明文m=10时,求出d的值和相应的密文。

【解析】 由于n=p×q=7×13=91

φn)=6×12=72

de≡1(mod 72)

可求得d=e=1≡29(mod 72)

所以

cme(mod n)≡105(mod 91)≡82(mod 91)

3.RSA的实现

(1)快速计算am(mod n

RSA的加密/解密运算归结为求一个整数的方幂,再取模。如计算x16,若直接计算,则需做15次乘法;若按平方运算,即求x2x4x8x16,则只需要4次乘法。

求模幂y=gx(mod p)并不困难。设x二进制表示为

978-7-111-37285-1-Chapter05-16.jpg(其中bi为0或1)

式中,若bi=0

978-7-111-37285-1-Chapter05-18.jpg

bi=1

978-7-111-37285-1-Chapter05-19.jpg

【例5-6】 求117(mod 17)。

【解析】 由于7=20+21+22

978-7-111-37285-1-Chapter05-20.jpg

117(mod 17)≡11×2×4(mod 17)≡88(mod 17)≡3(mod 17)

计算y=gx(mod p)的一种快速算法如下:

1)agbxy←1;

2)若b=0,则输出y,算法终止;

3)若b是正的偶整数,则

aa2(mod p),bb/2,转3)否则转4);

4)bb-1,yay(mod p),转2)。

【例5-7】 用快速算法求117(mod 17)。

【解析】 1)a←11,b←7,y←1

2)b←6,y←11

3)b←3,112≡2(mod 17),a←2

4)b←2,2×11≡5(mod 17),y←5

5)b←1,22≡4(mod 17),a←4

6)b←0,4×5≡3(mod 17),y←3

所以117(mod 17)≡3

(2)快速产生大素数

一般来说,判定一个数是素数比较难,但否定它是素数要容易得多。例如,在数列{1,2,…,100}中,偶素数只有2这一个,故偶数可排除。同样,最后一位为5的数也不是素数。剩下的数列中第一个数3便是素数。再在余下的数列中,除去5的倍数,余下的第一个数7是素数。再从剩下的数列中除去7的倍数,现在剩下的数中第一个数11是素数,依此类推。

这种常规的筛选法判定n是否为素数,必须除以小于或等于978-7-111-37285-1-Chapter05-22.jpg的所有的素数,如果除不尽,就确定n是素数。当n的位数为100位或更大时,实际上是不可行的。

2002年印度数学家Agrawal等人提出了一种确定性的多项式算法,能直接判定n是否为素数,判定过程如下:

1)r←2;

2)当rn,转3);

3)若gcd(nr)≠1,则判定n是合数;

4)若r是素数,qr-1的最大素数因子,若

否则转5);

5)rr+1,转2);

6)对978-7-111-37285-1-Chapter05-24.jpg,若(x-an≠(nn-a)mod(xr-1),则n是合数;

7)n是素数。

这里log是以e为底的自然对数

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈