Вышла первая официальная версия yescrypt, новой схемы хеширования паролей и формирования криптографических ключей на основе паролей или парольных фраз. Yescrypt основывается на scrypt и включает в себя поддержку классического scrypt, консервативной модификации scrypt (под названием YESCRYPT_WORM) и, наконец, глубокой модификации scrypt (под названием YESCRYPT_RW), которая предлагается как основная (и подразумевается под yescrypt далее).
Нравится нам или нет, парольная аутентификация остаётся актуальной, в том числе и при использовании многофакторной аутентификации, а утечка базы данных, содержащей хеши паролей, является одним из рисков. Для снижения последствий такой утечки, используются специализированные методы хеширования, которые на
каждую проверку пароля расходуют значительное процессорное время (bcrypt, PBKDF2 и др.), а также оперативную память (scrypt, Argon2 и др.) К сожалению, при сравнительно низком требуемом времени проверки пароля, особенно в сочетании с необходимостью обработки одновременно многих попыток аутентификации, расход оперативной памяти оказывается недопустимо низким, вплоть до того, что scrypt и Argon2 могут оказаться не лучше, чем гораздо более старый bcrypt (с точки зрения атак с использованием существующего оборудования, такого как GPU и узлы ботнета).
Наиболее важной для крупных внедрений является возможность yescrypt инициализировать и использовать большую таблицу данных, обычно занимающую десятки или сотни гигабайт оперативной памяти и фактически представляющую собой специфичную для конкретного внедрения постоянную память (ROM), что ограничивает использование существующего оборудования для атаки. Другие отличия yescrypt от scrypt и Argon2 еще более снижают эффективность атак, использующих GPU, FPGA и специализированные микросхемы даже если использование памяти низкое (и даже при отсутствии ROM). Yescrypt также предоставляет дополнительные настройки и встроенные возможности (в частности, шифрование хешей).
С одной стороны, yescrypt - наиболее масштабируемая схема хеширования паролей, так как он предоставляет почти оптимальный уровень безопасности от offline-атак для широкого диапазона используемого объема памяти, от килобайт до терабайт и выше. С другой стороны, цена этого - в сложности yescrypt, а сложность является недостатком любого ПО. По этой причине, на данный момент yescrypt предназначается для крупных внедрений (миллионы паролей), где сложность yescrypt мала по сравнению с общей сложностью сервиса аутентификации. Для меньших внедрений и интеграции в программы, пока что bcrypt остается разумным краткосрочным выбором, хотя наблюдается прогресс в атаках на bcrypt с использованием FPGA. Возможно, позже будет выпущена упрощенная версия yescrypt и/или появится его поддержка в популярных библиотеках, что упростит правильное использование yescrypt для меньших внедрений и в программах.
Разработка yescrypt фактически началась в 2012 году с введения концепции ROM-port-hardness, представленной на конференции ZeroNights 2012 и продолжилась во взаимодействии с различными людьми, проектами и компаниями. В частности, предыдущие редакции yescrypt подавались на Password Hashing Competition (PHC) в 2014-2015 годах, где в качестве победителя был выбран Argon2, а yescrypt получил "специальное признание" за "богатую функциональность и простоту обновления с scrypt", проиграв Argon2 в первую очередь из-за своей сложности.
Выпущенный сейчас yescrypt 1.0.0 совместим с последней поданной в рамках PHC редакцией в отношении обязательной для PHC функциональности, но отличается в дополнениях. Подробно о проблеме хеширования паролей, решаемой yescrypt, и о его дизайне и свойствах, можно узнать из доклада (слайды, видео) с конференции BSidesLjubljana 2017. Некоторые подробности на нескольких слайдах в конце этой презентации относятся к yescrypt 0.9.x и устарели для 1.0+ (алгоритм инициализации ROM стал проще и быстрее), но в целом эта презентация по-прежнему актуальна. Версии yescrypt 0.9.x уже внедрены (с участием разработчиков) в некоторых известных Интернет-компаниях для защиты миллионов паролей, а yescrypt 1.0+ будет использоваться для дальнейших внедрений.
Yescrypt обеспечивает высокую производительность на современных системах и хорошую на предыдущих поколениях оборудования. В качестве примера, на современном сервере (предоставленном компанией Packet) с двумя процессорами Xeon Gold 5120 (2.2 GHz, turbo вплоть до 3.2 GHz) и 384 GiB RAM (12x DDR4-2400 ECC Reg), что обеспечивает 28 физических ядер (56 логических) и 12 каналов памяти, инициализация 368 GiB ROM занимает 22 секунды (обычно будет производиться сразу после загрузки системы). При использовании этого ROM, yescrypt вычисляет более 21 тыс., более 10 тыс. или около 1200 хешей в секунду при использовании объемов RAM, соответственно, 1.4375 MiB, 2.875 MiB или 23 MiB на вычисление каждого хеша. Без использования ROM, примерно те же скорости достигаются при, соответственно, 2 MiB, 4 MiB или 32 MiB RAM на вычисление каждого хеша.
Уже существуют криптовалюты (по подсчетам разработчиков одной из них, таких недавно было восемь), ориентированные на майнинг на CPU и использующие yescrypt версии около 0.5 (модификация первой редакции, предложенной на PHС в 2014) в качестве схемы proof-of-work (PoW). Это дало yescrypt хорошую проверку "в бою" (в том числе появились реализации на GPU, дающие ожидаемо низкую производительность). Несмотря на это, разработчики пока что не рекомендуют yescrypt 1.0+ для применения в криптовалютах, а вместо этого советуют желающим создать или клонировать одну из криптовалют на основе yescrypt продолжить использование той же старой редакции yescrypt, которую уже используют другие. Возможно, позже будет предложен специальный режим yescrypt, ориентированный на применение в качестве PoW.
|