Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность
Введение
1password - очень хорошее программное обеспечение для управления паролями. С его помощью вы можете легко управлять своими паролями, поэтому вам не нужно беспокоиться об утечке паролей. Согласно официальному представлению 1password, его нижний уровень использует алгоритм PBKDF2 для шифрования паролей.
Так где же святое PBKDF2? Какие преимущества есть у 1password? Давайте посмотрим вместе.
PBKDF2 и PBKDF1
Полное название PBKDF — функция получения ключей на основе пароля, Проще говоря, PBKDF — это инструмент, основанный на пароле. Поскольку есть PBKDF2, должен быть и PBKDF1, так в чем же между ними разница?
PBKDF2 — это один из стандартов серии PKCS, в частности, это версия 2.0 PKCS#5, которая также опубликована как RFC 2898. Это замена PBKDF1, зачем ему заменять PBKDF1? Это связано с тем, что PBKDF1 может генерировать ключи только длиной 160 бит.Сегодня, с быстрым развитием производительности компьютеров, он уже не может удовлетворить наши потребности в шифровании. Поэтому он был заменен на PBKDF2.
В RFC 8018 (PKCS #5 v2.1), опубликованном в 2017 году, рекомендуется использовать PBKDF2 в качестве стандарта для хеширования паролей.
PBKDF2 и PBKDF1 в основном используются для предотвращения взлома паролей методом подбора, поэтому в конструкцию добавлена автоматическая регулировка вычислительной мощности, чтобы противостоять возможности взлома методом подбора.
Рабочий процесс PBKDF2
PBKDF2 фактически применяет псевдохэш-функцию PRF (псевдослучайная функция) к входному паролю и соли для генерации хеш-значения, а затем использует хэш-значение в качестве ключа шифрования и применяет его к последующему процессу шифрования.По аналогии, повторяя этот процесс во много раз увеличивает сложность взлома пароля, что также называется укреплением пароля.
Давайте посмотрим на блок-схему стандартной работы PBKDF2:
Как видно из рисунка, исходный пароль и соль генерируют ключ посредством операции PRF, а затем этот ключ используется в качестве входных данных для следующего шифрования, и пароль снова проходит через операцию PRF для генерации последующего ключа, который повторяется много раз, сгенерированный ключ затем подвергается операции XOR для создания окончательного T, а затем эти окончательные T объединяются для создания окончательного пароля.
Согласно рекомендациям 2000 года, вообще говоря, количество обходов должно достигать более 1000 раз, чтобы считаться безопасным. Конечно, это число также изменится с увеличением вычислительной мощности ЦП. Это количество раз может быть скорректировано в соответствии с требованиями безопасности.
После обхода зачем нужно добавлять соль? Соль добавляется для предотвращения атак радужной таблицы на пароли. То есть злоумышленник не может предварительно выбрать и вычислить хэш-значение определенного пароля, поскольку его нельзя предсказать заранее, поэтому безопасность повышается. Рекомендуемая длина стандартной соли составляет 64 бита, а рекомендуемая длина соли Национального института стандартов и технологий — 128 бит.
Подробно объясните процесс генерации ключей PBKDF2.
В приведенном выше разделе мы в простой для понимания форме расскажем вам, как работает PBKDF2. Вообще говоря, этого уровня достаточно для понимания, но если вы хотите углубиться и понять основные принципы генерации ключей PBKDF2, то обратите внимание на этот раздел.
Выше мы представили, что PBKDF2 — это функция, которая генерирует производные ключи.Как функция, есть входы и выходы.Давайте сначала посмотрим на определение PBKDF2:
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
PBKDF2 имеет 5 функций, давайте посмотрим, что означает каждый параметр:
- PRF — это псевдослучайная хэш-функция, и мы можем заменить ее по мере необходимости, например, заменив ее функцией HMAC.
- Пароль — это мастер-пароль, используемый для создания производных ключей.
- Соль — это последовательность битов, используемая для соления паролей.
- с - количество петель.
- dkLen — это длина в битах, необходимая для сгенерированного ключа.
- DK — это последний сгенерированный производный ключ.
В предыдущем разделе мы видели, что окончательный производный ключ на самом деле состоит из нескольких частей. Каждая T на приведенном выше рисунке представляет часть производного ключа. Наконец, эти T объединяются, чтобы получить окончательный производный ключ. , формула как следует:
DK = T1 + T2 + ⋯ + Tdklen/hlen
Ti = F(Password, Salt, c, i)
F выше представляет собой цепочку XOR из c обходов. Его формула выглядит следующим образом:
F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc
в:
U1 = PRF(Password, Salt + INT_32_BE(i))
U2 = PRF(Password, U1)
⋮
Uc = PRF(Password, Uc−1)
Коллизия шифра HMAC
Если PRF PBKDF2 использует HMAC, то будут отправлены очень интересные вопросы. Для HMAC, если длина пароля превышает допустимый диапазон HMAC, сначала будет хеширован пароль, а затем хешированная строка будет использоваться в качестве входных данных HMAC.
Возьмем пример, если пароль, введенный пользователем:
Password: plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd
После одной операции HMAC-SHA1 получаем:
SHA1 (hex): 65426b585154667542717027635463617226672a
Преобразование его в строку дает:
SHA1 (ASCII): eBkXQTfuBqp'cTcar&g*
Таким образом, если используется метод шифрования PBKDF2-HMAC-SHA1, следующие два пароля генерируют один и тот же производный ключ.
"plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd"
"eBkXQTfuBqp'cTcar&g*"
Недостатки PBKDF2
Хотя PBKDF2 может улучшить сложность взлома пароля, регулируя количество обходов цикла. Но для него можно сделать специальный процессор, который можно взломать с очень небольшим объемом оперативной памяти. По этой причине алгоритмы шифрования, такие как bcrypt и scrypt, используют большой объем оперативной памяти, что делает эти дешевые процессоры ASIC бесполезными.
Суммировать
Вышеизложенное является кратким введением в PBKDF2.Если вы хотите узнать о нем больше, вы можете обратиться к другим моим статьям о криптографии.
Эта статья была включена вwww.flydean.com/41-pbkdf2/
Самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!
Добро пожаловать, чтобы обратить внимание на мой официальный аккаунт: «Программируйте эти вещи», разбирайтесь в технологиях, лучше поймите себя!