Lecture 3:数论基础¶
学习目标¶
完成本讲后,应当能够:
- 使用整除、同余和模运算表示整数关系;
- 用欧几里得算法求最大公因数,并判断两个整数是否互素;
- 用扩展欧几里得算法求模逆;
- 根据质因数分解计算欧拉函数;
- 使用费马小定理、欧拉定理和平方-乘算法化简模幂。
1. 整除、同余与模运算¶
若存在整数 \(m\) 使得 \(a=mb\),则称 \(b\) 整除 \(a\),记作 \(b\mid a\)。若 \(n\mid(a-b)\),则 \(a\) 与 \(b\) 模 \(n\) 同余,记作:
对正整数 \(n\),整数 \(a\) 除以 \(n\) 可写为 \(a=qn+r\),其中 \(0\le r<n\);\(r\) 是余数,也就是 \(a\bmod n\)。例如 \(-12\bmod 7=2\),因为 \(-12=(-2)\cdot7+2\)。
加、减、乘都可以在计算过程中随时取模:
乘法同理。提前约化数值可以显著降低后续计算量。
2. 素数、最大公因数与欧几里得算法¶
素数只有 \(\pm1\) 和自身作为因数。每个大于 1 的整数都能唯一分解为素数幂的乘积。密码学会利用大整数分解困难这一特点,但求最大公因数不需要先分解因数。
\(a\) 与 \(b\) 的最大公因数记为 \(\gcd(a,b)\)。若 \(\gcd(a,b)=1\),则二者互素(relatively prime)。欧几里得算法反复使用:
直到余数为 0,最后一个非零余数就是最大公因数。例:
因此 \(\gcd(911,999)=1\)。该算法避免了对大整数做质因数分解。
3. 扩展欧几里得算法与模逆¶
若存在整数 \(x\) 使得 \(ax\equiv1\pmod n\),则 \(x\) 是 \(a\) 模 \(n\) 的乘法逆元(modular inverse),记作 \(a^{-1}\bmod n\)。模逆存在当且仅当 \(\gcd(a,n)=1\)。
扩展欧几里得算法求出整数 \(x,y\),满足贝祖等式:
当最大公因数为 1 时,对等式两边模 \(n\) 化简可得 \(ax\equiv1\pmod n\),所以 \(x\) 即为模逆。例:扩展欧几里得算法给出
故 \(911^{-1}\equiv-193\equiv806\pmod{999}\)。验证时计算 \(911\cdot806\bmod999=1\)。
4. 欧拉函数与数论定理¶
欧拉函数(Euler's totient function)\(\varphi(n)\) 统计 \(1\) 到 \(n\) 中与 \(n\) 互素的整数个数。若 \(p\) 为素数,则:
若 \(m,n\) 互素,则 \(\varphi(mn)=\varphi(m)\varphi(n)\)。因此若 \(n=\prod_i p_i^{e_i}\),则:
费马小定理(Fermat's little theorem):若 \(p\) 为素数且 \(p\nmid a\),则 \(a^{p-1}\equiv1\pmod p\)。其推广欧拉定理(Euler's theorem)为:若 \(\gcd(a,n)=1\),则:
这些定理用于化简幂指数,也是 RSA 正确性推导的基础之一。
5. 平方-乘模幂算法¶
直接计算 \(a^e\) 需要约 \(e\) 次乘法,指数很大时不可行。平方-乘算法(square-and-multiply)将指数写成二进制或 2 的幂之和,逐次平方并只乘入指数二进制位为 1 的项,时间复杂度为 \(O(\log e)\)。
例:计算 \(11^{15}\bmod13\)。因为 \(15=8+4+2+1\),且
所以 \(11^{15}\equiv9\cdot3\cdot4\cdot11\equiv5\pmod{13}\)。每一步都先约化模数,避免生成巨大整数。
6. 侧信道¶
数学问题的困难性并不能自动保证软件实现安全。运行平台可能通过执行时间、功耗、电磁辐射或声音泄露有关密钥的信息,这类泄露称为侧信道(side channel)。平方-乘算法若依据指数位决定是否执行额外乘法,运行时间也可能泄露指数信息;实际实现需考虑恒定时间等防护。
复习重点¶
- 模逆存在的充要条件是 \(\gcd(a,n)=1\);
- 欧几里得算法求 gcd,扩展欧几里得算法求模逆;
- RSA 常用 \(\varphi(pq)=(p-1)(q-1)\);
- 模幂用平方-乘算法,不要直接展开大指数;
- 理论上安全的数学原语仍可能被实现侧信道攻击。