Zraniteľnosť v implementáciách post-kvantového šifrovacieho algoritmu Kyber

Pri implementácii šifrovacieho algoritmu Kyber, ktorý vyhral súťaž kryptografických algoritmov odolných voči hrubej sile na kvantovom počítači, bola identifikovaná zraniteľnosť, ktorá umožňuje útokom postranným kanálom znovu vytvoriť tajné kľúče na základe merania času operácií počas dešifrovania šifrovaný text poskytnutý útočníkom. Problém sa týka tak referenčnej implementácie mechanizmu zapuzdrenia kľúčov CRYSTALS-Kyber KEM, ako aj mnohých šifrovacích knižníc tretích strán s podporou Kyber, vrátane knižnice pqcrypto používanej v programe Signal messenger.

Podstata zraniteľnosti, ktorá dostala kódové označenie KyberSlash, je v použití operácie delenia „t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;“ v procese dekódovania správy. , v ktorom dividenda obsahuje tajnú hodnotu „t“ s typom „double“ a deliteľom je známa verejná hodnota KYBER_Q. Problém je v tom, že čas operácie delenia nie je konštantný a v rôznych prostrediach počet cyklov CPU vykonaných na delenie závisí od vstupných údajov. Na základe zmien prevádzkových časov je teda možné získať predstavu o povahe údajov použitých pri delení.

Daniel J. Bernstein, známy odborník v oblasti kryptografie, dokázal pripraviť fungujúcu ukážku dôkazu, že útok je možné vykonať v praxi. V dvoch z troch uskutočnených experimentov bolo pri spustení kódu na doske Raspberry Pi 2 možné úplne obnoviť súkromný kľúč Kyber-512 na základe merania času dekódovania údajov. Metódu je možné prispôsobiť aj pre kľúče Kyber-768 a Kyber-1024. Pre úspešné vykonanie útoku je potrebné, aby bol šifrovaný text zadaný útočníkom spracovaný pomocou rovnakého páru kľúčov a aby bolo možné presne zmerať čas vykonania operácie.

V niektorých knižniciach bol identifikovaný ďalší únik (KyberSlash2), ku ktorému tiež dochádza v dôsledku použitia tajnej hodnoty pri vykonávaní delenia. Rozdiely oproti prvej možnosti spočívajú vo volaní vo fáze šifrovania (vo funkciách poly_compress a polyvec_compress), a nie počas dešifrovania. Druhá možnosť však môže byť užitočná pri útoku iba v prípadoch, keď sa postup používa pri operáciách opätovného šifrovania, pri ktorých sa výstup šifrovaného textu považuje za dôverný.

Zraniteľnosť už bola opravená v knižniciach:

  • zig/lib/std/crypto/kyber_d00.zig (22. december),
  • pq-crystals/kyber/ref (30. december),
  • symbolicsoft/kyber-k2so (19. december),
  • vzplanutie mrakov/kruh (8. januára),
  • aws/aws-lc/crypto/kyber (4. januára),
  • liboqs/src/kem/kyber (8. januára).

Knižnice, ktoré neboli pôvodne ovplyvnené zraniteľnosťou:

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

Zraniteľnosť zostáva neopravená v knižniciach:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-Software/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (20. decembra bola opravená iba 1 verzia chyby zabezpečenia),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (20. decembra bola opravená iba 1 zraniteľnosť),
  • rustpq/pqcrypto/pqcrypto-kyber (oprava bola pridaná do libsignal 5. januára, ale v samotnom pqcrypto-kyber táto chyba ešte nebola opravená).

Zdroj: opennet.ru

Pridať komentár