Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

การทดสอบจำนวนเฉพาะ (Primality Testing) ในความปลอดภัยข้อมูล

Primality Testing ใน Cryptography

จำเป็นสำหรับสร้างกุญแจ RSA (ต้องการ p, q เฉพาะ 1024-4096 บิต) และระบบ Public-Key อื่นๆ

ประเภทของ Primality Tests

1. Deterministic Algorithms (แน่นอน)

  • ให้คำตอบถูกต้องเสมอ (Prime/Composite)
  • AKS (2002): Agrawal-Kayal-Saxena, O(log⁶ n) Polynomial Time → ทฤษฎีสำคัญ แต่ช้าจริง
  • Trial Division: หาร 2..√n → ใช้ได้เฉพาะ n เล็ก

2. Probabilistic Algorithms (โอกาสผิดพลาดต่ำ)

  • ใช้ในปฏิบัติจริง (RSA, DH, ECC Key Gen)
  • กฎ: ถ้า n เป็น Prime → ตอบ Prime เสมอ (No False Negative)
  • ถ้า n เป็น Composite → ตอบ Composite ด้วยโอกาส ≥ 1-ε, ตอบ Prime ด้วยโอกาส ≤ ε
  • รัน m รอบ → Error ≤ εᵐ

3. Fermat Primality Test

  • จาก Fermat's Little Theorem: aⁿ⁻¹ ≡ 1 (mod n)
  • เลือก a แล้วตรวจสอบ → ผ่าน = Probably Prime
  • ❌ Carmichael Numbers (เช่น 561, 1729, 6601) ผ่านทุก a ที่ gcd(a,n)=1 → False Positive มาก

4. Miller-Rabin Test (มาตรฐานอุตสาหกรรม)

  • ขยาย Fermat ด้วย Square Root Test
  • ไม่มี Carmichael Problem
  • Error ≤ 1/4 ต่อรอบ → 40 รอบ = 2⁻⁸⁰
  • Deterministic สำหรับ n < 2⁶⁴ ด้วย Bases เฉพาะ

5. Solovay-Strassen Test

  • ใช้ Euler Criterion + Jacobi Symbol
  • Error ≤ 1/2 ต่อรอบ (แย่กว่า Miller-Rabin)
  • ใช้น้อยกว่าในปัจจุบัน

การใช้งานจริง (RSA Key Generation)

  1. สุ่ม Odd Number n ขนาดที่ต้องการ (เช่น 2048 บิต)
  2. Trial Division ด้วย Prime เล็กๆ (Primes < 10000) → กรอง Composite เร็ว
  3. Miller-Rabin 40 รอบ (Random Bases) → Probably Prime
  4. (Optional) Lucas Test เพิ่มความมั่นใจ
  5. ทำซ้ำจนได้ p, q ทั้งคู่

Post-Quantum Note

RSA ต้องการ Primality Testing แต่ PQC (Kyber, Dilithium, SPHINCS+) ใช้ Structured Lattices/Hash-based → ไม่ต้องหา Prime ใหญ่