ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΎ ΠΎΠ± ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Ρ ΠΏΠΎ Π·Π°ΠΌΠ΅Π½Π΅ Π² Python ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΡ Π² ΠΌΠΎΠ΄ΡΠ»ΡΡ hashlib ΠΈ hmac, Π½Π° Π²Π°ΡΠΈΠ°Π½ΡΡ Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎΠΌ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Β«HACL*Β». Π Π°Π±ΠΎΡΠ° ΠΏΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎΠΌ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΠΈ Π²Π΅Π»Π°ΡΡ Ρ 2022 Π³ΠΎΠ΄Π° ΠΈ Π±ΡΠ»Π° ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎΡΠ»Π΅ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΡΡΠ΅ΡΠ° Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° SHA3, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π² Python-ΠΌΠΎΠ΄ΡΠ»Π΅ hashlib.
Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π‘Python ΠΏΡΠΈΠ½ΡΡ ΠΊΠΎΠ΄ Ρ Π½ΠΎΠ²ΡΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Ρ ΡΡ-ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² HMAC (ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ). ΠΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Python Ρ ΡΡ-ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ HMAC Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ Π½Π° Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ. Π‘ΡΠ΅Π΄ΠΈ ΠΏΡΠΎΡΠ΅Π³ΠΎ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ HMAC-BLAKE2, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ SIMD-ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ AVX2 Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π²ΠΎΠΉΠ΄ΡΡ Π² ΡΠΎΡΡΠ°Π² ΠΎΡΠ΅Π½Π½Π΅Π³ΠΎ ΡΠ΅Π»ΠΈΠ·Π° Python 3.14.
ΠΠΎΠ²ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½Ρ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ HACL*, ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈΠ· ΡΡΠ°Π½ΡΡΠ·ΡΠΊΠΎΠ³ΠΎ Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΠΈΡΡΡΠ° ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ Π² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ΅ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠΊΠ΅ (INRIA), ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Microsoft Research ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° ΠΠ°ΡΠ½Π΅Π³ΠΈ β ΠΠ΅Π»Π»ΠΎΠ½Π°. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° HACL* ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠΏΠΎΠ²ΡΠ΅ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ TLS 1.3 ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ API NaCl (Networking and Cryptography library), ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Curve25519, Ed25519, AES-GCM, Chacha20, Poly1305, SHA-2, SHA-3, HMAC ΠΈ HKDF. ΠΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° HACL* Π±Π»ΠΈΠ·ΠΊΠ° ΠΊ OpenSSL, Π½ΠΎ Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΠΈ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.
ΠΠΎΠ΄ HACL* Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° F*, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΠ΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΡ Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΡΠΈΠΏΠΎΠ² ΠΈ ΡΡΠΎΡΠ½Π΅Π½ΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠΎΡΠ½ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ) ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ SMT-ΡΠΎΡΠΌΡΠ» ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π°. ΠΡΠ°Π»ΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° F* ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° KaRaMeL ΠΈ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ.
ΠΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ Π²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π°, ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΌ. ΠΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄Π°ΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΠΊ Π·Π°Π΄ΡΠΌΠ°Π»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ Π² Π½Π΅ΠΉ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠ°, ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠΆΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄ΡΠ½Π½ΡΠΌ ΠΎΠ±Π»Π°ΡΡΡΠΌ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΏΠ°ΠΌΡΡΠΈ. Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΆΡΡΡΠΊΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠΎΠ² ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ β ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡΠΌ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
ΠΡΠΎΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π° Π½Π° Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π·Π°Π½ΡΠ» Π΄Π²Π° Ρ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΎΠΉ Π³ΠΎΠ΄Π° ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π» Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ HACL*, ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ»Π° ΡΠ°ΡΡΠΈΡΠ΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ ΠΈΠΌΠ΅ΡΡΠ΅ΠΉΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ hashlib. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² HACL* Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠ°Π±ΠΎΡΡ HMAC, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΠΆΠΈΠΌΡ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Blake2, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½ΠΎΠ²ΡΠΉ API Π΄Π»Ρ SHA3, ΠΎΡ
Π²Π°ΡΡΠ²Π°ΡΡΠΈΠΉ Π²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° Keccak, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°Ρ
Ρ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΠΈ), ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Ρ ΡΠΊΡΠΈΠΏΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Python Π½ΠΎΠ²ΡΡ
Π²Π΅ΡΡΠΈΠΉ HACL*.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru