SHA-3 alqoritminin əsas tətbiqi ilə kitabxanada zəiflik

XKCP (Genişləndirilmiş Keccak Kod Paketi) paketində təklif olunan SHA-3 (Keccak) kriptoqrafik heş funksiyasının tətbiqi zamanı zəiflik (CVE-2022-37454) müəyyən edilib ki, bu da xüsusi formatlaşdırılmış sənədlərin işlənməsi zamanı buferin daşmasına səbəb ola bilər. data. Problem alqoritmin özündə olan zəiflikdən deyil, konkret SHA-3 tətbiqinin kodundakı səhvdən qaynaqlanır. XKCP paketi Keccak inkişaf komandasının köməyi ilə hazırlanmış SHA-3-ün rəsmi tətbiqi kimi təqdim olunur və müxtəlif proqramlaşdırma dillərində (məsələn, XKCP) SHA-3 ilə işləmək funksiyaları üçün əsas kimi istifadə olunur. kod Python hashlib modulunda, Ruby paketi digest- sha3 və hash_* PHP funksiyalarında istifadə olunur).

Problemi müəyyən edən tədqiqatçının sözlərinə görə, o, həş funksiyasının kriptoqrafik xassələrini pozmaq və birinci və ikinci preimajları tapmaq, həmçinin toqquşmaları müəyyən etmək üçün zəiflikdən istifadə edə bilib. Bundan əlavə, xüsusi hazırlanmış faylın heşini hesablayarkən kodun icrasına nail olmağa imkan verən eksploit prototipinin yaradılması elan edilir. Potensial olaraq, zəiflik SHA-3 (məsələn, Ed448) istifadə edərək rəqəmsal imzanın yoxlanılması alqoritmlərinə hücum etmək üçün də istifadə edilə bilər. Hücum üsullarının təfərrüatlarının daha sonra, zəifliyin geniş şəkildə aradan qaldırılmasından sonra dərc edilməsi planlaşdırılır.

Boşluğun praktikada mövcud tətbiqlərə necə təsir etdiyi hələ aydın deyil, çünki problemin kodda özünü göstərməsi üçün bloklarda tsiklik hash hesablanması istifadə edilməli və işlənmiş bloklardan birinin ölçüsü təxminən 4 GB olmalıdır. ən azı 2 ^ 32 - 200 bayt). Giriş məlumatlarını bir anda emal edərkən (hissələrdə hashın ardıcıl hesablanması olmadan) problem görünmür. Ən sadə qorunma üsulu olaraq, hash hesablamasının bir iterasiyasına cəlb olunan məlumatların maksimum ölçüsünü məhdudlaşdırmaq təklif olunur.

Zəifliyə giriş məlumatlarının blok işlənməsi zamanı yaranan xəta səbəb olur. Dəyərlərin "int" növü ilə səhv müqayisəsi səbəbindən gözlənilən məlumatların səhv ölçüsü müəyyən edilir ki, bu da quyruğun ayrılmış buferdən kənarda yazılmasına səbəb olur. Xüsusilə, müqayisə edərkən "partialBlock + instance->byteIOIndex" ifadəsi istifadə edilmişdir ki, bu da komponent hissələrinin böyük dəyərləri ilə tam ədədlərin çoxalmasına səbəb olmuşdur. Bundan əlavə, kodda səhv tipli "(unsigned int)(dataByteLen - i)" var idi ki, bu da 64 bit size_t tipli sistemlərdə daşqınla nəticələndi.

Daşma koduna misal: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00" * 4294967295; h.update(m1) h.update(m2) çap (h.hexdigest())

Mənbə: opennet.ru

Добавить комментарий