Asutorufaのブログ

こんにちは

RSA加密

发布于 2022-08-14|更新于: 2022-08-14|分类 Crypto

质数

质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。

来自 https://zh.wikipedia.org/wiki/质数

互质

互质是公约数只有1的两个整数,也可记为 gcd(a,b)=1\gcd(a,b)=1,叫做互质整数。

欧拉

在数论中,对正整数 nn,欧拉函数 φ(n)\varphi(n) 是小于等于 nn 的正整数中与 nn 互质的数的数目。此函数以其首名研究者欧拉命名,它又称为 φ\varphi 函数(由高斯所命名)或是欧拉总计函数(totient function,由西尔维斯特所命名)。

来自 https://zh.wikipedia.org/wiki/欧拉函数

例如 1111 的欧拉函数:

1111 小且与 1111 互质的正整数有:1,2,3,4,5,6,7,8,9,101,2,3,4,5,6,7,8,9,10

φ(11)=10=111\varphi(11)=10=11-1

由上例子同时可知,质数的欧拉函数是它本身减 11

φ(N)=N1\varphi(N)=N-1

同时欧拉函数是积性函数,即是说若 m,nm,n 互质,则

φ(mn)=φ(m)φ(n)\varphi(mn)=\varphi(m)\varphi(n)

欧几里得算法

也叫辗转相除法,用来找出两个数的最大公约数 gcd(a,b)\gcd(a,b)
商记作 qiq_i,余数记作 rir_i,欧几里得算法可写为

ri1=qiri+ri+1r_{i-1}=q_i r_i+r_{i+1}

eg1: 寻找160, 11 的最大公约数

ri1=qiri+ri+1r_{i-1}=q_i r_i+r_{i+1} qiq_i 余数 rir_i
160
11
160=14×11+6160=14\times 11+6 14 6
11=1×6+511=1\times 6+5 1 5
6=1×5+16=1\times 5+1 1 1
5=5×1+05=5\times 1+0 5 0

可得最大公约数为 11,同时因为 gcd(160,11)=1\gcd(160,11)=1,所以 160,11160,11 互质。

eg2: 寻找 160, 122 的最大公约数

ri1=qiri+ri+1r_{i-1}=q_i r_i+r_{i+1} qiq_i 余数 rir_i
160
122
160=1×122+38160=1\times 122+38 1 38
122=3×38+8122=3\times 38+8 3 8
38=4×8+638=4\times 8+6 4 6
8=1×6+28=1\times 6+2 1 2
6=3×2+06=3\times 2+0 3 0

所以最大公约数为 22

模反元素

模逆元也称为模倒数,或者模逆元。<- 模反元素
如果两个正整数 aann 互质,那么一定可以找到整数 bb,使得 ab1ab-1nn 整除,或者说

ab1(modn)ab\equiv 1\pmod n

这时,bb 就叫做 aa 的“模反元素”。

33 关于 2020 的模反元素是 77,因为

3×71(mod20)3\times 7\equiv 1\pmod{20}

https://zh.wikipedia.org/wiki/模反元素

拓展欧几里得算法

计算欧几里得算法时,同时多计算

si1=qisi+si+1,ti1=qiti+ti+1s_{i-1}=q_i s_i+s_{i+1},\quad t_{i-1}=q_i t_i+t_{i+1}

初始分别为 s0=1,s1=0s_0=1,s_1=0t0=0,t1=1t_0=0,t_1=1
可以寻找出满足

ax+by=gcd(x,y)ax+by=\gcd(x,y)

a,ba,b,同时还可用来求模乘逆元。

eg1: 寻找160, 11 的最大公约数

ri1=qiri+ri+1r_{i-1}=q_i r_i+r_{i+1} qiq_i 余数 rir_i si1=qisi+si+1s_{i-1}=q_i s_i+s_{i+1} sis_i ti1=qiti+ti+1t_{i-1}=q_i t_i+t_{i+1} tit_i
160 1 0
11 0 1
160=14×11+6160=14\times 11+6 14 6 1=14×0+11=14\times 0+1 1 0=14×1140=14\times 1-14 -14
11=1×6+511=1\times 6+5 1 5 0=1×110=1\times 1-1 -1 1=1×(14)+151=1\times(-14)+15 15
6=1×5+16=1\times 5+1 1 1 1=1×(1)+21=1\times(-1)+2 2 14=1×1529-14=1\times 15-29 -29
5=5×1+05=5\times 1+0 5 0 1=5×211-1=5\times 2-11 11 15=5×(29)+13015=5\times(-29)+130 130

可得

gcd(160,11)=1=2×160+(29)×11=320319\gcd(160,11)=1=2\times 160+(-29)\times 11=320-319

所以:

  • 22160160 关于 1111 的模乘逆元。
  • 131=29+160131=-29+1601111 关于 160160 的模乘逆元,因为 29-29 为负数,需要加上模变成正数。

欧拉定理

在数论中,欧拉定理(也称费马-欧拉定理或欧拉 φ\varphi 函数定理)是一个关于同余的性质。欧拉定理表明,若 n,an,a 为正整数,且 n,an,a 互素(即 gcd(a,n)=1\gcd(a,n)=1),则

aφ(n)1(modn)a^{\varphi(n)}\equiv 1\pmod n

aφ(n)a^{\varphi(n)}11 在模 nn 下同余。欧拉定理得名于瑞士数学家莱昂哈德·欧拉。

gcd\gcd: greatest common divisor(最大公约数)

RSA

  1. 随意选择两个大的质数 ppqq,且 pqp\ne q,计算 N=pqN=pq
  2. NN 的欧拉函数,r=φ(N)=φ(p)φ(q)=(p1)(q1)r=\varphi(N)=\varphi(p)\varphi(q)=(p-1)(q-1)
  3. 选择一个小于 rr 的整数 ee,使 gcd(e,r)=1\gcd(e,r)=1。并求得 ee 关于 rr 的模反元素,命名为 dd,即 ed1(modr)ed\equiv 1\pmod r
  4. (N,e)(N,e) 是公钥,(N,d)(N,d) 是私钥。
  5. 加密原文 mm,得到密文 xme(modN)x\equiv m^e\pmod N
  6. 解密公式为 mxd(modN)m\equiv x^d\pmod N
    只能加密比 NN 小的数字,比 NN 大的数字无法加密。

eg:

选择两个质数3,11。

N=3×11=33N=3\times 11=33

r=φ(N)=φ(3)φ(11)=(31)(111)=20r=\varphi(N)=\varphi(3)\varphi(11)=(3-1)(11-1)=20

选择一个小于 rr 且与 rr 互质的整数 e=3e=3,求得 33 关于 2020 的模反元素 d=7d=7
得到公钥 (33,3)(33,3),私钥 (33,7)(33,7)

加密数字 2424

24330(mod33)24^3\equiv 30\pmod{33}

获得加密后的密文 3030
对密文 3030 解密:

30724(mod33)30^7\equiv 24\pmod{33}

获得解密后的明文 2424

0 条评论

©2026Asutorufa