欧拉定理, RSA计算实践
数学符号
N: 自然数. The set of natural numbers (the positive integers Z-+ 1, 2, 3, ...), denoted N, also called the whole numbers. Like whole numbers, there is no general agreement on whether 0 should be included in the list of natural numbers.
Z or I: 整数. The doublestruck capital letter Z, denotes the ring of integers ..., -2, -1, 0, 1, 2, .... The symbol derives from the German word Zahl, meaning "number" (Dummit and Foote 1998, p. 1), and first appeared in Bourbaki's Algèbre (reprinted as Bourbaki 1998, p. 671). The ring of integers is sometimes also denoted using the double-struck capital I, I.
Q: 分数. The doublestruck capital letter Q, Q, denotes the field of rationals. It derives from the German word Quotient, which can be translated as "ratio."
R: 实数. The doublestruck letter R denotes the field of real numbers.
i: 虚数. The imaginary number i=sqrt(-1), i.e., the square root of -1. The imaginary unit is denoted and commonly referred to as "i." Although there are two possible square roots of any number, the square roots of a negative number cannot be distinguished until one of the two is defined as the imaginary unit.
C: 复数. The field of complex numbers, denoted C.
数的互质
- 任意两个质数构成互质关系,比如13和61
- 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10
- 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和57
- 1和任意一个自然数是都是互质关系,比如1和99
- p是大于1的整数,则p和p-1构成互质关系,比如57和56
- p是大于1的奇数,则p和p-2构成互质关系,比如17和15
欧拉函数
φ(m) 表示小于m且与m互素的正整数的个数
- 如果m = 1,则 φ(m) = 1, 因为1与任何数都构成互质关系
- 如果m是质数,则 φ(m) = m - 1, 因为质数与小于它的每一个数都构成互质关系
- 如果m是质数的多次方,即 m = pk , 则
- 如果m可以分解成两个互质数之积, m = p1 * p2, 则 φ(m) = φ(p1) * φ(p2)
Euler Theorem 欧拉定理
For m ≥ 2 in Z+ and any a ∈ Z such that (a, m) = 1,
aφ(m) ≡ 1 mod m,
where φ(m) is the number of invertible integers modulo m.
对于大于等于2的正整数m及其互质数a, aφ(m) 对m求余后等于1, 其中φ(m)是不超过m且与m互素的正整数的个数,称为m的欧拉函数值
条件一: 若a与b互质, a对b求余后的余数c与b也必然是互质. 这一结论可以通过反证法证得, 即若c与b存在>1的公约数, 则a必然也与b存在>1的公约数, 则a与b互质不成立.
欧拉定理证明
假定ni为所有 < m的自然数中与m互质的数, 其集合 A = {n1, n2, ... nφ(m)}.
第一步:
证明: 若a与m互质, 则对于B = {a*n1, a*n2, ... a*nφ(m)} mod m, B与A相等.
1. 各元素依然与m互质: 因a和ni与m互质, 故a*ni mod m与m互质
2. 各元素各不相等: 若存在i和j (假设j > i), 使得a*ni = a*nj mod m, 则 a * (nj - ni) = k * m, 因a与m互质, 若此式成立, 则nj - ni需要为m的倍数, 故此式不成立, 故各元素不相等
3. 综上, B与A是相等的集合
第二步:
因A = B, 令A与B各自集合中的各元素相乘, 得
n1 * n2 * ...* nφ(m) = aφ(m) * (n1 * n2 * ...* nφ(m)) mod m, 可得
(aφ(m) - 1) * n1 * n2 * ...* nφ(m) = 0 mod m, 因n1, n2, ... nφ(m)与m互质, 故
aφ(m) - 1 = 0 mod m or aφ(m) = 1 mod m
结论: 如果两个正整数a和b互质,那么一定可以找到整数c,使得 a * c - 1 被b整除,或者说a * c被b除的余数是1
RSA公钥加密算法
取质数p, q, 令n = p * q, 则其欧拉函数值为 φ(n) = (p - 1) * (q - 1), 再取一个整数e, e与φ(n)互质. 再求得一个整数d, d = (k * φ(n) + 1) / e.
公钥为(e, n), 加密过程为 me mod n = c.
私钥为(d, n), 解密过程为 cd mod n = m.
证明:
1) cd mod n = (me mod n)d mod n = md * e mod n = m
2) mφ(n) mod n ≡ 1,则 mk * φ(n) mod n ≡ 1,两边乘以m, 得 mk * φ(n) + 1 mod n ≡ m,
由上两个式子可得 md * e mod n = mk * φ(n) + 1 mod n, 故 d * e = k * φ(m) + 1, d = (k * φ(m) + 1) / e
我们用具体的数字来实践下RSA的密钥对对生成,及其加解密对全过程。为方便我们使用较小数字来模拟。
5.1 求N
我们准备两个很小对质数,
p = 17
q = 19
N = p * q = 323
5.2 求L
L = lcm(p-1, q-1)= lcm(16,18) = 144
144为16和18对最小公倍数
5.3 求E
求E必须要满足2个条件:1 < E < L ,gcd(E,L)=1
即1 < E < 144,gcd(E,144) = 1
E和144互为质数,5显然满足上述2个条件
故E = 5
此时公钥=(E,N)= (5,323)
5.4 求D
求D也必须满足2个条件:1 < D < L,E*D mod L = 1
即1 < D < 144,5 * D mod 144 = 1
显然当D= 29 时满足上述两个条件
1 < 29 < 144
5*29 mod 144 = 145 mod 144 = 1
此时私钥=(D,N)=(29,323)
5.5 加密
准备的明文必须时小于N的数,因为加密或者解密都要mod N其结果必须小于N
假设明文 = 123
则 密文=明文E
5.6 解密
明文=密文Dmod
解密后的明文为123。