ืคื’ื™ืขื•ืช ื‘ืกืคืจื™ื™ื” ืขื ื”ื™ื™ืฉื•ื ื”ืขื™ืงืจื™ ืฉืœ ืืœื’ื•ืจื™ืชื SHA-3

ื–ื•ื”ืชื” ืคื’ื™ืขื•ืช (CVE-3-2022) ื‘ื”ื˜ืžืขืช ืคื•ื ืงืฆื™ื™ืช ื”-hash ื”ื”ืฆืคื ื” SHA-37454 (Keccak) ื”ืžื•ืฆืขืช ื‘ื—ื‘ื™ืœืช XKCP (eXtended Keccak Code Package), ืืฉืจ ืขืœื•ืœื” ืœื”ื•ื‘ื™ืœ ืœื’ืœื™ืฉื” ื‘ืžืื’ืจ ื‘ืžื”ืœืš ืขื™ื‘ื•ื“ ืฉืœ ื—ืœืงื™ื ืžืกื•ื™ืžื™ื. ื ืชื•ื ื™ื ืžืขื•ืฆื‘ื™ื. ื”ื‘ืขื™ื” ื ื’ืจืžืช ืžื‘ืื’ ื‘ืงื•ื“ ืฉืœ ื™ื™ืฉื•ื ืกืคืฆื™ืคื™ ืฉืœ SHA-3, ื•ืœื ืžืคื’ื™ืขื•ืช ื‘ืืœื’ื•ืจื™ืชื ืขืฆืžื•. ื—ื‘ื™ืœืช XKCP ืžื•ืฆื’ืช ื›ื™ื™ืฉื•ื ื”ืจืฉืžื™ ืฉืœ SHA-3, ืฉืคื•ืชื—ื” ืขื ืงืœื˜ ืžืฆื•ื•ืช ื”ืคื™ืชื•ื— ืฉืœ Keccak, ื•ืžืฉืžืฉืช ื›ื‘ืกื™ืก ืœืคื•ื ืงืฆื™ื•ืช SHA-3 ื‘ืฉืคื•ืช ืชื›ื ื•ืช ืฉื•ื ื•ืช (ืœืžืฉืœ, ืงื•ื“ XKCP ืžืฉืžืฉ ื‘- Python hashlib ืžื•ื“ื•ืœ, ื—ื‘ื™ืœืช Ruby digest sha3 ื•ืคื•ื ืงืฆื™ื•ืช PHP hash_*).

ืœื“ื‘ืจื™ ื”ื—ื•ืงืจ ืฉื–ื™ื”ื” ืืช ื”ื‘ืขื™ื”, ื”ื•ื ื”ืฆืœื™ื— ืœื”ืฉืชืžืฉ ื‘ืคื’ื™ืขื•ืช ื›ื“ื™ ืœื”ืคืจ ืืช ื”ืžืืคื™ื™ื ื™ื ื”ื”ืฆืคื ื™ื ืฉืœ ืคื•ื ืงืฆื™ื™ืช ื”-hash ื•ืœืžืฆื•ื ืืช ื”-Preimage ื”ืจืืฉื•ืŸ ื•ื”ืฉื ื™, ื›ืžื• ื’ื ืœื–ื”ื•ืช ื”ืชื ื’ืฉื•ื™ื•ืช. ื‘ื ื•ืกืฃ, ื”ื•ื›ืจื– ืฉื™ื™ื•ื•ืฆืจ ืื‘ ื˜ื™ืคื•ืก ื ื™ืฆื•ืœ ืฉื™ืืคืฉืจ ื‘ื™ืฆื•ืข ืงื•ื“ ื‘ืขืช ื—ื™ืฉื•ื‘ ื”-hash ืฉืœ ืงื•ื‘ืฅ ืฉืชื•ื›ื ืŸ ื‘ืžื™ื•ื—ื“. ื”ืคื’ื™ืขื•ืช ืขืฉื•ื™ื” ืœืฉืžืฉ ื’ื ื›ื“ื™ ืœืชืงื•ืฃ ืืœื’ื•ืจื™ืชืžื™ื ืœืื™ืžื•ืช ื—ืชื™ืžื” ื“ื™ื’ื™ื˜ืœื™ืช ื”ืžืฉืชืžืฉื™ื ื‘-SHA-3 (ืœื“ื•ื’ืžื”, Ed448). ืคืจื˜ื™ื ืขืœ ืฉื™ื˜ื•ืช ื”ืชืงื™ืคื” ืžืชื•ื›ื ื ื™ื ืœื”ืชืคืจืกื ื‘ื”ืžืฉืš, ืœืื—ืจ ืฉื”ืคื’ื™ืขื•ืช ื‘ื•ื˜ืœื” ื‘ื›ืœ ืžืงื•ื.

ืขื“ื™ื™ืŸ ืœื ื‘ืจื•ืจ ืขื“ ื›ืžื” ื”ืคื’ื™ืขื•ืช ืžืฉืคื™ืขื” ื‘ืคื•ืขืœ ืขืœ ืืคืœื™ืงืฆื™ื•ืช ืงื™ื™ืžื•ืช, ืฉื›ืŸ ื›ื“ื™ ืฉื”ื‘ืขื™ื” ืชืชื‘ื˜ื ื‘ืงื•ื“, ื™ืฉ ืœื”ืฉืชืžืฉ ื‘ื—ื™ืฉื•ื‘ื™ hash ืžื—ื–ื•ืจื™ื™ื ื‘ื‘ืœื•ืงื™ื ื•ืื—ื“ ืžื”ื‘ืœื•ืงื™ื ื”ืžืขื•ื‘ื“ื™ื ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื‘ื’ื•ื“ืœ ืฉืœ ื›-4 GB (ืœืคื—ื•ืช 2^32 - 200 ื‘ืชื™ื). ื‘ืขืช ืขื™ื‘ื•ื“ ื ืชื•ื ื™ ื”ืงืœื˜ ื‘ื‘ืช ืื—ืช (ืžื‘ืœื™ ืœื—ืฉื‘ ืืช ื”-hash ื‘ืจืฆืฃ ื‘ื—ืœืงื™ื), ื”ื‘ืขื™ื” ืœื ืžื•ืคื™ืขื”. ื›ืฉื™ื˜ืช ื”ื”ื’ื ื” ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ, ืžื•ืฆืข ืœื”ื’ื‘ื™ืœ ืืช ื”ื’ื•ื“ืœ ื”ืžืจื‘ื™ ืฉืœ ื”ื ืชื•ื ื™ื ื”ืžืขื•ืจื‘ื™ื ื‘ืื™ื˜ืจืฆื™ื” ืื—ืช ืฉืœ ื—ื™ืฉื•ื‘ ื”ื’ื™ื‘ื•ื‘.

ื”ืคื’ื™ืขื•ืช ื ื’ืจืžืช ืžืฉื’ื™ืื” ื‘ืขื™ื‘ื•ื“ ื‘ืœื•ืง ืฉืœ ื ืชื•ื ื™ ืงืœื˜. ืขืงื‘ ื”ืฉื•ื•ืื” ืฉื’ื•ื™ื” ืฉืœ ืขืจื›ื™ื ืขื ืกื•ื’ "int", ื ืงื‘ืข ื”ื’ื•ื“ืœ ื”ืฉื’ื•ื™ ืฉืœ ื”ื ืชื•ื ื™ื ื”ืžืžืชื™ื ื™ื, ืžื” ืฉืžื•ื‘ื™ืœ ืœื›ืชื™ื‘ื” ืฉืœ ื”ื–ื ื‘ ืžืขื‘ืจ ืœืžืื’ืจ ืฉื”ื•ืงืฆื”. ื‘ืžื™ื•ื—ื“, ื”ื”ืฉื•ื•ืื” ื”ืฉืชืžืฉื” ื‘ื‘ื™ื˜ื•ื™ "partialBlock + instance->byteIOIndex", ืžื” ืฉื”ื•ื‘ื™ืœ ืœื”ืฆืคืช ืžืกืคืจื™ื ืฉืœืžื™ื ืขื‘ื•ืจ ืขืจื›ื™ื ื’ื“ื•ืœื™ื ืฉืœ ื”ื—ืœืงื™ื ื”ืžืจื›ื™ื‘ื™ื. ื‘ื ื•ืกืฃ, ื”ื™ื” cast ืžืกื•ื’ ืฉื’ื•ื™ "(unsigned int)(dataByteLen - i)" ื‘ืงื•ื“, ืžื” ืฉื’ืจื ืœื’ืœื™ืฉื” ื‘ืžืขืจื›ื•ืช ืขื ืกื•ื’ size_t ืฉืœ 64 ืกื™ื‘ื™ื•ืช.

ืงื•ื“ ืœื“ื•ื’ืžื” ืฉื’ื•ืจื ืœื’ืœื™ืฉื”: 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

ื”ื•ืกืคืช ืชื’ื•ื‘ื”