Vulnerabilitat en implementacions de l'algoritme de xifratge postquàntic Kyber

En la implementació de l'algoritme de xifratge Kyber, que va guanyar el concurs d'algoritmes criptogràfics resistents a la força bruta en un ordinador quàntic, es va identificar una vulnerabilitat que permet als atacs de canal lateral recrear claus secretes basant-se en mesurar el temps de les operacions durant el desxifrat del text xifrat proporcionat per l'atacant. El problema afecta tant la implementació de referència del mecanisme d'encapsulació de claus CRYSTALS-Kyber KEM com moltes biblioteques de xifratge de tercers habilitades per Kyber, inclosa la biblioteca pqcrypto que s'utilitza al missatger de senyal.

L'essència de la vulnerabilitat, que va rebre el nom de codi KyberSlash, està en l'ús de l'operació de divisió "t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;" en el procés de descodificació d'un missatge , en què el dividend conté el valor secret “t” amb el tipus “double”, i el divisor és el conegut valor públic KYBER_Q. El problema és que el temps d'una operació de divisió no és constant, i en diferents entorns el nombre de cicles de CPU realitzats per a la divisió depèn de les dades d'entrada. Així, a partir dels canvis en els temps de funcionament, es pot fer una idea de la naturalesa de les dades utilitzades en la divisió.

Daniel J. Bernstein, un conegut expert en el camp de la criptografia, va poder preparar una demostració de treball de prova que l'atac es podia dur a terme a la pràctica. En dos dels tres experiments realitzats, quan s'executava codi a la placa Raspberry Pi 2, va ser possible recrear completament la clau privada Kyber-512 basant-se en mesures de temps de descodificació de dades. El mètode també es pot adaptar per a les claus Kyber-768 i Kyber-1024. Per dur a terme un atac amb èxit, és necessari que el text xifrat especificat per l'atacant es processi amb el mateix parell de claus i que es pugui mesurar amb precisió el temps d'execució de l'operació.

S'ha identificat una altra filtració (KyberSlash2) en algunes biblioteques, que també es produeix a causa de l'ús d'un valor secret quan es realitza la divisió. Les diferències respecte a la primera opció es redueixen a la trucada en l'etapa de xifratge (a les funcions poly_compress i polyvec_compress), i no durant el desxifrat. Tanmateix, la segona opció pot ser útil per a un atac només en els casos en què el procediment s'utilitza en operacions de rexifrat en què la sortida del text xifrat es considera confidencial.

La vulnerabilitat ja s'ha solucionat a les biblioteques:

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

Biblioteques no afectades inicialment per la vulnerabilitat:

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

La vulnerabilitat continua sense pegar a les biblioteques:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-Software/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (El 20 de desembre, només es va solucionar una versió de la vulnerabilitat),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (el 20 de desembre, només es va solucionar 1 vulnerabilitat),
  • rustpq/pqcrypto/pqcrypto-kyber (es va afegir una correcció a libsignal el 5 de gener, però la vulnerabilitat encara no s'ha solucionat al mateix pqcrypto-kyber).

Font: opennet.ru

Afegeix comentari