Открыть сервис

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. Использование оперативной памяти — алгоритм генерирует массив данных в памяти (обычно от 1 до 256 МБ), который многократно перезаписывается в процессе вычислений. Это делает невозможным эффективное выполнение на устройствах с ограниченной памятью (например, на ASIC).
  2. Многопроходность — вычисления выполняются в несколько этапов (проходов), каждый из которых требует доступа к случайным ячейкам памяти. Число проходов задаётся параметром 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 →