Vulnerability in the implementations of the post-quantum encryption algorithm Kyber

W realizacji algorytmu szyfrowania Kyber, który wygrał konkurs na kryptograficzne algorytmy odporne na ataki z wykorzystaniem komputerów kwantowych, ujawniono podatność, która umożliwia przeprowadzanie ataków z wykorzystaniem kanałów bocznych w celu rekonstrukcji tajnych kluczy na podstawie pomiaru czasu operacji podczas odszyfrowywania dostarczonego przez atakującego tekstu szyfrowanego. Problem dotyczy zarówno referencyjnej realizacji mechanizmu kapsułkowania kluczy CRYSTALS-Kyber KEM, jak i wielu zewnętrznych bibliotek szyfrujących obsługujących Kyber, w tym biblioteki pqcrypto stosowanej w komunikatorze Signal.

Istota podatności, która otrzymała kodową nazwę KyberSlash, polega na wykorzystaniu podczas dekodowania wiadomości operacji dzielenia „t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;”, w której dzielna zawiera tajną wartość „t” typu „double”, a dzielnik to powszechnie znana publiczna wartość KYBER_Q. Problem polega na tym, że czas operacji dzielenia nie jest stałą wartością i w różnych środowiskach liczba cykli CPU wykonywanych dla dzielenia zależy od danych wejściowych. W związku z tym na podstawie zmiany czasu operacji można uzyskać informacje o charakterze używanych podczas dzielenia danych.

Daniel Bernstein, znany ekspert w dziedzinie kryptografii, zdołał przygotować działającą demonstrację dowodu na możliwość przeprowadzenia ataku w praktyce. W dwóch z trzech przeprowadzonych eksperymentów, podczas wykonywania kodu na płycie Raspberry Pi 2, udało się w pełni zrekonstruować prywatny klucz Kyber-512 na podstawie pomiaru czasu dekodowania danych. Metoda ta może być również dostosowana do kluczy Kyber-768 i Kyber-1024. Aby przeprowadzenie ataku było skuteczne, dane szyfrowane dostarczone przez atakującego muszą być przetwarzane z użyciem tej samej pary kluczy, a także konieczne jest dokładne mierzenie czasu wykonania operacji.

W niektórych bibliotekach wykryto kolejny wyciek (KyberSlash2), który również występuje z powodu użycia sekretnej wartości podczas wykonywania dzielenia. Różnice w stosunku do pierwszej wersji sprowadzają się do wywołania na etapie szyfrowania (w funkcjach poly_compress i polyvec_compress), a nie w czasie deszyfrowania. Przy tym druga wersja może okazać się przydatna do ataków tylko w przypadkach użycia procedury w operacjach ponownego szyfrowania, w których wynik szyfrogramu jest uznawany za poufny.

Vulnera biląd została już usunięta w bibliotkach:

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

Biblioteki, które pierwotnie nie były podatne na podatność:

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

Podatność pozostaje nieusunięta w bibliotekach:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-Software/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (20 grudnia naprawiony został tylko 1 wariant podatności),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (20 grudnia naprawiony został tylko 1 wariant podatności),
  • rustpq/pqcrypto/pqcrypto-kyber (5 stycznia poprawka została dodana w libsignal, ale w samym pqcrypto-kyber podatność wciąż nie jest naprawiona).

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster