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

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

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

Процесс [ править ]

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

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

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

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

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

На основе хеша [ править ]

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

Сила и время [ править ]

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

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

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

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

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

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

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

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

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

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

Некоторые системы, использующие растяжение клавиш [ править ]

Некоторые, но не все программы для шифрования дисков (см. Сравнение программ для шифрования дисков ):

  • 7-Zip [11]
  • Apache .htpasswd "APR1" и OpenSSL "passwd" используют 1000 раундов растяжения ключа MD5 .
  • KeePass и KeePassXC , утилиты для управления паролями с открытым исходным кодом. По состоянию на 2020 год в последней версии используется Argon2d с задержкой растяжения ключа по умолчанию в 1 секунду. [12] [13]
  • Linux и некоторые другие Unix-подобные системы предлагают режимы SHAcrypt, которые по умолчанию выполняют 5000 итераций хеширования SHA256 или SHA512, минимум 1000 и максимум 999 999 999. [14]
  • Password Safe менеджер паролей с открытым исходным кодом .
  • PGP , программное обеспечение для шифрования GPG . GPG по умолчанию выполняет итерацию хеширования 65536 раз. [15]
  • Протокол беспроводного шифрования Wi-Fi Protected Access (WPA и WPA2) в персональном режиме использовал PBKDF2 с 4096 итерациями. (WPA3 использует одновременную проверку подлинности равных, которая утверждает, что не раскрывает хэши паролей.)

См. Также [ править ]

  • Функция вывода ключа - часто используется растяжение ключа
    • PBKDF2 , bcrypt , scrypt , Argon2 - широко используемые алгоритмы растягивания ключей
  • Hashcash - несколько родственный метод.
  • Хеш-цепочка

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

  1. ^ a b c Kelsey J, Schneier B, Hall C, Wagner D (1998). Окамото Э., Давида Дж., Мамбо М. (ред.). «Безопасные приложения ключей с низкой энтропией». Конспект лекций по информатике . Springer. 1396 (том 1936, Информационная безопасность: Первый международный семинар, ISW'97, Япония ): 121–134. DOI : 10.1007 / BFb0030415 . ISBN 978-3-540-64382-1.
  2. ^ [1] , PBKDF2-HMAC-SHA1 с 1000 итераций стоит 2 002 хэша SHA-1 при скорости 5 164,9 кГц / с, что составляет 10 340 129 800 хэшей SHA-1 в секунду.
  3. ^ http://events.iaik.tugraz.at/RFIDSec08/Papers/Publication/04%20-%20ONeill%20-%20Low%20Cost%20SHA-1%20-%20Slides.pdf
  4. ^ "Архивная копия" . Архивировано из оригинала на 2011-07-16 . Проверено 8 августа 2010 .CS1 maint: archived copy as title (link)
  5. ^ Моррис, Роберт; Томпсон, Кен (1978-04-03). «Защита паролем: история болезни» . Bell Laboratories . Архивировано из оригинала на 2003-03-22 . Проверено 9 мая 2011 .
  6. Грасси Пол А. (июнь 2017 г.). SP 800-63B-3 - Рекомендации по цифровой идентификации, аутентификации и управлению жизненным циклом . NIST. DOI : 10.6028 / NIST.SP.800-63b .
  7. ^ Мельтем Сёнмез Туран, Элейн Баркер, Уильям Берр и Лили Чен (декабрь 2010 г.). SP 800-132 - Рекомендации по созданию ключей на основе пароля, Часть 1: Приложения для хранения . NIST. DOI : 10.6028 / NIST.SP.800-132 .CS1 maint: multiple names: authors list (link)
  8. ^ Scrypt
  9. ^ scrypt: новая функция вывода ключей , Колин Персиваль, BSDCan 2009, доступ 2011-2-1
  10. ^ Конкурс по хешированию паролей
  11. ^ https://7-zip.org/7z.html
  12. ^ KBDF 4
  13. ^ KeePassXC - Создание вашей первой базы данных
  14. ^ Дреппер, Ульрих. «Шифрование Unix с использованием SHA-256 и SHA-512» .
  15. ^ RFC 4880