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

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

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

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

Содержание
  • 1 Процесс
  • 2 На основе хеша
  • 3 Сила и время
  • 4 История
  • 5 Некоторые системы, в которых используется растяжение клавиш
  • 6 См. Также
  • 7 Ссылки
Процесс

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

Растяжение ключа оставляет злоумышленнику два варианта:

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

Если злоумышленник использует тот же класс оборудования, что и пользователь, для обработки каждого предположения потребуется такое же количество времени, как и у пользователя (например, одна секунда). Даже если злоумышленник имеет гораздо большие вычислительные ресурсы, чем пользователь, растяжение ключа все равно замедлит злоумышленника, не оказывая серьезного влияния на удобство использования системы для любого законного пользователя. Это связано с тем, что компьютер пользователя должен вычислить функцию растяжения только один раз после ввода пользователем своего пароля, тогда как злоумышленник должен вычислить ее для каждого предположения в атаке.

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

на основе хэша

Многие библиотеки предоставляют функции, которые выполняют растягивание клавиш как часть своей функции; см. crypt (3) для примера. PBKDF2 предназначен для генерации ключа шифрования из пароля, и не обязательно для аутентификации по паролю. PBKDF2 может использоваться как в случае, если количество выходных битов меньше или равно внутреннему алгоритму хеширования, используемому в PBKDF2, который обычно SHA-2 (до 512 бит), так и в качестве шифрования. ключ для шифрования статических данных.

Сила и время

В этих примерах предполагается, что персональный компьютер может выполнить около 65 000 SHA-1 хэшей за одну секунду. Таким образом, программа, использующая растяжение клавиш, может использовать 65 000 раундов хешей и задерживать пользователя не более чем на одну секунду. Обратите внимание, что графический процессор стоимостью 700 долларов США с июля 2019 года может выполнять более 10 миллиардов хэшей SHA-1 за одну секунду.

Для проверки пробного пароля или ключевой фразы обычно требуется одна операция хеширования. Но если использовалось растяжение ключа, злоумышленник должен вычислить усиленный ключ для каждого ключа, который они тестируют, что означает, что для каждого теста требуется вычислить 65 000 хешей. Это увеличивает рабочую нагрузку злоумышленника в 65000 раз, примерно в 2 раза, что означает, что усиленный ключ имеет силу ключа примерно на 16 дополнительных бит.

Закон Мура утверждает, что скорость компьютера удваивается примерно каждые 1,5 года. Исходя из этого предположения, каждые 1,5 года еще один бит ключевой силы будет правдоподобно взломан. Это означает, что 16 дополнительных бит прочности стоят примерно 16 × 1,5 = 24 года после взлома, но это также означает, что количество раундов растяжения ключей, используемых системой, должно удваиваться примерно каждые 1,5 года для поддержания того же уровня безопасности (поскольку большинство ключей более безопасны, чем необходимо, системы, требующие согласованной детерминированной генерации ключей, скорее всего, не будут обновлять количество итераций, используемых при растяжении ключа. В таком случае разработчик должен принять во внимание, сколько времени они хотят, чтобы система деривации ключей продолжала без изменений и следует выбрать соответствующее количество хешей на время жизни системы).

Хеш-функции, связанные с процессором, по-прежнему уязвимы для аппаратных реализаций. Такие реализации SHA-1 существуют с использованием всего 5000 вентилей и 400 тактов. С многомиллионными вентилями ПЛИС стоимостью менее 100 долларов злоумышленник может построить полностью развернутый аппаратный взломщик примерно за 5000 долларов. Такая конструкция, работающая на частоте 100 МГц, может тестировать около 300 000 клавиш в секунду. Злоумышленник может выбрать хорошее соотношение цены и скорости, например, дизайн 150 000 ключей в секунду за 2500 долларов. В такой ситуации растяжение ключа по-прежнему замедляет атакующего; дизайн за 5000 долларов, атакующий прямой хэш SHA-1, сможет попробовать 300000 ÷ 2 ≈ 4,578 ключей в секунду.

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

История

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

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

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

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

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