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