Luka w implementacjach algorytmu szyfrowania postkwantowego Kyber

We wdrożeniu algorytmu szyfrującego Kyber, który zwyciężył w konkursie algorytmów kryptograficznych odpornych na brutalną siłę na komputerze kwantowym, zidentyfikowano podatność umożliwiającą atakom typu side-channel odtworzenie tajnych kluczy na podstawie pomiaru czasu operacji podczas deszyfrowania szyfrogram dostarczony przez atakującego. Problem dotyczy zarówno referencyjnej implementacji mechanizmu enkapsulacji kluczy CRYSTALS-Kyber KEM, jak i wielu bibliotek szyfrujących obsługujących Kyber innych firm, w tym biblioteki pqcrypto używanej w komunikatorze Signal.

Luka o nazwie kodowej KyberSlash opiera się na wykorzystaniu operacji dzielenia „t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” w procesie dekodowania wiadomości, gdzie dzielna zawiera tajną wartość „t” typu „double”, a dzielnik jest dobrze znaną publiczną wartością KYBER_Q. Problem polega na tym, że czas operacji dzielenia nie jest stały, a w różnych środowiskach liczba cykli procesora wykonywanych dla dzielenia zależy od danych wejściowych. Tak więc na podstawie zmiany czasu operacji można uzyskać wyobrażenie o charakterze danych użytych do dzielenia.

Daniel J. Bernstein, znany ekspert kryptografii, stworzył działający dowód koncepcji ataku. W dwóch z trzech eksperymentów kod był uruchamiany na Raspberry Pi 2 i był w stanie całkowicie odtworzyć klucz prywatny Kyber-512 na podstawie czasu dekodowania. Metodę można również dostosować do kluczy Kyber-768 i Kyber-1024. Aby atak się powiódł, szyfrogram dostarczony przez atakującego musi zostać przetworzony przy użyciu tej samej pary kluczy, a czas wykonania można dokładnie zmierzyć.

Inny wyciek (KyberSlash2) został znaleziony w niektórych bibliotekach, co również ma miejsce z powodu użycia tajnej wartości podczas wykonywania dzielenia. Różnica w stosunku do pierwszej wersji polega na tym, że jest ona wywoływana na etapie szyfrowania (w funkcjach poly_compress i polyvec_compress), a nie podczas deszyfrowania. Jednak druga wersja może być przydatna do ataku tylko w przypadkach, gdy procedura jest używana w operacjach ponownego szyfrowania, w których dane wyjściowe zaszyfrowanego tekstu są uważane za poufne.

Luka została już naprawiona w następujących bibliotekach:

  • 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, na które początkowo nie wpływa luka:

  • nudnessl/krypto/kyber,
  • filippo.io/mlkem768,
  • formosa-crypto/libjade/tree/main/src/crypto_kem,
  • kyber/wspólny/amd64/avx2,
  • formosa-crypto/libjade/tree/main/src/crypto_kem/kyber/common/amd64/ref,
  • pq-kryształy/kyber/avx2,
  • pqclean/crypto_kem/kyber*/avx2.

Luka pozostaje nienaprawiona w bibliotekach:

  • antontutoveanu/crystals-kyber-javascript,
  • Oprogramowanie Argyle/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/kryształy-go,
  • mupq/pqm4/crypto_kem/kyber* (20 grudnia została naprawiona tylko 1 wersja luki),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (20 grudnia naprawiono tylko 1 lukę),
  • rustpq/pqcrypto/pqcrypto-kyber (poprawka została dodana do libsignal 5 stycznia, ale luka nie została jeszcze naprawiona w samym pqcrypto-kyber).

Źródło: opennet.ru

Kup niezawodny hosting dla stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron internetowych z ochroną DDoS, serwery VPS VDS | ProHoster