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
| издательство = Asiacrypt 2016
| издательство = 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]

Описание

Используется следующий режим работы:

Заполнение массива памяти

- функция индексирования

Схема работы Argon2

- массив памяти

- функция сжатия

- сообщение(пароль)

- хэш-функция Blake2b

Функции индексирования различают по версии Argon2:

  • Argon2d - зависит от предыдущего блока
  • Argon2i - фиксированное значение

При непараллельном режиме функция повторяется раз . На шаге берется блок с индексом определяемый предыдущим блоком при Argon2d: или берется значение генератора случайных чисел( в режиме счетчика) при Argon2i.

- функция берет часть значений блока ,принимая результат деления по модулю

Если распараллелить алгоритм на тредов, то данные распределятся по блокам матрицы , где

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

- количество блоков памяти размером 1024 байта

- хэш-функция принимающая на вход 32 битное представление входных параметров, на выходе которой 64 битное значение

- хэш-функция переменной длины от

- размер памяти

- количество итераций

В итоге получается:

[4]

Нахождение опорного блока

  • для Argon2d: мы берем первые 32 бита для и следующие 32 бита для из блоков
  • для Argon2i: , где - номер итерации, - номер линии, - задает версию (в данном случае единица)

Считаем строки , откуда берется блок. При , за текущий номер полосы принимается значение . Затем определяем набор индексов по 2 правилам:

  1. Если совпадает с номером текущей строки, то в набор индексов добавляются все не записанные ранее блоки без
  2. Если не совпадает, то берутся блоки из всех сегментов полосы и последних частей.

Вычисляем номер блока из который примем за опорный:

[5]

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 сек.

Примечания

Литература