RSA算法原理

2 篇文章 0 订阅
2 篇文章 0 订阅

RSA算法原理

RSA加密算法是一种非对称加密算法。对称加密算法中加密和解密都得用同一个秘钥,必须保证秘钥不泄露才能保证数据的安全,加解密两方之间密钥的传递是存在安全隐患的。非对称加密算法中加密和解密使用不同的秘钥(公钥和私钥)。比如:甲方可以使用乙方给的公钥进行加密,乙方收到密文后使用自己的私钥进行解密。

RSA算法是一种基于大数分解的非对称加密算法,由已知加密密钥推导出解密密钥在计算上是不可行的。

相关数论知识

使用一个秘钥进行加密,使用另外一个秘钥可以解密成功,这对秘钥在数学上肯定存在某种联系。为了便于理解RSA算法,应该先了解一些相关的数论知识。

互质关系

如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互质关系。关于互质关系,有以下结论:

  • 任意两个质数构成互质关系,比如13和61。
  • 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10。
  • 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和57。
  • 1和任意一个自然数是都是互质关系,比如1和99。
  • p是大于1的整数,则p和p-1构成互质关系,比如57和56。
  • p是大于1的奇数,则p和p-2构成互质关系,比如17和15。

欧拉函数

在数论中,欧拉函数φ(n)表示小于n的正整数中与n互质的数的数目。例如φ(8)=4,因为1,3,5,7均和8互质。

欧拉函数的值可以使用下列等式进行计算:

φ(n)=n(11p1)(11p2)(11p2)...(11pr) φ ( n ) = n ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) ( 1 − 1 p 2 ) . . . ( 1 − 1 p r )

p1p2...prn p 1 p 2 . . . p r 为 n 的 所 有 质 因 数 。

当n为质数时,n只有一个质因子n,则 φ(n)=n(11n)=n1 φ ( n ) = n ( 1 − 1 n ) = n − 1

欧拉定理

欧拉定理:如果两个正整数a和n互质,则n的欧拉函数φ(n)可以让下面的等式成立。

aφ(n)1(mod n) a φ ( n ) ≡ 1 ( m o d   n )

上式表示a的φ(n)次方除以n余数为1,或者说 aφ(n)mod n=1 a φ ( n ) m o d   n = 1 。这里我们就不证明欧拉定理了,有兴趣的可以自己搜索相关资料。

费马小定理

费马小定理是欧拉定理的一个特殊情形,即 假设正整数a与质数p互质,因为质数p的φ(p)等于p-1,则欧拉定理可以写成:

ap11(mod p) a p − 1 ≡ 1 ( m o d   p )

这个就是费马小定理。

模反元素

如果两个正整数a和n互质,那么一定可以找到整数b,使得ab-1被n整除,或者说ab被n除的余数是1。

ab1(mod n) a b ≡ 1 ( m o d   n )

这里把b叫做a的模反元素。比如3和11互质,因为3x4-1可以被11整除,所以4是3的一个模反元素。模反元素不止一个。

欧拉定理可以来证明模反元素一定存在。

aφ(n)=aaφ(n)11(mod n) a φ ( n ) = a ∗ a φ ( n ) − 1 ≡ 1 ( m o d   n )

上式可见, aφ(n)1 a φ ( n ) − 1 就是a的模反元素。

RSA秘钥生成步骤

加密和解密过程可以通过下列式子来表示:

Cipher=PlainEmodNPlain=CipherDmodN C i p h e r = P l a i n E m o d N P l a i n = C i p h e r D m o d N

式中Plain为明文数据,Cipher为密文数据,那么公钥和私钥则为:

PublicKey=(E,N)PrivateKey=(D,N) P u b l i c K e y = ( E , N ) P r i v a t e K e y = ( D , N )

下来来计算秘钥中的E/D/N。

  1. 选择两个不相等的质数p&q,计算两者的乘积作为 N=pq N = p ∗ q 。(实际使用中这两个质数越大越难破解,而且可以使用多个质数,但是通常使用两个)。
  2. 计算N的欧拉函数值 φ(N)=(p1)(q1) φ ( N ) = ( p − 1 ) ( q − 1 )
  3. 选择一个整数e,条件是 1<e<φ(n) 1 < e < φ ( n ) ,且e与φ(n) 互质。
  4. 求得e关于 φ(n) φ ( n ) 的模反元素d, ed1(modφ(N)) e ∗ d ≡ 1 ( m o d φ ( N ) )
  5. 把N和e封装为公钥,把N和d封装成私钥。

RSA算法证明

实际数据验证

假设要使用公钥钥(N, e)对明文数据m进行加密,m必须是整数(计算机中字符串可以取ASCII值作为数字进行加解密),且m必须小于N。这里我们选择数字65作为明文, m=65 m = 65

1. 选择两个不相等的质数p和q,这里我们使用61和53两个数字作为p和q。

p=61,q=53 p = 61 , q = 53

2. 计算二者的乘积作为N。

N=pq=6153=3233 N = p ∗ q = 61 ∗ 53 = 3233

3. 计算N的欧拉函数

φ(N)=(p1)(q1)=6052=3120 φ ( N ) = ( p − 1 ) ( q − 1 ) = 60 ∗ 52 = 3120

4. 随机选一个整数e,满足条件 1<e<φ(n) 1 < e < φ ( n ) 且与 φ(n) φ ( n ) 互质

这里我们选择17作为e, e=17 e = 17

5. 计算e对于 φ(n) φ ( n ) 的模反元素,即使得ed被 φ(n) φ ( n ) 整除的余数为1

ed1(modφ(N))11d=1(mod3120) e ∗ d ≡ 1 ( m o d φ ( N ) ) ⇒ 11 ∗ d = 1 ( m o d 3120 )
这里不详细介绍模反元素的算法了,模反元素可能有多个,当d=2753时,公式成立,即 172753=46801=312015+1 17 ∗ 2753 = 46801 = 3120 ∗ 15 + 1 。所以 d=2753 d = 2753

6. 加密

使用公钥 (e,N)=(17,3233) ( e , N ) = ( 17 , 3233 ) 对数字65进行加密,Plain=65。
6517mod 3233=2790 65 17 m o d   3233 = 2790 ,即加密后的数字,即Cipher=2790。

7. 解密

使用私钥 (d,N)=(2753,3233) ( d , N ) = ( 2753 , 3233 )
27902753mod 3233=65 2790 2753 m o d   3233 = 65 。即解出明文为65,解密成功。

公式推导证明

我们来证明为什么用私钥解密,一定可以正确地得到明文m。也就是证明下面这个式子:

PlainCipherd(mod n) P l a i n ≡ C i p h e r d ( m o d   n )

因为,根据加密规则

CipherPlaine(mod n) C i p h e r ≡ P l a i n e ( m o d   n )

于是,Cipher可以写成下面的形式:

Cipher=Plainekn C i p h e r = P l a i n e − k n

将Cipher代入要我们要证明的那个解密规则:

(Plainekn)dmod nPlain ( P l a i n e − k n ) d m o d   n ≡ P l a i n

它等同于求证

Plained (mod n)Plain P l a i n e d   ( m o d   n ) ≡ P l a i n

由于

ed1(mod φ(n)) e d ≡ 1 ( m o d   φ ( n ) )

所以

ed=hφ(n)+1 e d = h φ ( n ) + 1

将 ed 代入:

Plainhφ(n)+1(mod n)Plain P l a i n h φ ( n ) + 1 ( m o d   n ) ≡ P l a i n

接下来,分成两种情况证明上面这个式子。

1. Plain与n互质。

根据欧拉定理,

Plainφ(n)1(mod n) P l a i n φ ( n ) ≡ 1 ( m o d   n )

得到

(Plainφ(n))hPlainPlain(mod n) ( P l a i n φ ( n ) ) h ∗ P l a i n ≡ P l a i n ( m o d   n )

  原式得到证明。

2. Plain与n不是互质关系。

由于n等于质数p和q的乘积,所以Plain必然等于 kp 或 kq。

以 Plain = kp 为例,考虑到这时k与q必然互质,则根据欧拉定理,下面的式子成立:

(kp)q11(mod q) ( k p ) q − 1 ≡ 1 ( m o d   q )

进一步得到

[(kp)q1]h(q1)kpkp(mod q) [ ( k p ) q − 1 ] h ( q − 1 ) ∗ k p ≡ k p ( m o d   q )

(kp)edkp(mod q) ( k p ) e d ≡ k p ( m o d   q )

将它改写成下面的等式

(kp)ed=tq+kp ( k p ) e d = t q + k p

这时t必然能被p整除,即 t=t’p

(kp)ed=tpq+kp ( k p ) e d = t ′ p q + k p

因为 Plain=kp,n=pq,所以

Plainedm(mod n) P l a i n e d ≡ m ( m o d   n )

原式得到证明。

参考

阮一峰 RSA算法原理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值