Уязвимост Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° постквантовия Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅ Kyber

Π’ рСализацията Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π·Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅ Kyber, спСчСлил конкурса Π·Π° криптографски Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈ, устойчиви Π½Π° Π°Ρ‚Π°ΠΊΠΈ ΠΎΡ‚ ΠΊΠ²Π°Π½Ρ‚ΠΎΠ²ΠΈ ΠΊΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈ, Π΅ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΎ уязвимост, която позволява ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π°Ρ‚Π°ΠΊΠΈ Ρ‡Ρ€Π΅Π· странични ΠΊΠ°Π½Π°Π»ΠΈ Π·Π° ΠΏΡ€Π΅ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° сСкрСтни ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΈΠ·ΠΌΠ΅Ρ€Π²Π°Π½Π΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° прСдоставСния ΠΎΡ‚ атакуващия ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ тСкст. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ засяга ΠΊΠ°ΠΊΡ‚ΠΎ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π°Ρ‚Π° рСализация Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° инкапсулиранС Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ CRYSTALS-Kyber KEM, Ρ‚Π°ΠΊΠ° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ външни Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π·Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅ с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Kyber, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° pqcrypto, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π² ΠΌΠ΅ΡΠΈΠ½Π΄ΠΆΡŠΡ€Π° Signal.

Π‘ΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° уязвимостта, която ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΊΠΎΠ΄ΠΎΠ²ΠΎ ΠΈΠΌΠ΅ KyberSlash, Π΅ Π² ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° опСрацията Π·Π° Π΄Π΅Π»Π΅Π½ΠΈΠ΅ β€žt = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;β€œ, ΠΏΡ€ΠΈ която Π΄Π΅Π»ΠΈΠΌΠΎΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° сСкрСтната стойност β€žtβ€œ с Ρ‚ΠΈΠΏ β€ždoubleβ€œ, Π° дСлитСлят Π΅ ΠΎΠ±Ρ‰ΠΎΠΏΠΎΠ·Π½Π°Ρ‚Π°Ρ‚Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Π° стойност KYBER_Q. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ Π΅, Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° опСрацията Π·Π° Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ Π΅ константа ΠΈ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ срСди броят Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Π½ΠΈΡ‚Π΅ Ρ†ΠΈΠΊΠ»ΠΈ Π·Π° Π΄Π΅Π»Π΅Π½ΠΈΠ΅ зависи ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ. Π’Π°ΠΊΠ°, Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ във Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ прСдстава Π·Π° Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΏΡ€ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π”Π°Π½ΠΈΠ΅Π» Π‘Π΅Ρ€Π½Ρ‰Π΅ΠΉΠ½ (Daniel J. Bernstein), извСстСн СкспСрт Π² областта Π½Π° криптографията, успя Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½Π° дСмонстрация Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° Π°Ρ‚Π°ΠΊΠ° Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Π’ Π΄Π²Π° ΠΎΡ‚ Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈ СкспСримСнта, ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΏΠ»Π°Ρ‚ΠΊΠ°Ρ‚Π° Raspberry Pi 2, успя Π΄Π° сС ΠΏΡ€Π΅ΡΡŠΠ·Π΄Π°Π΄Π΅ напълно закритият ΠΊΠ»ΡŽΡ‡ Kyber-512 Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΈΠ·ΠΌΠ΅Ρ€Π²Π°Π½Π΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅. ΠœΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Π΄Π° бъдС Π°Π΄Π°ΠΏΡ‚ΠΈΡ€Π°Π½ Π·Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Kyber-768 ΠΈ Kyber-1024. Π—Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π°Ρ‚Π°ΠΊΠ°Ρ‚Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ задаваният ΠΎΡ‚ атакуващия ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ тСкст Π΄Π° сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡŠΡ‰Π°Ρ‚Π° Π΄Π²ΠΎΠΉΠΊΠ° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎ Π΄Π° сС ΠΈΠ·ΠΌΠ΅Ρ€ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π½Π° опСрацията.

Π’ някои Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΅ установСно ΠΎΡ‰Π΅ Π΅Π΄Π½ΠΎ ΠΈΠ·Ρ‚ΠΈΡ‡Π°Π½Π΅ (KyberSlash2), ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΡ‰ΠΎ възниква ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° сСкрСтна стойност ΠΏΡ€ΠΈ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π Π°Π·Π»ΠΈΠΊΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡŠΡ€Π²ΠΈΡ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ сС свСТдат Π΄ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅ (Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ poly_compress ΠΈ polyvec_compress), Π° Π½Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π·ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π΅Ρ‚ΠΎ. Π’ Ρ‚ΠΎΠ·ΠΈ случай вторият Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠΊΠ°ΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π·Π° Π°Ρ‚Π°ΠΊΠ° само Π² случаитС Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ‚Π° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅, ΠΏΡ€ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Ρ…ΠΎΠ΄ΡŠΡ‚ Π½Π° криптирания тСкст сС счита Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»Π΅Π½.

Уязвимостта Π²Π΅Ρ‡Π΅ Π΅ отстранСна Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅:

  • zig/lib/std/crypto/kyber_d00.zig (22 Π΄Π΅ΠΊΠ΅ΠΌΠ²Ρ€ΠΈ),
  • pq-crystals/kyber/ref (30 Π΄Π΅ΠΊΠ΅ΠΌΠ²Ρ€ΠΈ),
  • symbolicsoft/kyber-k2so (19 Π΄Π΅ΠΊΠ΅ΠΌΠ²Ρ€ΠΈ),
  • cloudflare/circl (8 януари),
  • aws/aws-lc/crypto/kyber (4 януари),
  • liboqs/src/kem/kyber (8 януари).

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π½Π΅ са ΠΏΠΎΠ΄Π»ΠΎΠΆΠ΅Π½ΠΈ Π½Π° уязвимост:

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

Уязвимостта остава Π½Π΅ΠΈΠ·ΠΏΡ€Π°Π²Π΅Π½Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅:

  • antontutoveanu/crystals-kyber-javascript,
  • Argyle-Software/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • kudelskisecurity/crystals-go,
  • mupq/pqm4/crypto_kem/kyber* (20 Π΄Π΅ΠΊΠ΅ΠΌΠ²Ρ€ΠΈ само 1 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΡ‚ уязвимостта Π΅ фиксиран),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (20 Π΄Π΅ΠΊΠ΅ΠΌΠ²Ρ€ΠΈ само 1 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΡ‚ уязвимостта Π΅ фиксиран),
  • rustpq/pqcrypto/pqcrypto-kyber (5 януари ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠ°Ρ‚Π° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π² libsignal, Π½ΠΎ Π² pqcrypto-kyber самата уязвимост всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ фиксирана).

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster