CRYSTALS-Kyber: KEM ที่ใช้แลตทิซ
ศึกษาทีละขั้นตอนเกี่ยวกับการห่อหุ้มคีย์แบบ Module-LWE และชุดพารามิเตอร์
CRYSTALS-Kyber: KEM ที่ใช้แลตทิซ เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงเลือก Kyber
CRYSTALS-Kyber ซึ่ง NIST เปลี่ยนชื่อเป็น ML-KEM ใน FIPS 203 เป็นกลไกการห่อหุ้มกุญแจ (KEM) ที่อิง Module-LWE โดยใช้แทน RSA และ ECDH สำหรับการแลกเปลี่ยนกุญแจ และให้ความต้านทานต่อควอนตัมด้วยประสิทธิภาพที่ใช้งานได้จริง
KEM กับการตกลงกุญแจ
KEM จะห่อหุ้มความลับร่วม โดยผู้ส่งสร้างกุญแจ K แบบสุ่ม แล้วเข้ารหัสด้วยกุญแจสาธารณะของผู้รับ (ห่อหุ้ม) ทำให้ได้ข้อความเข้ารหัส C ผู้รับจะคลายการห่อหุ้ม C ด้วยกุญแจส่วนตัวเพื่อกู้คืน K โดยไม่จำเป็นต้องแลกเปลี่ยนกุญแจแบบโต้ตอบ
พื้นฐานของ Module-LWE
Kyber ใช้ Module-LWE เหนือริง R_q = Z_q[x]/(x^256+1) โดยมี q=3329 มิติ k=2 (Kyber-512), k=3 (Kyber-768), k=4 (Kyber-1024) ระดับความปลอดภัยอยู่ที่ประมาณ 128, 192 และ 256 บิตตามลำดับ โดยแนะนำให้ใช้ k=3 (Kyber-768) เป็นค่าเริ่มต้น
การสร้างกุญแจ
สร้างเมทริกซ์ A ∈ R_q^{k×k} จากค่าเริ่มต้น ρ (ซึ่งสามารถขยายได้) สุ่มค่าลับ s และสัญญาณรบกวน e จากการแจกแจงทวินามที่มีศูนย์กลาง (สัมประสิทธิ์มีค่าขนาดเล็ก) กุญแจสาธารณะ: (ρ, t=As+e) กุญแจส่วนตัว: s สัญญาณรบกวน e มีขนาดเล็ก แต่ช่วยป้องกันไม่ให้กู้คืน s จากกุญแจสาธารณะได้
การห่อหุ้ม
หากต้องการส่งความลับร่วมให้ผู้ถือกุญแจสาธารณะ (ρ, t) ให้สุ่ม r, e1, e2 จากการแจกแจงสัญญาณรบกวน คำนวณ u = A^T r + e1, v = t^T r + e2 + round(q/2)*m โดย m เป็นข้อความสุ่มขนาด 256 บิต ความลับร่วม K = KDF(m) ข้อความเข้ารหัส = (u, v)
การคลายการห่อหุ้ม
เมื่อมีกุญแจส่วนตัว s ให้คำนวณ m' = decompress(v - s^T u) = decompress(t^T r + e2 + round(q/2)*m - s^T(A^T r + e1)) พจน์สัญญาณรบกวนจะหักล้างกันโดยประมาณ ทำให้เหลือ m'≈m จากนั้นคำนวณ K = KDF(m') ความน่าจะเป็นที่การคลายการห่อหุ้มจะล้มเหลวคือ < 2^{-139}
ขนาดกุญแจและข้อความเข้ารหัส
Kyber-768: กุญแจสาธารณะ 1184 ไบต์, กุญแจส่วนตัว 2400 ไบต์, ข้อความเข้ารหัส 1088 ไบต์, ความลับร่วม 32 ไบต์ เมื่อเปรียบเทียบกับ ECDH-P256 ซึ่งมีกุญแจสาธารณะ 65 ไบต์และข้อความเข้ารหัส 32 ไบต์ Kyber มีขนาดใหญ่กว่าประมาณ 15 เท่า แต่ปลอดภัยต่อควอนตัม และยังทำงานได้รวดเร็ว โดยการห่อหุ้มและคลายการห่อหุ้มใช้เวลาน้อยกว่า 1 มิลลิวินาทีบนหน่วยประมวลผลสมัยใหม่
การปรับให้เหมาะสมด้วย NTT
การคูณพหุนามใน R_q = Z_q[x]/(x^256+1) ใช้การแปลงเชิงทฤษฎีจำนวน (NTT) ซึ่งเป็นรูปแบบเลขคณิตมอดูลาร์ที่เทียบเท่ากับ FFT NTT ลดความซับซ้อนของการคูณพหุนามจาก O(n^2) เป็น O(n log n) โดยเลือก q=3329 เพื่อให้มีคุณสมบัติของ NTT ที่ดีสำหรับ n=256
การแลกเปลี่ยนกุญแจแบบผสม
ระหว่างการย้ายไปใช้ PQC ให้ใช้การแลกเปลี่ยนกุญแจแบบผสม โดยรวม ECDH และ Kyber เข้าด้วยกัน ความลับร่วม = KDF(ECDH_output || Kyber_output) ความปลอดภัยต้องอาศัยการทำลายทั้งสองส่วน ฝ่ายตรงข้ามแบบดั้งเดิมไม่สามารถทำลายได้ทั้งคู่ ส่วนฝ่ายตรงข้ามแบบควอนตัมทำลาย ECDH ได้แต่ทำลาย Kyber ไม่ได้ ร่างมาตรฐาน TLS 1.3 (IETF RFC 8446) รองรับ KEM แบบผสม
ข้อพิจารณาด้านช่องทางข้างเคียง
การคลายการห่อหุ้มของ Kyber ไม่ได้ใช้เวลาคงที่ในการนำไปใช้งานแบบพื้นฐาน เนื่องจากขั้นตอนการสุ่มตัวอย่างแบบปฏิเสธทำให้เวลาการทำงานรั่วไหล การนำไปใช้งานอ้างอิงใช้ NTT ที่ใช้เวลาคงที่และการเปรียบเทียบข้อความเข้ารหัสแบบบีบอัดที่ใช้เวลาคงที่ โปรดใช้โค้ดอ้างอิงจากเอกสารส่งของ NIST หรือการนำไปใช้งานในไลบรารีที่ผ่านการตรวจสอบแล้ว
สถานะการนำไปใช้งาน
NIST เผยแพร่ FIPS 203 (ML-KEM) ในเดือนสิงหาคม 2024 Chrome เพิ่มการรองรับ Kyber ใน TLS 1.3 เมื่อปี 2023 Cloudflare, Google และ AWS กำลังนำ ECDH+Kyber แบบผสมไปใช้งาน OpenSSL 3.x เพิ่มการรองรับ ML-KEM แล้ว ส่วนการนำไปใช้งานใน LibSSH และ WireGuard อยู่ระหว่างดำเนินการ
ตรวจสอบความเข้าใจ
เอกสารมาตรฐานใดของ NIST ที่กำหนดมาตรฐาน CRYSTALS-Kyber
สรุปทบทวน
Kyber (ML-KEM) คือ KEM ที่อิง Module-LWE และใช้แทน ECDH ขนาดกุญแจประมาณ 1 KB ใช้เลขคณิต NTT ที่รวดเร็ว และต้านทานควอนตัม ควรนำไปใช้งานแบบผสมกับ ECDH ในระหว่างการย้ายระบบ โดยได้รับการกำหนดมาตรฐานเป็น FIPS 203 บทถัดไป: รูปแบบลายเซ็น CRYSTALS-Dilithium และ Falcon
คำถามที่พบบ่อย
บทเรียน “CRYSTALS-Kyber: KEM ที่ใช้แลตทิซ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “CRYSTALS-Kyber: KEM ที่ใช้แลตทิซ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “CRYSTALS-Kyber: KEM ที่ใช้แลตทิซ”
ศึกษาทีละขั้นตอนเกี่ยวกับการห่อหุ้มคีย์แบบ Module-LWE และชุดพารามิเตอร์ คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “CRYSTALS-Kyber: KEM ที่ใช้แลตทิซ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม
ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- อธิบายอัลกอริทึมของ Shor และ Grover
- CRYSTALS-Kyber: KEM ที่ใช้แลตทิซ
- ลายมือชื่อ CRYSTALS-Dilithium และ Falcon
- การย้ายสู่ PQC: แนวทางแบบผสม