ΠΡΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ° Π·Π° ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅ 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/ΠΊΡΠΈΠΏΡΠΎ/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-ΠΊΡΠΈΡΡΠ°Π»ΠΈ/kyber/avx2,
- pqclean/crypto_kem/kyber*/avx2.
Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° ΠΎΡΡΠ°Π²Π° Π½Π΅ΠΎΡΡΡΡΠ°Π½Π΅Π½Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅:
- antontutoveanu/crystals-kyber-javascript,
- Argyle-ΡΠΎΡΡΡΠ΅Ρ/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
