CTF中的RSA及攻击方法笔记
1 数论基础
参考链接:https://www.freebuf.com/articles/web/257835.html
1.1 模运算规则
模运算
与基本四则运算有些相似,但是除法例外。其规则如下:
(a + b) % p = (a % p + b % p) % p
(a - b) % p = (a % p - b % p) % p
(a * b) % p = (a % p * b % p) % p
(a ^ b) % p = ((a % p)^b) % p
结合律:
((a+b) % p + c) % p = (a + (b+c) % p) % p
((a*b) % p * c)% p = (a *(b*c)%p) % p
交换律:
(a + b) % p = (b + a) % p
(a * b) % p = (b * a) % p
分配律:
((a +b)% p * c) % p = ((a * c) %p + (b * c) % p) % p
重要定理:
a ≡ b(mod n)
表示a
与b
对模n
同余。
≡
是数论中表示同余的符号,b mod n
是表示 b
对 n
取余。
若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p)
若a≡b (% p),则对于任意的正整数c,都有(a * c) ≡ (b * c) (%p)
若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),
(a * c) ≡ (b * d) (%p)
最大公因子:
两个数互素是指:除了它们除了1外没有共同的因子。如果a
和n
的最大公因子等于1,那么可写作
$gcd(a,n)=1$
。
欧几里得算法:
又称碾转相除法,我们通常使用该方法计算最大公因子。
欧几里得扩展算法:
如果gcd(a, b) = c
,则存在x, y
,使得c = ax + by
。
同余:
两个整数a、b,若它们除以整数m所得的余数相等,则称a与b对于模m同余或a同余于b模m。 记作:a≡b (mod m)
, 读作:a同余于b模m,或读作a与b对模m同余,例如26≡2(mod 12)。
模的逆元:
简单来说,求a的逆,就是找一个 x x x,使得 1 = ( a ∗ x ) ( m o d n ) 1 = (a*x){\pmod n} 1=(a∗x)(modn),也可记作 a − 1 ≡ x ( m o d n ) a^{-1} \equiv x{\pmod {n}} a−1≡x(modn)
费马小定理和欧拉定理:
费马小定理是数论中的一个定理:假如 a {a} a 是一个整数, p {p} p 是一个质数,那么 a p − a {a^{p}-a} ap−a是 p p p 的倍数,可以表示为 a p ≡ a ( m o d p ) a^{p}\equiv a{\pmod {p}} ap≡a(modp) 如果a不是p的倍数,这个定理也可以写成 a p − 1 ≡ 1 ( m