Рейтинг:2

Как Argon2 используется для получения ключей?

флаг us

Насколько я понимаю, вывод ключа — это когда вы берете некоторые данные, скажем, пароль, и используете функцию для преобразования их в число, которое можно использовать в качестве секретного ключа, скажем, в криптографии на эллиптических кривых. Argon2 использует случайную соль при хешировании, что требует, чтобы хэш каждый раз был разным, несмотря на то, что используется один и тот же пароль. Если хэш другой, как его можно использовать для представления одного и того же секретного ключа?

kelalaka avatar
флаг in
Отвечает ли это на ваш вопрос? [Зашифровать файл с помощью AES, используя секретный ключ, полученный с помощью Argon2] (https://crypto.stackexchange.com/questions/75021/encrypt-a-file-with-aes-using-a-secret-key-derived-with -argon2) и вы сохраняете дополнительную информацию.
DannyNiu avatar
флаг vu
То, что вы описываете в вопросе, на самом деле характерно для всех KDF, поддерживающих соль.@kelalaka Хотя я согласен, что связанный вопрос частично совпадает с этим, обстановка и контекст сильно отличаются с точки зрения понимания.
kelalaka avatar
флаг in
@DannyNiu Я уже упоминал, что, поскольку _держите эту информацию с ..._, если ОП спрашивает, почему мы помним соль, ответ очевиден, все PBKDF и KDF детерминированы, поэтому, если вы вводите одни и те же значения вы получите тот же результат. Это то, что мы хотим от случайных оракулов: как только мы получим значение для ввода, мы хотим такое же значение, когда мы запрашивали с тем же вводом. и последняя часть "всегда использует случайную соль для хеширования"... Я думаю, что я рассмотрел все.
kelalaka avatar
флаг in
@DannyNiu написал один, чтобы охватить все, может быть, я пропустил какую-то часть, хотя некоторые нужно скопировать и вставить...
Manglemix avatar
флаг us
@kelalaka этот вопрос на самом деле отвечает на мои вопросы, спасибо
Рейтинг:2
флаг cn

Это правда, вы используете случайно сгенерированную соль с argon2i/argon2d/argon2id. Однако эту случайную соль нужно генерировать только один раз. Вам нужно знать соль и параметры, используемые при генерации хэша argon2, чтобы проверить этот хэш позже.

Некоторые библиотеки предлагают вывод закодированного хэша для argon2. Закодированный вывод сохраняет хэш/параметры/соль в одной строке.Затем эту закодированную строку можно разделить на хэш/параметры/соль во время проверки хэша.

Это выступление Defcon несколько недавнее и объясняет некоторые технические реализации в отношении argon2: https://youtu.be/4Tn71-1GN20?t=1271

Рейтинг:2
флаг in

Насколько я понимаю, получение ключа — это когда вы берете некоторые данные, скажем, пароль, и используете функцию для преобразования их в число, которое можно использовать в качестве секретного ключа, скажем, в криптографии на эллиптических кривых.

Да, это правильно, однако имейте в виду, что ваш пароль должен иметь достаточную надежность для защиты от грубой силы. Распространенным способом является использование игральная кость или же Бип39 как механизмы паролей, см. в хкс936.

Как только вы получите ключ $к$, то это ваш закрытый ключ, и $[k]G$ ваш открытый ключ в ECC с базовой точкой $G$ кривой. Стереть $к$ после использования даже не храните его в памяти и храните пароль в безопасности!

Argon2 использует случайную соль при хешировании, что требует, чтобы хэш каждый раз был разным, несмотря на то, что используется один и тот же пароль.

Да, это тоже правильно. Вы можете рассматривать это как то, что со всеми параметрами Argon2 вы запускаете детерминированную функцию. Один и тот же ввод будет результатом одного и того же вывода. Это то, что мы хотим от хэш-функций, хэш-функций паролей и случайных оракулов; быть детерминированным; один и тот же ввод должен привести к одному и тому же результату.

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

Если хэш другой, как его можно использовать для представления одного и того же секретного ключа?

Чтобы получить тот же ключ, вам нужно использовать те же параметры; тот же пароль, та же соль, та же итерация, то же использование памяти и то же распараллеливание. Параметры, кроме вашего пароля, не обязательно должны быть секретными, их можно хранить открыто. Например, такая информация хранится в Заголовок LUKS, важно всегда держать свой пароль в секрете.

Эти параметры необходимо сохранить при получении ключа из пароля.

Как Argon2 используется для получения ключей?

Во-первых, определите свою целевую безопасность; т.е.сколько вы хотите жизнь нападающего тяжела. Отрегулируйте количество итераций, степень распараллеливания и использование памяти в соответствии с вашей целевой безопасностью. После того, как вы решили, создайте однородную случайную соль. Определите желаемый размер ключа, например 256 бит (или 32 байта). Теперь вы готовы использовать Argon2 с этой информацией.

Вы предоставляете свою информацию Аргону и решаете свою целевую безопасность;

Использование: ./argon2 [-h] соль [-i|-d|-id] [-t итераций] [-m память] [-p параллелизм] [-l длина хеша] [-e|-r] [- v (10|13)]
        Пароль считывается со стандартного ввода
Параметры:
        соль Используемая соль, не менее 8 символов
        -i Использовать Argon2i (по умолчанию)
        -d Использовать Argon2d вместо Argon2i
        -id Использовать Argon2id вместо Argon2i
        -t N Устанавливает количество итераций равным N (по умолчанию = 3)
        -m N Устанавливает использование памяти 2^N КиБ (по умолчанию 12)
        -p N Устанавливает параллелизм для N потоков (по умолчанию 1)
        -l N Устанавливает длину вывода хеша в N байт (по умолчанию 32)
        -e Выводить только закодированный хеш
        -r Выводить только необработанные байты хеша
        -v (10|13) Версия Argon2 (по умолчанию самая последняя версия, в настоящее время 13)
        -h Распечатать использование аргона2

Обратите внимание, что Argon2 имеет три типа;

  • Argon2d работает быстрее и использует доступ к памяти в зависимости от данных. Зависимость от данных немедленно включает побочный канал. Это подходит для криптовалют и приложений без угроз атак по сторонним каналам.

  • Argon2i использует независимый от данных доступ к памяти, и это предпочтительнее для хэширования паролей и создания ключей на основе паролей.

  • Argon2id В первой половине первой итерации работает как Argon2i, а в остальном работает как Argon2d. Это обеспечивает как защиту побочного канала, так и компромисс между временем и памятью.

и форма черновик-irtf-cfrg-argon2-03;

Если вы не знаете разницы между ними или считаете атаки по сторонним каналам реальной угрозой, выберите Argon2id.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.