id: Гость   вход   регистрация
текущее время 18:01 19/11/2019
создать
просмотр
редакции
ссылки

Режимы String-to-Key


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

Простая S2K (simple s2k)


Такая процедура кодируется как



Соответствующая схема S2K: однократно хэшируйте парольную фразу, выход хэш-функции примите за ключ.


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

S2K с привязкой (salted s2k)


Процедура кодируется в пакете следующим образом:



Эта схема работает так же, как и простая S2K, только вместо хэширования "голого" пароля здесь хэшированию подвергается конкатенация привязки (salt) и парольной фразы. Такой подход делает проведение словарной атаки невозможным: противнику придётся создавать базу данных с верным значение привязки, но поскольку это значение выбирается всякий раз уникальным, оппонент не сможет использовать эту базу достаточно много.

Итеративная S2K с привязкой (iterated and salted s2k)


Этот указатель выглядит следующим образом:



Указатель c определяет значение счётчика как

count = (16 + (c mod 16)) ∗ 2c/16+6

Счётчик count задаёт число байт, которое должно быть подвергнуто хэшированию (не число итераций!). Чтобы набрать эти байты, привязка и пароль подвергаются многократному хэшированию. 1 В маловероятной ситуации, при которой задаётся слишком малый показатель count, и длина строки "привязка|пароль" оказывается больше него, 2 строка всё равно хэшируется от начала до конца.


Такой режим наиболее хорош, когда вы выполняете зашифрования/расшифрования на быстром компьютере и хотите усложнить взломщикам жизнь. Если вы применяете замедленную процедуру, они также вынуждены делать лишнюю работу в попытках подобрать ваш пароль. Это не повышает теоретическую защищённость, поскольку вы не получаете преимущества над противником: вам обоим придётся выполнять больше вычислений.


Стандарт рекомендует использовать режим итеративной S2K с привязкой, способный реально усложнить задачу оппонента. OpenPGP не приводит рекомендаций на значение c, но если вы знаете, что компьютеры, на которых будет выполняться зашифрование и расшифрование, имеют вдоволь процессорного времени, а парольная фраза поддаётся подбору, используйте c = 255. 3 Если же PGP-операции должен выполнять веб-сервер со множеством криптографических задач, вы можете прибегнуть к обычной S2K с привязкой, чтобы не создавать серверу избыточную паразитную нагрузку.


Если выход хэш-функции (для любого режима S2K) оказывается слишком мал для использования в качестве ключа, процедура повторяется, но теперь с байтом 00, добавленным перед строкой на входе хэш-функции. Если опять требуется дополнительный выход, к строке добавляется 00 00, и т.д. На практике, 128-битовый ключ может легко быть получен из 160-битового хэша, но если объединить AES с MD5, процедура имеет смысл.

Проблемы


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


Назад | Дальше



1 Выход хэш-функции из текущего цикла поступает ей на вход на следующем цикле, — прим. пер.


2 Чтобы такое произошло в "наихудшем" случае при c = 0 длина пароля должна быть 1016 знаков (для паролей в кодировках UTF длина может быть меньше), — прим. пер.


3 В этом случае хэшированию придётся подвергнуть свыше 120 Мб данных. Для 160-битовой хэш-функции это означает более 6,5 млн. итераций хэширования. Подумайте, прежде чем делать это на старом или перегруженном ПК, поскольку работа способна занять вплоть до нескольких минут времени (которыми придётся платить даже за банальную опечатку в пароле), — прим. пер.


 
Комментариев нет [показать комментарии/форму]
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3