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