Argon2: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
Нет описания правки |
|||
Строка 157: | Строка 157: | ||
| автор = Dan Boneh, Henry Corrigan-Gibbs, Stuart Schechter |
| автор = Dan Boneh, Henry Corrigan-Gibbs, Stuart Schechter |
||
| заглавие = Balloon Hashing: A Memory-Hard Function Providing Provable Protection Against Sequential Attacks |
| заглавие = Balloon Hashing: A Memory-Hard Function Providing Provable Protection Against Sequential Attacks |
||
| издательство = |
| издательство = Advances in Cryptology – ASIACRYPT 2016 |
||
| год = 2016 |
| год = 2016 |
||
| pages = 220-248 |
|||
| isbn = 978-3-662-53887-6 |
|||
| ref = Henry Corrigan-Gibbs |
| ref = Henry Corrigan-Gibbs |
||
}} |
}} |
Версия от 11:27, 4 декабря 2016
Argon2 - функция формирования ключа, в разработке которой принимали участие Алекс Бирюков (Alex Biryukov), Даниэль Дину (Daniel Dinu) и Дмитрий Ховратович (Dmitry Khovratovich) из университета Люксембурга[англ.] в 2015 году[1]. Это рациональный и простой алгоритм, направленный на самую высокую скорость заполнения памяти и эффективное использование нескольких вычислительных блоков. Существуют две версии: Argon2i и Argon2d. Argon2d подходит для защиты цифровой валюты и информационных систем, не подверженных атакам по сторонним каналам. Argon2i обеспечивает высокую защиту от trade-off атак, но работает медленнее версии d из-за нескольких проходов по памяти.[2]
История
Алгоритм функции выпущен под лицензией Creative Commons. Argon2 является победителем конкурса Password Hashing Competition[англ.] в 2015 году.[1] С того времени алгоритм претерпел 4 серьезных изменения. Исправлены часть описаний алгоритмов генерации некоторых блоков и опечатки, добавлены рекомендуемые параметры. Наиболее удачными атаками на Argon2 являются the low-storage attack и the ranking tradeoff attack.[3]
Описание
Используется следующий режим работы:
Заполнение массива памяти
- функция индексирования
- массив памяти
- функция сжатия
- сообщение(пароль)
- хэш-функция Blake2b
Функции индексирования различают по версии Argon2:
- Argon2d - зависит от предыдущего блока
- Argon2i - фиксированное значение
При непараллельном режиме функция повторяется раз . На шаге берется блок с индексом определяемый предыдущим блоком при Argon2d: или берется значение генератора случайных чисел( в режиме счетчика) при Argon2i.
- функция берет часть значений блока ,принимая результат деления по модулю
Если распараллелить алгоритм на тредов, то данные распределятся по блокам матрицы , где
первые блоки - результат хэширования входных данных, а следующие задаются функцией сжатия по предыдущим блокам и опорному блоку:
- количество блоков памяти размером 1024 байта
- хэш-функция принимающая на вход 32 битное представление входных параметров, на выходе которой 64 битное значение
- хэш-функция переменной длины от
- размер памяти
- количество итераций
В итоге получается:
Нахождение опорного блока
- для Argon2d: мы берем первые 32 бита для и следующие 32 бита для из блоков
- для Argon2i: , где - номер итерации, - номер линии, - задает версию (в данном случае единица)
Считаем строки , откуда берется блок. При , за текущий номер полосы принимается значение . Затем определяем набор индексов по 2 правилам:
- Если совпадает с номером текущей строки, то в набор индексов добавляются все не записанные ранее блоки без
- Если не совпадает, то берутся блоки из всех сегментов полосы и последних частей.
Вычисляем номер блока из который примем за опорный:
Blake2b - 64 битная версия функции BLAKE, поэтому строится так:
при больших выходное значение функции строится по первым 32 битам блоков - и последнему блоку :
Функция сжатия G
Основана на функции сжатия Blake2b. На вход получает два 8192 битных блока и вырабатывает 1024 битный блок. Сначала два блока складываются (),
затем матрица R 8*8 обрабатывается функцией построчно (), затем получившаяся матрица по столбцам(), и на выходе G выдается . [6]
Криптоанализ
Защита от коллизий: Сама функция Blake2b считается криптографически безопасной. Также, ссылаясь на правила индексирования, авторы алгоритма доказали отсутствие коллизий внутри блоков данных и низкую вероятность их появления при применении функции сжатия.
Атака нахождения прообраза: пусть злоумышленник подобрал такое, что , тогда для продолжения данной атаки он должен подобрать прообраз : , что невозможно. Такое же рассуждение подходит для атаки нахождения второго прообраза.
Защита от таблиц поиска: благодаря использованию соли в данном алгоритме, для атаки TMTO требуется предварительное вычисление всевозможных вычислений Nonce. При размере соли в 16 байт придется вычислять 2128 матриц значений, каждая из которых занимает гигабайты памяти. Также, изменяя входные параметры алгоритма можно уменьшить вероятность успеха злоумышленников, ограничив внутреннее распараллеливание.
CPU атаки: Argon2 устойчив к атакам злоумышленников с ASIC, так как оптимизирован под x86 архитектуру. Эффективность атак злоумышленников с CPU ограничена RAM доступной для устройства и количеством ядер возможных для x86 архитектуры.
Атаки по времени: если пользователю необходимо адаптироваться к атаке по времени,то следует использовать версию Argon2i, так как она использует независимую память.
Использование хэш-функции Blake2b также исключает уязвимости для других атак.[7]
Рекомендуемые параметры
Исходя из области применения необходимо выбрать подходящую версию алгоритма(d или i). Далее задать максимальное число потоков, памяти и времени ,возможное для каждого вызова функции. Длины в 128 бит для соли и тэга хватает для любых применений. Затем подобрать максимальное число проходов , при котором не превышается заданное время инициализации.[8]
Атаки
Memory optimization attack
Dan Boneh, Henry Corrigan-Gibbs, и Stuart Schechter в своей работе показали уязвимость Argon2i версии 1.2. Для однопроходной версии их атака выиграла в 4 раза по памяти без штрафного времени. Для многопроходной версии выигрыш составлял 2.72. Позднее в версии 1.3 операцию перезаписи заменили на XOR.[9]
AB16
Joel Alwen и Jeremiah Blocki в своих работах доказали, что их алгоритм атаки AB16 эффективен не только для Argon2i-A(из первой версии спецификации), но и для Argon2i-B(из последней версии 1.3). Они показали , что для над 1GB памяти атака снижает затраты в два раза. Для эффективной защиты необходимо задать больше 10 проходов. Но при рекомендуемом подходе выбора параметров алгоритма на практике часто может выбираться все лишь 1 проход. Разработчики Argon2 утверждают, что коэффициент уменьшения атаки AB16 на Argon2i-B при не превышает 2 вплоть до использования 32GB памяти и рекомендуют использовать число проходов превышающее значение двоичного логарифма от используемой памяти.[10]
The ranking tradeoff attack
Данная атака лучшая для Argon2d. Ее коэффициент уменьшения времени равен 1.33. Для Argon2i при коэффициент по времени равен 3. [11]
Применение
Argon2 оптимизирован под x86 архитектуру и может быть реализована на Linux,OS X,Windows.
Argon2d предназначен для систем, где злоумышленник не получает регулярный доступ к системной памяти или процессору. Например, для backend серверов и криптомайнеров. При использовании одного ядра на 2Ghz CPU и 250Mb оперативной памяти с Argon2d (p=2) криптомайнинг занимает 0.1 сек. А при применении 4 ядер и 4 Gb памяти (p=8) аутентификация на backend сервере проходит за 0.5 сек.
Argon2i больше подходит для frontend серверов и шифрования жесткого диска. Формирование ключа для шифрования на 2Ghz CPU, используя 2 ядра и 6Gb оперативной памяти с Argon2i (p=4) занимает 3 сек. В то время как аутентификация на frontend сервере, задействовав 2 ядра и 1Gb памяти с Argon2i (p=4), занимает 0.5 сек.
Примечания
- ↑ 1 2 Password Hashing Competition.
- ↑ Argon v 1.3, 2016, с. 3.
- ↑ Argon v 1.3, 2016, с. 9-10.
- ↑ Argon v 1.3, 2016, с. 5-6.
- ↑ Jos Wetzels, 2016, с. 6-7.
- ↑ Argon v 1.3, 2016, с. 7.
- ↑ Jos Wetzels, 2016, с. 4.
- ↑ Argon v 1.3, 2016, с. 17.
- ↑ Henry Corrigan-Gibbs, 2016.
- ↑ Alwen, Blocki, 2016.
- ↑ Argon v 1.3, 2016, с. 12.
Литература
- Joel Alwen, Jeremiah Blocki. Efficiently Computing Data-Independent Memory-Hard Functions. — Advances in Cryptology – CRYPTO 2016, 2016. — P. 241-271. — ISBN 978-3-662-53008-5.
- Jos Wetzels. Open Sesame The Password Hashing Competition and Argon2. — 2016.
- Dan Boneh, Henry Corrigan-Gibbs, Stuart Schechter. Balloon Hashing: A Memory-Hard Function Providing Provable Protection Against Sequential Attacks. — Advances in Cryptology – ASIACRYPT 2016, 2016. — P. 220-248. — ISBN 978-3-662-53887-6.
- Password Hashing Competition .
- Alex Biryukov, Daniel Dinu, Dmitry Khovratovich. Argon2: the memory-hard function for password hashing and other applications. — 2016.