Введение

Увеличение времени, необходимого для тестирования криптографического ключа для защиты от атак полным перебором

В криптографии используются методы растяжения ключа, чтобы повысить безопасность потенциально слабого ключа, обычно пароля или парольной фразы, против атак полным перебором, увеличив ресурсы (время и, возможно, память), необходимые для проверки каждого возможного ключа. Пароли или парольные фразы, создаваемые пользователями, часто бывают слишком короткими или предсказуемыми, что позволяет их взломать, и растяжение ключа призвано усложнить такие атаки, усложнив базовый шаг – проверку одного кандидата в пароль. Растяжение ключа также повышает безопасность в некоторых практических приложениях, где длина ключа ограничена, имитируя большую длину ключа с точки зрения атакующего, использующего полный перебор. Существует несколько способов выполнения растяжения ключа. Один из способов – многократное применение криптографической хеш-функции или блочного шифра в цикле. Например, в приложениях, где ключ используется для шифрования, расписание ключа в шифре может быть модифицировано таким образом, чтобы его выполнение занимало определенное время. Другой способ – использование криптографических хеш-функций, требующих больших объемов памяти – они могут быть эффективны для противодействия атакам, ограниченным объемом доступной памяти.

История

Первая преднамеренно медленная функция получения ключей на основе пароля "CRYPT" была описана в 1978 году Робертом Моррисом для шифрования паролей Unix. Она использовала число итераций 25, 12-битовую соль и вариант DES в качестве подфункции. (Стандартный DES избегался в попытке затруднить атаки с использованием специализированного аппаратного обеспечения DES.) Пароли были ограничены максимум восемью символами ASCII. Хотя в свое время это было большим достижением, CRYPT(3) в настоящее время считается недостаточной. Количество итераций, рассчитанное на эпоху PDP 11, слишком мало, 12 бит соли создают неудобства, но не предотвращают предварительно вычисленные атаки по словарю, а ограничение в восемь символов препятствует использованию более надежных парольных фраз. Современные функции получения ключей на основе пароля, такие как PBKDF2, используют криптографический хэш, например SHA-2, более длинную соль (например, 64 бита) и большое количество итераций. Национальный институт стандартов и технологий США (NIST) рекомендует минимальное количество итераций 10 000. "Для особо важных ключей или для очень мощных систем, или систем, где воспринимаемая пользователем производительность не критична, может быть уместным количество итераций 10 000 000."

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