ืคื’ื™ืขื•ืช ื‘ื”ื˜ืžืขื•ืช ืฉืœ ืืœื’ื•ืจื™ืชื ื”ื”ืฆืคื ื” ื”ืคื•ืกื˜-ืงื•ื•ื ื˜ื™ Kyber

ื‘ื™ื™ืฉื•ื ืืœื’ื•ืจื™ืชื ื”ื”ืฆืคื ื” Kyber, ืฉื–ื›ื” ื‘ืชื—ืจื•ืช ืฉืœ ืืœื’ื•ืจื™ืชืžื™ื ืงืจื™ืคื˜ื•ื’ืจืคื™ื™ื ืขืžื™ื“ื™ื ื‘ืคื ื™ ื›ื•ื— ื’ืก ืขืœ ืžื—ืฉื‘ ืงื•ื•ื ื˜ื™, ื–ื•ื”ืชื” ืคื’ื™ืขื•ืช ื”ืžืืคืฉืจืช ืœื”ืชืงืคื•ืช ืขืจื•ืฅ ืฆื“ื“ื™ ืœื™ืฆื•ืจ ืžื—ื“ืฉ ืžืคืชื—ื•ืช ืกื•ื“ื™ื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœ ืžื“ื™ื“ืช ื–ืžืŸ ื”ืคืขื•ืœื•ืช ื‘ืžื”ืœืš ืคืขื ื•ื— ื˜ืงืกื˜ ืฆื•ืคืŸ ืฉืกื•ืคืง ืขืœ ื™ื“ื™ ื”ืชื•ืงืฃ. ื”ื‘ืขื™ื” ืžืฉืคื™ืขื” ื”ืŸ ืขืœ ื™ื™ืฉื•ื ื”ื”ืชื™ื™ื—ืกื•ืช ืฉืœ ืžื ื’ื ื•ืŸ ื”ืื ืงืคืกื•ืœืฆื™ื” ืฉืœ ืžืคืชื—ื•ืช CRYSTALS-Kyber KEM ื•ื”ืŸ ืขืœ ืกืคืจื™ื•ืช ื”ืฆืคื ื” ืจื‘ื•ืช ืฉืœ ืฆื“ ืฉืœื™ืฉื™ ืขื ืชืžื™ื›ื” ื‘-Kyber, ื›ื•ืœืœ ืกืคืจื™ื™ืช pqcrypto ื”ืžืฉืžืฉืช ื‘- Signal Messenger.

ืžื”ื•ืช ื”ืคื’ื™ืขื•ืช, ืฉืงื™ื‘ืœื” ืืช ืฉื ื”ืงื•ื“ KyberSlash, ื”ื™ื ื‘ืฉื™ืžื•ืฉ ื‘ืคืขื•ืœืช ื”ื—ืœื•ืงื” "t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;" ื‘ืชื”ืœื™ืš ืคืขื ื•ื— ื”ื•ื“ืขื” , ืฉื‘ื• ื”ื“ื™ื‘ื™ื“ื ื“ ืžื›ื™ืœ ืืช ื”ืขืจืš ื”ืกื•ื“ื™ "t" ืขื ืกื•ื’ "ื›ืคื•ืœ", ื•ื”ืžื—ืœืง ื”ื•ื ื”ืขืจืš ื”ืฆื™ื‘ื•ืจื™ ื”ื™ื“ื•ืข KYBER_Q. ื”ื‘ืขื™ื” ื”ื™ื ืฉื–ืžืŸ ืคืขื•ืœืช ื”ื—ืœื•ืงื” ืื™ื ื• ืงื‘ื•ืข, ื•ื‘ืกื‘ื™ื‘ื•ืช ืฉื•ื ื•ืช ืžืกืคืจ ืžื—ื–ื•ืจื™ ื”ืžืขื‘ื“ ื”ืžื‘ื•ืฆืขื™ื ืœื—ืœื•ืงื” ืชืœื•ื™ ื‘ื ืชื•ื ื™ ื”ืงืœื˜. ืœืคื™ื›ืš, ื‘ื”ืชื‘ืกืก ืขืœ ืฉื™ื ื•ื™ื™ื ื‘ื–ืžื ื™ ื”ืคืขื•ืœื”, ื ื™ืชืŸ ืœืงื‘ืœ ืžื•ืฉื’ ืขืœ ืื•ืคื™ ื”ื ืชื•ื ื™ื ื”ืžืฉืžืฉื™ื ื‘ื—ืœื•ืงื”.

ื“ื ื™ืืœ ื’'ื™ื™ ื‘ืจื ืฉื˜ื™ื™ืŸ, ืžื•ืžื—ื” ื™ื“ื•ืข ื‘ืชื—ื•ื ื”ืงืจื™ืคื˜ื•ื’ืจืคื™ื”, ื”ืฆืœื™ื— ืœื”ื›ื™ืŸ ื”ื“ื’ืžื” ืขื•ื‘ื“ืช ืฉืœ ื”ื•ื›ื—ื” ืœื›ืš ืฉื ื™ืชืŸ ืœื‘ืฆืข ืืช ื”ืชืงื™ืคื” ื‘ืคื•ืขืœ. ื‘ืฉื ื™ื™ื ืžืฉืœื•ืฉืช ื”ื ื™ืกื•ื™ื™ื ืฉื ืขืจื›ื•, ื‘ืขืช ื”ืคืขืœืช ืงื•ื“ ืขืœ ืœื•ื— 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 ื‘ื“ืฆืžื‘ืจ ืชื•ืงื ื” ืจืง ื’ืจืกื” ืื—ืช ืฉืœ ื”ืคื’ื™ืขื•ืช),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan (ื‘-20 ื‘ื“ืฆืžื‘ืจ ืชื•ืงื ื” ืจืง ืคื’ื™ืขื•ืช ืื—ืช),
  • rustpq/pqcrypto/pqcrypto-kyber (ืชื™ืงื•ืŸ ื ื•ืกืฃ ืœ-libsignal ื‘-5 ื‘ื™ื ื•ืืจ, ืืš ื”ืคื’ื™ืขื•ืช ืขื“ื™ื™ืŸ ืœื ืชื•ืงื ื” ื‘-pqcrypto-kyber ืขืฆืžื”).

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”