Kerentanan dalam implementasi algoritma enkripsi pasca-kuantum Kyber

Dalam implementasi algoritma enkripsi Kyber, yang memenangkan persaingan algoritma kriptografi yang tahan terhadap brute force pada komputer kuantum, kerentanan diidentifikasi yang memungkinkan serangan saluran samping untuk membuat ulang kunci rahasia berdasarkan pengukuran waktu operasi selama dekripsi ciphertext yang disediakan oleh penyerang. Masalah ini memengaruhi implementasi referensi mekanisme enkapsulasi kunci CRYSTALS-Kyber KEM dan banyak pustaka enkripsi pihak ketiga yang mendukung Kyber, termasuk pustaka pqcrypto yang digunakan dalam pengirim pesan Signal.

Inti dari kerentanan yang diberi nama kode KyberSlash ini adalah penggunaan operasi pembagian β€œt = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” dalam proses decoding pesan , yang dividennya berisi nilai rahasia β€œt” dengan tipe β€œdouble”, dan pembaginya adalah nilai publik yang terkenal KYBER_Q. Masalahnya adalah waktu operasi pembagian tidak konstan, dan di lingkungan yang berbeda, jumlah siklus CPU yang dilakukan untuk pembagian bergantung pada data masukan. Jadi, berdasarkan perubahan waktu operasi, seseorang dapat memperoleh gambaran tentang sifat data yang digunakan dalam pembagian.

Daniel J. Bernstein, seorang ahli terkenal di bidang kriptografi, mampu menyiapkan demonstrasi bukti bahwa serangan tersebut dapat dilakukan dalam praktiknya. Dalam dua dari tiga percobaan yang dilakukan, saat menjalankan kode pada papan Raspberry Pi 2, kunci pribadi Kyber-512 dapat dibuat ulang sepenuhnya berdasarkan pengukuran waktu decoding data. Metode ini juga dapat diadaptasi untuk kunci Kyber-768 dan Kyber-1024. Agar berhasil melakukan serangan, teks sandi yang ditentukan oleh penyerang perlu diproses menggunakan pasangan kunci yang sama dan waktu pelaksanaan operasi dapat diukur secara akurat.

Kebocoran lain (KyberSlash2) telah diidentifikasi di beberapa perpustakaan, yang juga terjadi karena penggunaan nilai rahasia saat melakukan pembagian. Perbedaan dari opsi pertama terletak pada panggilan pada tahap enkripsi (dalam fungsi poly_compress dan polyvec_compress), dan bukan selama dekripsi. Namun, opsi kedua mungkin berguna untuk serangan hanya jika prosedur tersebut digunakan dalam operasi enkripsi ulang di mana keluaran teks tersandi dianggap rahasia.

Kerentanan telah diperbaiki di perpustakaan:

  • zig/lib/std/crypto/kyber_d00.zig (22 Desember),
  • pq-crystals/kyber/ref (30 Desember),
  • symbolicsoft/kyber-k2so (19 Desember),
  • cloudflare/circl (8 Januari),
  • aws/aws-lc/crypto/kyber (4 Januari),
  • liboqs/src/kem/kyber (8 Januari).

Perpustakaan pada awalnya tidak terpengaruh oleh kerentanan:

  • membosankanssl/crypto/kyber,
  • filippo.io/mlkem768,
  • formosa-crypto/libjade/tree/main/src/crypto_kem,
  • kyber/umum/amd64/avx2,
  • formosa-crypto/libjade/tree/main/src/crypto_kem/kyber/common/amd64/ref,
  • pq-kristal/kyber/avx2,
  • pqclean/crypto_kem/kyber*/avx2.

Kerentanannya masih belum ditambal di perpustakaan:

  • antontutoveanu/crystals-kyber-javascript,
  • Perangkat Lunak Argyle/kyber,
  • debian/src/liboqs/tidak stabil/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (Pada tanggal 20 Desember, hanya 1 versi kerentanan yang diperbaiki),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/bersih,
  • randombit/botan (Pada tanggal 20 Desember, hanya 1 kerentanan yang diperbaiki),
  • karatpq/pqcrypto/pqcrypto-kyber (perbaikan telah ditambahkan ke libsignal pada tanggal 5 Januari, tetapi kerentanan belum diperbaiki di pqcrypto-kyber itu sendiri).

Sumber: opennet.ru

Tambah komentar