การเข้ารหัสทนทานต่อควอนตัมสำหรับระบบนิเวศ Go
filippo.io/mlkem768 คืออิมพลีเมนเทชัน ML-KEM-768 แบบ pure Go ที่ปรับให้เหมาะกับความถูกต้องและความอ่านง่าย
- ML-KEM เป็นกลไกการแลกเปลี่ยนกุญแจที่ทนทานต่อควอนตัม ซึ่งอยู่ระหว่างกระบวนการทำให้เป็นมาตรฐานโดย NIST และกำลังถูกนำไปใช้ในอุตสาหกรรมส่วนใหญ่
- แพ็กเกจนี้ประกอบด้วยโค้ดราว 500 บรรทัด คอมเมนต์ 200 บรรทัด และเทสต์ 650 บรรทัด โดยไม่มี dependency นอกจาก
golang.org/x/crypto/sha3
- มีแผนจะถูกรวมเข้าไปใน Go standard library และถูกออกแบบมาเพื่อให้ความมั่นใจด้านความปลอดภัยสูงผ่านการรีวิวที่ง่าย ความเรียบง่าย และการทดสอบอย่างละเอียด
อิมพลีเมนเทชันสำหรับตรวจสอบสเปก
- ต่างจากอิมพลีเมนเทชันส่วนใหญ่ โค้ดนี้ไม่ได้พอร์ตมาจากไลบรารีอ้างอิง pq-crystals และถูกเขียนขึ้นใหม่ตั้งแต่ต้นโดยไม่อ่านโค้ดเบสอื่นอย่างละเอียด
- เอกสาร FIPS 203 เป็นคู่มือการอิมพลีเมนต์ที่ยอดเยี่ยม เพราะมี pseudocode ที่ละเอียด คำจำกัดความที่ครบถ้วน และข้อมูลชนิดข้อมูลที่สอดคล้องกัน
- เพื่อเพิ่มทั้งความอ่านง่ายของโค้ดและคุณค่าในฐานะแหล่งเรียนรู้ ชื่อฟังก์ชัน ชื่อตัวแปร และลำดับการคำนวณจึงถูกเลือกอย่างระมัดระวังให้สอดคล้องกับสเปก FIPS
พหุนามและพีชคณิตเชิงเส้นที่เพียงพอสำหรับการอิมพลีเมนต์
- แม้ว่าสเปกจะต้องการพื้นฐานคณิตศาสตร์ค่อนข้างจำกัด แต่เพื่อให้ผู้พัฒนาทำงานได้ง่ายขึ้น จึงได้เขียน "พหุนามและพีชคณิตเชิงเส้นที่เพียงพอสำหรับการอิมพลีเมนต์ Kyber"
- ส่วนที่เหลือถูกปล่อยให้เป็นแบบฝึกหัดสำหรับผู้อ่าน ได้แก่ 1) modular arithmetic บนจำนวนเฉพาะ 3329 2) การอิมพลีเมนต์อย่างเป็นรูปธรรมของฟังก์ชันบีบอัดและคลายบีบอัดจาก [0, 3329) ไปยัง [0, 2ᵈ) และ 3) การรับประกันการคำนวณแบบคงเวลา
ความอ่านง่ายและคุณค่าด้านการเรียนรู้
- ความอ่านง่ายเป็นหนึ่งในเป้าหมายหลักของอิมพลีเมนเทชัน เพื่อช่วยให้รีวิวได้อย่างมีประสิทธิภาพ และทำหน้าที่เป็นแหล่งเรียนรู้สำหรับผู้ดูแลรุ่นถัดไปและวิศวกรด้านคริปโตกราฟี
- เพื่อให้อ่านฟังก์ชันที่ซับซ้อนได้ง่ายขึ้น บางครั้งโค้ดจึงยาวขึ้นและนำกลับมาใช้ซ้ำได้น้อยลง
ความมั่นใจด้านความปลอดภัยสูงผ่านการทดสอบ
- มีการตรวจสอบว่าการสร้างกุญแจ การ encapsulation และ decapsulation ทำงานได้อย่างถูกต้อง และรักษา test coverage ไว้มากกว่า 95%
- รับประกันการทำงานร่วมกันได้กับ test vector จาก NIST และอิมพลีเมนเทชันอื่น ๆ พร้อมทั้งทดสอบการคำนวณเลขคณิตของฟิลด์พื้นฐานอย่างละเอียดด้วยการเทียบกับค่าที่คาดไว้
- มีการเผยแพร่ test vector ที่นำกลับไปใช้ซ้ำกับอิมพลีเมนเทชันอื่นได้ในฐานะส่วนหนึ่งของโครงการ CCTV
ประสิทธิภาพ
- แม้ประสิทธิภาพจะไม่ใช่เป้าหมายหลัก แต่แพ็กเกจก็จำเป็นต้องเร็วพอที่จะใช้งานได้จริง
- ML-KEM เร็วเพียงพออยู่แล้ว และอิมพลีเมนเทชันที่เรียบง่ายนี้สามารถแข่งขันกับอิมพลีเมนเทชัน P-256 และ X25519 ที่ปรับแต่งด้วยแอสเซมบลีได้
- มีความพยายามปรับปรุงประสิทธิภาพ เช่น ทำตามแพตเทิร์นการเขียนโปรแกรมของ Go และลดการจัดสรรบนฮีปให้น้อยที่สุด
การใช้อิมพลีเมนเทชัน ML-KEM เป็น Kyber v3
- NIST ได้ทำการเปลี่ยนแปลงเล็กน้อยบางประการกับการส่งผลงาน Kyber รอบที่ 3
- มีโปรโตคอลเชิงทดลองบางส่วนที่นิยามโดยอิงกับ Kyber v3 (หรือ "draft00") แต่ไม่จำเป็นต้องสร้างแพ็กเกจแยกต่างหาก
- สามารถใช้ ML-KEM เพื่อสร้าง shared secret K แล้วจึงใช้การอนุมานกุญแจเพิ่มเติมเพื่อสร้าง shared secret ของ Kyber
ความเห็นของ GN⁺
- ความสำคัญของการเข้ารหัสทนทานต่อควอนตัม: ด้วยความก้าวหน้าของควอนตัมคอมพิวติง เทคโนโลยีการเข้ารหัสแบบเดิมอาจเปราะบางลงได้ ดังนั้นการพัฒนาและทำให้เทคโนโลยีอย่าง ML-KEM เป็นมาตรฐานจึงมีความสำคัญมาก
- ความขยายตัวของภาษา Go: อิมพลีเมนเทชันนี้แสดงให้เห็นถึงความขยายตัวและความยืดหยุ่นของภาษา Go และแผนการรวมไลบรารีคริปโตกราฟีเข้ากับ standard library จะทำให้มันเป็นทรัพยากรที่มีประโยชน์ต่อชุมชนนักพัฒนา Go
- คุณค่าด้านการเรียนรู้: แนวทางที่ให้ความสำคัญกับความอ่านง่ายของโค้ดและคุณค่าด้านการเรียนรู้ จะเป็นแหล่งความรู้ที่มีประโยชน์อย่างมากสำหรับวิศวกรคริปโตกราฟีรุ่นถัดไปและนักพัฒนาที่สนใจ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
คำถามเกี่ยวกับสถานะปัจจุบันของควอนตัมคอมพิวติง
คำทักทายและการแบ่งปันจาก Kudelski Security
แนะนำหนังสือเกี่ยวกับระบบเข้ารหัสที่พัฒนาด้วยภาษา Go
คำถามเกี่ยวกับอิมพลีเมนเทชันในภาษาอื่น (เช่น Java, C# เป็นต้น)
ความกังวลเกี่ยวกับอิมพลีเมนเทชันแบบเพียวที่เขียนด้วย Go
ความสนใจและคำถามเกี่ยวกับการรองรับ Kyber v3
มุกเกี่ยวกับตาราง system call แบบ 32 บิต
ความชอบต่อการใช้ชื่อตัวแปรแบบ Unicode
คำชมต่อโปรเจ็กต์อื่นของ FiloSottile
การแชร์ลิงก์เอกสาร NIST FIPS 203