Në realizimin e algoritmit të enkriptimit Kyber, i cili fitoi në garën për algoritmat kriptografikë që janë të qëndrueshëm ndaj hakimit nga kompjuterët kuantike, u zbuluar një dobësi që lejon kryerjen e sulmeve përmes kanaleve anësore për të rikrijuar çelësat sekretë në bazë të matjes së kohës së operacioneve gjatë dekriptimit të tekstit të enkriptuar të ofruar nga sulmuesi. Problemi prek si implementimin referues të mekanizmit të inkapsulimit të çelësave CRYSTALS-Kyber KEM, ashtu edhe shumë biblioteka të tjera enkriptimi që mbështesin Kyber, përfshirë bibliotekën pqcrypto të aplikuar në mesazherin Signal.
Thelbi i dobësisë, e cila mori emrin kodor KyberSlash, është përdorimi në procesin e dekodimit të mesazhit të operacionit të ndarjes «t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;», ku ndarja përmban një vlerë sekrete «t» me tipin «double», dhe ndarësi është një vlerë publike të njohur KYBER_Q. Problemi është se koha e operacionit të ndarjes nuk është një konstantë dhe në ambientet e ndryshme numri i cikleve CPU të kryera për ndarje varet nga të dhënat hyrëse. Prandaj, në bazë të ndryshimit të kohës së operacioneve, mund të merret një pasqyrë e natyrës së të dhënave të përdorura gjatë ndarjes.
Daniel Bernstein, një ekspert i njohur në fushën e kriptografisë, arriti të përgatisë një demonstrim funksional të provës së mundësisë për të kryer një sulm në praktikë. Në dy nga tre eksperimentet e kryera, gjatë ekzekutimit të kodit në pllakën Raspberry Pi 2, u arrit të rikrijohej plotësisht çelësi privat Kyber-512 në bazë të matjes së kohës së dekodimit të të dhënave. Metoda gjithashtu mund të adaptohet për çelësat Kyber-768 dhe Kyber-1024. Për të realizuar me sukses sulmin, është e nevojshme që tekstet e enkriptuara të caktuara nga sulmuesi të procesoheshin duke përdorur të njëjtën çift çelësash dhe që të ishte e mundur të mathej me saktësi koha e ekzekutimit të operacionit.
Në disa biblioteka është zbuluar një tjetër rrjedhje (KyberSlash2), e cila gjithashtu ndodh për shkak të përdorimit të një vlere sekrete gjatë kryerjes së ndarjes. Diferencat nga varianti i parë reduktohen në thirrjen në fazën e enkriptimit (në funksionet poly_compress dhe polyvec_compress), e jo gjatë dekryptimit. Megjithatë, varianti i dytë mund të jetë i dobishëm për një sulm vetëm në rastet kur procedura përdoret në operacione të rizhvillimit, ku rezultati i tekstin e enkriptuar përbën një informacion të ndjeshëm.
Vulnerabiliteti është gjithashtu eliminuar në bibliotekat:
- zig/lib/std/crypto/kyber_d00.zig (22 dhjetor),
- pq-crystals/kyber/ref (30 dhjetor),
- symbolicsoft/kyber-k2so (19 dhjetor),
- cloudflare/circl (8 janar),
- aws/aws-lc/crypto/kyber (4 janar),
- liboqs/src/kem/kyber (8 janar).
Bibliotekat që fillimisht nuk ishin të prekshme nga vulnerabiliteti:
- 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.
Vulnerabiliteti mbetet i pa riparuar në bibliotekat:
- antontutoveanu/crystals-kyber-javascript,
- Argyle-Software/kyber,
- debian/src/liboqs/unstable/src/kem/kyber,
- kudelskisecurity/crystals-go,
- mupq/pqm4/crypto_kem/kyber* (20 dhjetor është riparuar vetëm një variant i vulnerabilitetit),
- PQClean/PQClean/crypto_kem/kyber*/aarch64,
- PQClean/PQClean/crypto_kem/kyber*/clean,
- randombit/botan (20 dhjetor është riparuar vetëm një variant i vulnerabilitetit),
- rustpq/pqcrypto/pqcrypto-kyber (5 janar riparimi është shtuar në libsignal, por vetë pqcrypto-kyber vulnerabiliteti ende nuk është riparuar).
Burimi: opennet.ru
