RSA算法是一种公开密钥密码体制,即使用不同的加密密钥与解密密钥,基于“由已知加密密钥推导出解密密钥在计算上是不可行的”这一思想。RSA算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作,RSA就是他们三人姓氏开头字母拼在一起组成的,1983年麻省理工学院在美国为RSA算法申请了专利。
RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,也并没有从理论上证明破译。不管怎样,分解 n n n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数 n n n必须选大些,视具体适用情况而定。目前512位的密钥被视为不安全的;768位的密钥不用担心受到除了国家安全管理(NSA)外的其他事物的危害;1024位的密钥几乎是安全的。
单向函数是一种具有下述特点的单射函数:对于每一个输入,函数值都容易计算,但是给出一个随机输入的函数值,算出原始输入却比较困难。也就是说,已知 x x x,我们很容易计算 f ( x ) f(x) f(x),但已知 f ( x ) f(x) f(x),却难于计算出 x x x。
这里,“难”定义成:即使世界上所有的计算机都用来计算,从 f ( x ) f(x) f(x)计算出 x x x也要花费数百万年的时间。
单向陷门函数是有一个陷门的一类特殊单向函数。单向陷门函数包含两个明显特征:一是单向性,二是存在陷门。
所谓单向性,也称不可逆性,即对于一个函数 y = f ( x ) y=f(x) y=f(x),若已知 x x x要计算出y很容易,但是已知y要计算出 x = f ( − 1 ) ( y ) x=f ^{(-1)} (y) x=f(−1)(y)则很困难。单向函数的命名就是源于其只有一个方向能够计算。所谓陷门,也被称为后门。对于单向函数,若存在一个 z z z使得知道 z z z则可以很容易地计算出 x = f ( − 1 ) ( y ) x=f ^{(-1)} (y) x=f(−1)(y),而不知道 z z z则无法计算出 x = f ( − 1 ) ( y ) x=f ^{(-1)} (y) x=f(−1)(y),则称函数 y = f ( x ) y=f(x) y=f(x)为单向陷门函数,而 z z z称为陷门。
同余:给定一个正整数m,如果两个整数 a a a和 b b b满足 a − b a-b a−b能够被 m m m整除,即 a − b m \frac{a-b}{m} ma−b得到一个整数,那么就称整数 a a a与 b b b对模 m m m同余,记作 a ≡ b ( m o d m ) a \equiv b(mod\;m) a≡b(modm)。
模运算:模运算在数学理论或者程序编写中都有着十分广泛的应用,判别一个数的奇偶问题、从模的幂计算到求解最大公约数问题、从中国剩余定理到凯撒密码问题…在这些数学理论中似乎到处都能看到模运算的身影,模运算与基本的四则运算有些相似,但是模n除法比传统的除法要有一些技巧,通常的法则是:在 g c d ( a , n ) = 1 gcd(a,n)=1 gcd(a,n)=1的情况下用 a ( m o d n ) a(mod\ n) a(mod n)去除。
例1
加减乘运算与基本的四则运算相似
解 x + 7 ≡ 3 ( m o d 17 ) x+7 \equiv 3(mod\ 17) x+7≡3(mod 17)
x ≡ 3 − 7 ≡ − 4 ≡ 13 ( m o d 17 ) x \equiv 3-7 \equiv -4 \equiv 13(mod\ 17) x≡3−7≡−4≡13(mod 17)
在进行除法运算的时候,应非常小心
设整数 a , b , c , n ( n ≠ 0 ) a,b,c,n(n\neq 0) a,b,c,n(n=0)且 g c d ( a , n ) = 1 。 gcd(a,n)=1。 gcd(a,n)=1。如果 a b ≡ a c ( m o d n ) ab \equiv ac(mod\ n) ab≡ac(mod n),那么 b ≡ c ( m o d n ) b \equiv c(mod\ n) b≡c(mod n);换句话说,如果 a a a和 n n n是互素的,我们可以在同余式两边同除以 a a a。
例2
解 2 x + 7 ≡ 3 ( m o d 17 ) 2x+7 \equiv 3(mod\ 17) 2x+7≡3(mod 17)
2 x ≡ 3 − 7 ≡ − 4 ( m o d 17 ) 2x≡3-7 \equiv -4(mod\ 17) 2x≡3−7≡−4(mod 17) 于是有 x ≡ − 2 ≡ 15 ( m o d 17 ) x \equiv -2 \equiv 15(mod\ 17) x≡−2≡15(mod 17)。因为 g c d ( 2 , 17 ) = 1 gcd(2,17)=1 gcd(2,17)=1,所以能够在同余式两边同除以2。
例3
解 5 x + 6 ≡ 13 ( m o d 11 ) 5x+6 \equiv 13(mod\ 11) 5x+6≡13(mod 11)
5 x ≡ 13 − 6 ≡ 7 ( m o d 11 ) 5x≡13-6 \equiv 7(mod\ 11) 5x≡13−6≡7(mod 11) 此时虽然有 g c d ( 5 , 11 ) = 1 gcd(5,11)=1 gcd(5,11)=1,但是同余式右边不能够被5整除
注意到 7 ≡ 18 ≡ 29 ≡ 40 ≡ ⋯ ( m o d 11 ) 7 \equiv 18 \equiv 29 \equiv 40 \equiv \cdots (mod\ 11) 7≡18≡29≡40≡⋯(mod 11),因此可以转换为 5 x ≡ 40 ( m o d 11 ) 5x \equiv 40(mod\ 11) 5x≡40(mod 11) → \rightarrow →可以得到结果 x ≡ 8 ( m o d 11 ) x \equiv 8(mod\ 11) x≡8(mod 11)
大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,那么这个数就称为素数,否则称为合数。
互质数为数学中的一种概念,即两个或多个整数的公因数只有1的非零自然数。
当三个或三个以上自然数互质时会出现两种不同的情况:
①它们之间两两互质,例如2,3,5
②它们之间不是两两互质,例如6,8,9。
判别互素数的方法有很多种,例如:
①两个素数一定是互素数。例如,2和13。
②一个素数如果不能整除另一个合数,这两个数为互质数。例如,29和4。
③1既不是素数也不是合数,所以它和任何一个自然数组合在一起都是互素数。例如1和72。
④相邻的两个自然数是互质数。例如15与16。
⑤相邻的两个奇数是互质数。例如17与19。
⑥大数是素数的两个数是互质数。例如97与88。
⑦小数是素数,大数不是小数的倍数,此时两个数是互质数。例如7和16。
⑧两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。例如357与715。
⑨两个数都是合数(二数差又较小),这两个数的差的所有质因数都不是小数的约数,这两个数是互质数。例如462与221。
⑩2和任何奇数是互素数。例如2和43。
如果 p p p是一个质数,而整数 a a a不是 p p p的倍数,则有 a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1(mod\ p) ap−1≡1(mod p)
例4
令a=3,p=5
此时3不是5的倍数
因此 a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1(mod\ p) ap−1≡1(mod p) → \rightarrow → 3 5 − 1 ≡ 1 ( m o d 5 ) 3^{5-1} \equiv 1(mod\ 5) 35−1≡1(mod 5) 即 81 ≡ 1 ( m o d 5 ) 81 \equiv 1(mod\ 5) 81≡1(mod 5)
在数论中,对于正整数 n n n,欧拉函数 φ ( n ) φ(n) φ(n)是小于或等于 n n n的正整数中与 n n n互质的数的个数。
通式: φ ( n ) = n ∏ i = 1 n ( 1 − 1 p i ) φ(n)=n\prod_{i=1}^{n}(1-\frac{1}{p_i} ) φ(n)=n∏i=1n(1−pi1)(其中 p 1 , p 2 ⋯ p n p_1,p_2⋯p_n p1,p2⋯pn为n的所有质因数,n是不为0的整数)
特殊性质:当 n n n为质数时, φ ( n ) = n − 1 φ(n)=n-1 φ(n)=n−1
由于欧拉函数是积性函数,所以如果存在两个正整数 m , n m,n m,n,当 m m m与 n n n互质时,则 φ ( m ⋅ n ) = φ ( m ) ⋅ φ ( n ) = ( m − 1 ) ⋅ ( n − 1 ) φ(m\cdot n)=φ(m)\cdot φ(n)=(m-1)\cdot(n-1) φ(m⋅n)=φ(m)⋅φ(n)=(m−1)⋅(n−1)
例5
令n=120,此时120的因数有1、2、3、4、5、6、8、10、12、15、20、24、30、40、60、120,共16个。
但其中只有2、3、5是质数,因此 φ ( 120 ) = 120 ⋅ ( 1 − 1 2 ) ⋅ ( 1 − 1 3 ) ⋅ ( 1 − 1 5 ) = 32 φ(120)=120\cdot (1-\frac{1}{2})\cdot (1-\frac{1}{3})\cdot (1-\frac{1}{5})=32 φ(120)=120⋅(1−21)⋅(1−31)⋅(1−51)=32
例6
令n=10,此时n可分解为两个不同的素数的乘积,即2×5。此时有 φ ( 2 ⋅ 5 ) = φ ( 2 ) ⋅ φ ( 5 ) = ( 2 − 1 ) ⋅ ( 5 − 1 ) = 4 φ(2\cdot 5)=φ(2)\cdot φ(5)=(2-1)\cdot(5-1)=4 φ(2⋅5)=φ(2)⋅φ(5)=(2−1)⋅(5−1)=4
如果两个正整数 a a a和 n n n互质,则 a φ ( n ) ≡ 1 ( m o d n ) a^{φ(n)} \equiv 1(mod\ n) aφ(n)≡1(mod n)
欧拉定理的推论:若正整数 a , n a,n a,n互质,那么对于任意正整数 b b b,有 a b ≡ a b ( m o d φ ( n ) ) ( m o d n ) a^b \equiv a^{b(mod\ φ(n))} (mod\ n) ab≡ab(mod φ(n))(mod n)
例7
令a=3,n=7,此时a和n互质。由于n是质数, φ ( 7 ) = 7 − 1 = 6 φ(7)=7-1=6 φ(7)=7−1=6
a φ ( n ) ≡ 1 ( m o d n ) a^{φ(n)} \equiv 1(mod\ n) aφ(n)≡1(mod n) → \rightarrow → 3 φ ( 7 ) ≡ 1 ( m o d 7 ) 3^{φ(7)} \equiv 1(mod\ 7) 3φ(7)≡1(mod 7) 即 729 ≡ 1 ( m o d 7 ) 729 \equiv 1(mod\ 7) 729≡1(mod 7)
例8
接例5中的数据,令 b = 13 b=13 b=13。则 a b ≡ a b ( m o d φ ( n ) ) ( m o d n ) a^b \equiv a^{b(mod\ φ(n))} (mod\ n) ab≡ab(mod φ(n))(mod n) → \rightarrow → 3 13 ≡ 3 13 ( m o d 6 ) ( m o d 7 ) 3^{13} \equiv 3^{13(mod\ 6)} (mod\ 7) 313≡313(mod 6)(mod 7) 即 3 13 ≡ 3 ( m o d 7 ) 3^{13} \equiv 3 (mod\ 7) 313≡3(mod 7)
如果 a 、 b a、b a、b是整数,那么一定存在整数 x 、 y x、y x、y使得 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)。换句话说,如果 a x + b y = m ax+by=m ax+by=m有解,那么 m m m一定是 g c d ( a , b ) gcd(a,b) gcd(a,b)的若干倍。因此可以通过这种方法来判断一个式子是否有解。但通常情况下我们并不仅仅想要知道有没有解,而是想要知道在有解的情况下这个解到底是多少。于是我们需要用到扩展欧几里得算法对这个式子进行求解。
欧几里得算法又称辗转相除法,是指用于计算两个非负整数 a , b a,b a,b的最大公约数。
定理: g c d ( a , b ) = g c d ( b , a ( m o d b ) ) gcd(a,b)=gcd(b,a(mod\ b)) gcd(a,b)=gcd(b,a(mod b))
例9
求解482和1180的最大公约数gcd(482,1180)
1180=2×482+216
482=2×216+50
216=4×50+16
50=3×16+2
16=8×2+0
当最后一个式子余数为0时结束计算,则 g c d ( 482 , 1180 ) = 2 gcd(482,1180)=2 gcd(482,1180)=2
欧几里得算法有以下两个重要的方面:
1.它不需要因式分解;
2.速度快。
扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展。
除了计算 a 、 b a、b a、b两个整数的最大公约数,此算法还能找到整数 x 、 y x、y x、y(其中一个很可能是负数)。通常谈到最大公因子时, 我们都会提到一个非常基本的事实: 给予二整数 a a a与 b b b, 必存在有整数 x x x与 y y y使得 a x + b y = g c d ( a , b ) ax + by = gcd(a,b) ax+by=gcd(a,b)。有两个数 a , b a,b a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)的整数解。
原理:令 g c d ( a , b ) = a x 1 + b y 1 , g c d ( b , a ( m o d b ) ) = b x 2 + ( a ( m o d b ) ) y 2 gcd(a,b)=ax_1+by_1,gcd(b,a(mod\ b))=bx_2+(a(mod\ b))y_2 gcd(a,b)=ax1+by1,gcd(b,a(mod b))=bx2+(a(mod b))y2。
根据欧几里得 g c d ( a , b ) = g c d ( b , a ( m o d b ) ) gcd(a,b)=gcd(b,a(mod\ b)) gcd(a,b)=gcd(b,a(mod b)),则 a x 1 + b y 1 = b x 2 + ( a ( m o d b ) ) y 2 ax_1+by_1=bx_2+(a(mod\ b))y_2 ax1+by1=bx2+(a(mod b))y2。
由于 a ( m o d b ) = a − [ a b ] ⋅ b a(mod\ b)=a-[\frac{a}{b}]\cdot b a(mod b)=a−[ba]⋅b,有 a x 1 + b y 1 = b x 2 + ( a − [ a b ] ⋅ b ) y 2 ax_1+by_1=bx_2+(a-[\frac{a}{b}]\cdot b) y_2 ax1+by1=bx2+(a−[ba]⋅b)y2 。
变形为 a x 1 + b y 1 = a y 2 + b ( x 2 − [ a b ] ⋅ y 2 ) ax_1+by_1=ay_2+b(x_2-[\frac{a}{b}]\cdot y_2 ) ax1+by1=ay2+b(x2−[ba]⋅y2) (其中“[ ]”表示取整函数)
根据多项式恒等定理有: x 1 = y 2 , y 1 = x 2 − [ a b ] ⋅ y 2 x_1=y_2,y_1=x_2-[\frac{a}{b}]\cdot y_2 x1=y2,y1=x2−[ba]⋅y2。
可以看出, x 1 , y 1 x_1,y_1 x1,y1的值由 x 2 , y 2 x_2,y_2 x2,y2求出,这种求解思想称之为递归。
此时一定会存在 b = 0 b=0 b=0,使整个递归算法结束。
例10
求整数x和y,使得 3427 x + 101 y = g c d ( 3427 , 101 ) 3427x+101y=gcd(3427,101) 3427x+101y=gcd(3427,101)
(此时3427与101互质, g c d ( 3427 , 101 ) = 1 gcd(3427,101)=1 gcd(3427,101)=1,即求解 3427 x + 101 y = 1 3427x+101y=1 3427x+101y=1)
3427=33×101+94 商为33, q 1 = 33 q_1=33 q1=33
101=1×94+7 商为1, q 2 = 1 q_2=1 q2=1
94=13×7+3 商为13, q 3 = 13 q_3=13 q3=13
7=2×3+1 商为2, q 4 = 2 q_4=2 q4=2
递归法求解
按照 x 0 = 1 , x 1 = 0 , x j = − q j − 1 ⋅ x j − 1 + x j − 2 ; y 0 = 0 , y 1 = 1 , y j = − q j − i ⋅ y j − 1 + y j − 2 x_0=1,x_1=0,x_j=-q_{j-1}\cdot x_{j-1}+x_{j-2};y_0=0,y_1=1,y_j=-q_{j-i}\cdot y_{j-1}+y_{j-2} x0=1,x1=0,xj=−qj−1⋅xj−1+xj−2;y0=0,y1=1,yj=−qj−i⋅yj−1+yj−2进行计算
!! q 1 , q 2 , ⋯ , q n q_1,q_2,⋯,q_n q1,q2,⋯,qn分别为商
x 2 = − q 1 ⋅ x 1 + x 0 = − 33 ⋅ 0 + 1 = 1 ; y 2 = − q 1 ⋅ y 1 + y 0 = − 33 ⋅ 1 + 0 = − 33 x_2=-q_1\cdot x_1+x_0=-33\cdot 0+1=1;y_2=-q_1\cdot y_1+y_0=-33\cdot 1+0=-33 x2=−q1⋅x1+x0=−33⋅0+1=1;y2=−q1⋅y1+y0=−33⋅1+0=−33
x 3 = − q 2 ⋅ x 2 + x 1 = ( − 1 ) ⋅ 1 + 0 = − 1 ; y 3 = − q 2 ⋅ y 2 + y 1 = − 1 ⋅ ( − 33 ) + 1 = 34 x_3=-q_2\cdot x_2+x_1=(-1)\cdot 1+0=-1;y_3=-q_2\cdot y_2+y_1=-1\cdot (-33)+1=34 x3=−q2⋅x2+x1=(−1)⋅1+0=−1;y3=−q2⋅y2+y1=−1⋅(−33)+1=34
x 4 = − q 3 ⋅ x 3 + x 2 = − 13 ⋅ ( − 1 ) + 1 = 14 ; y 4 = − q 3 ⋅ y 3 + y 2 = − 13 ⋅ 34 + ( − 33 ) = − 475 x_4=-q_3\cdot x_3+x_2=-13\cdot (-1)+1=14;y_4=-q_3\cdot y_3+y_2=-13\cdot 34+(-33)=-475 x4=−q3⋅x3+x2=−13⋅(−1)+1=14;y4=−q3⋅y3+y2=−13⋅34+(−33)=−475
x 5 = − q 4 ⋅ x 4 + x 3 = − 2 ⋅ 14 + ( − 1 ) = − 29 ; y 5 = − q 4 ⋅ y 4 + y 3 = − 2 ⋅ ( − 475 ) + 34 = 984 x_5=-q_4\cdot x_4+x_3=-2\cdot 14+(-1)=-29;y_5=-q_4\cdot y_4+y_3=-2\cdot (-475)+34=984 x5=−q4⋅x4+x3=−2⋅14+(−1)=−29;y5=−q4⋅y4+y3=−2⋅(−475)+34=984
解得 x = − 29 , y = 984 x=-29,y=984 x=−29,y=984
例11
接例7的数据,求整数 x x x和 y y y,使得 482 x + 1180 y = g c d ( 482 , 1180 ) 482x+1180y=gcd(482,1180) 482x+1180y=gcd(482,1180)
(此时482与1180不互质,根据例7中的计算结果, g c d ( 482 , 1180 ) = 2 gcd(482,1180)=2 gcd(482,1180)=2,即求解 482 x + 1180 y = 2 482x+1180y=2 482x+1180y=2)
2=50-3×16
16=216-4×50
50=482-2×216
216=1180-2×482
非递归法求解
将式子倒推回去有: 2 = 50 − 3 × 16 = 50 − 3 × ( 216 − 4 × 50 ) = ( 482 − 2 × 216 ) − 3 × [ ( 1180 − 2 × 482 ) − 4 × ( 482 − 2 × 216 ) ] = [ 482 − 2 × ( 1180 − 2 × 482 ) ] − 3 × ( 1180 − 2 × 482 ) − 4 × [ 482 − 2 × ( 1180 − 2 × 482 ) ] = 71 × 482 − 29 × 1180 2=50-3×16=50-3×(216-4×50)=(482-2×216)-3×[(1180-2×482)-4×(482-2×216)]=[482-2×(1180-2×482)]-3×{(1180-2×482)-4×[482-2×(1180-2×482)]}=71×482-29×1180 2=50−3×16=50−3×(216−4×50)=(482−2×216)−3×[(1180−2×482)−4×(482−2×216)]=[482−2×(1180−2×482)]−3×(1180−2×482)−4×[482−2×(1180−2×482)]=71×482−29×1180
解得 x = 71 , y = − 29 x=71,y=-29 x=71,y=−29
如果两个正整数 a a a和 n n n互质,那么一定可以找到整数 b b b,使得 a b − 1 ab-1 ab−1被 n n n整除,或者说 a b ab ab被 n n n除的余数是1,即满足 a b ≡ 1 ( m o d n ) ab≡1(mod n) ab≡1(modn)。这时, b b b就叫做 a a a的“模反元素”。
模反元素可通过两种方法进行求解:
①用费马小定理求解:
a p − 1 ≡ 1 ( m o d p ) → a ⋅ a p − 2 ≡ 1 ( m o d p ) a^{p-1} \equiv 1(mod\ p) \rightarrow a\cdot a^{p-2} \equiv 1(mod\ p) ap−1≡1(mod p)→a⋅ap−2≡1(mod p),即a的模反元素为 a p − 2 a^{p-2} ap−2
例12
接例2中的数据
3 5 − 1 = 3 ⋅ 3 5 − 2 ≡ 1 ( m o d 5 ) 3^{5-1}=3\cdot 3^{5-2} \equiv 1(mod\ 5) 35−1=3⋅35−2≡1(mod 5),即3的模反元素为27
②扩展欧几里得算法求解:
a b ≡ 1 ( m o d n ) ab≡1(mod\ n) ab≡1(mod n)等价于 a x + n y = 1 ax+ny=1 ax+ny=1,用扩展欧几里得算法求得一组解,当求得的解为负数时,通过计算 ( b + n ) m o d n (b+n)mod\ n (b+n)mod n可以将它转换为整数。
线性方程同余组 ( S ) = { x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) ⋮ x ≡ a n ( m o d m n ) (S)= \begin{cases} x≡a_1(mod\ m_1)\\ x≡a_2(mod\ m_2)\\ \ \ \ \ \ \ \ \ \ \ \vdots \\x≡a_n(mod\ m_n) \end{cases} (S)=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧x≡a1(mod m1)x≡a2(mod m2) ⋮x≡an(mod mn)
假设整数 m 1 , m 2 , ⋯ , m n m_1,m_2,\cdots,m_n m1,m2,⋯,mn两两互质,则对任意的整数: a 1 , a 2 , ⋯ , a n a_1,a_2,\cdots,a_n a1,a2,⋯,an,方程组 ( S ) (S) (S)有解,并且通式可以用以下方式构造得到:
例13
在中国古代著名数学著作《孙子算经》中,有一道题目叫做“物不知数",原文如下: 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何? 即,一个整数除以三余二,除以五余三,除以七余二,求这个整数。
中国数学家秦九韶于1247年做出了完整的解答,口诀如下: 三人同行七十希,五树梅花廿一支,七子团圆正半月,除百零五使得知。
使用中国剩余定理来求解上面的“物不知数”问题,便可以理解口诀中的数字含义。
线性方程同余组 ( S ) = { x ≡ 2 ( m o d 3 ) x ≡ 3 ( m o d 5 ) x ≡ 2 ( m o d 7 ) (S)= \begin{cases} x \equiv 2(mod\ 3)\\ x \equiv 3(mod\ 5)\\x \equiv 2(mod\ 7) \end{cases} (S)=⎩⎪⎨⎪⎧x≡2(mod 3)x≡3(mod 5)x≡2(mod 7)
其中 a 1 = 2 , a 2 = 3 , a 3 = 2 , m 1 = 3 , m 2 = 5 , m 3 = 7 a_1=2,a_2=3,a_3=2,m_1=3,m_2=5,m_3=7 a1=2,a2=3,a3=2,m1=3,m2=5,m3=7
- M = ∏ i = 1 n m i = 3 × 5 × 7 = 105 M=\prod_{i=1}^nm_i =3×5×7=105 M=∏i=1nmi=3×5×7=105 ,由 M i = M m i M_i=\frac{M}{m_i} Mi=miM,分别求得 M 1 = 105 3 = 35 , M 2 = 105 5 = 21 , M 3 = 105 7 = 15 M_1=\frac{105}{3}=35,M_2=\frac{105}{5}=21,M_3=\frac{105}{7}=15 M1=3105=35,M2=5105=21,M3=7105=15。
- 由 M i ⋅ t i ≡ 1 ( m o d m i ) M_i\cdot t_i \equiv 1(mod\ m_i ) Mi⋅ti≡1(mod mi),分别求得 t 1 = 2 , t 2 = 1 , t 3 = 1 t_1=2,t_2=1,t_3=1 t1=2,t2=1,t3=1。
- 方程组(S)的通解形式为 x = k M + ∑ i = 1 n a i t i M i = k ⋅ 105 + 233 , k ∈ Z x=kM+\sum_{i=1}^na_it_i M_i=k\cdot 105+233,k∈Z x=kM+∑i=1naitiMi=k⋅105+233,k∈Z 。当k取值为-2时,有最小正整数解 x = 23 x=23 x=23。
蒙哥马利(Montgomery)幂模运算是快速计算 a b ( m o d n ) a^b(mod n) ab(modn)的一种算法,是RSA加密算法的核心之一。
设 b b b的二进制数字表示为 b r − 1 ⋯ b 1 b 0 b_{r-1} \cdots b_1b_0 br−1⋯b1b0,即 b = b 0 + b 1 ⋅ 2 + . . . + b r − 1 ⋅ 2 r − 1 b=b_0+b_1\cdot 2+...+b_{r-1}\cdot 2^{r-1} b=b0+b1⋅2+...+br−1⋅2r−1,则有 a b ≡ a b 0 × ( a 2 ) b 1 × ⋯ × ( a 2 r − 1 ) b r − 1 ( m o d n ) a^b \equiv a^{b_0}×{(a^2)}^{b_1}× \cdots ×{({a^2}^{r-1})}^{b_{r-1}}(mod n) ab≡ab0×(a2)b1×⋯×(a2r−1)br−1(modn)。令 A 0 = a , A i ≡ ( A i − 1 ) 2 ( m o d n ) , i = 1 , 2 , ⋯ , r − 1 A_0=a,A_i \equiv {(A_{i-1})}^2(mod n),i=1,2, \cdots ,r-1 A0=a,Ai≡(Ai−1)2(modn),i=1,2,⋯,r−1,则有 a b ≡ ( A 0 ) b 0 × ( A 1 ) b 1 × . . . × ( A r − 1 ) b r − 1 ( m o d n ) a^b \equiv (A_0)^{b_0}×(A_1)^{b_1}×...×(A_{r-1})^{b_{r-1}}(modn) ab≡(A0)b0×(A1)b1×...×(Ar−1)br−1(modn),其中,在这里 A i b i = { A i , 若 b i = 1 1 , 若 b 0 = 0 , 其 中 i = 0 , 1 , ⋯ , r − 1 {A_i}^{b_i}=\left\{ \begin{array}{c} A_i,若b_i=1\\ 1,若b_0=0\end{array}\right.,其中i=0,1, \cdots ,r-1 Aibi={Ai,若bi=11,若b0=0,其中i=0,1,⋯,r−1
例14
求 2 13 ( m o d 11 ) 2^{13}(mod\;11) 213(mod11),那么 a = 2 , b = 13 , n = 11 。 a=2,b=13,n=11。 a=2,b=13,n=11。
13的二进制数字表示为1101,则 b 0 = 1 , b 1 = 0 , b 2 = 1 , b 3 = 1 , i = 0 , 1 , 2 , 3 b_0=1,b_1=0,b_2=1,b_3=1,i=0,1,2,3 b0=1,b1=0,b2=1,b3=1,i=0,1,2,3。
A 0 = 2 , A 1 ≡ 2 2 ( m o d 11 ) = 4 , A 2 ≡ 4 2 ( m o d 11 ) = 5 , A 3 ≡ 5 2 ( m o d 11 ) = 3 A_0=2,A_1 \equiv 2^2(mod\;11)=4,A_2 \equiv 4^2(mod\;11)=5,A_3 \equiv 5^2(mod\;11)=3 A0=2,A1≡22(mod11)=4,A2≡42(mod11)=5,A3≡52(mod11)=3
2 13 ≡ ( 2 1 × 4 0 × 5 1 × 3 1 ) ( m o d 11 ) ≡ 30 ( m o d 11 ) = 8 2^{13} \equiv (2^1×4^0×5^1×3^1)(mod\;11) \equiv 30(mod\;11)=8 213≡(21×40×51×31)(mod11)≡30(mod11)=8,即 2 13 ( m o d 11 ) 2^{13}(mod\;11) 213(mod11)的最终结果为8
①随机选择两个不相等的质数 p p p和 q q q。
②计算 p p p和 q q q的乘积n以及n的欧拉函数 φ ( n ) φ(n) φ(n)。
③随机选择一个整数 e e e,( 1 < e < φ ( n ) , 且 g c d ( e , φ ( n ) = 1 1< e < φ(n),且gcd(e,φ(n)=1 1<e<φ(n),且gcd(e,φ(n)=1 )
④计算 e e e对于 φ ( n ) φ(n) φ(n)的模反元素 d d d。
⑤将 n n n和 e e e封装成公钥, n n n和 d d d封装成私钥。
假设要加密的明文信息为 M M M,加密的密文信息为 C C C,那么加密时用 M e ( m o d n ) M^e(mod\;n) Me(modn),解密时用 C d ( m o d n ) C^d(mod\;n) Cd(modn)。
例
①取 p = 53 , q = 61 p=53,q=61 p=53,q=61。
② n = p × q = 53 × 61 = 3233 n=p×q=53×61=3233 n=p×q=53×61=3233
φ ( n ) = ( p − 1 ) ⋅ ( q − 1 ) = 52 × 60 = 3120 φ(n)=(p-1)\cdot (q-1)=52×60=3120 φ(n)=(p−1)⋅(q−1)=52×60=3120
③取 e = 17 e=17 e=17
④ e ⋅ d ≡ 1 m o d φ ( n ) e\cdot d≡1 mod\;φ(n) e⋅d≡1modφ(n)–>即 17 ⋅ d + 3120 ⋅ y = 1 17\cdot d+3120\cdot y=1 17⋅d+3120⋅y=1
解得 d = 2753 , y = − 15 d=2753,y=-15 d=2753,y=−15
⑤所以公钥就是 ( 3233 , 17 ) (3233,17) (3233,17),私钥就是 ( 3233 , 2753 ) (3233, 2753) (3233,2753)
取 M = 65 M=65 M=65
加密: 6 5 17 ( m o d 3233 ) = 2790 65^{17}(mod\;3233)=2790 6517(mod3233)=2790,解密: 279 0 2753 ( m o d 3233 ) = 65 2790^{2753}(mod\;3233)=65 27902753(mod3233)=65