Vulnerabilitatea în implementările algoritmului de criptare post-cuantică Kyber

În implementarea algoritmului de criptare Kyber, care a câștigat competiția de algoritmi criptografici rezistenți la forța brută pe un computer cuantic, a fost identificată o vulnerabilitate care permite atacurilor pe canale laterale să recreeze chei secrete bazate pe măsurarea timpului operațiunilor în timpul decriptării text cifrat furnizat de atacator. Problema afectează atât implementarea de referință a mecanismului de încapsulare a cheilor CRYSTALS-Kyber KEM, cât și multe biblioteci de criptare de la terțe părți activate de Kyber, inclusiv biblioteca pqcrypto utilizată în mesajul Signal.

Esența vulnerabilității, care a primit numele de cod KyberSlash, este în utilizarea operațiunii de divizare „t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” în procesul de decodare a unui mesaj , în care dividendul conține valoarea secretă „t” cu tipul „double”, iar divizorul este cunoscuta valoare publică KYBER_Q. Problema este că timpul unei operațiuni de divizare nu este constant, iar în diferite medii numărul de cicluri CPU efectuate pentru divizare depinde de datele de intrare. Astfel, pe baza modificărilor timpilor de funcționare, se poate face o idee despre natura datelor utilizate în diviziune.

Daniel J. Bernstein, un cunoscut expert în domeniul criptografiei, a reușit să pregătească o demonstrație de lucru a dovezii că atacul ar putea fi efectuat în practică. În două dintre cele trei experimente efectuate, la rularea codului pe placa Raspberry Pi 2, a fost posibilă recrearea completă a cheii private Kyber-512 pe baza măsurării timpului de decodare a datelor. Metoda poate fi adaptată și pentru cheile Kyber-768 și Kyber-1024. Pentru a efectua cu succes un atac, este necesar ca textul cifrat specificat de atacator să fie procesat folosind aceeași pereche de chei și ca timpul de execuție al operației să poată fi măsurat cu precizie.

În unele biblioteci a fost identificată o altă scurgere (KyberSlash2), care apare și din cauza utilizării unei valori secrete la efectuarea diviziunii. Diferențele față de prima opțiune se reduc la apelul în etapa de criptare (în funcțiile poly_compress și polyvec_compress), și nu în timpul decriptării. Totuși, a doua opțiune poate fi utilă pentru un atac numai în cazurile în care procedura este utilizată în operațiuni de recriptare în care rezultatul textului cifrat este considerat confidențial.

Vulnerabilitatea a fost deja remediată în biblioteci:

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

Biblioteci care nu au fost afectate inițial de vulnerabilitate:

  • 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.

Vulnerabilitatea rămâne nepattched în biblioteci:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-Software/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (Pe 20 decembrie, doar 1 versiune a vulnerabilității a fost remediată),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (Pe 20 decembrie, doar 1 vulnerabilitate a fost remediată),
  • rustpq/pqcrypto/pqcrypto-kyber (o remediere a fost adăugată la libsignal pe 5 ianuarie, dar vulnerabilitatea nu a fost încă remediată în pqcrypto-kyber).

Sursa: opennet.ru

Adauga un comentariu