เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบšเบปเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบซเบผเบฑเบ‡เบ„เบงเบฑเบ™เบ•เบญเบก algorithm Kyber

เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบšเบปเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฑเบš Kyber, เป€เบŠเบดเปˆเบ‡เบŠเบฐเบ™เบฐเบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบ‚เบญเบ‡ cryptographic algorithms เบ—เบปเบ™เบ—เบฒเบ™เบ•เปเปˆเบเบฑเบš brute force เปƒเบ™เบ„เบญเบกเบžเบดเบงเป€เบ•เบต quantum, เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเป„เบ”เป‰เบ–เบทเบเบฅเบฐเบšเบธเบงเปˆเบฒเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ—เบฒเบ‡เบ‚เป‰เบฒเบ‡เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบฅเบฑเบšเบ„เบทเบ™เปƒเบซเบกเปˆเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบงเบฑเบ”เปเบ—เบเป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”. ciphertext เบชเบฐเปœเบญเบ‡เปƒเบซเป‰เป‚เบ”เบเบœเบนเป‰เป‚เบˆเบกเบ•เบต. เบšเบฑเบ™เบซเบฒเบกเบตเบœเบปเบ™เบ•เปเปˆเบ—เบฑเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡เบ‚เบญเบ‡เบเบปเบ™เป„เบเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฑเบš CRYSTALS-Kyber KEM เปเบฅเบฐเบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเป€เบ›เบตเบ”เปƒเบŠเป‰ Kyber เบ‚เบญเบ‡เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเบชเบฒเบกเบซเบผเบฒเบเบญเบฑเบ™, เบฅเบงเบกเบ—เบฑเบ‡เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ” pqcrypto เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™ Signal messenger.

เป‚เบ”เบเป€เบ™เบทเป‰เบญเปเบ—เป‰เปเบฅเป‰เบงเบ‚เบญเบ‡เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆ, เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบŠเบทเปˆเบฅเบฐเบซเบฑเบ” KyberSlash, เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปเบšเปˆเบ‡เบชเปˆเบงเบ™ โ€œt = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;โ€ เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบ„เบงเบฒเบก. , เป€เบŠเบดเปˆเบ‡เป€เบ‡เบดเบ™เบ›เบฑเบ™เบœเบปเบ™เบ›เบฐเบเบญเบšเบกเบตเบ„เปˆเบฒเบฅเบฑเบš โ€œtโ€ เบ”เป‰เบงเบเบ›เบฐเป€เบžเบ” โ€œเบชเบญเบ‡โ€, เปเบฅเบฐเบ•เบปเบงเบซเบฒเบ™เปเบกเปˆเบ™เบกเบนเบ™เบ„เปˆเบฒเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบเบเบฑเบ™เบ”เบต KYBER_Q. เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปเบšเปˆเบ‡เบชเปˆเบงเบ™เบšเปเปˆเบ„เบปเบ‡เบ—เบตเปˆ, เปเบฅเบฐเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบฎเบญเบšเบงเบฝเบ™ CPU เบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบšเปˆเบ‡เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™, เบซเบ™เบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เปเบšเปˆเบ‡เบชเปˆเบงเบ™.

Daniel J. Bernstein, เบœเบนเป‰เบŠเปˆเบฝเบงเบŠเบฒเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡เปƒเบ™เบ”เป‰เบฒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฑเบš, เบชเบฒเบกเบฒเบ”เบเบฐเบเบฝเบกเบเบฒเบ™เบชเบฒเบ—เบดเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบซเบผเบฑเบเบ–เบฒเบ™เบชเบฐเปเบ”เบ‡เบงเปˆเบฒเบเบฒเบ™เป‚เบˆเบกเบ•เบตเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰. เปƒเบ™เบชเบญเบ‡เปƒเบ™เบชเบฒเบกเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™, เป€เบกเบทเปˆเบญเปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เปƒเบ™เบเบฐเบ”เบฒเบ™ Raspberry Pi 2, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เบชเปˆเบงเบ™เบ•เบปเบง Kyber-512 เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบงเบฑเบ”เปเบ—เบเป€เบงเบฅเบฒเบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบกเบนเบ™. เบงเบดเบ—เบตเบเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ•เบปเบงเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบเบฐเปเบˆ Kyber-768 เปเบฅเบฐ Kyber-1024. เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบขเปˆเบฒเบ‡เบชเปเบฒเป€เบฅเบฑเบ”เบœเบปเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เบฅเบฑเบšเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เป‚เบ”เบเบœเบนเป‰เป‚เบˆเบกเบ•เบตเบˆเบฐเบ–เบทเบเบ›เบฐเบกเบงเบ™เบœเบปเบ™เป‚เบ”เบเปƒเบŠเป‰เบ„เบนเปˆเบ„เบตเบ”เบฝเบงเบเบฑเบ™เปเบฅเบฐเป€เบงเบฅเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบงเบฑเบ”เปเบ—เบเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡.

เบเบฒเบ™เบฎเบปเปˆเบงเป„เบซเบผเบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡ (KyberSlash2) เป„เบ”เป‰เบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบšเบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”, เป€เบŠเบดเปˆเบ‡เบเบฑเบ‡เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบเป‰เบญเบ™เบเบฒเบ™เปƒเบŠเป‰เบ„เปˆเบฒเบฅเบฑเบšเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปเบšเปˆเบ‡เบชเปˆเบงเบ™. เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เปเบฒเบญเบดเบ”เบกเบฒเบฅเบปเบ‡เป„เบ›เบซเบฒเบเบฒเบ™เป‚เบ—เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ” (เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ poly_compress เปเบฅเบฐ polyvec_compress), เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเบชเบญเบ‡เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบˆเบกเบ•เบตเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ„เบทเบ™เปƒเบซเบกเปˆเป€เบŠเบดเปˆเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡ ciphertext เบ–เบทเบเบ–เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบฅเบฑเบš.

เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚เปเบฅเป‰เบงเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”:

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

เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”:

  • antontutoweanu/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*/เบชเบฐเบญเบฒเบ”,
  • randombit/botan (เปƒเบ™เบงเบฑเบ™เบ—เบต 20 เป€เบ”เบทเบญเบ™เบ—เบฑเบ™เบงเบฒ, เบžเบฝเบ‡เปเบ•เปˆ 1 เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚),
  • rustpq/pqcrypto/pqcrypto-kyber (เบเบฒเบ™เปเบเป‰เป„เบ‚เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™ libsignal เปƒเบ™เบงเบฑเบ™เบ—เบต 5 เบกเบฑเบ‡เบเบญเบ™, เปเบ•เปˆเบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เปƒเบ™ pqcrypto-kyber เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡).

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™