Wszystkie artykuły

Scrypt: dlaczego algorytm potrzebuje tak dużo pamięci

Po boomie kopania kryptowalut w latach 2017–2018 Polska stała się jednym z zagłębi domowych "kanapowych" farm GPU w Europie Środkowej, napędzanych relatywnie tanim prądem i dobrze rozwiniętym rynkiem sprzętu komputerowego. Bitcoin korzysta z SHA-256, ale Litecoin i Dogecoin — obie kopane wtedy masowo na zwykłych kartach graficznych — używają do proof-of-work właśnie scrypt, którego pamięciożerna konstrukcja utrzymywała opłacalność kopania na GPU znacznie dłużej niż w przypadku bitcoina.

Czym jest funkcja memory-hard

Algorytm memory-hard jest celowo zaprojektowany tak, by obliczenie jednego skrótu wymagało przechowywania w pamięci dużej ilości danych pośrednich. Próba zaoszczędzenia pamięci kosztem ponownego obliczania wartości zamiast tego drastycznie zwiększa czas obliczeń — czyli atakujący musi poświęcić albo pamięć, albo szybkość.

Dlaczego to utrudnia ataki na specjalizowanym sprzęcie

Chipy ASIC i GPU są bardzo wydajne w masowo równoległym wykonywaniu prostych operacji arytmetycznych, ale dodanie pamięci do każdego równoległego wątku obliczeniowego kosztuje znacznie więcej i gorzej się skaluje. Scrypt sprawia, że atak brute force na takim sprzęcie jest ekonomicznie mniej opłacalny w porównaniu z klasycznymi funkcjami skrótu.

Do czego to się przydaje

  • Wybór algorytmu haszowania haseł odpornego na ataki z użyciem farm GPU.
  • Zrozumienie koncepcji funkcji memory-hard w kontekście kryptografii.
  • Porównanie kompromisów scrypt względem bcrypt i Argon2 dla konkretnego systemu.

Ile pamięci naprawdę jest potrzebne

Ilość pamięci potrzebna do jednego obliczenia scrypt wynosi w przybliżeniu 128 × N × r bajtów. Przy typowych parametrach (N=16384, r=8) to około 16 megabajtów na jeden hash — pomijalne dla jednego logowania, ale jeśli serwer musi obsłużyć tysiące jednoczesnych uwierzytelnień, łączna ilość pamięci szybko staje się realnym ograniczeniem przy doborze parametrów, a nie tylko abstrakcyjnym wymogiem bezpieczeństwa.

Wypróbuj narzędzie