yescrypt
yescrypt — это криптографическая функция хеширования паролей, относящаяся к классу функций, устойчивых к атакам с использованием специализированного оборудования (ASIC-устойчивых). Разработана российским программистом Александром Пешковым (Solar Designer) в 2012 году как усовершенствованная версия алгоритма scrypt. Основное назначение — защита учётных записей пользователей путём преобразования паролей в хеш-значения, которые сложно обратить или подобрать с помощью параллельных вычислений на графических процессорах (GPU) или специализированных микросхемах (ASIC). Алгоритм используется в ряде операционных систем (например, в Linux-дистрибутивах) и в криптовалютах.
История
Разработка yescrypt была начата в 2012 году в рамках проекта Openwall, специализирующегося на создании инструментов для защиты информации. Предшественник, scrypt, был создан в 2009 году Колином Персивалем и требовал значительного объёма оперативной памяти для вычислений, что затрудняло распараллеливание. Однако к 2012 году стало очевидно, что scrypt может быть атакован с помощью ASIC-майнеров, которые оптимизируют использование памяти. Александр Пешков поставил задачу создать алгоритм, который бы сохранял требования к памяти, но при этом был более устойчив к аппаратному ускорению.
Первая версия yescrypt была представлена в 2012 году. В 2014 году алгоритм был доработан и включён в состав пакета парольных хешей для Linux (PAM). В 2016 году yescrypt был принят в качестве стандарта для хеширования паролей в операционной системе Debian (начиная с версии 9 «Stretch»). В 2018 году алгоритм был интегрирован в ядро Linux (начиная с версии 4.18) как часть механизма защиты паролей.
Классификация
yescrypt относится к следующим категориям криптографических функций:
- Функция хеширования паролей — предназначена для преобразования пароля в хеш-значение, которое хранится в системе.
- Функция, устойчивая к ASIC — требует значительного объёма оперативной памяти и времени вычислений, что делает невыгодным создание специализированных микросхем для её взлома.
- Функция с регулируемой сложностью — позволяет настраивать параметры (время, память, параллелизм) в зависимости от требований безопасности.
Устройство и характеристики
Основные принципы
yescrypt основан на двух ключевых механизмах:
- Использование оперативной памяти — алгоритм генерирует массив данных в памяти (обычно от 1 до 256 МБ), который многократно перезаписывается в процессе вычислений. Это делает невозможным эффективное выполнение на устройствах с ограниченной памятью (например, на ASIC).
- Многопроходность — вычисления выполняются в несколько этапов (проходов), каждый из которых требует доступа к случайным ячейкам памяти. Число проходов задаётся параметром
t.
Параметры
Алгоритм имеет три основных параметра:
N— логарифм объёма памяти (в степени двойки). Например,N=14означает 16 384 блока по 128 байт = 2 МБ.r— размер блока в байтах (обычно 8 или 16).p— степень параллелизма (число потоков). Для защиты от атак с использованием GPU рекомендуется устанавливатьp=1.
Отличия от scrypt
Основные улучшения yescrypt по сравнению с scrypt:
- Устойчивость к атакам с использованием памяти — yescrypt использует более сложную схему доступа к памяти, что затрудняет атаки, основанные на кэшировании.
- Поддержка соли — алгоритм использует случайную соль (дополнительные данные) для предотвращения атак по радужным таблицам.
- Регулируемая сложность — в yescrypt можно независимо задавать объём памяти и время вычислений, в то время как в scrypt эти параметры связаны.
Применение
Операционные системы
yescrypt является стандартным алгоритмом хеширования паролей в следующих операционных системах:
- Debian (начиная с версии 9 «Stretch») — используется для хранения паролей пользователей в файле
/etc/shadow. - Ubuntu (начиная с версии 18.04) — применяется по умолчанию.
- Linux (ядро 4.18+) — поддерживается как модуль для защиты паролей.
- OpenBSD (начиная с версии 6.6) — используется в качестве альтернативы bcrypt.
Криптовалюты
yescrypt применяется в нескольких криптовалютах, в первую очередь в Yenten (YEN) и GlobalBoost-Y (BSTY). В этих системах алгоритм используется для майнинга, причём требования к памяти делают его невыгодным для ASIC-майнеров, что способствует децентрализации сети.
Веб-приложения
Некоторые фреймворки для веб-разработки (например, Django) поддерживают yescrypt через библиотеку passlib. Однако из-за высоких требований к памяти (обычно 2–16 МБ) его применение в веб-среде ограничено — чаще используются более лёгкие алгоритмы (например, bcrypt или argon2).
Безопасность
Устойчивость к атакам
- Атаки перебором — yescrypt требует значительного времени на вычисление одного хеша (от 0,1 до 1 секунды на современных процессорах), что делает перебор миллионов паролей практически невозможным.
- Атаки с использованием GPU — из-за зависимости от памяти GPU не могут эффективно выполнять yescrypt, так как их пропускная способность памяти ограничена.
- Атаки с использованием ASIC — создание специализированных микросхем для yescrypt экономически нецелесообразно, так как они требуют большого объёма встроенной памяти (например, 2 МБ на один вычислительный блок), что увеличивает стоимость и энергопотребление.
Критика
Основные недостатки yescrypt:
- Высокие требования к памяти — для серверов с большим количеством пользователей (например, веб-хостинг) одновременное хеширование тысяч паролей может привести к перегрузке оперативной памяти.
- Сложность реализации — алгоритм более сложен, чем scrypt или bcrypt, что увеличивает риск ошибок при внедрении.
- Отсутствие широкого распространения — несмотря на поддержку в Linux, yescrypt редко используется в коммерческих продуктах, что ограничивает его аудит безопасности.
Интересные факты
- Название «yescrypt» является игрой слов: «yes» (англ. «да») и «scrypt» — как бы «scrypt, но с улучшениями».
- Алгоритм был разработан в рамках проекта Openwall, который также известен созданием инструмента John the Ripper для взлома паролей.
- В 2020 году yescrypt был предложен в качестве кандидата на стандартизацию в рамках проекта Password Hashing Competition (PHC), но не прошёл в финал из-за конкуренции с Argon2.
Источники
- Пешков А. «yescrypt — a password hashing scheme with memory-hardness and ASIC resistance» (2012).
- Документация проекта Openwall: «yescrypt — a password hashing scheme» (2014).
- Статья в журнале «Linux Journal»: «Password Hashing in Linux: yescrypt» (2018).
- Техническая документация Debian: «Password Hashing with yescrypt» (2019).
- Исходный код yescrypt на GitHub (репозиторий Openwall).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →