stringtranslate.com

Функция вывода ключей

Пример цепочки функций вывода ключей. Выходные данные одной функции KDF являются входными данными для следующей функции KDF в цепочке.

В криптографии функция деривации ключей ( KDF ) — это криптографический алгоритм, который извлекает один или несколько секретных ключей из секретного значения, такого как главный ключ, пароль или парольная фраза, с использованием псевдослучайной функции (которая обычно использует криптографическую хэш-функцию или блочный шифр ). [1] [2] [3] KDF можно использовать для расширения ключей до более длинных ключей или для получения ключей требуемого формата, например, для преобразования группового элемента, который является результатом обмена ключами Диффи-Хеллмана , в симметричный ключ для использовать с AES . Криптографические хэш-функции с ключом являются популярными примерами псевдослучайных функций, используемых для получения ключей. [4]

История

Первая [ нужна цитата ] намеренно медленная (растягивание ключа) функция получения ключей на основе пароля называлась « crypt » (или «crypt(3)» по названию ее man-страницы ) и была изобретена Робертом Моррисом в 1978 году. Она шифровала константа (ноль), используя первые 8 символов пароля пользователя в качестве ключа, путем выполнения 25 итераций модифицированного алгоритма шифрования DES (в котором 12-битное число, считываемое с часов компьютера реального времени, используется для нарушения вычислений ). Полученное 64-битное число кодируется как 11 печатных символов и затем сохраняется в файле паролей Unix . [5] Хотя в то время это было большим достижением, увеличение скорости процессора со времени эпохи PDP-11 сделало возможными атаки грубой силы против крипты, а достижения в области хранения данных сделали 12-битную соль неадекватной. Конструкция функции шифрования также ограничивает пароль пользователя 8 символами, что ограничивает пространство ключей и делает невозможным использование надежных парольных фраз . [ нужна цитата ]

Хотя высокая пропускная способность является желательным свойством для хеш-функций общего назначения, в приложениях защиты паролей верно обратное, в которых защита от взлома методом перебора является первоочередной задачей. Растущее использование аппаратного обеспечения с массовым параллелизмом, такого как графические процессоры, FPGA и даже ASIC, для грубого взлома сделало выбор подходящих алгоритмов еще более важным, поскольку хороший алгоритм должен не только требовать определенного объема вычислительных затрат не только на ЦП, но также сопротивляются преимуществам стоимости и производительности современных массово-параллельных платформ для таких задач. Специально для этой цели были разработаны различные алгоритмы, в том числе bcrypt , scrypt и, с недавних пор, Lyra2 и Argon2 (последний стал победителем конкурса хеширования паролей ). Крупномасштабная утечка данных Эшли Мэдисон, в результате которой злоумышленники украли около 36 миллионов хэшей паролей, продемонстрировала важность выбора алгоритма для защиты паролей. Хотя для защиты хэшей использовался bcrypt (что делало крупномасштабный грубый взлом дорогостоящим и трудоемким), значительная часть учетных записей в скомпрометированных данных также содержала хэш паролей, основанный на быстром алгоритме MD5 общего назначения , что делало за считанные недели можно взломать более 11 миллионов паролей. [6]

В июне 2017 года Национальный институт стандартов и технологий США (NIST) выпустил новую редакцию своих рекомендаций по цифровой аутентификации, NIST SP 800-63B-3, [7] : 5.1.1.2  , в которой говорится, что: «Верификаторы ДОЛЖНЫ хранить запомненные секреты [ т.е. пароли] в форме, устойчивой к атакам в автономном режиме. Запомненные секреты ДОЛЖНЫ быть обработаны и хешированы с использованием подходящей односторонней функции получения ключей. Функции получения ключей принимают пароль, соль и коэффициент стоимости в качестве входных данных, а затем генерируют пароль. Их цель состоит в том, чтобы сделать попытку подбора пароля злоумышленником, получившим хэш-файл пароля, дорогостоящим и, следовательно, стоимость атаки по подбору пароля будет высокой или непомерно высокой».

Современные функции получения ключей на основе пароля, такие как PBKDF2 (указанные в RFC 2898), основаны на распознанном криптографическом хэше, таком как SHA-2 , используют больше соли (не менее 64 бит и выбираются случайным образом) и большое количество итераций. NIST рекомендует минимальное количество итераций 10 000. [7] : 5.1.1.2  «Для особенно важных ключей или для очень мощных систем или систем, в которых производительность, воспринимаемая пользователем, не является критической, может быть подходящим количество итераций в 10 000 000». [8] : 5,2 

Ключевое происхождение

Первоначальное использование KDF — это получение ключей, генерация ключей из секретных паролей или парольных фраз. Вариации на эту тему включают:

Растяжка и укрепление клавиш

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

Такое использование может быть выражено как DK = KDF(ключ, соль, итерации) , где DK — производный ключ, KDF — функция получения ключа , ключ — исходный ключ или пароль, соль — случайное число, которое действует как криптографическая соль . а итерации относятся к количеству итераций подфункции. Производный ключ используется вместо исходного ключа или пароля в качестве ключа к системе. Значения соли и количество итераций (если оно не фиксировано) сохраняются с хешированным паролем или отправляются в виде открытого текста (незашифрованного) с зашифрованным сообщением. [10]

Сложность атаки методом перебора увеличивается с увеличением количества итераций. Практическим ограничением количества итераций является нежелание пользователей терпеть ощутимую задержку при входе в компьютер или просмотре расшифрованного сообщения. Использование соли не позволяет злоумышленникам предварительно вычислить словарь производных ключей. [10]

Альтернативный подход, называемый усилением ключа , расширяет ключ случайной солью, но затем (в отличие от растяжения ключа) надежно удаляет соль. [11] Это вынуждает как злоумышленника, так и законных пользователей выполнять поиск значения соли методом грубой силы. [12] Хотя в статье, в которой описано растяжение клавиш [13], упоминается этот более ранний метод и намеренно выбрано другое название, термин «усиление клавиш» теперь часто (возможно, неправильно) используется для обозначения растяжения клавиш.

Хеширование пароля

Несмотря на свое первоначальное использование для получения ключей, KDF, возможно, более известны благодаря их использованию в хешировании паролей ( проверка пароля путем сравнения хешей ), как это используется в файле passwd или файле теневого пароля . Хэш-функции паролей должны быть относительно дорогими для расчета в случае атак методом перебора, и растяжение ключей KDF обеспечивает эту характеристику. [ необходима цитация ] Несекретные параметры в этом контексте называются « солью ».

В 2013 году был объявлен конкурс по хешированию паролей, в ходе которого будет выбран новый стандартный алгоритм хеширования паролей. 20 июля 2015 года конкурс завершился, и окончательным победителем был объявлен Argon2 . Особое признание получили еще четыре алгоритма: Catena, Lyra2, Makwa и Yescrypt. [14]

По состоянию на май 2023 года OWASP рекомендует следующие KDF для хеширования паролей, перечисленные в порядке приоритета: [15]

  1. Аргон2ид
  2. зашифровать , если Argon2id недоступен
  3. bcrypt для устаревших систем
  4. PBKDF2, если требуется соответствие FIPS-140.

Рекомендации

  1. ^ Беззи, Микеле; и другие. (2011). "Конфиденциальность данных". В Каменише, Ян; и другие. (ред.). Управление конфиденциальностью и идентификацией на всю жизнь . Спрингер. стр. 185–186. ISBN 9783642203176.
  2. ^ Калиски, Берт; Лаборатории РСА . «RFC 2898 – PKCS #5: Спецификация шифрования на основе пароля, версия 2.0». IETF .
  3. ^ Чен, Лили (октябрь 2009 г.). «NIST SP 800-108: Рекомендации по получению ключей с использованием псевдослучайных функций». НИСТ.
  4. ^ Здзиарски, Джонатан (2012). Взлом и защита приложений iOS: кража данных, захват программного обеспечения и как это предотвратить. О'Рейли Медиа. стр. 252–253. ISBN 9781449318741.
  5. ^ Моррис, Роберт; Томпсон, Кен (3 апреля 1978 г.). «Безопасность паролем: история болезни». Лаборатории Белла . Архивировано из оригинала 22 марта 2003 года . Проверено 9 мая 2011 г.
  6. Гудин, Дэн (10 сентября 2015 г.). «Когда-то считавшиеся пуленепробиваемыми, более 11 миллионов паролей Эшли Мэдисон уже взломаны». Арс Техника . Проверено 10 сентября 2015 г.
  7. ^ аб Грасси Пол А. (июнь 2017 г.). SP 800-63B-3 – Рекомендации по цифровой идентификации, аутентификации и управлению жизненным циклом . НИСТ. doi :10.6028/NIST.SP.800-63b.
  8. ^ Мелтем Сёнмез Туран, Элейн Баркер, Уильям Берр и Лили Чен (декабрь 2010 г.). SP 800-132 – Рекомендации по получению ключей на основе пароля, Часть 1: Приложения хранения (PDF) . НИСТ. doi : 10.6028/NIST.SP.800-132. S2CID  56801929.{{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
  9. ^ Кравчик, Хьюго; Эронен, Паси (май 2010 г.). «Ввод информации в HKDF». datatracker.ietf.org .RFC 5869 (2010 г.)
  10. ^ ab «Хеширование соленых паролей – все делаем правильно» . CrackStation.net . Проверено 29 января 2015 г.
  11. ^ Абади, Мартин, Т. Марк А. Ломас и Роджер Нидхэм. «Усиление паролей». Центр исследования цифровых систем, Техн. Реп 33 (1997): 1997.
  12. ^ У. Манбер, «Простая схема создания паролей, основанных на односторонних функциях, которую гораздо труднее взломать», Computers & Security, v.15, n.2, 1996, стр. 171–176.
  13. ^ Безопасное применение ключей с низкой энтропией, Дж. Келси , Б. Шнайер , К. Холл и Д. Вагнер (1997)
  14. ^ "Соревнование по хешированию паролей"
  15. ^ «Шпаргалка по хранению паролей» . Серия шпаргалок OWASP . ОВАСП . Проверено 17 мая 2023 г.

дальнейшее чтение