Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В криптографии , PBKDF1 и PBKDF2 ( Password-Based Key Вывод Функция 1 и 2 ) являются ключевыми функции деривации с выдвижными вычислительными затратами, которые используются для снижения уязвимости грубой силы нападения .

PBKDF2 является частью RSA Laboratories ' Public Key Cryptography Standards- серии (PKCS), в частности , PKCS # 5 v2.0, а также опубликованы в качестве целевой группы Internet Engineering ' RFC s 2898. Он заменяет PBKDF1, которые могут производить только полученные ключи до 160 биты длинные. [1] RFC 8018 (PKCS # 5 v2.1), опубликованный в 2017 г., рекомендует PBKDF2 для хеширования паролей. [2]

Назначение и работа [ править ]

PBKDF2 применяет псевдослучайную функцию , такую ​​как код аутентификации сообщения на основе хэша (HMAC), к входному паролю или парольной фразе вместе со значением соли и повторяет процесс много раз для создания производного ключа , который затем может использоваться в качестве криптографического ключа. в последующих операциях. Дополнительная вычислительная работа значительно затрудняет взлом пароля и известна как растяжение ключа .

Когда стандарт был написан в 2000 году, рекомендуемое минимальное количество итераций составляло 1000, но этот параметр предполагается увеличивать с течением времени по мере увеличения скорости процессора. Стандарт Kerberos в 2005 году рекомендовал 4096 итераций; [3] Apple, как сообщается, использовала 2000 для iOS 3, и10 000 для прошивки 4; [4] в то время как LastPass в 2011 году использовал 5000 итераций для клиентов JavaScript и100 000 итераций для хеширования на стороне сервера. [5]

Алгоритмическое представление итеративного процесса функции вывода ключа на основе пароля 2.

Добавление соли к паролю снижает возможность использования предварительно вычисленных хэшей ( радужных таблиц ) для атак и означает, что несколько паролей необходимо проверять индивидуально, а не все сразу. Стандарт рекомендует длину соли не менее 64 бит. [6] Национальный институт стандартов и технологий США рекомендует 128 бит. [7]

Процесс получения ключа [ править ]

Функция создания ключа PBKDF2 имеет пять входных параметров: [8]

DK = PBKDF2 (PRF, пароль, соль, c, dkLen)

где:

  • PRF - это псевдослучайная функция двух параметров с выходной длиной hLen (например, HMAC с ключом)
  • Пароль - это мастер-пароль, на основе которого создается производный ключ.
  • Соль - это последовательность битов, известная как криптографическая соль.
  • c - желаемое количество итераций
  • dkLen - желаемая длина в битах производного ключа
  • DK - это сгенерированный производный ключ

Каждый hLen -битовый блок T i производного ключа DK вычисляется следующим образом (с +конкатенацией строк маркировки):

DK = T 1 + T 2 + ⋯ + T dklen / hlen
T i = F (Пароль, Salt, c, i)

Функция F является xor (^) c итераций связанных PRF. Первая итерация PRF использует пароль в качестве ключа PRF и Salt, объединенный с i, закодированным как 32-битное целое число с прямым порядком байтов, в качестве входных данных. (Обратите внимание, что i - это индекс, отсчитываемый от 1.) Последующие итерации PRF используют пароль в качестве ключа PRF, а выходные данные предыдущего вычисления PRF в качестве входных:

F (Пароль, Соль, c, i) = U 1 ^ U 2 ^ ⋯ ^ U c

где:

U 1 = PRF (Пароль, соль + 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), а следующие просто . Ключ извлекается как первые биты dkLen окончательного хэша, поэтому существует ограничение на размер. [8]PRF(Uprevious)

Коллизии HMAC [ править ]

PBKDF2 имеет интересное свойство при использовании HMAC в качестве псевдослучайной функции. Можно легко создать любое количество различных пар паролей с конфликтами внутри каждой пары. [9] Если предоставленный пароль длиннее, чем размер блока базовой хэш-функции 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). Эти производные конфликты ключей не представляют собой уязвимости в системе безопасности, поскольку для генерации хэша пароля необходимо знать исходный пароль. [10]

Альтернативы PBKDF2 [ править ]

Одной из слабых сторон PBKDF2 является то, что, хотя его количество итераций можно настроить так, чтобы оно занимало сколь угодно большое количество вычислительного времени, его можно реализовать с помощью небольшой схемы и очень небольшого объема оперативной памяти, что позволяет проводить атаки методом грубой силы с использованием встроенных приложений для конкретных приложений. схемы или графические процессоры относительно дешевы. [11] Функция хеширования паролей bcrypt требует большего объема ОЗУ (но все еще не настраивается отдельно, т. Е. Фиксируется для заданного количества процессорного времени) и немного сильнее противостоит таким атакам, [12] в то время как более современная функция получения ключей scrypt может использовать произвольно большие объемы памяти и, следовательно, более устойчив к атакам ASIC и GPU.[11]

В 2013 году был проведен конкурс по хешированию паролей (PHC) для разработки более стойкого подхода. 20 июля 2015 года Argon2 был выбран в качестве окончательного победителя PHC с особым признанием четырех других схем хеширования паролей: Catena, Lyra2 , yescrypt и Makwa. [13] Другой альтернативой является хеширование Balloon , которое рекомендуется в рекомендациях NIST по паролям . [14]

См. Также [ править ]

  • Список реализаций PBKDF2

Ссылки [ править ]

  1. ^ <[email protected]>, Burt Kaliski. "PKCS #5: Password-Based Cryptography Specification Version 2.0". tools.ietf.org. Retrieved 2015-10-23.
  2. ^ "PKCS #5: Password-Based Cryptography Specification Version 2.1". tools.ietf.org.
  3. ^ Kenneth Raeburn. "Advanced Encryption Standard (AES) Encryption for Kerberos 5". tools.ietf.org. Retrieved 2015-10-23.
  4. ^ "Smartphone Forensics: Cracking BlackBerry Backup Passwords". Advanced Password Cracking – Insight (ElcomSoft). Retrieved 2015-10-23.
  5. ^ "LastPass Security Notification". The LastPass Blog. Retrieved 2015-10-23.
  6. ^ K. Moriarty; et al. "RFC 8018 - PKCS #5: Password-Based Cryptography Specification, Version 2.1". tools.ietf.org. Retrieved 2018-01-24.
  7. ^ Meltem Sönmez Turan, Elaine Barker, William Burr, and Lily Chen. "NIST SP 800-132, Recommendation for Password-Based Key Derivation Part 1: Storage Applications" (PDF). www.nist.gov. Retrieved 2018-12-20.CS1 maint: multiple names: authors list (link)
  8. ^ a b RFC 2898
  9. ^ https://mathiasbynens.be/notes/pbkdf2-hmac
  10. ^ https://crypto.stackexchange.com/questions/26510/why-is-hmac-sha1-still-considered-secure
  11. ^ a b Colin Percival. scrypt. As presented in "Stronger Key Derivation via Sequential Memory-Hard Functions". presented at BSDCan'09, May 2009.
  12. ^ "New 25 GPU Monster Devours Passwords In Seconds". The Security Ledger. 2012-12-04. Retrieved 2013-09-07.
  13. ^ "Password Hashing Competition"
  14. ^ NIST SP800-63B Section 5.1.1.2

External links[edit]

  • RSA PKCS #5 – RSA Laboratories PKCS #5 v2.1.
  • RFC 2898 – Specification of PKCS #5 v2.0.
  • RFC 6070 – Test vectors for PBKDF2 with HMAC-SHA1.
  • NIST Special Publication 800-132 Recommendation for Password-Based Key Derivation