Все статьи

Scrypt: зачем алгоритму нужно много памяти

После того как Китай запретил майнинг криптовалют в 2021 году, значительная часть GPU-ферм переместилась в соседние страны с дешёвой электроэнергией — в том числе в Казахстан, где к 2022 году майнинг вырос настолько, что стал ощутимо нагружать энергосистему региона. Litecoin и Dogecoin, использующие для proof-of-work именно scrypt (а не SHA-256, как биткоин), были среди монет, которые продолжали майнить на этом оборудовании.

Что такое memory-hard функция

Memory-hard алгоритм намеренно проектируется так, чтобы для вычисления одного хеша нужно было удерживать в памяти большой объём промежуточных данных. Попытка сэкономить память ценой пересчёта значений вместо этого резко увеличивает время вычисления — то есть злоумышленнику приходится жертвовать либо памятью, либо скоростью.

Почему это усложняет атаки на специализированном оборудовании

ASIC-чипы и GPU очень эффективны для массового параллельного выполнения простых арифметических операций, но добавление памяти к каждому параллельному потоку вычислений стоит намного дороже и масштабируется хуже. Scrypt делает атаку "в лоб" на таком оборудовании экономически менее выгодной по сравнению с классическими хеш-функциями — именно поэтому для Litecoin долгое время не существовало настолько же эффективных ASIC, как для биткоина.

Зачем это нужно

  • Выбирать алгоритм хеширования паролей, устойчивый к атакам на GPU-фермах.
  • Понимать концепцию memory-hard функций в контексте криптографии.
  • Сравнивать компромиссы scrypt против bcrypt и Argon2 для конкретной системы.

Сколько памяти реально нужно

Объём памяти для одного вычисления scrypt приблизительно равен 128 × N × r байт. При типичных параметрах (N=16384, r=8) это около 16 мегабайт на один хеш — незначительно для одного логина, но если сервер должен обрабатывать тысячи одновременных аутентификаций, суммарный объём памяти быстро становится реальным ограничением при выборе параметров, а не просто абстрактным требованием безопасности.

Попробовать инструмент