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.