ΠΠ΅ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡ (CVE-3-2022) ΠΏΡΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΡΠΊΠ°ΡΠ° Ρ Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ SHA-37454 (Keccak), ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π½Π° Π² ΠΏΠ°ΠΊΠ΅ΡΠ° XKCP (eXtended Keccak Code Package), ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° Π±ΡΡΠ΅ΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅ ΠΏΡΠΈΡΠΈΠ½Π΅Π½ ΠΎΡ Π³ΡΠ΅ΡΠΊΠ° Π² ΠΊΠΎΠ΄Π° Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° SHA-3, Π° Π½Π΅ ΠΎΡ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡ Π² ΡΠ°ΠΌΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΡΠΌ. ΠΠ°ΠΊΠ΅ΡΡΡ XKCP ΡΠ΅ ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΠ° ΠΊΠ°ΡΠΎ ΠΎΡΠΈΡΠΈΠ°Π»Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° SHA-3, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π΅ΠΊΠΈΠΏΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Keccak ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° ΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π° Π·Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° SHA-3 Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΅Π·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ (Π½Π°ΠΏΡ. XKCP ΠΊΠΎΠ΄ΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Ρ Π΅ΡΠ»ΠΈΠ±Π° Π½Π° Python ΠΌΠΎΠ΄ΡΠ», Ruby digest ΠΏΠ°ΠΊΠ΅Ρ sha3 ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ PHP hash_*).
Π‘ΠΏΠΎΡΠ΅Π΄ ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π» ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΠΎΠΉ Π΅ ΡΡΠΏΡΠ» Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ°, Π·Π° Π΄Π° Π½Π°ΡΡΡΠΈ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΡΠΊΠΈΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π° Ρ Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΠΈ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈ ΠΏΡΡΠ²ΠΎΡΠΎ ΠΈ Π²ΡΠΎΡΠΎΡΠΎ ΠΏΡΠ΅Π΄ΠΎΠ±ΡΠ°Π·ΠΈ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π΄Π° ΠΎΡΠΊΡΠΈΠ΅ ΡΠ±Π»ΡΡΡΡΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΎΠ±ΡΠ²Π΅Π½ΠΎ, ΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π½Π° Π΅ΠΊΡΠΏΠ»ΠΎΠΉΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄ ΠΏΡΠΈ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° Ρ Π΅ΡΠ° Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ ΡΠ°ΠΉΠ». Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° ΠΌΠΎΠΆΠ΅ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ Π·Π° Π°ΡΠ°ΠΊΠ° Π½Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΈΡΡΠΎΠ² ΠΏΠΎΠ΄ΠΏΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ SHA-3 (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Ed448). ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π½Π° Π°ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΈ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° Π±ΡΠ΄Π΅ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°Π½Π° Π½Π°Π²ΡΡΠΊΡΠ΄Π΅.
ΠΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ ΡΡΠ½ΠΎ ΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° Π·Π°ΡΡΠ³Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π·Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠ²ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Π² ΠΊΠΎΠ΄Π°, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΈ Ρ Π΅Ρ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π² Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΈ Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π΅ Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠΎΠ»ΠΎ 4 GB (ΠΏΠΎΠ½Π΅ 2^32 - 200 Π±Π°ΠΉΡΠ°). ΠΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π½Π°Π²Π΅Π΄Π½ΡΠΆ (Π±Π΅Π· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° Ρ Π΅ΡΠ° Π½Π° ΡΠ°ΡΡΠΈ), ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Π½Π΅ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°. ΠΠ°ΡΠΎ Π½Π°ΠΉ-ΠΏΡΠΎΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° Π·Π°ΡΠΈΡΠ° ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅, Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² Π΅Π΄Π½Π° ΠΈΡΠ΅ΡΠ°ΡΠΈΡ Π½Π° Ρ Π΅Ρ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΡΠΎ.
Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° Π΅ ΠΏΡΠΈΡΠΈΠ½Π΅Π½Π° ΠΎΡ Π³ΡΠ΅ΡΠΊΠ° Π² Π±Π»ΠΎΠΊΠΎΠ²Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ. ΠΠΎΡΠ°Π΄ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Ρ ΡΠΈΠΏ "int", ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΠ°ΠΊΠ°ΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° ΠΈΠ·Π²ΡΠ½ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π±ΡΡΠ΅Ρ. ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ·ΡΠ°Π·Π° βpartialBlock + instance->byteIOIndexβ, ΠΊΠΎΠ΅ΡΠΎ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½ΠΎ ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½Π΅ Π·Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° ΡΡΡΡΠ°Π²Π½ΠΈΡΠ΅ ΡΠ°ΡΡΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π² ΠΊΠΎΠ΄Π° ΠΈΠΌΠ°ΡΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΠΏΠ° "(unsigned int)(dataByteLen - i)", ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ 64-Π±ΠΈΡΠΎΠ² ΡΠΈΠΏ size_t.
ΠΡΠΈΠΌΠ΅ΡΠ΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΈΡΠΈΠ½ΡΠ²Π° ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½Π΅: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00β³ * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru