Ключ функция деривации

редактировать
Функция, которая извлекает один или несколько секретных ключей из секретного значения

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

Содержание
  • 1 Использование KDF
    • 1.1 Расширение и усиление ключа
  • 2 История
  • 3 Ссылки
  • 4 Дополнительная литература
Использование KDF
  • В сочетании с несекретными параметрами для получения одного или нескольких ключей из общего секретного значения (что иногда также называют «диверсификацией ключей»). Такое использование может помешать злоумышленнику, который получает производный ключ, узнать полезную информацию либо о входном секретном значении, либо о любом из других производных ключей. KDF также может использоваться, чтобы гарантировать, что производные ключи имеют другие желательные свойства, такие как предотвращение «слабых ключей» в некоторых конкретных системах шифрования.
  • Наиболее распространенным использованием KDF является хеширование паролей подход к проверке пароля, используемый файлом passwd или файлом теневым паролем. KDF обладают характеристиками, желаемыми для «хеш-функции пароля», хотя изначально они не были предназначены для этой цели. Несекретные параметры в этом контексте называются «salt ».
В 2013 году был объявлен Конкурс по хешированию паролей для выбора нового стандартного алгоритма хеширования паролей. 20 июля 2015 года конкурс завершился, и окончательным победителем был объявлен Аргон2. Особое признание получили четыре других алгоритма: Catena, Lyra2, Makwa и yescrypt.
  • Как компоненты многосторонних протоколов согласования ключей. Примеры таких функций получения ключей включают, определенные в IEEE Std 1363-2000, и аналогичные функции в.
  • Для получения ключей из секретных паролей или парольных фраз.
  • Для получения ключей ключи длины, отличной от представленных: одним из примеров KDF, предназначенных для этой цели, является HKDF.
  • Растяжение ключа и усиление ключа.

Растяжение ключа и усиление ключа

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

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

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

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

История

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

Современные функции получения ключей на основе пароля, такие как PBKDF2 (указанный в RFC 2898 ), используйте криптографический хэш, такой как SHA-2, больше соли (например, 64 бита и больше) и большое количество итераций (часто десятки или сотни тысяч).

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

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

Ссылки
Дополнительная литература
Последняя правка сделана 2021-05-25 05:03:15
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте