学习来源:B站up:DoraHcaks
学习路径:密码学7.1|RSA非对称密码算法_哔哩哔哩_bilibili
1.基础数学知识
1.1欧几里得辗转相除法
假设正整数a≥b,求a和b的最大公因数gcd(a, b) = ?
(1)如果a mod b = 0, 即余数 r = 0,则gcd(a, b) = b
(2)否则,令 r = a mod b,gcd(a, b) = gcd(b, r),递归直至 r = 0,满足情况(1)
举例:a = 254, b = 8
254 = 8 * 31 + 6,r = 6 ≠ 0 => gcd(254, 8) = gcd(8, 6)
8 = 6 * 1 + 2, r = 2 ≠ 0 => gcd(8, 6) = gcd(6, 2)
6 = 2 * 3, r = 0 = 0 => gcd(254, 8) = gcd(8, 6) = gcd(6, 2) = 2
多项式时间内可解的问题(P问题)
已知大合数a,求小于a的大素数b,使得a与b互素,即gcd(a, b) = 1。
该问题能够使用欧几里得辗转相除法快速求解。
随机选择一个大素数b,如果即gcd(a, b) ≠ b,则gcd(a, b) = 1
因此,这样的大素数有很多,且很容易找。
1.2 因子分解困难问题
大数的因子分解问题,非常困难!
初始化:随机选择2个不同的大素数p, q,计算n = p * q。
公开 n,求p, q
举例1:素数p = 5,q = 7,计算n = p * q = 35.
已知:n = 35,求p, q
答:暴力搜索,令p, q = 2, 3 ....
举例2:保密数据p, q,公开数据n
公开 n = 8239121061250502943937 = p * q
for(i >= 2 && i <= √n) {
for(j >= 2 && j <= √n) {
if (8239121061250502943937 == i * j) {
System.out.println(i, j);
}
}
}
如果是2048bit的大整数,n = - 110 + 1,则计算机需要100年以上时间破解。不可行。
因子分解是NP问题:求解时,需要for循环,暴力搜索,需要指数时间;但是,一旦已知解,则可以快速验证解的正确性。
1.3 费马小定理
若p为素数,a是正整数且不能被p整除,互素(互质),则
注:证明视频里有,如果有需要可以去视频学习,这里省去
举例3:p = 7, a = 3,3不能被7整除,根据费马小定理
公式推导:
举例4:p = 11, a = 5,5不能被11整除,根据费马小定理
公式推导:
1.4 欧拉函数
小于n,且与n互素的正整数个数,记为,习惯上
结论:如果n是素数,则