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

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

Использование KDF [ править ]

  • В сочетании с несекретными параметрами для получения одного или нескольких ключей из общего секретного значения (что иногда также называют «диверсификацией ключей»). Такое использование может помешать злоумышленнику, который получает производный ключ, узнать полезную информацию либо о входном секретном значении, либо о любом из других производных ключей. KDF также может использоваться, чтобы гарантировать, что производные ключи имеют другие желательные свойства, такие как предотвращение «слабых ключей» в некоторых конкретных системах шифрования.
  • Наиболее распространенный [ править ] Использование KDFs является хеширование паролей подхода к верификации пароля , используемому в PASSWD файл или теневой пароль файл. KDF обладают характеристиками, желаемыми для «хеш-функции пароля», хотя изначально они не были предназначены для этой цели. [ необходима цитата ] Несекретные параметры в этом контексте называются " солью ".
В 2013 году был объявлен конкурс по хешированию паролей, чтобы выбрать новый стандартный алгоритм хеширования паролей. 20 июля 2015 года конкурс завершился, и окончательным победителем был объявлен Argon2 . Особого признания получили четыре других алгоритма: Catena, Lyra2, Makwa и yescrypt. [4]
  • Как компоненты многосторонних протоколов согласования ключей . Примеры таких функций вывода ключей включают KDF1 , определенный в IEEE Std 1363-2000 , и аналогичные функции в ANSI X9.42 .
  • Для извлечения ключей из секретных паролей или парольных фраз.
  • Чтобы получить ключи разной длины из предоставленных: одним из примеров KDF, предназначенных для этой цели, является HKDF .
  • Ключ растяжка и ключевой укрепление.

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

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

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

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

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

История [ править ]

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

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

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

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

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

  1. ^ Беззи, Микеле; и другие. (2011). «Конфиденциальность данных» . Ин Камениш, Ян; и другие. (ред.). Управление конфиденциальностью и идентификацией на всю жизнь . Springer. С. 185–186. ISBN 9783642203176.
  2. ^ Kaliski, Burt; RSA Laboratories . «RFC 2898 - PKCS # 5: Спецификация криптографии на основе пароля, версия 2.0» . IETF .
  3. ^ Zdziarski, Джонатан (2012). Взлом и защита приложений IOS: кража данных, взлом программного обеспечения и способы его предотвращения . O'Reilly Media. С. 252–253. ISBN 9781449318741.
  4. ^ "Конкурс хеширования паролей"
  5. ^ a b «Хеширование паролей с солью - все правильно» . CrackStation.net . Проверено 29 января 2015 года .
  6. ^ Абади, Мартин, Т. Марк А. Ломас и Роджер Нидхэм. «Укрепление паролей». Центр исследования цифровых систем, Тех. Реп 33 (1997): 1997.
  7. ^ У. Манбер, "Простая схема создания паролей на основе односторонних функций, которые намного сложнее взломать", Компьютеры и безопасность, v.15, номер 2, 1996, стр.171–176.
  8. ^ Безопасные приложения ключей с низкой энтропией , Дж. Келси , Б. Шнайер , К. Холл и Д. Вагнер (1997)
  9. ^ Моррис, Роберт; Томпсон, Кен (3 апреля 1978 г.). «Защита паролем: история болезни» . Bell Laboratories . Архивировано из оригинала 22 марта 2003 года . Проверено 9 мая 2011 года .
  10. ^ Goodin, Dan (10 сентября 2015). «Когда-то считавшиеся пуленепробиваемыми, более 11 миллионов паролей Эшли Мэдисон уже взломаны» . Ars Technica . Проверено 10 сентября 2015 года .
  11. ^ a b Грасси Пол А. (июнь 2017 г.). SP 800-63B-3 - Рекомендации по цифровой идентификации, аутентификации и управлению жизненным циклом . NIST. DOI : 10.6028 / NIST.SP.800-63b .
  12. ^ Мельтем Сёнмез Туран, Элейн Баркер, Уильям Берр и Лили Чен (декабрь 2010 г.). SP 800-132 - Рекомендации по созданию ключей на основе пароля, Часть 1: Приложения для хранения данных (PDF) . NIST. DOI : 10.6028 / NIST.SP.800-132 . CS1 maint: несколько имен: список авторов ( ссылка )

Дальнейшее чтение [ править ]

  • Персиваль, Колин (май 2009 г.). «Более сильное получение ключей с помощью последовательных функций с жестким запоминанием» (PDF) . BSDCan'09 Презентация . Проверено 19 мая 2009 года .
  • Ключевые деривационные функции