ML-KEM (FIPS 203): มาตรฐาน CRYSTALS-Kyber
เจาะลึกกลไกการห่อหุ้มกุญแจของ ML-KEM ชุดพารามิเตอร์ และข้อควรพิจารณาในการนำไปใช้งาน
ML-KEM (FIPS 203): มาตรฐาน CRYSTALS-Kyber เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
สิ่งที่ ML-KEM กำหนดเป็นมาตรฐาน
ML-KEM (กลไกการห่อหุ้มกุญแจที่อิงโครงสร้างแลตทิซของโมดูล) ซึ่งได้รับการกำหนดเป็นมาตรฐาน FIPS 203 ในเดือนสิงหาคม 2024 เป็นสิ่งทดแทนแบบหลังยุคควอนตัมสำหรับการแลกเปลี่ยนกุญแจด้วย Diffie-Hellman และ RSA กลไกนี้ห่อหุ้มกุญแจสมมาตรด้วยกุญแจสาธารณะ และสร้างความลับร่วมที่ทั้งสองฝ่ายสามารถใช้สำหรับการเข้ารหัสแบบสมมาตร ML-KEM พัฒนาต่อยอดจาก CRYSTALS-Kyber โดยปรับแก้เล็กน้อยเพื่อให้ข้อกำหนดมีความชัดเจนและเป็นระเบียบยิ่งขึ้น
ชุดพารามิเตอร์ของ ML-KEM
ML-KEM กำหนดชุดพารามิเตอร์สามชุด ML-KEM-512 มุ่งให้มีความปลอดภัยประมาณ 128 บิตในกรณีการโจมตีแบบดั้งเดิม และ 100 บิตในกรณีหลังยุคควอนตัม โดยมีกุญแจสาธารณะขนาด 800 ไบต์และข้อความเข้ารหัสขนาด 768 ไบต์ ML-KEM-768 มุ่งให้มีความปลอดภัย 192 บิตในกรณีการโจมตีแบบดั้งเดิม (กุญแจสาธารณะ 1184 ไบต์ ข้อความเข้ารหัส 1088 ไบต์) ส่วน ML-KEM-1024 มุ่งให้มีความปลอดภัย 256 บิตในกรณีการโจมตีแบบดั้งเดิม (กุญแจสาธารณะ 1568 ไบต์ ข้อความเข้ารหัส 1568 ไบต์) NIST แนะนำให้ใช้ ML-KEM-768 สำหรับแอปพลิเคชันส่วนใหญ่
การสร้างกุญแจใน ML-KEM
การสร้างกุญแจของ ML-KEM ทำงานดังนี้ สุ่มเลือกเมทริกซ์ A จากค่าเริ่มต้นโดยใช้ SHAKE-128 สุ่มเวกเตอร์ลับขนาดเล็ก s และเวกเตอร์ข้อผิดพลาด e จากนั้นคำนวณ t = As + e mod q กุญแจสาธารณะคือ (seed, t) ส่วนกุญแจส่วนตัวคือ s พร้อมแฮชของกุญแจสาธารณะ การใช้ค่าเริ่มต้นแทนการจัดเก็บ A ช่วยประหยัดหน่วยความจำและแบนด์วิดท์ได้อย่างมาก
กระบวนการห่อหุ้ม
ในการห่อหุ้ม ผู้ส่งจะสร้างข้อความสุ่ม m และหาคีย์สมมาตร K รวมทั้งค่าความสุ่ม r ผ่าน SHA-3 ข้อความเข้ารหัสประกอบด้วยสองส่วน ได้แก่ u = Ar + e1 mod q และ v = t^T r + e2 + encode(m) mod q ความลับร่วม K ได้มาจากแฮชของ m ส่วนค่าความสุ่มจะถูกสร้างจาก m แบบกำหนดแน่นอน ทำให้ข้อความเข้ารหัสผูกกับกุญแจ
การถอดห่อหุ้มและการแปลง FO
การถอดห่อหุ้มจะกู้คืน m โดยคำนวณ v - s^T u แล้วถอดรหัส จากนั้นคำนวณ K ใหม่จาก m การแปลง Fujisaki-Okamoto เพิ่มขั้นตอนสำคัญด้วยการเข้ารหัส m ที่กู้คืนมาใหม่และตรวจสอบว่าข้อความเข้ารหัสตรงกันหรือไม่ หากไม่ตรงกัน ให้ส่งคืนค่าหลอกสุ่มที่ได้จากแฮชของกุญแจส่วนตัวและข้อความเข้ารหัส วิธีนี้ป้องกันการโจมตีแบบเลือกข้อความเข้ารหัสได้ โดยทำให้การถอดห่อหุ้มมีผลที่กำหนดแน่นอนและตรวจสอบได้
การพิสูจน์ความปลอดภัย CCA2
ML-KEM มีความปลอดภัยระดับ IND-CCA2 ในแบบจำลองแรนดอมออราเคิลเชิงควอนตัม (QROM) โดยพิสูจน์ภายใต้ข้อสมมติฐาน Module-LWE QROM มีความสำคัญเนื่องจากผู้โจมตีหลังยุคควอนตัมสามารถสอบถามฟังก์ชันแฮชในสถานะซ้อนทับได้ การพิสูจน์ความปลอดภัยของ Hofheinz, Hovelmanns และ Kiltz (กรอบงาน HHK) ให้การลดรูปที่รัดกุมจากความปลอดภัยของ Module-LWE ไปสู่ความปลอดภัยของ ML-KEM ใน QROM
ประสิทธิภาพเมื่อเทียบกับ RSA และ ECDH
ML-KEM มีประสิทธิภาพเหนือกว่า RSA อย่างมากสำหรับการแลกเปลี่ยนกุญแจที่ระดับความปลอดภัยเทียบเท่ากัน การสร้างกุญแจของ ML-KEM-768 ใช้เวลาประมาณ 16 ไมโครวินาทีบน CPU สมัยใหม่ การห่อหุ้มใช้เวลา 20 ไมโครวินาที และการถอดห่อหุ้มใช้เวลา 18 ไมโครวินาที ขณะที่การสร้างกุญแจ RSA-2048 ใช้เวลาหลายวินาที กุญแจสาธารณะของ ML-KEM (1184 ไบต์) มีขนาดใหญ่กว่า ECDH (32-64 ไบต์) แต่เล็กกว่า RSA-2048 มาก (256 ไบต์สำหรับกุญแจเพียงอย่างเดียว แต่โดยปฏิบัติจะยาวกว่านี้)
การใช้งานแบบผสม
ในช่วงเปลี่ยนผ่าน การแลกเปลี่ยนกุญแจแบบผสมจะใช้ ML-KEM ร่วมกับอัลกอริทึมแบบดั้งเดิม (โดยทั่วไปคือ X25519 หรือ P-256 ECDH) ความลับร่วมคือแฮชของผลลัพธ์จาก KEM ทั้งสองชุด: K = Hash(K_classical || K_pqc) วิธีนี้ทำให้ความปลอดภัยไม่ด้อยกว่าส่วนประกอบใดส่วนประกอบหนึ่ง การใช้งาน TLS แบบผสมระบุไว้ใน draft-ietf-tls-hybrid-design และรองรับใน BoringSSL, OpenSSL 3.x และ Rustls
ML-KEM ใน TLS 1.3
IETF กำหนด X25519ML-KEM-768 ให้เป็นส่วนแบ่งกุญแจแบบผสมสำหรับ TLS 1.3 (draft-ietf-tls-hybrid-design) Chrome เพิ่มการรองรับในเวอร์ชัน 124 (เมษายน 2024) และ Firefox ในเวอร์ชัน 132 (2024) Cloudflare นำ ML-KEM ไปใช้งานในโครงสร้างพื้นฐานสำหรับยุติการเชื่อมต่อ TLS การนำไปใช้อย่างรวดเร็วนี้ทำให้ปัจจุบันมีการเชื่อมต่อ TLS หลายร้อยล้านรายการต่อวันที่รวมการแลกเปลี่ยนกุญแจหลังยุคควอนตัมไว้ด้วย
อัตราความล้มเหลวในการถอดรหัส
เนื่องจากมีพจน์ข้อผิดพลาดใน LWE จึงมีความน่าจะเป็นเล็กน้อยมากที่การถอดห่อหุ้มจะล้มเหลวแม้ไม่มีผู้โจมตี สำหรับ ML-KEM-512 ความน่าจะเป็นของความล้มเหลวอยู่ที่ประมาณ 2^{-139} ส่วน ML-KEM-768 อยู่ที่ 2^{-164} อัตราเหล่านี้ต่ำกว่าระดับที่น่ากังวลในทางปฏิบัติมาก (เมื่อเปรียบเทียบกันแล้ว ข้อผิดพลาดของฮาร์ดแวร์เกิดขึ้นบ่อยกว่ามาก) และไม่ส่งผลต่อความปลอดภัย แต่ต้องนำมาพิจารณาในข้อกำหนด
การนำไปใช้แบบโอเพนซอร์ส
ML-KEM มีการนำไปใช้ในไลบรารีโอเพนซอร์สจำนวนมาก การนำไปใช้อ้างอิงจากทีม Kyber เผยแพร่ในโดเมนสาธารณะ PQClean มีการนำไปใช้ด้วยภาษา C ที่ปรับปรุงให้สะอาดและพกพาได้ liboqs (โครงการ Open Quantum Safe) ผนวก ML-KEM เข้ากับตัวห่อหุ้มไลบรารี AWS-LC (สาขาที่ Amazon แยกมาจาก BoringSSL) มี ML-KEM สำหรับปลายทาง TLS ของ AWS มาตรฐาน NIST FIPS 203 มีรหัสเทียมโดยละเอียดสำหรับการดำเนินการทั้งหมด
แบบทดสอบพารามิเตอร์ ML-KEM
NIST แนะนำชุดพารามิเตอร์ใดของ ML-KEM สำหรับแอปพลิเคชันส่วนใหญ่
สรุป ML-KEM
ML-KEM (FIPS 203) คือ KEM หลังยุคควอนตัมที่ NIST กำหนดเป็นมาตรฐาน โดยอิงจาก Module-LWE ชุดพารามิเตอร์สามชุด (512/768/1024) ให้ความปลอดภัย 128/192/256 บิตในกรณีการโจมตีแบบดั้งเดิม การสร้างกุญแจสร้างกุญแจสาธารณะขนาดกะทัดรัดจากค่าเริ่มต้นสุ่ม การห่อหุ้มสร้างความลับร่วม และการถอดห่อหุ้มใช้การแปลง FO เพื่อให้มีความปลอดภัยระดับ CCA2 ML-KEM เร็วกว่า RSA อย่างมีนัยสำคัญ และมีการใช้งานแล้วใน Chrome, Firefox และ TLS ของ Cloudflare
คำถามที่พบบ่อย
บทเรียน “ML-KEM (FIPS 203): มาตรฐาน CRYSTALS-Kyber” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ML-KEM (FIPS 203): มาตรฐาน CRYSTALS-Kyber” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ML-KEM (FIPS 203): มาตรฐาน CRYSTALS-Kyber”
เจาะลึกกลไกการห่อหุ้มกุญแจของ ML-KEM ชุดพารามิเตอร์ และข้อควรพิจารณาในการนำไปใช้งาน คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ML-KEM (FIPS 203): มาตรฐาน CRYSTALS-Kyber” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม
ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การแข่งขัน NIST PQC: กระบวนการและเกณฑ์
- ML-KEM (FIPS 203): มาตรฐาน CRYSTALS-Kyber
- ML-DSA (FIPS 204) และ SLH-DSA (FIPS 205)
- การวางแผนย้ายไปใช้มาตรฐานหลังยุคควอนตัม