非对称加密算法RSA原理

1. RSA算法介绍

RSA算法是非对称加密算法的一种,RSA算法的核心在于制作公钥和私钥的过程。本文章试图阐明两个问题:

  • RSA算法背后的数学基础是什么?
  • RSA算法中为什么私钥和公钥的使用没有顺序限制?

1.1 RSA算法流程简介

公钥制作方法:
  • 选取两个素数a,b,例如a=17、b=19
  • 求出c=a×bc=323
  • 求出d=(a-1)*(b-1)d=288
  • 选取与d没有公约数的e,例如e=11
  • 此时c=323、e=11作为公钥
私钥制作方法
  • 求出f,使其满足(f*e)÷d余1,即f*e≡1(mod d)【注意这个式子】
  • c=323、f=131作为私钥
公钥加密明文过程
  • 密文= ( ( 明文 ) e / c ) ((明文)^e/c) ((明文)e/c)的余数= ( 明文 ) e ( m o d c ) (明文)^e(modc) (明文)e(modc)
私钥解密密文过程
  • 明文= ( ( 密文 ) f / c ) ((密文)^f/c) ((密文)f/c)的余数= ( 密文 ) f ( m o d c ) (密文)^f(modc) (密文)f(modc)

1.2 RSA算法安全性保障

通过上述的RSA算法的加密与解密过程,可以得知,若想破解加密算法,必须求得私钥中的f,但是f是通过d得出的,进一步d又是通过所选取的两个素数得出的。当ab足够大时,解密几乎成为不可能。这就是RSA算法的安全性保障。

2. RSA算法中的数学原理

2.1 概念介绍

  • 乘法逆元:数学上的乘法逆元就是指只管的倒数,即a的逆元是1/a,也即与a相乘得1的数字。
  • 取模运算的乘法逆元:即对与整数a,与互质的数b作为模数,当整数x满足 a x   m o d b ≡ 1 ax \space mod b ≡ 1 ax modb1,称 x x xa为关于模b的逆元。

例如: 3 ∗ 6 / 3 % 7 3*6/3\%7 36/3%7,这种简单的运算,当然可以按照结合律,从左至右计算得出。但是在计算机世界中,运算数通常较大,需要基于同余理论进行取模。计算步骤就变成了如下形式:

  1. 3 ∗ 6 = 18 3*6=18 36=18
  2. 18 % 7 = 4 18\%7=4 18%7=4
  3. 4 / 3 4/3 4/3 由于无法整除,运算无法进行下去。

但引入取模运算中的乘法逆元概念后,可以求出除数3关于模数7的乘法逆元5(根据定义,5符合 3 ∗ 5 % 7 = 1 3*5\%7=1 35%7=1)所以,可以用乘5代替除以3。计算步骤转为如下形式:
4. 3 ∗ 6 = 18 3*6=18 36=18
5. 18 % 7 = 4 18\%7=4 18%7=4
6. 4 ∗ 5 = 20 4*5=20 45=20 就是将除3模7运算,转换成乘5模7,可以理解为在模7运算中,3和5互为“倒数”,所以除3和乘5是等同的

从中可以窥探一二,乘法逆元可以用来将除转换为乘,解决一些无法整除的问题。

2.2 乘法逆元在RSA算法中的体现

熟悉乘法逆元的概念后,细心的读者可以发现,在私钥制作过程中fe是互为模d的乘法逆元。那么整个加密过程就简化为:
设 明文=M ,密文=N;
N = M e % c N =M^e\%c N=Me%c
M = N f % c M=N^f\%c M=Nf%c
这里又出现了一个新得问题,之前f和e是互为模d得乘法逆元,这没有问题,但这里可不是模d,是模c,那么就需要引入第二个概念欧拉函数费马小定理以及欧拉定理

  • 费马小定理:如果p是一个质数,而整数a不是p的倍数,则有 a p − 1 ≡ 1 ( m o d p ) a^{p-1} ≡1(mod p) ap11(modp)
  • 欧拉函数: ϕ ( n ) \phi(n) ϕ(n),表示小于n的正整数中与n互质的数的数目。
  • 欧拉定理:如果两个正整数an互质,则n的欧拉函数可以得出 a ϕ ( n ) ≡ 1 ( m o d n ) a^{\phi(n)}≡1(modn) aϕ(n)1(modn);
    在RSA算法中:计算过程如下
创建公钥&私钥过程
  1. 选取两个素数a,b,例如a=17、b=19
  2. 计算ab的乘积 c=a*b=323c的二进制写法为101000011一共9位,即为密钥的长度为9
  3. 计算c的欧拉函数 ϕ ( c ) \phi(c) ϕ(c)c是质数,所以 ϕ ( c ) = c − 1 \phi(c)=c-1 ϕ(c)=c1 , c = a ∗ b c=a*b c=ab,最终得出 ϕ ( c ) = ( a − 1 ) ∗ ( b − 1 ) \phi(c)=(a-1)*(b-1) ϕ(c)=(a1)(b1),即d=288
  4. 随机挑选一个整数,与d互质,e=17
  5. 计算e对于 ϕ ( c ) \phi(c) ϕ(c)的乘法逆元f e f ≡ 1 ( m o d ϕ ( c ) ) ef≡1(mod \phi(c)) ef1(modϕ(c)) ;该式等价于 e f − 1 ≡ k ϕ ( c ) ef-1≡ k\phi(c) ef1kϕ(c);带入已知项,得出 17 f + 288 y ≡ 1 ( − k = y ) 17f+288y≡1(-k=y) 17f+288y1(k=y);利用“辗转相除法”得到f=131
  6. 将(323,17)封装乘公钥,(323,131)封装成私钥;
加密过程
  1. M e ≡ N ( m o d c ) M^{e}≡N(mod c) MeN(modc)
  2. N + k c + R e m a i n d e r = M e + R e m a i n d e r N+kc+Remainder=M^{e}+Remainder N+kc+Remainder=Me+Remainder
  3. N = M e − k c N=M^e-kc N=Mekc
解密过程

1. ( M e − k c ) f ≡ M ( m o d   c ) (M^{e}-kc)^f≡M(mod\space c) (Mekc)fM(mod c)
2.由于带有 k c kc kc的项都会被c整除,所以拆开后等同于下式;
3. M e f ≡ M ( m o d c ) M^{ef}≡M(mod c) MefM(modc)
4. 由于 e f ≡ 1 ( m o d   ϕ ( c ) ) ef≡1(mod\space \phi(c)) ef1(mod ϕ(c))
5. 所以 e f = h ϕ ( c ) + 1 ef=h \phi(c)+1 ef=hϕ(c)+1
6. M h ϕ ( c ) + 1 ≡ M ( m o d   c ) M^{h \phi(c)+1}≡M(mod\space c) Mhϕ(c)+1M(mod c)

分情况讨论
case1:如果M与c互质

M ϕ ( c ) ≡ 1 ( m o d   c ) M^{\phi(c)}≡1(mod \space c) Mϕ(c)1(mod c)
M ϕ ( c ) ≡ 1 + k c M^{\phi(c)}≡1+kc Mϕ(c)1+kc
( M ϕ ( c ) ) h ≡ ( 1 + k c ) h (M^{\phi(c)})^h≡(1+kc)^h (Mϕ(c))h(1+kc)h
展开后,除c余数同样为1,所以可得 ( M ϕ ( c ) ) h ≡ 1 ( m o d   c ) (M^{\phi(c)})^h≡1(mod\space c) (Mϕ(c))h1(mod c)
M h ϕ ( c ) + 1 ≡ M ( m o d   c ) M^{h \phi(c)+1}≡M(mod\space c) Mhϕ(c)+1M(mod c) # 同乘M

case 2: 如果M与c不是互质关系

当M与c不互质时(m < c),由于c=a * b, 那么 gcd(M,c) = a 或者 gcd(M,c)=b,假设M=la,且已知M<c,此时,M必然与c互质。
(1)根据费马小定理,M与c互质时,可以得到
M h ϕ ( a ) ≡ 1 ( m o d   a ) M^{h \phi(a)}≡1(mod\space a) Mhϕ(a)1(mod a)
( M a − 1 ) h ( b − 1 ) m o d a = 1 (M^{a-1})^{h(b-1)}mod a =1 (Ma1)h(b1)moda=1
( a − 1 ) ( b − 1 ) = ϕ ( c ) = d (a-1)(b-1)=\phi(c)=d (a1)(b1)=ϕ(c)=d e f = h ϕ ( c ) + 1 ef=h\phi(c)+1 ef=hϕ(c)+1 M e f − 1 m o d b = 1 M^{ef-1}mod b=1 Mef1modb=1
M e f − 1 = k b + 1 M^{ef-1}=kb+1 Mef1=kb+1
M e f = k b M + M M^{ef}=kbM+M Mef=kbM+M
之前假设M=la,所以 M e f = ( k b ) ( l a ) + ( l a ) = ( k l ) ( a b ) + M = ( k l ) ( c ) + M = M ( m o d c ) M^{ef}=(kb)(la)+(la)=(kl)(ab)+M=(kl)(c)+M=M(mod c) Mef=(kb)(la)+(la)=(kl)(ab)+M=(kl)(c)+M=M(modc)

说明

仅供参考,具体的证明过程紧扣“逆元”+“费马小定理”+”欧拉定理“即可。

致谢

特别鸣谢热心市民BIN

参考链接

RSA算法原理
密钥、公钥、私钥有点绕怎么办

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值