21.01 // Catena – новая функция обработки пароля с солью, перцем и чесноком


Пользовательские пароли используются преимущественно для двух целей: аутентификации в системе (проверка знания пароля при логине) и для получения из пароля криптографического ключа.

При этом, в отличие от истинно случайного ключа, пароль с низкой энтропией может быть подобран словарными или эвристическо-лингвистическими атаками, предсказывающими его отклонения от случайного выбора. Для замедления таких атак используется «соль» (добавление случайного уникального несекретного значения, затрудняющего создание универсальных предвычисленных таблиц по значениям из словарей), многократное хэширование для замедления операций, и увеличенный расход памяти для затруднения параллельных вычислений.

Основу метода использования расхода памяти положил алгоритм scrypt. Однако, в нём выявлен ряд недостатков. Одним из них является нестойкость к кэш-тайминг атакам: если на сервере запущен непривелигированный враждебный процесс, измеряющий замедление работы процессора при обработке пароля другого пользователя, то он может по результатам измерений получить данные, которые позволят провести перебор на параллельных вычислениях без использования дополнительной памяти.

Исследователи Christian Forler, Stefan Lucks и Jakob Wenzel (Университет Баухаус, Веймар), предложили свою функию проверки паролей и получения ключей из пароля, названную ими Catena, от латинского слова «цепь», описывающего структуру функции. Она не только исправляет недостатки scrypt, но и делает новые шаги в области универсализации.

Основные свойства функции Catena:

  1. Возможность внесения обновлений на стороне сервера. Сервер может увеличить параметры сложности подбора пароля и изменить его хэш без необходимости контакта с пользователем и без знания пароля.
  2. Использование протокола снижения серверной нагрузки. Сервер может перенести вычислительно сложные операции по предварительному расчёту аутентификационных данных из пароля на сторону клиента.
  3. Протокол генерации ключей из пароля. Из одного пароля может быть получено множество ключей, причём компрометация одного ключа не приводит к компрометации другого.

Именно в п.2 используется параметр «чеснок», превращающий часть открытых битов соли в закрытые биты — «перец». Также возможно интерактивное вычисление данных совместно с сервером, эффективно снижающее скорость оффлайновых атак. При этом предусмотрена защита от утечек по тайминговым побочным каналам.

Несмотря на то, что функция Catena оптимизирована на клиент-серверное взаимодействие, она может быть эффективно использована и в локальном окружении, применяя алгоритмы доказуемо сложных вычислений с расходом памяти (λ−Memory-Hard Functions). Для её построения используются цепочки хэшей, связанные перестановками в виде графа определённой структуры.

Catena не привязана к определённой хэш-функции и в начале может быть использована с SHA-2-512. По мере стандартизации алгоритма Keccak, авторы рекомендуют использовать SHA-3-512. Но из-за того, что Keccak эффективнее при реализации в специализированном железе, чем в софте, то оптимальным, по мнению авторов, может быть хэш BLAKE2b. Строго говоря, производительность Catena не зависит от скорости работы самой хэш-функции, но позволяет эффективнее выбирать параметры в некоторых режимах.

Помимо использования хэш-функции, Catena использует шифр AES в режиме CTR. Это позволяет избавиться от необходимости подавать пароль на каждый раунд хэширования функции и получить возможность более универсального и гибкого выбора параметров для осуществления клиент-серверных протоколов.

Источник: Crytology ePrint Archive[link1]. См. также: Lyra – новая функция получения ключа из пароля[link2].

Ссылки
[link1] http://eprint.iacr.org/2013/525

[link2] http://www.pgpru.com/novosti/2014/lyranovajafunkcijapoluchenijakljuchaizparolja