1 คะแนน โดย GN⁺ 2024-02-02 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

การเข้ารหัสทนทานต่อควอนตัมสำหรับระบบนิเวศ 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 ความคิดเห็น

 
GN⁺ 2024-02-02
ความคิดเห็นจาก Hacker News
  • คำถามเกี่ยวกับสถานะปัจจุบันของควอนตัมคอมพิวติง

    ตั้งคำถามว่าควอนตัมคอมพิวติงไปถึงระดับที่จำเป็นต่อการใช้งานจริงแล้วหรือยัง หรือเป็นเหมือน AI ที่มีการเปลี่ยนนิยามแล้วนำผลิตภัณฑ์เดิมมาเปิดตัวภายใต้ชื่อใหม่

  • คำทักทายและการแบ่งปันจาก Kudelski Security

    แนะนำกรณีล่าสุดที่ Kudelski Security ต้องยุติไลบรารีภาษา Go ตัวหนึ่งสำหรับการเข้ารหัสที่ทนทานต่อควอนตัม โดยสามารถดูรายละเอียดเพิ่มเติมได้ในบทความที่ลิงก์ไว้

  • แนะนำหนังสือเกี่ยวกับระบบเข้ารหัสที่พัฒนาด้วยภาษา Go

    แนะนำหนังสือของ John Arundel เกี่ยวกับการพัฒนาระบบเข้ารหัสสำหรับ Go เวอร์ชัน 1.22 โดยในช่วงท้ายของหนังสือมีการกล่าวถึงการเข้ารหัสที่ทนทานต่อควอนตัม และหนังสืออาจมีการอัปเดตหลังจากการมาตรฐาน PQ ของ NIST

  • คำถามเกี่ยวกับอิมพลีเมนเทชันในภาษาอื่น (เช่น Java, C# เป็นต้น)

    ถามหาข้อมูลเกี่ยวกับอิมพลีเมนเทชันลักษณะเดียวกันในภาษาโปรแกรมอื่น

  • ความกังวลเกี่ยวกับอิมพลีเมนเทชันแบบเพียวที่เขียนด้วย Go

    แสดงความกังวลว่าหากเขียนด้วยภาษา Go แบบเพียว อาจเสี่ยงต่อการโจมตี side channel ด้านเวลา/พลังงาน

  • ความสนใจและคำถามเกี่ยวกับการรองรับ Kyber v3

    ประเมินเชิงบวกต่อการรองรับ draft00/kyber v3 และถามถึงความเป็นไปได้ในการรองรับโหมด Kyber 90's โดยไม่ใช้ SHA-3

  • มุกเกี่ยวกับตาราง system call แบบ 32 บิต

    มุกว่าตาราง system call แบบ 32 บิตนั้น 'กำลังจะเปิดตัวเร็ว ๆ นี้'

  • ความชอบต่อการใช้ชื่อตัวแปรแบบ Unicode

    แม้จะไม่มีความสามารถพอจะตัดสินคุณภาพของอัลกอริทึมหรืออิมพลีเมนเทชัน แต่ก็ชื่นชอบการใช้ Unicode ในชื่อตัวแปรอย่างมาก

  • คำชมต่อโปรเจ็กต์อื่นของ FiloSottile

    แสดงความชื่นชอบต่อ 'age' ซึ่งเป็นเครื่องมืออีกตัวที่ FiloSottile พัฒนา

  • การแชร์ลิงก์เอกสาร NIST FIPS 203

    แชร์ลิงก์ไปยังเอกสาร NIST FIPS 203 ที่กล่าวถึงในบทความ