Усі статті

Scrypt: навіщо алгоритму потрібно багато пам'яті

Scrypt — один із перших алгоритмів хешування паролів, спеціально спроєктований так, щоб вимагати не лише обчислювального часу, а й значного обсягу оперативної пам'яті. Це принципово інший підхід порівняно з чисто "повільними" алгоритмами на кшталт bcrypt.

Що таке memory-hard функція

Memory-hard алгоритм навмисно проєктується так, щоб для обчислення одного хешу потрібно було утримувати в пам'яті великий обсяг проміжних даних. Спробувати заощадити пам'ять коштом перерахунку значень натомість різко збільшує час обчислення — тобто зловмиснику доводиться жертвувати або пам'яттю, або швидкістю.

Чому це ускладнює атаки на спеціалізованому обладнанні

ASIC-чипи та GPU дуже ефективні для масового паралельного виконання простих арифметичних операцій, але додавання пам'яті до кожного паралельного потоку обчислень коштує набагато дорожче й масштабується гірше. Scrypt робить атаку "в лоб" на такому обладнанні економічно менш вигідною порівняно з класичними хеш-функціями.

Де застосовується scrypt

Окрім хешування паролів, scrypt відомий як алгоритм proof-of-work у деяких криптовалютах (наприклад, Litecoin), обраний саме через стійкість до майнінгу на спеціалізованих ASIC-пристроях, характерну для біткоїна з його SHA-256.

Навіщо це потрібно

  • Обирати алгоритм хешування паролів, стійкий до атак на GPU-фермах.
  • Розуміти концепцію memory-hard функцій в контексті криптографії.
  • Порівнювати компроміси scrypt проти bcrypt і Argon2 для конкретної системи.

Скільки пам'яті насправді потрібно

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

Спробувати інструмент