Lyra2
Lyra2 – это функция формирования ключа, также называемая схемой хэширования паролей, которая получила особое признание во время конкурса хэширования паролей в июле 2015 года. Алгоритм Lyra2 был разработан Маркосом Симплисио младшим, Леонардо К. Алмейда, Эвертоном Р. Андраде, Паулу К. Ф. Сантушем и Паулу С. Л. М. Баррето из Политехнической школы Университета Сан-Паулу.
Содержание
Обзор алгоритма Lyra2
Lyra2 является улучшением первой версии алгоритма Lyra, который был предложен ранее теми же авторами. Lyra2 сохраняет безопасность, эффективность и гибкость своего предшественника, в том числе: возможность настроить желаемый объем памяти, время обработки и параллелизм, которые будут использоваться алгоритмом, а также способность обеспечить высокое использование памяти со временем обработки, аналогичным полученному в алгоритме Scrypt. Кроме того, Лира2 приносит значительные улучшения по сравнению с предшественником:
- Lyra2 повышает уровень безопасности в точках нападения;
- позволяет законным пользователям более эффективно использовать возможности параллелизма для своих собственных платформ;
- Лира2 включает в себя настройки для увеличения затрат, связанных с построением выделенного оборудования (пр. FPGA) для атаки на алгоритм;
- поддерживает сопротивление против угроз и нападений сторон-канала полагаясь на более дешевых (и, следовательно, более медленных) запоминающих устройствах.
Lyra2 выпущен под общественным владением и предоставляет два основных расширения:
- Lyra2-δ, дает потребителю более лучшее управление над использованием ширины полосы частот алгоритма;
- Lyra2 “p”, использует возможности параллелизма на платформе пользователя.
Этот алгоритм позволяет параметризировать:
- время выполнения (затраты времени );
- требуемую память (количество строк и количество столбцов );
- степень параллелизма (количество потоков );
- основная функция перестановки (может рассматриваться как основной криптографический примитив);
- число блоков, используемых базовой функцией перестановки (bitrate));
- количество раундов, выполненных для базовой функции перестановки ();
- количество бит, используемых при вращении ();
- выходная длина ().
Алгоритм Lyra2 на сегодняшний день используется в майнинге лишь как составляющая других современных алгоритмов, таких как Lyra2Rev2. Также, существуют майнинг пулы и монеты, которые работают на современных версиях Lyra2.
Устойчивость Lyra2
- Высокая устойчивость к пересчетам памяти: оценочные затраты на обработку атак с низким использованием памяти включают фактор, который растет экспоненциально с затратами времени из-за пересчетов;
- Затраты памяти и времени в Lyra2 могут быть разделены, что позволяет точно настроить использование ресурсов;
- Быстрое использование сокращенной круглой sponge-функции в ядре алгоритма;
- Дизайн Лира2 сочетает в себе устойчивость к атакам боковых каналов (на протяжении всего этапа настройки) и атакам с использованием дешевых (следовательно, низкоскоростных) устройств памяти, балансируя эти противоречивые требования;
- Lyra2 рассматривает более широкий диапазон конфигураций для защиты от атакующих платформ при оптимизации выполнения на легитимной платформе, таких как:
- Поддержка параллелизма для многоядерных платформ, не давая много преимуществ для GPU-атак;
- Возможность использования различных базовых sponge-функций в зависимости от целевой платформы (например, Blake2b для реализаций программного обеспечения; Keccak для аппаратных реализаций; BlaMka для дополнительного сопротивления аппаратным платформам и т.д.);
- Возможность увеличить использование пропускной способности памяти алгоритма.
Дизайн
Как и любая схема хэширования паролей, Lyra2 принимает в качестве входных данных модификатор и пароль, создавая псевдослучайный вывод, который затем может быть использован в качестве ключевого материала для криптографических алгоритмов или в качестве строки аутентификации.
Память схемы организована как матрица, которая, как ожидается, останется в памяти в течение всего процесса хэширования паролей: так как ее ячейки итеративно читаются и записываются, отбрасывание ячейки для сохранения памяти приводит к необходимости пересчета его всякий раз, когда он обращается еще раз, до момента последнего изменения.
Строительство и визуализация матрицы осуществляется с помощью комбинации состояния поглощающего, сжимая и дублирование операций, лежащих в основе губки (то есть, его внутреннее состояние не сбрасывается в ноль), обеспечивающие последовательный характер всего процесса.
Кроме того, количество раз, когда ячейки матрицы пересматриваются после инициализации, определяется пользователем, что позволяет точно настраивать время выполнения Lyra2 в соответствии с ресурсами целевой платформы. Подробные код на языке Python по реализации алгоритма Lyra2 можно найти на английской версии данной статьи по ссылке: https://en.bitcoinwiki.org/wiki/Lyra2.
Производительность
На рисунке показано время обработки, полученное с помощью одноядерной реализации SSE Lyra2.
Эта цифра была извлечена и очень похожа на результаты сторонних тестов.
Результаты изображены соответствуют среднему времени выполнения Lyra2, настроенного по параметрам , , бит (т. е. внутреннее состояние имеет 256 бит), и различных параметров и , дающие общее представление о возможных сочетаниях параметров и соответствующее использование ресурсов.
Как показано на рисунке, Lyra2 способен выполнить за менее 1 секунду при использовании до 400 МБ (при и ) или до 1 ГБ памяти (при and ); или менее чем за 5 секунд до 1,6 ГБ (с и ).
Все тесты проводились на Intel Xeon E5-2430 (2,20 ГГц с 12 ядрами, 64 бита), оснащенном 48 ГБ DRAM, под управлением Ubuntu 14.04 LTS 64 бит, а исходный код был скомпилирован с использованием gcc (GNU Compiler Collection) 4.9.2.