数论的一些知识

欧拉函数 φ(x)

 将不大于正整数 m 且与之互素的正整数个数称之为欧拉函数,记为 φ(m)

欧拉定理

 设正整数 m 与整数 a 互素,则

  aφ(m) ≡ 1 (mod m)

欧拉函数的积性

定义:设正整数 m 与 n 互素,若 f(mn) = f(m) f(n),则称数论函数 f 为积性函数

->定理:设正整数 n 有素分解式 n = p1a1 p2a2 … psas,则积性函数 f 的函数值

  f(n) = f(p1a1) f(p2a2) … f(psas)

φ(x) 的计算

定理1 若 p 为素数,则 φ(p) = p - 1;反之,若自然数p满足等式 φ(p) = p - 1,则 p 是素数

定理2 若 p 为素数,a 为正整数,则

  φ(pa) = pa - pa-1

定理3 设正整数 n 有素分解式 n = p1a1 p2a2 … psas,则

  φ(x) = n (1-${1\over p_{1}}$) (1-${1\over p_{2}}$) … (1-${1\over p_{s}}$)

定理4 设 n 是大于2的正整数,则欧拉函数 φ(x) 是偶数

模反元素

若两个正整数 a 和 n 互素,那么必有整数 b,使得 ab ≡ 1 (mod n)。此时,称 b 为 a 的”模反元素“

 证明:由欧拉定理知

  aφ(n) ≡ 1 (mod n)

 那么至少有 b = aφ(n)-1,满足

  ab = a * aφ(n)-1 = aφ(n) ≡ 1 (mod n)

 所以正整数 a 和 n 互素的前提下,a 的模反元素 b 一定存在

模反元素没有唯一性

 证明:已知 b = aφ(n)-1 是 a 的模反元素

  ab ≡ 1 (mod n) <=> ab = kn + 1 ( k ∈ Z )

 令 t = k - a

  ab = ( t + a )n + 1

  a( b - n) = tn + 1

  即 a( b - n) ≡ 1 (mod n)

 那么 (b - n) 也是 a 的模反元素,而且同样构造于 mod n 上

费马小定理

若素数 p 不整除正整数 a ,则

  ap-1 ≡ 1 ( mod p )

以上所有内容看不懂请从头学习《初等数论》

密钥的生成

Step 1:随机选两个不相等的质数 p 和 q

 一般这两个质数越大安全性越高

Step 2:计算 p * q = n

 n 转换为二进制的位数即为密钥长度

Step 3:计算欧拉函数 φ(n)

 算法如上所示

Step 4:随机选择一个整数 e(1< e < φ(n),e 与 φ(n) 互素)

 常用建议的是 65537

Step 5:计算 e 对于 φ(n) 的模反元素 d

 e 与 φ(n) 互素,由模反元素定义知,存在 d 满足

  ed ≡ 1 (mod φ(n))

 可以利用扩展欧几里得算法求解

Step 6:公钥和私钥

 公钥: n 和 e

 私钥: n 和 d

加密解密

约定明文为 M,密文为 S

加密:

 使用到公钥 ( n , e )

  C ≡ Me ( mod n )

解密:

 使用到私钥 ( n , d )

  M ≡ Cd ( mod n )

证明:由加密方程知

  Me + remainder = C + kn + remainder

  C = Me - kn

 代入解密方程右半:

  ( Me - kn )d mod n = Med mod n

 由于 ed ≡ 1 (mod φ(n)),故

  ed = hφ(n) + 1

 代入上式:

  Cd ≡ Mhφ(n)+1 (mod n)

 (1) 若 M 与 n互素:

 由欧拉定理知

  Mφ(n) ≡ 1 (mod n)

  Mφ(n) = kn + 1

  ( Mφ(n) )h = ( kn + 1 )h ≡ 1 ( mod n )

  Mhφ(n)+1 ≡ M ( mod n )

 (2) 若 M 与 n 不互素:

 由于 n 有唯一素分解式 n = p * q

 则 gcd( M , n ) = p 或 gcd( M , n ) = q

 不妨:gcd( M , n ) = q ; M = k * p

 由费马小定理:

  mq-1 ≡ 1 ( mod q )

 使用欧拉定理同上:

  ( Mφ(q) )h(p-1) = ( kq + 1 )h(p-1) ≡ 1 ( mod q )

 -> ( Mq-1 )h(p-1) ≡ 1 ( mod q )

 已知

  φ(n) = ( p - 1 )( q - 1 )

  ed = hφ(n) + 1

 -> Med-1 ≡ 1 ( mod q )

 -> Med-1 = sq + 1

 -> Med = sqM + M

  M = k * p

 -> Med = sqkp + M

 -> Med = skn + M

 -> Med ≡ M ( mod n )

 综上所述,解密方程 M ≡ Cd ( mod n ) 成立

RSA算法的安全性

解密的关键在私钥中的模反元素 d

  ed ≡ 1 (mod φ(n))

要求出 d 必定需要知道 φ(n)

在公钥中可以获得 n ,但是不知道 p 和 q 的情况下,只能依靠

 1. 计算 n 的素分解式 p ,q

 2. 迭代验证 0 ~ n 中与 n 互素的整数个数

事实是,在 n 的素分解式未知的情况下几乎不可能在可接受时间内获得d,
所以认为算法是安全的

但是针对不恰当的参数设置,RSA有可能被破解,详细方法可以参考以下资料

参考资料

https://www.0x002.com/2020/%E5%AF%B9RSA%E5%8A%A0%E5%AF%86%E5%8E%9F%E7%90%86%E5%8F%8A%E5%85%B6%E5%BA%94%E7%94%A8%E7%9A%84%E7%AE%80%E5%8D%95%E7%A0%94%E7%A9%B6#%E6%95%B0%E5%AD%A6%E5%9F%BA%E7%A1%80

https://xz.aliyun.com/t/6459

https://www.anquanke.com/post/id/84632