PBKDF2

Поделись знанием:
Перейти к: навигация, поиск

PBKDF2 (англ. Password-Based Key Derivation Function) — стандарт формирования ключа на основе пароля. Является частью PKCS #5 v2.0 (RFC 2898). Заменил PBKDF1, который ограничивал длину порождаемого ключа 160 битами.

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





Алгоритм

Общий вид вызова PBKDF2:

<math>DK = PBKDF2 (PRF, P, S, c, dkLen)</math>

Опции алгоритма:

  • PRF — псевдослучайная функция, с выходом длины hLen
  • P — мастер-пароль
  • S — соль (salt)
  • c — количество итераций, положительное целое число
  • dkLen — желаемая длина ключа (не более (2^32 — 1) * hLen)
  • Выходной параметр: DK — сгенерированный ключ длины dkLen

Ход вычислений:

1. l — количество блоков длины hLen в ключе (округление вверх), r — количество байт в последнем блоке:

<math> l = \lceil(dkLen / hLen) \rceil</math>
<math> r = dkLen - (l - 1) * hLen</math>

2. Для каждого блока применить функцию F с параметрами P — мастер пароль, S — соль, c — количество итераций, и номером блока:

<math> T_1 = F (P, S, c, 1) </math>
<math> T_2 = F (P, S, c, 2) </math>
<math> ... </math>
<math> T_l = F (P, S, c, l) </math>

F определена как операция xor (<math>\oplus</math>) над первыми c итерациями функции PRF, примененной к паролю P и объединению соли S и номеру блока, записанному как 4-байтовое целое с первым msb байтом.

<math> F (P, S, c, i) = U_1 \oplus U_2 \oplus ... \oplus U_c </math>
<math> U_1 = PRF (P, S || INT (i)) </math>
<math> U_2 = PRF (P, U_1) </math>
<math> ... </math>
<math> U_c = PRF (P, U_{c-1}) </math>

3. Объединение полученных блоков составляет ключ DK. От последнего блока берется r байт.

<math> DK = T_1 || T_2 || ... || T_l<0..r-1> </math>

Скорость работы

Одной из задач при создании PBKDF2 было усложнить перебор паролей. Благодаря множеству зацепленных вычислений PRF скорость генерации ключа является небольшой. Например, для WPA-PSK с параметрами[1].

<math> DK = PBKDF2(HMAC-SHA1, passphrase, ssid, 4096, 256)</math>

были достигнуты скорости перебора ключей 70 штук в секунду для Intel Core2 и около 1 тысячи на ПЛИС Virtex-4 FX60[2]. Для сравнения, классические функции хеширования пароля LANMAN имеют скорость перебора около сотен миллионов вариантов в секунду[3].

Использование

Алгоритмы

  • Используется как первая и последняя стадия в адаптивной криптографической функции формирования ключа на основе пароля Scrypt. Данная функция была специально разработана для приложений, где вычисление PBKDF2 оказывается слишком быстрым.

Системы

Шифрование дисков

Напишите отзыв о статье "PBKDF2"

Примечания

  1. [jorisvr.nl/wpapsk.html WPA key calculation: From passphrase to hex]
  2. [openciphers.sourceforge.net/oc/wpa.php OpenCiphers]
  3. [openciphers.sourceforge.net/oc/lm.php OpenCiphers]
  4. [msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/windataprotection-dpapi.asp Windows Data Protection]
  5. [www.winzip.com/aes_tips.htm WinZip® - AES Coding Tips for Developers]
  6. [www.winzip.com/gladman.cgi BRG Main SIte]
  7. [blog.lastpass.com/2011/05/lastpass-security-notification.html LastPass : The last password you'll have to remember: LastPass Security Notification]
  8. [crypto.nsa.org/vilefault/23C3-VileFault.pdf nsa.org is registered with pairNIC.com](недоступная ссылка — история). Проверено 18 апреля 2013. [web.archive.org/20070315093534/crypto.nsa.org/vilefault/23C3-VileFault.pdf Архивировано из первоисточника 15 марта 2007].

Литература

  • RFC 2898, стр. 9-11
  • [csrc.nist.gov/publications/nistpubs/800-132/nist-sp800-132.pdf NIST Special Publication 800-132. Recommendation for Password-Based Key Derivation.] // NIST

Отрывок, характеризующий PBKDF2

«Погибла ли я для любви князя Андрея или нет? спрашивала она себя и с успокоительной усмешкой отвечала себе: Что я за дура, что я спрашиваю это? Что ж со мной было? Ничего. Я ничего не сделала, ничем не вызвала этого. Никто не узнает, и я его не увижу больше никогда, говорила она себе. Стало быть ясно, что ничего не случилось, что не в чем раскаиваться, что князь Андрей может любить меня и такою . Но какою такою ? Ах Боже, Боже мой! зачем его нет тут»! Наташа успокоивалась на мгновенье, но потом опять какой то инстинкт говорил ей, что хотя всё это и правда и хотя ничего не было – инстинкт говорил ей, что вся прежняя чистота любви ее к князю Андрею погибла. И она опять в своем воображении повторяла весь свой разговор с Курагиным и представляла себе лицо, жесты и нежную улыбку этого красивого и смелого человека, в то время как он пожал ее руку.


Анатоль Курагин жил в Москве, потому что отец отослал его из Петербурга, где он проживал больше двадцати тысяч в год деньгами и столько же долгами, которые кредиторы требовали с отца.
Отец объявил сыну, что он в последний раз платит половину его долгов; но только с тем, чтобы он ехал в Москву в должность адъютанта главнокомандующего, которую он ему выхлопотал, и постарался бы там наконец сделать хорошую партию. Он указал ему на княжну Марью и Жюли Карагину.
Анатоль согласился и поехал в Москву, где остановился у Пьера. Пьер принял Анатоля сначала неохотно, но потом привык к нему, иногда ездил с ним на его кутежи и, под предлогом займа, давал ему деньги.
Анатоль, как справедливо говорил про него Шиншин, с тех пор как приехал в Москву, сводил с ума всех московских барынь в особенности тем, что он пренебрегал ими и очевидно предпочитал им цыганок и французских актрис, с главою которых – mademoiselle Georges, как говорили, он был в близких сношениях. Он не пропускал ни одного кутежа у Данилова и других весельчаков Москвы, напролет пил целые ночи, перепивая всех, и бывал на всех вечерах и балах высшего света. Рассказывали про несколько интриг его с московскими дамами, и на балах он ухаживал за некоторыми. Но с девицами, в особенности с богатыми невестами, которые были большей частью все дурны, он не сближался, тем более, что Анатоль, чего никто не знал, кроме самых близких друзей его, был два года тому назад женат. Два года тому назад, во время стоянки его полка в Польше, один польский небогатый помещик заставил Анатоля жениться на своей дочери.
Анатоль весьма скоро бросил свою жену и за деньги, которые он условился высылать тестю, выговорил себе право слыть за холостого человека.
Анатоль был всегда доволен своим положением, собою и другими. Он был инстинктивно всем существом своим убежден в том, что ему нельзя было жить иначе, чем как он жил, и что он никогда в жизни не сделал ничего дурного. Он не был в состоянии обдумать ни того, как его поступки могут отозваться на других, ни того, что может выйти из такого или такого его поступка. Он был убежден, что как утка сотворена так, что она всегда должна жить в воде, так и он сотворен Богом так, что должен жить в тридцать тысяч дохода и занимать всегда высшее положение в обществе. Он так твердо верил в это, что, глядя на него, и другие были убеждены в этом и не отказывали ему ни в высшем положении в свете, ни в деньгах, которые он, очевидно, без отдачи занимал у встречного и поперечного.
Он не был игрок, по крайней мере никогда не желал выигрыша. Он не был тщеславен. Ему было совершенно всё равно, что бы об нем ни думали. Еще менее он мог быть повинен в честолюбии. Он несколько раз дразнил отца, портя свою карьеру, и смеялся над всеми почестями. Он был не скуп и не отказывал никому, кто просил у него. Одно, что он любил, это было веселье и женщины, и так как по его понятиям в этих вкусах не было ничего неблагородного, а обдумать то, что выходило для других людей из удовлетворения его вкусов, он не мог, то в душе своей он считал себя безукоризненным человеком, искренно презирал подлецов и дурных людей и с спокойной совестью высоко носил голову.