ПБКДФ2
В криптографии PBKDF1 PBKDF2 и атакам ( функция деривации ключей на основе пароля 1 и 2 ) — это функции деривации ключей с скользящими вычислительными затратами, используемые для снижения уязвимости к методом перебора . [1]
PBKDF2 является частью (PKCS) RSA Laboratories , серии стандартов криптографии с открытым ключом в частности PKCS #5 v2.0, также опубликованной как 2898 рабочей группы по проектированию Интернета. RFC Он заменяет PBKDF1, который может создавать производные ключи только до 160. биты длинные. [2] RFC 8018 (PKCS #5 v2.1), опубликованный в 2017 году, рекомендует PBKDF2 для хеширования паролей. [3]
Назначение и работа
[ редактировать ]PBKDF2 применяет псевдослучайную функцию , такую как код аутентификации сообщения на основе хэша (HMAC), к входному паролю или парольной фразе вместе со значением соли и повторяет процесс много раз для создания производного ключа , который затем можно использовать в качестве криптографического ключа. в последующих операциях. Дополнительная вычислительная работа значительно усложняет взлом пароля и известна как растяжение ключа .
Когда стандарт был написан в 2000 году, рекомендуемое минимальное количество итераций составляло 1000, но предполагается, что этот параметр будет увеличиваться с течением времени по мере увеличения скорости процессора. Стандарт Kerberos в 2005 году рекомендовал 4096 итераций; [1] Сообщается, что Apple использовала 2000 для iOS 3 и 10 000 для iOS 4 ; [4] в то время как LastPass в 2011 году использовал 5000 итераций для клиентов JavaScript и 100 000 итераций для хеширования на стороне сервера. [5] В 2023 году OWASP рекомендовал использовать 600 000 итераций для PBKDF2-HMAC-SHA256 и 210 000 для PBKDF2-HMAC-SHA512. [6]
Добавление соли к паролю снижает возможность использования заранее вычисленных хэшей ( радужных таблиц ) для атак и означает, что несколько паролей необходимо проверять индивидуально, а не все сразу. Стандарт криптографии с открытым ключом рекомендует длину соли не менее 64 бит. [7] США Национальный институт стандартов и технологий рекомендует длину соли не менее 128 бит. [8]
Процесс получения ключа
[ редактировать ]Функция получения ключа PBKDF2 имеет пять входных параметров: [9]
- DK = PBKDF2(PRF, Пароль , Salt , c , dkLen )
где:
- PRF — это псевдослучайная функция двух параметров с выходной длиной hLen (например, ключевой HMAC).
- Пароль — это главный пароль, на основе которого генерируется производный ключ.
- Соль — это последовательность битов, известная как криптографическая соль.
- c — желаемое количество итераций
- dkLen — желаемая длина производного ключа.
- DK — сгенерированный производный ключ.
Каждый hLen битовый блок Ti производного ключа DK вычисляется следующим образом (с маркировкой + конкатенация строк):
- ДК = Т 1 + Т 2 + ⋯ + Т дклен / hлен
- T i = F ( Пароль , Соль , c , я )
Функция F является xor ( ^ ) c итераций связанных PRF. Первая итерация PRF использует пароль в качестве ключа PRF и Salt, объединенный с i, закодированным как 32-битное целое число с обратным порядком байтов, в качестве входных данных. (Обратите внимание, что i — индекс, отсчитываемый от 1.) Последующие итерации PRF используют пароль в качестве ключа PRF, а выходные данные предыдущего вычисления PRF — в качестве входных данных:
- F( Пароль , Соль , c , я ) знак равно U 1 ^ U 2 ^ ⋯ ^ U c
где:
- U 1 = PRF( Пароль , Salt + INT_32_BE( i ))
- U 2 = PRF ( Пароль , U 1 )
- ⋮
- U c = PRF ( Пароль , U c −1 )
Например, WPA2 использует:
- DK = PBKDF2 (HMAC-SHA1, парольная фраза , ssid , 4096, 256)
У PBKDF1 был более простой процесс: начальный U (в этой версии он называется T ) создается PRF( Password + Salt ) , а последующие — просто PRF( U previous ) . Ключ извлекается как первые биты dkLen окончательного хеша, поэтому существует ограничение на размер. [9]
HMAC-коллизии
[ редактировать ]PBKDF2 обладает интересным свойством при использовании HMAC в качестве псевдослучайной функции. Можно тривиально создать любое количество разных пар паролей с коллизиями внутри каждой пары. [10] Если предоставленный пароль длиннее, чем размер блока базовой хэш-функции HMAC, пароль сначала предварительно хешируется в дайджест, и этот дайджест вместо этого используется в качестве пароля. Например, следующий пароль слишком длинный:
- Пароль:
plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd
поэтому при использовании HMAC-SHA1 он предварительно хешируется с использованием SHA-1 в:
- SHA1 (шестнадцатеричный):
65426b585154667542717027635463617226672a
Что можно представить в ASCII как:
- SHA1 (ASCII):
eBkXQTfuBqp'cTcar&g*
Это означает, что независимо от соли или итераций PBKDF2-HMAC-SHA1 будет генерировать одни и те же ключевые байты для паролей:
- "plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd"
- "eBkXQTfuBqp'cTcar&g*"
Например, используя:
- PRF : HMAC-SHA1
- Соль: A009C1A485912C6AE630D3E744240B04
- Итерации: 1000
- Длина производного ключа: 16 байт.
Следующие два вызова функций:
PBKDF2-HMAC-SHA1("plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd", ...)
PBKDF2-HMAC-SHA1("eBkXQTfuBqp'cTcar&g*", ...)
будет генерировать те же байты производного ключа ( 17EB4014C8C461C300E9B61518B9A18B
). Эти конфликты производных ключей не представляют собой уязвимости безопасности, поскольку для генерации хеша пароля все равно необходимо знать исходный пароль. [11]
Альтернативы PBKDF2
[ редактировать ]Одним из недостатков PBKDF2 является то, что, хотя количество его итераций можно отрегулировать так, чтобы оно занимало сколь угодно большое количество вычислительного времени, его можно реализовать с помощью небольшой схемы и очень небольшого объема оперативной памяти, что делает возможным проведение атак методом перебора с использованием интегрированных средств, специфичных для конкретного приложения. схемы или графические процессоры относительно дешевы. [12] Функция хеширования паролей bcrypt требует большего объема оперативной памяти (но все же не настраивается отдельно, т.е. не фиксируется для заданного количества процессорного времени) и значительно устойчивее к таким атакам. [13] в то время как более современная функция получения ключа шифрования может использовать сколь угодно большие объемы памяти и, следовательно, более устойчива к атакам ASIC и GPU. [12]
В 2013 году был проведен конкурс хеширования паролей (PHC) с целью разработки более устойчивого подхода. 20 июля 2015 года Argon2 был выбран окончательным победителем PHC, при этом особое внимание было уделено четырем другим схемам хеширования паролей: Catena, Lyra2 , Yescrypt и Makwa. [14] Другой альтернативой является хэширование Balloon , которое рекомендуется в рекомендациях NIST по паролям . [15]
Чтобы ограничить атаку методом перебора , можно сделать так, чтобы каждая попытка ввода пароля требовала онлайн-взаимодействия, не нанося ущерба конфиденциальности пароля. Это можно сделать с помощью не обращающей внимания псевдослучайной функции для усиления защиты пароля . [16] Это можно сделать в качестве альтернативы или в качестве дополнительного шага к PBKDF.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б Реберн, Кеннет (2005). «Шифрование расширенного стандарта шифрования (AES) для Kerberos 5» . www.tools.ietf.org . дои : 10.17487/RFC3962 . РФК 3962 . Проверено 23 октября 2015 г.
- ^ Калиски, Берт (2000). «PKCS #5: Спецификация шифрования на основе пароля, версия 2.0» . www.tools.ietf.org . дои : 10.17487/RFC2898 . РФК 2898 . Проверено 23 октября 2015 г.
- ^ Мориарти, Кэтлин; и др. (2017). Мориарти, К. (ред.). «PKCS #5: Спецификация шифрования на основе пароля, версия 2.1» . www.tools.ietf.org . дои : 10.17487/RFC8018 . РФК 8018.
- ^ «Криминалистика смартфонов: взлом паролей резервных копий BlackBerry» . Расширенный взлом паролей – Insight . ЭлкомСофт. 30 сентября 2010 года . Проверено 23 октября 2015 г.
- ^ «Уведомление безопасности LastPass» . Блог LastPass . 5 мая 2011 года . Проверено 31 января 2023 г.
- ^ «Шпаргалка по хранению паролей» . Серия шпаргалок OWASP . 15 августа 2021 года. Архивировано из оригинала 23 января 2023 года . Проверено 23 января 2023 г.
- ^ Мориарти, Кэтлин; и др. (2017). Мориарти, К. (ред.). «PKCS #5: Спецификация криптографии на основе пароля, версия 2.1: Раздел 4. Соль и подсчет итераций» . www.tools.ietf.org . дои : 10.17487/RFC8018 . РФК 8018 . Проверено 24 января 2018 г.
- ^ Сонмез Туран, Мельтем; Баркер, Элейн; Берр, Уильям; Чен, Лили. «Рекомендации по получению ключа на основе пароля, часть 1: приложения хранения» (PDF) . НИСТ . СП 800-132 . Проверено 20 декабря 2018 г.
- ^ Jump up to: а б Спецификация криптографии на основе пароля РФК 2898
- ^ Байненс, Матиас. «Объяснение коллизий хэшей PBKDF2+HMAC» . mathiasbynens.be .
- ^ «Устойчивость к столкновениям. Почему HMAC-SHA1 по-прежнему считается безопасным?» . crypto.stackexchange.com .
- ^ Jump up to: а б Колин Персиваль . сценарий . Как представлено в разделе «Более строгий вывод ключей с помощью последовательных функций с жесткой памятью» . представлено на BSDCan'09, май 2009 г.
- ^ «Новые 25 графических процессоров-монстров поглощают пароли за считанные секунды» . Книга безопасности. 4 декабря 2012 года . Проверено 7 сентября 2013 г.
- ^ "Соревнование по хешированию паролей"
- ^ «Руководство по аутентификации и управлению жизненным циклом цифровых удостоверений, раздел 5.1.1.2» (PDF) . НИСТ . СП 800-63Б . Проверено 18 июня 2021 г.
- ^ Форд, В.; Калиски, Б.С. (2000). «Генерация надежного секрета пароля с помощью сервера» . Материалы 9-го международного семинара IEEE по перспективным технологиям: инфраструктура для совместных предприятий (WET ICE 2000) . стр. 176–180. дои : 10.1109/ENABL.2000.883724 . ISBN 0-7695-0798-0 . S2CID 1977743 .
Внешние ссылки
[ редактировать ]- «ПККС №5 v2.1» (PDF) . Лаборатории РСА . Архивировано из оригинала (PDF) 11 апреля 2017 г.
- RFC 2898 — Спецификация PKCS #5 v2.0.
- RFC 6070 — Тестовые векторы для PBKDF2 с HMAC-SHA1.
- Специальная публикация NIST 800-132. Рекомендации по получению ключей на основе пароля.