์์์ปดํจํฐ์์ ๋ฌด์ฐจ๋ณ ๋์ ์ ๊ฐํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๊ฒฝ์์์ ์น๋ฆฌํ ์นด์ด๋ฒ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ๊ณผ์ ์์, ๋ณตํธํ ๊ณผ์ ์์ ์ฐ์ฐ ์๊ฐ์ ์ธก์ ํด ๋น๋ฐํค๋ฅผ ์ฌ์ฐฝ์กฐํ๋ ์ฌ์ด๋์ฑ๋ ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ ์ทจ์ฝ์ ์ด ๋ฐ๊ฒฌ๋๋ค. ๊ณต๊ฒฉ์๊ฐ ์ ๊ณตํ ์ํธ๋ฌธ. ์ด ๋ฌธ์ ๋ CRYSTALS-Kyber KEM ํค ์บก์ํ ๋ฉ์ปค๋์ฆ์ ์ฐธ์กฐ ๊ตฌํ๊ณผ Signal ๋ฉ์ ์ ์ ์ฌ์ฉ๋๋ pqcrypto ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ ๋ง์ ํ์ฌ Kyber ์ง์ ์ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์ฝ๋๋ช KyberSlash๋ฅผ ๋ฐ์ ์ทจ์ฝ์ ์ ๋ณธ์ง์ ๋ฉ์์ง๋ฅผ ๋์ฝ๋ฉํ๋ ๊ณผ์ ์์ ๋ถํ ์ฐ์ฐ โt = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;โ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋๋ค. , ์ฌ๊ธฐ์ ํผ์ ์๋ "double" ์ ํ์ ๋น๋ฐ ๊ฐ "t"๋ฅผ ํฌํจํ๊ณ ์ ์๋ ์ ์๋ ค์ง ๊ณต๊ฐ ๊ฐ KYBER_Q์ ๋๋ค. ๋ฌธ์ ๋ ๋๋๊ธฐ ์ฐ์ฐ์ ์๊ฐ์ด ์ผ์ ํ์ง ์๊ณ , ๋ค๋ฅธ ํ๊ฒฝ์์ ๋๋๊ธฐ๋ฅผ ์ํด ์ํ๋๋ CPU ์ฌ์ดํด ์๊ฐ ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์์ ์๊ฐ์ ๋ณํ์ โโ๋ฐ๋ผ ๋ถํ ์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ์ฑ๊ฒฉ์ ์ ์ ์์ต๋๋ค.
์ํธํ ๋ถ์ผ์ ์ ๋ช ํ ์ ๋ฌธ๊ฐ์ธ Daniel J. Bernstein์ ๊ณต๊ฒฉ์ด ์ค์ ๋ก ์ํ๋ ์ ์๋ค๋ ์ฆ๊ฑฐ๋ฅผ ์ ์ฆํ๋ ์์ ์์ฐ์ ์ค๋นํ ์ ์์์ต๋๋ค. ์งํ๋ ์ธ ๊ฐ์ง ์คํ ์ค ๋ ๊ฐ์ง ์คํ์์๋ ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด 2 ๋ณด๋์์ ์ฝ๋๋ฅผ ์คํํ ๋ ์ธก์ ๋ ๋ฐ์ดํฐ ๋์ฝ๋ฉ ์๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก Kyber-512 ๊ฐ์ธ ํค๋ฅผ ์์ ํ ์ฌํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ Kyber-768 ๋ฐ Kyber-1024 ํค์๋ ์ ์ฉํ ์ ์์ต๋๋ค. ๊ณต๊ฒฉ์ ์ฑ๊ณต์ ์ผ๋ก ์ํํ๊ธฐ ์ํด์๋ ๊ณต๊ฒฉ์๊ฐ ์ง์ ํ ์ํธ๋ฌธ์ ๋์ผํ ํค ์์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ๊ณ , ์์ ์ํ ์๊ฐ์ ์ ํํ๊ฒ ์ธก์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ ๋ค๋ฅธ ๋์(KyberSlash2)๊ฐ ํ์ธ๋์๋๋ฐ, ์ด๋ ๋๋์ ์ํ ์ ๋น๋ฐ ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ฐ์ํ๊ธฐ๋ ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ์ต์ ๊ณผ์ ์ฐจ์ด์ ์ ์ํธ ํด๋ ์ค์ด ์๋ ์ํธํ ๋จ๊ณ(poly_compress ๋ฐ polyvec_compress ํจ์)์ ํธ์ถ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋ฒ์งธ ์ต์ ์ ์ํธ๋ฌธ์ ์ถ๋ ฅ์ด ๊ธฐ๋ฐ๋ก ๊ฐ์ฃผ๋๋ ์ฌ์ํธํ ์์ ์ ํด๋น ์ ์ฐจ๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์๋ง ๊ณต๊ฒฉ์ ์ ์ฉํ ์ ์์ต๋๋ค.
ํด๋น ์ทจ์ฝ์ ์ ์ด๋ฏธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์์ ๋์์ต๋๋ค.
- zig/lib/std/crypto/kyber_d00.zig (22์ XNUMX์ผ),
- pq-crystals/kyber/ref (30์ XNUMX์ผ),
- Symbolicsoft/kyber-k2so (19์ XNUMX์ผ),
- cloudflare/circl(8์ XNUMX์ผ),
- aws/aws-lc/crypto/kyber(4์ XNUMX์ผ),
- liboqs/src/kem/kyber (8์ XNUMX์ผ).
์ฒ์์ ์ทจ์ฝ์ ์ ์ํฅ์ ๋ฐ์ง ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ:
- ์ง๋ฃจํ SSL/์ํธํ/์นด์ด๋ฒ,
- filippo.io/mlkem768,
- ํฌ๋ชจ์ฌ-์ํธํ/libjade/๋๋ฌด/๋ฉ์ธ/src/crypto_kem,
- ์นด์ด๋ฒ/๊ณตํต/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-Software/kyber,
- debian/src/liboqs/unstable/src/kem/kyber,
- kudelskisecurity/crystals-go,
- mupq/pqm4/crypto_kem/kyber* (20์ 1์ผ์๋ ์ทจ์ฝ์ ์ XNUMX๊ฐ ๋ฒ์ ๋ง ์์ ๋์์ต๋๋ค),
- PQClean/PQClean/crypto_kem/kyber*/aarch64,
- PQClean/PQClean/crypto_kem/kyber*/clean,
- randombit/botan (20์ 1์ผ์๋ XNUMX๊ฐ์ ์ทจ์ฝ์ ๋ง ์์ ๋์์ต๋๋ค),
- Rustpq/pqcrypto/pqcrypto-kyber(5์ XNUMX์ผ libsignal์ ์์ ์ฌํญ์ด ์ถ๊ฐ๋์์ง๋ง pqcrypto-kyber ์์ฒด์์๋ ์์ง ์ทจ์ฝ์ ์ด ์์ ๋์ง ์์์ต๋๋ค).
์ถ์ฒ : opennet.ru
