ช่องโหว่ในการใช้งานอัลกอริธึมการเข้ารหัสหลังควอนตัม Kyber

ในการใช้งานอัลกอริธึมการเข้ารหัส Kyber ซึ่งชนะการแข่งขันอัลกอริธึมการเข้ารหัสที่ทนทานต่อการใช้กำลังดุร้ายบนคอมพิวเตอร์ควอนตัม มีการระบุช่องโหว่ที่อนุญาตให้การโจมตีช่องทางด้านข้างสร้างคีย์ลับขึ้นมาใหม่โดยอิงจากการวัดเวลาของการดำเนินการระหว่างการถอดรหัส ไซเฟอร์เท็กซ์ที่ผู้โจมตีให้มา ปัญหาดังกล่าวส่งผลกระทบต่อทั้งการใช้งานอ้างอิงของกลไกการห่อหุ้มคีย์ CRYSTALS-Kyber KEM และไลบรารีการเข้ารหัสที่เปิดใช้งาน Kyber ของบุคคลที่สามจำนวนมาก รวมถึงไลบรารี pqcrypto ที่ใช้ใน Signal Messenger

สาระสำคัญของช่องโหว่ซึ่งได้รับชื่อรหัส KyberSlash คือการใช้การดำเนินการหาร “t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” ในกระบวนการถอดรหัสข้อความ โดยเงินปันผลประกอบด้วยค่าลับ “t” ประเภท “สองเท่า” และตัวหารคือค่าสาธารณะที่รู้จักกันดี KYBER_Q ปัญหาคือเวลาของการดำเนินการแบ่งไม่คงที่ และในสภาพแวดล้อมที่แตกต่างกัน จำนวนรอบของ CPU ที่ดำเนินการสำหรับการแบ่งขึ้นอยู่กับข้อมูลอินพุต ดังนั้นจากการเปลี่ยนแปลงของเวลาทำการ เราจึงสามารถเข้าใจถึงลักษณะของข้อมูลที่ใช้ในการแบ่งได้

Daniel J. Bernstein ผู้เชี่ยวชาญที่มีชื่อเสียงในด้านการเข้ารหัส สามารถเตรียมการสาธิตการทำงานเพื่อพิสูจน์ว่าการโจมตีสามารถทำได้ในทางปฏิบัติ ในการทดลองสองในสามที่ดำเนินการ เมื่อรันโค้ดบนบอร์ด Raspberry Pi 2 คุณสามารถสร้างคีย์ส่วนตัว Kyber-512 ขึ้นใหม่ทั้งหมดโดยอิงจากการวัดเวลาในการถอดรหัสข้อมูล วิธีการนี้ยังสามารถปรับใช้กับคีย์ Kyber-768 และ Kyber-1024 ได้ เพื่อให้การโจมตีสำเร็จ จำเป็นต้องประมวลผลไซเฟอร์เท็กซ์ที่ระบุโดยผู้โจมตีโดยใช้คู่คีย์เดียวกัน และสามารถวัดเวลาดำเนินการของการดำเนินการได้อย่างแม่นยำ

มีการระบุการรั่วไหลอีกครั้ง (KyberSlash2) ในไลบรารีบางแห่ง ซึ่งเกิดขึ้นเนื่องจากการใช้ค่าลับเมื่อทำการแบ่ง ความแตกต่างจากตัวเลือกแรกอยู่ที่การโทรในขั้นตอนการเข้ารหัส (ในฟังก์ชัน poly_compress และ polyvec_compress) ไม่ใช่ในระหว่างการถอดรหัส อย่างไรก็ตาม ตัวเลือกที่สองอาจมีประโยชน์สำหรับการโจมตีเฉพาะในกรณีที่มีการใช้ขั้นตอนในการดำเนินการเข้ารหัสซ้ำ ซึ่งเอาท์พุตของไซเฟอร์เท็กซ์ถือว่าเป็นความลับ

ช่องโหว่ได้รับการแก้ไขแล้วในไลบรารี:

  • zig/lib/std/crypto/kyber_d00.zig (22 ธันวาคม)
  • pq-crystals/kyber/ref (30 ธันวาคม)
  • symbolicsoft/kyber-k2so (19 ธันวาคม)
  • cloudflare/circl (8 มกราคม)
  • aws/aws-lc/crypto/kyber (4 มกราคม)
  • liboqs/src/kem/kyber (8 มกราคม)

ไลบรารี่ไม่ได้รับผลกระทบจากช่องโหว่ตั้งแต่แรก:

  • น่าเบื่อssl/crypto/kyber,
  • filippo.io/mlkem768,
  • formosa-crypto/libjade/tree/main/src/crypto_kem,
  • kyber/ทั่วไป/amd64/avx2,
  • formosa-crypto/libjade/tree/main/src/crypto_kem/kyber/common/amd64/ref,
  • pq-คริสตัล/kyber/avx2,
  • pqclean/crypto_kem/kyber*/avx2.

ช่องโหว่ยังคงไม่ได้รับการติดตั้งในไลบรารี:

  • antontutoveanu/คริสตัล-kyber-จาวาสคริปต์,
  • อาร์ไกล์-ซอฟต์แวร์/kyber,
  • เดเบียน / src / liboqs / ไม่เสถียร / src / kem / kyber
  • kudelskisecurity/คริสตัล-โก
  • mupq/pqm4/crypto_kem/kyber* (เมื่อวันที่ 20 ธันวาคม มีการแก้ไขช่องโหว่เพียง 1 เวอร์ชันเท่านั้น)
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/สะอาด
  • Randombit/botan (เมื่อวันที่ 20 ธันวาคม มีการแก้ไขช่องโหว่เพียง 1 รายการ)
  • rustpq/pqcrypto/pqcrypto-kyber (มีการเพิ่มการแก้ไขใน libsignal เมื่อวันที่ 5 มกราคม แต่ช่องโหว่ยังไม่ได้รับการแก้ไขใน pqcrypto-kyber เอง)

ที่มา: opennet.ru

เพิ่มความคิดเห็น