素性检测——Solovay Strassen & Miller Rabin

素性检测

Solovay-Strassen算法

Base concepts

  • 对合数问题是一个偏是的 Monte Carlo 算法
  • 对于 n n n而言( a a a是任一整数), n 是 素 数 :    ⟹    ( a n ) ≡ a n − 1 2    m o d    n n 是 合 数 : { ⟸ ( a n ) = 0    ⟹    ( a n ) ≡ a n − 1 2    m o d    n 可 能 成 立 \begin{aligned} n是素数&:\implies \left(\frac{a}{n}\right) \equiv a^{\frac{n-1}{2}}\; mod \; n\\ n是合数&: \begin{cases} \Longleftarrow \left(\frac{a}{n}\right)=0\\ \implies \left(\frac{a}{n}\right)\equiv a^{\frac{n-1}{2}}\; mod \; n 可能成立 \end{cases} \end{aligned} nn:(na)a2n1modn:{(na)=0(na)a2n1modn

Algorithm

Inputs: n, a value to test for primality; k, a parameter that determines the accuracy of the test
Output: composite if n is composite, otherwise probably prime

repeat k times:
 choose a randomly in the range [2, n − 1 n-1 n1]
x ← ( a n ) {\displaystyle x\gets \left({\tfrac {a}{n}}\right)} x(na)
if x = 0 or a ( n − 1 ) / 2 ̸ ≡ x ( m o d n ) {\displaystyle a^{(n-1)/2}\not \equiv x{\pmod {n}}} a(n1)/2̸x(modn) then
  return composite
return probably prime

Miller-Rabin算法

Base concepts

  • 对合数问题是一个偏是的 Monte Carlo 算法
  • 当 p 为素数且 p>2 时,不存在 1 mod p 的非平凡平方根
    • x 2 ≡ 1 ( m o d n ) x^2 \equiv 1 \pmod n x21(modn)只有2个解: x ≡ ± 1 ( m o d n ) x\equiv \pm 1\pmod n x±1(modn)
  • 由 Fermat 小定理,对任一整数 a, 若 n 为素数,有 a n − 1 ≡ 1 ( m o d n ) a^{n-1}\equiv 1 \pmod n an11(modn)
    • n>2 时 n-1 为一偶数,表示为 n − 1 = 2 s × d n-1=2^s \times d n1=2s×d的形式,其中 s , d ∈ Z s,d\in \mathbb{Z} s,dZ且 d 为奇数
  • 又由前述原理,若n为素数,不断对 a n − 1 = a 2 s × d {\displaystyle a^{n-1}} =a^{2^s\times d} an1=a2s×d取平方根后总能得到 1 或 -1, 于是:
    • 对任意在 ( Z / n Z ) ∗ {\displaystyle (Z/nZ)^{*}} (Z/nZ) 范围内的 a 和 0 ≤ r ≤ s − 1 {\displaystyle 0\leq r\leq s-1} 0rs1,必满足以下两种形式的一种: a d ≡ 1 ( m o d n ) a 2 r d ≡ − 1 ( m o d n ) \begin{aligned} a^d&\equiv 1 &\pmod n\\ a^{2^rd}&\equiv -1 &\pmod n \end{aligned} ada2rd11(modn)(modn)
  • 基于以上原理的逆否:如果能找到一个 a , 使得 ∀ r ∈ { r ∈ Z ∣ 0 ≤ r ≤ s − 1 } ,    { a d ̸ ≡ 1 ( m o d n ) a 2 r d ̸ ≡ − 1 ( m o d n ) \forall r \in \{r\in \mathbb{Z}|0\leq r\leq s-1\},\; \begin{cases} a^d&\not\equiv 1 &\pmod n\\ a^{2^rd}&\not\equiv -1 &\pmod n \end{cases} r{rZ0rs1},{ada2rd̸1̸1(modn)(modn)则 n 就是一个合数
    • 满足上述条件的a是n是合数的一个凭证,否则可能是一个证明n是素数的“强伪证”

Algorithm

Input #1: n > 3, an odd integer to be tested for primality;
Input #2: k, a parameter that determines the accuracy of the test
Output: composite if n is composite, otherwise probably prime

write n − 1 n-1 n1 as 2 r 2^r 2r·d with d odd by factoring powers of 2 from n − 1 n-1 n1
WitnessLoop: repeat k times:
 pick a random integer a in the range [2, n − 2]
 x ← a d a^d ad mod n
if x = 1 or x = n − 1 n-1 n1 then
  continue WitnessLoop
repeat r − 1 r − 1 r1 times:
  x ← x 2 x^2 x2 mod n
  if x = n − 1 n-1 n1 then
   continue WitnessLoop
return composite
return probably prime

你可能感兴趣的:(密码学,笔记)