คู่มือการเข้ารหัสขั้นสูง: AES, RSA, ECC และการเข้ารหัสแบบโพสต์ควอนตัม

คู่มือฉบับสมบูรณ์นี้สำรวจแนวคิด อัลกอริทึม และโปรโตคอลการเข้ารหัสขั้นสูงที่ใช้ในระบบการสื่อสารที่ปลอดภัยสมัยใหม่ เหมาะสำหรับนักพัฒนาและผู้เชี่ยวชาญด้านความปลอดภัยครับ/ค่ะ

หมายเหตุ: คู่มือนี้ถือว่าคุณมีความคุ้นเคยกับแนวคิดการเข้ารหัสพื้นฐานแล้ว สำหรับผู้เริ่มต้น ให้เริ่มจาก เคล็ดลับความปลอดภัยสำหรับผู้เริ่มต้น ของเราครับ/ค่ะ

อัลกอริทึม Symmetric Encryption

AES (Advanced Encryption Standard)

มาตรฐานทองคำสำหรับ symmetric encryption ที่รัฐบาลสหรัฐฯ ใช้มาตั้งแต่ปี 2001 ครับ/ค่ะ

คุณสมบัติสำคัญ

  • ขนาด Key: 128, 192 หรือ 256 bits
  • ขนาด Block: 128 bits
  • Rounds: 10, 12 หรือ 14 ขึ้นอยู่กับขนาด key
  • ประสิทธิภาพ: ปรับให้เหมาะสมสูง มี hardware acceleration รองรับ

โหมดที่นิยมใช้

  • GCM (Galois/Counter Mode): Authenticated encryption แนะนำสำหรับการใช้งานส่วนใหญ่
  • CBC (Cipher Block Chaining): โหมดแบบดั้งเดิม ต้องใช้ MAC แยกต่างหาก
  • CTR (Counter): ทำงานแบบขนานได้ ใช้ในบางโปรโตคอล

ChaCha20

Stream cipher สมัยใหม่ที่ออกแบบโดย Daniel J. Bernstein ได้รับความนิยมเพิ่มขึ้นเป็นทางเลือกแทน AES ครับ/ค่ะ

ข้อดี

  • เร็วกว่า AES บนอุปกรณ์ที่ไม่มี hardware acceleration
  • การทำงานแบบ constant-time (ต้านทานการโจมตีแบบ timing attacks)
  • ออกแบบเรียบง่าย ใช้งานอย่างปลอดภัยได้ง่ายกว่า
  • ใช้ร่วมกับ Poly1305 สำหรับ authenticated encryption

Asymmetric Encryption

RSA (Rivest-Shamir-Adleman)

ใช้กันอย่างแพร่หลายสำหรับการแลกเปลี่ยน key และลายเซ็นดิจิทัลครับ/ค่ะ

ข้อควรพิจารณา

  • ขนาด key ขั้นต่ำ: 2048 bits (แนะนำ 4096 bits สำหรับความปลอดภัยระยะยาว)
  • ประสิทธิภาพ: ใช้การคำนวณมากเมื่อเทียบกับ symmetric encryption
  • Padding schemes: ใช้ OAEP สำหรับการเข้ารหัส PSS สำหรับลายเซ็น
  • ภัยคุกคามจาก Quantum: เสี่ยงต่อคอมพิวเตอร์ควอนตัม (Shor's algorithm)

Elliptic Curve Cryptography (ECC)

ทางเลือกที่มีประสิทธิภาพมากกว่า RSA โดยให้ความปลอดภัยเทียบเท่าที่ขนาด key เล็กกว่าครับ/ค่ะ

Curves ที่นิยม

  • Curve25519: ออกแบบสำหรับ ECDH key exchange ใช้กันอย่างแพร่หลาย
  • Ed25519: สำหรับลายเซ็นดิจิทัล ใช้ใน SSH, GPG
  • P-256 (secp256r1): มาตรฐาน NIST รองรับอย่างกว้างขวาง
  • P-384, P-521: ระดับความปลอดภัยที่สูงขึ้น

ข้อดีเหนือ RSA

  • ECC 256-bit ≈ ความปลอดภัยของ RSA 3072-bit
  • การคำนวณเร็วกว่า
  • Key และลายเซ็นมีขนาดเล็กกว่า
  • ใช้ bandwidth และพื้นที่จัดเก็บน้อยกว่า

โปรโตคอล Key Exchange

Diffie-Hellman (DH)

ช่วยให้สองฝ่ายสามารถสร้าง shared secret ผ่านช่องทางที่ไม่ปลอดภัยได้ครับ/ค่ะ

รูปแบบต่างๆ

  • Classic DH: การใช้งานแบบดั้งเดิม
  • ECDH: เวอร์ชัน Elliptic Curve (มีประสิทธิภาพมากกว่า)
  • X25519: ECDH สมัยใหม่ที่ใช้ Curve25519

Perfect Forward Secrecy (PFS)

รับประกันว่าการสื่อสารในอดีตยังคงปลอดภัยแม้ว่า long-term keys จะถูกบุกรุกครับ/ค่ะ

การใช้งาน

  • สร้าง ephemeral key pairs สำหรับแต่ละ session
  • ทำลาย session keys หลังใช้งาน
  • ใช้ใน TLS 1.3, Signal Protocol เป็นต้น

Hash Functions

ตระกูล SHA-2

  • SHA-256: output 256-bit ใช้กันอย่างแพร่หลาย
  • SHA-384, SHA-512: ระดับความปลอดภัยที่สูงขึ้น
  • การใช้งาน: ลายเซ็นดิจิทัล การตรวจสอบใบรับรอง password hashing (ด้วยเทคนิคที่เหมาะสม)

SHA-3 (Keccak)

  • โครงสร้างต่างจาก SHA-2 (sponge function)
  • ต้านทานการโจมตีแบบ length extension
  • เหมาะสำหรับแอปพลิเคชันที่ต้องการ security margins สูง

BLAKE2/BLAKE3

  • เร็วกว่า SHA-2 และ SHA-3
  • ปลอดภัยทางการเข้ารหัส
  • BLAKE3: ทำงานแบบขนานได้สูง เหมาะสำหรับข้อมูลขนาดใหญ่

Key Derivation Functions (KDFs)

PBKDF2 (Password-Based Key Derivation Function 2)

  • วัตถุประสงค์: สร้าง cryptographic keys จากรหัสผ่าน
  • Iterations: ขั้นต่ำ 100,000 (คำแนะนำจาก OWASP)
  • กรณีการใช้งาน: การเก็บรหัสผ่าน key derivation

Argon2

ผู้ชนะการแข่งขัน Password Hashing Competition (2015) แนะนำสำหรับแอปพลิเคชันใหม่ครับ/ค่ะ

รูปแบบต่างๆ

  • Argon2id: แบบผสม (แนะนำสำหรับการใช้งานส่วนใหญ่)
  • Argon2i: ปรับให้เหมาะสมต่อการโจมตีแบบ side-channel
  • Argon2d: ต้านทานการโจมตีจาก GPU สูงสุด

scrypt

  • Memory-hard function (ต้านทานการโจมตีจาก hardware)
  • ใช้โดย Litecoin, Tarsnap
  • สมดุลระหว่างความปลอดภัยและความเข้ากันได้

Message Authentication Codes (MACs)

HMAC (Hash-based MAC)

  • รวม hash function กับ secret key
  • ให้การยืนยันตัวตนและความสมบูรณ์
  • ที่นิยม: HMAC-SHA256, HMAC-SHA512

Poly1305

  • One-time authenticator
  • ใช้ร่วมกับ ChaCha20 สำหรับ authenticated encryption
  • เร็วและ constant-time

Authenticated Encryption

ทำไมถึงสำคัญ

การเข้ารหัสเพียงอย่างเดียวไม่รับประกันความสมบูรณ์ ผู้โจมตีสามารถแก้ไข ciphertext โดยไม่ถูกตรวจจับได้ Authenticated encryption แก้ปัญหานี้ครับ/ค่ะ

AEAD (Authenticated Encryption with Associated Data)

  • AES-GCM: รองรับอย่างกว้างขวางที่สุด
  • ChaCha20-Poly1305: ดีกว่าบนอุปกรณ์มือถือ
  • AES-CCM: ใช้ในบางโปรโตคอลไร้สาย

Digital Signatures

RSA Signatures

  • Padding: ใช้ PSS (Probabilistic Signature Scheme)
  • Hash function: SHA-256 หรือสูงกว่า
  • ขนาด Key: ขั้นต่ำ 2048 bits

ECDSA (Elliptic Curve Digital Signature Algorithm)

  • ลายเซ็นเล็กกว่า RSA
  • ต้องสร้าง nonce อย่างระมัดระวัง (RNG อ่อนแอ = key ถูกบุกรุก)
  • แนะนำรูปแบบ deterministic (RFC 6979)

Ed25519

  • Deterministic (ไม่ต้องใช้ RNG)
  • สร้างและตรวจสอบลายเซ็นเร็ว
  • ลายเซ็นขนาดเล็ก (64 bytes)
  • ต้านทานการโจมตีแบบ side-channel

โปรโตคอลสมัยใหม่

Signal Protocol

โปรโตคอล end-to-end encryption ที่ทันสมัยที่สุด ใช้โดย Signal, WhatsApp, Facebook Messenger ครับ/ค่ะ

คุณสมบัติสำคัญ

  • Double Ratchet: อัปเดต keys อย่างต่อเนื่อง
  • Perfect Forward Secrecy: ข้อความในอดีตยังคงปลอดภัย
  • Post-Compromise Security: กู้คืนจากการบุกรุก key
  • Asynchronous: ทำงานได้แม้ผู้รับออฟไลน์

TLS 1.3

เวอร์ชันล่าสุดของโปรโตคอล Transport Layer Security ครับ/ค่ะ

การปรับปรุง

  • ลบอัลกอริทึมและ cipher suites ที่อ่อนแอออก
  • ให้ forward secrecy เสมอ
  • Handshake เร็วกว่า (1-RTT, ตัวเลือก 0-RTT)
  • Encrypted Server Hello

Noise Protocol Framework

เฟรมเวิร์กโปรโตคอลการเข้ารหัสสมัยใหม่สำหรับสร้างระบบการสื่อสารที่ปลอดภัยครับ/ค่ะ

การใช้งาน

  • WireGuard VPN
  • Lightning Network
  • I2P messaging

Post-Quantum Cryptography

ภัยคุกคาม

คอมพิวเตอร์ควอนตัมสามารถทำลาย RSA และ ECC ได้โดยใช้ Shor's algorithm อัลกอริทึม symmetric ได้รับผลกระทบน้อยกว่า แต่ต้องใช้ key ขนาดใหญ่ขึ้นครับ/ค่ะ

ผู้สมัคร NIST Post-Quantum

  • Kyber: Key encapsulation แบบ lattice-based
  • Dilithium: ลายเซ็นดิจิทัลแบบ lattice-based
  • SPHINCS+: ลายเซ็นแบบ hash-based

กลยุทธ์การเปลี่ยนผ่าน

  • แนวทางแบบผสม: รวมอัลกอริทึมคลาสสิกและ post-quantum
  • เพิ่มขนาด symmetric key เป็น 256 bits
  • ติดตามกระบวนการมาตรฐาน NIST
  • วางแผนสำหรับความคล่องตัวของอัลกอริทึม

แนวทางปฏิบัติที่ดีในการใช้งาน

อย่าสร้างระบบเข้ารหัสเอง

ใช้ไลบรารีที่มีชื่อเสียงและผ่านการตรวจสอบแล้วครับ/ค่ะ:

  • libsodium: ระดับสูง ใช้งานง่าย
  • OpenSSL: ครอบคลุม รองรับอย่างกว้างขวาง
  • BoringSSL: OpenSSL fork ของ Google
  • Ring: ไลบรารีการเข้ารหัส Rust

การจัดการ Key

  • ใช้ hardware security modules (HSMs) สำหรับ key สำคัญ
  • ใช้นโยบายการหมุนเวียน key
  • อย่าฝัง key ไว้ใน source code
  • ใช้ key derivation สำหรับวัตถุประสงค์หลายอย่าง
  • ลบ key จาก memory อย่างปลอดภัยหลังใช้งาน

การสร้างตัวเลขสุ่มที่ปลอดภัย

  • ใช้ RNG ที่ปลอดภัยทางการเข้ารหัส (CSPRNG)
  • อย่าใช้ฟังก์ชัน rand() มาตรฐาน
  • RNG ของระบบปฏิบัติการ: /dev/urandom (Linux), CryptGenRandom (Windows)
  • เฉพาะภาษา: crypto.randomBytes (Node.js), secrets module (Python)

การป้องกัน Timing Attack

  • ใช้การเปรียบเทียบแบบ constant-time สำหรับข้อมูลลับ
  • หลีกเลี่ยงการแยกสาขาตามข้อมูลลับ
  • ระวังการโจมตีแบบ cache timing
  • ใช้ไลบรารีที่ออกแบบมาเพื่อต้านทาน timing attack

การทดสอบและตรวจสอบ

การตรวจสอบความปลอดภัย

  • ทดสอบการเจาะระบบเป็นประจำ
  • ตรวจสอบโค้ดโดยผู้เชี่ยวชาญด้านความปลอดภัย
  • การตรวจสอบความปลอดภัยโดยบุคคลที่สาม
  • โปรแกรม bug bounty

การปฏิบัติตามมาตรฐาน

  • FIPS 140-2/3: มาตรฐานของรัฐบาลสหรัฐฯ
  • Common Criteria: การรับรองความปลอดภัยระหว่างประเทศ
  • PCI DSS: ข้อกำหนดของอุตสาหกรรมบัตรชำระเงิน

แหล่งข้อมูลสำหรับการเรียนรู้เพิ่มเติม

หนังสือ

  • "Cryptography Engineering" โดย Ferguson, Schneier และ Kohno
  • "Serious Cryptography" โดย Jean-Philippe Aumasson
  • "Applied Cryptography" โดย Bruce Schneier

แหล่งข้อมูลออนไลน์

  • Cryptopals Crypto Challenges
  • คอร์สเรียน Cryptography ของ Stanford (Coursera)
  • IACR ePrint Archive
  • Crypto Stack Exchange
ดูการเข้ารหัสในการทำงานจริง: SecretNote ใช้การเข้ารหัส AES-256-GCM พร้อม key derivation ที่ปลอดภัยเพื่อปกป้องข้อความของคุณ ลองใช้เลยตอนนี้ครับ/ค่ะ!