471 字
2 分钟
数论
2024-04-18

密码学基础#

Euclid欧几里得算法(求最大公因数)#

又叫做辗转相除法

如:gcd(18,12)gcd(12,6)gcd(6,0)gcd(18, 12) \to gcd(12, 6) \to gcd(6, 0)

int Euclid(int a, int b){
if(b == 0){
return a;
}
a = a % b;
return Euclid(b, a);
}

模运算的性质#

  1. 加法:[(a % n) + (b % n)] % n = (a + b) % n
  2. 减法:[(a % n) - (b % n)] % n = (a - b) % n
  3. 乘法:[(a % n) * (b % n)] % n = (a * b) % n

若a 与 n 互素:如果(a * b) = (a * c) mod n,则b = c mod n,其中等号表示mod n同余

扩展的欧几里得算法#

给定两个整数aa, bb,可以表示为ax+by(x,y can be negative)ax + by(x, y \space can \space be \space negative)的最小正整数等于gcd(a,b)gcd(a, b)

素数#

  1. 任意整数,都可以分解为若干个素数的乘积。

费马定理#

若p是素数,且a是不能被p整除的正整数,那么:

ap1=1(mod p)a^{p - 1} = 1(mod \space p)

欧拉函数#

欧拉函数:ϕ(n)\phi(n),表示小于n的互素的正整数个数。如ϕ(10)=5\phi(10)=5,即:1,2,3,7,9

一般:

ϕ(1)=1\phi(1)=1;

ϕ(n)=n1\phi(n)=n-1(n是素数)

欧拉定理#

费马定理:an1=1(mod n)a^{n - 1} = 1(mod \space n)

欧拉函数:ϕ(n)=n1\phi(n)=n-1(n为素数)

将费马定理和欧拉函数可得:

aϕ(n)=1(mod n)a^{\phi(n)} = 1(mod \space n)

素性测试 Miller-Rabin算法#

奇整数分解公式:如果n3n \ge 3,且是奇数

n1=2kq,(k>0,q%2=1)n - 1 = 2^{k}q, (k>0,q \% 2 = 1)

模的乘法公式:[(a%n)(b%n)]%n=(ab)%n[(a \% n) * (b \% n)] \% n = (a * b) \% n

由欧拉定理:aϕ(n)=1(mod n)a^{\phi(n)} = 1(mod \space n)

aϕ(n) mod n=a2kq mod n=aq mod n=1a^{\phi(n)} \space mod \space n = a^{2^{k}q} \space mod \space n = a^q \space mod \space n = 1

从而所有的aqa^q的乘积 mod nmod \space n都为1,即:

aq mod n=a2q mod n=a22q mod n=...=a2kq mod n=1a^q \space mod \space n = a^{2q} \space mod \space n = a^{2^2 q} \space mod \space n = ... = a^{2^k q} \space mod \space n = 1

因此:如果n是素数,那么遍历这些数,只要有mod n不为1,就是合数

中国剩余定理CRT#