Безопасен ли SHA-1 для хранения паролей?

Это аккуратно и быстрее света:

  return Imaging.CreateBitmapSourceFromHBitmap( bitmap.GetHbitmap(), IntPtr.Zero,
      Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions() );
145
задан Community 23 May 2017 в 12:10
поделиться

4 ответа

Краткий ответ на ваш вопрос: SHA-1 максимально безопасен. MD5 тоже подойдет, даже MD4; но это может заставить некоторых инвесторов понервничать. Для связей с общественностью лучше всего использовать «лучшую» хеш-функцию, например SHA-256, даже если вы усечете его вывод до 160 или 128 бит (чтобы сэкономить на хранении). Некоторые из кандидатов второго раунда SHA-3 кажутся быстрее, чем SHA-1, но при этом, возможно, «более безопасны»; тем не менее, они все еще немного новы, поэтому использование SHA-256 или SHA-512 было бы более безопасным маршрутом прямо сейчас. Это заставит вас выглядеть профессионально и осторожно, и это хорошо.

Обратите внимание, что «максимально надежно» - это не то же самое, что «совершенно безопасно». См. Довольно пространные объяснения ниже.

Об известных атаках:

Известные атаки на MD4, MD5 и SHA-1 связаны с коллизиями, которые не влияют на сопротивление прообразу. Было показано, что MD4 имеет несколько слабых мест, которые можно (только теоретически) использовать при попытке взломать HMAC / MD4, но это не относится к вашей проблеме. Атака на 2 106 второго прообраза в статье Кесли и Шнайера представляет собой общий компромисс, который применяется только к очень длинным входам (2 60 байтов; это миллион терабайт - обратите внимание как 106 + 60 превышает 160; вот где вы видите, что в компромиссе нет ничего волшебного).

В остальной части этого сообщения предполагается, что используемая хеш-функция (например, SHA-1) представляет собой «черный ящик» без каких-либо специальных свойств, которые может использовать злоумышленник. Это то, что у вас есть прямо сейчас, даже с "неработающими" хеш-функциями MD5 и SHA-1.

О радужных таблицах:

«Радужная атака» на самом деле является разделением затрат на атаку по словарю или атаку методом грубой силы. Это производное от компромисса времени и памяти , впервые описанного Хеллманом в 1980 году. Предполагая, что у вас есть N возможных паролей (это размер вашего словаря или 2 n , если вы рассматриваете перебор хеш-функции с выходом n бит), существует атака с разделением времени, в которой вы предварительно вычисляете N хешированных паролей и храните их в большом столе. Если вы отсортируете хеш-выходы, вы сможете получить свой пароль за один поиск. Радужная таблица - это умный способ сохранить эту таблицу с гораздо меньшим пространством. Вы храните только N / t хешированных паролей, и вы взламываете пароли с помощью запросов O ( t 2 ). Радужные таблицы позволяют виртуально обрабатывать предварительно вычисленные таблицы, намного превышающие то, что вы можете реально сохранить.

Однако, радуга или нет, атакующий все равно должен провести полную атаку хотя бы один раз. Это можно рассматривать как несколько последовательных уровней оптимизации:

  1. Атака полным перебором / словарной атакой стоит N для взлома каждого пароля.
  2. Используя предварительно вычисленную таблицу, злоумышленник оплачивает эту стоимость N один раз и после этого может атаковать множество паролей с очень небольшой дополнительной платой за пароль.
  3. Если предварительно вычисленная таблица представляет собой радужную таблицу, то N может быть несколько больше, поскольку стоимость хранилища снижается.Узким местом на N становится мощность ЦП, которую может использовать злоумышленник, а не размер его жестких дисков.

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

О солях:

Соли - это способ уничтожить предварительные вычисления. В приведенном выше описании соль возвращает злоумышленника к шагу 1: использование соли не позволяет злоумышленнику разделить стоимость O ( N ) между несколькими атакованными паролями. Предварительно вычисленные таблицы, a fortiori радужные таблицы, больше не применимы.

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

Следовательно, «соление», по крайней мере, не позволит злоумышленнику использовать предварительно вычисленные таблицы, в частности предварительно вычисленные радужные таблицы. Это предполагает, что злоумышленник сможет взломать один или два пароля; мы не хотим, чтобы он взломал 1000 других паролей с небольшими дополнительными расходами.

Кроме того, соление полезно для связей с общественностью.

О стоимости SHA-1:

Элементарная стоимость SHA-1 связана с хешированием 64-байтового блока. Вот как работает SHA-1: данные заполняются, а затем разбиваются на блоки по 64 байта.Стоимость обработки одного блока составляет около 500 тактовых циклов в системе Intel Core2, и это для одного ядра. MD5 и MD4 быстрее, насчитывают около 400 и 250 циклов соответственно. Не забывайте, что большинство современных процессоров имеют несколько ядер, поэтому умножайте их соответственно.

Некоторые схемы засолки предписывают большие соли; например то, что входит в хеш-функцию, на самом деле представляет собой 40000 последовательных копий одной 128-битной соли, за которыми следует сам пароль. Это делает хеширование паролей более дорогим (в 10000 раз в моем примере) как для легитимного пользователя, так и для злоумышленника. Будет ли это хорошей идеей, зависит от настройки. Для входа в систему на настольном компьютере это хорошо: пользователь даже не заметит, что для хеширования пароля потребовалось 10 мс вместо 1 мкс; но стоимость для злоумышленника увеличилась в очень заметном раз - в 10 000. На общих серверах с тысячами клиентов в секунду совокупная стоимость может стать непомерно высокой. По идее, повышение планки одним и тем же фактором для законного пользователя и злоумышленника в конечном итоге не является хорошей безопасностью; но это может быть стоящей идеей в некоторых конкретных ситуациях.

Об онлайн-атаках:

Все вышеперечисленное касается отражения офлайн-атак . Автономная атака - это атака, при которой у злоумышленника есть все данные, необходимые для «проверки» паролей; например злоумышленник может получить копию базы данных с хешированными паролями. В автономной атаке злоумышленник ограничен только своими вычислительными ресурсами.Напротив, онлайн-атака - это атака, при которой каждое предположение злоумышленника должно пройти через честного проверяющего (например, злоумышленник просто пытается войти в атакованную систему). Сетевые атаки предотвращаются за счет ограничения количества попыток ввода паролей в секунду. Крайний пример - смарт-карты, которые отключаются после трех неправильных PIN-кодов.

Обычно для защиты паролей гораздо больше окупается, если система устроит так, чтобы злоумышленник не мог провести автономную атаку. Это то, что делают системы Unix: хешированные пароли, которые раньше находились в доступном для чтения / etc / password файле, теперь находятся в файле / etc / shadow , который защищен от доступ для чтения, за исключением нескольких привилегированных приложений. Предполагается, что если злоумышленник может прочитать / etc / shadow , то он, вероятно, обладает достаточным контролем над системой, поэтому ему больше не нужны пароли ...

208
ответ дан 23 November 2019 в 22:43
поделиться

В SHA-1 были обнаружены серьезные уязвимости, которые делают поиск намного быстрее, чем перебор. Он все еще в значительной степени неразрешим, но ожидается, что так будет продолжаться не слишком долго; программисты-параноики предпочитают что-нибудь из семейства SHA-2.

Из этой статьи относительно оригинального результата 2005 года:

"Пришло время идти, но не бежать, к пожарным выходам. Вы не видите дыма, но пожарная сигнализация сработала."

Дело не в том, что текущий криптоанализ делает SHA-1 небезопасным, а в том, что криптосообщество опасается, что худшие новости могут быть не за горами. Это опасение относится и к SHA-2, который демонстрирует те же недостатки, что и SHA-1, хотя и в гораздо большем пространстве поиска, отсюда и продолжающиеся поиски SHA-3.

Короче говоря, SHA-1 безопасен сейчас и, вероятно, будет безопасен еще некоторое время, но криптосообщество не удовлетворено таким прогнозом.

4
ответ дан 23 November 2019 в 22:43
поделиться

Если вы храните соленый пароль, SHA-1 подходит для практических целей. SHA-2 считается более безопасным, но SHA- 1 не проблема, если у вас нет причин быть по-настоящему параноиком.

Вот что говорит NIST :

Результаты, представленные до сих пор для SHA-1 , не ставят под вопрос его безопасность . Однако из-за достижений в технологии NIST планирует постепенно отказаться от SHA-1 в пользу более крупных и более сильных хэш-функций (SHA-224, {{1} } SHA-256, SHA-384 и SHA-512) от 2010 г.

3
ответ дан 23 November 2019 в 22:43
поделиться

Ваше описание соответствует текущему уровню техники.

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

Однако в идеале вы должны использовать существующий примитив хранения паролей, например, описанный здесь .

7
ответ дан 23 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: