Рекомендуемый хеш для паролей в ASP Classic - PullRequest
4 голосов
/ 31 октября 2008

Какой самый медленный (и поэтому лучший) алгоритм хэширования паролей в ASP Classic?

РЕДАКТИРОВАТЬ: Для тех, кто не знает, при хешировании паролей более медленные хеши предпочтительнее, чем более быстрые, чтобы помочь в медленных атаках в стиле радужных таблиц.

EDIT2: И да, конечно, скорость не единственная действительная проблема для выбора хеша. Мой вопрос предполагает, что При прочих равных условиях , самый медленный метод хеширования предпочтителен при хешировании пароля. Хотя столкновение / обратный инжиниринг, конечно, тоже вызывает беспокойство, я отдаю приоритет скорости в этом вопросе, поскольку это, пожалуй, самый важный фактор, который следует учитывать при сравнении популярных алгоритмов хеширования для использования с паролями.

Спасибо!

Ответы [ 7 ]

12 голосов
/ 31 октября 2008

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

От Томаса Птачека по адресу http://www.securityfocus.com/blogs/262,, как указано в этой статье Кодовый ужас :

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

Скорость - это то, что вам не нужно в хэш-функции пароля.

Современные парольные схемы подвергаются атакам с пошаговыми взломщиками паролей.

Дополнительные крекеры не просчитать все возможные трещины пароли. Они считают каждый пароль хэш индивидуально, и они кормят своих словарь через хеш пароля функционировать так же, как ваш логин PHP страница будет. Крекеры Радужный стол как Ophcrack использовать пространство для атаки пароли; дополнительные крекеры, такие как John the Ripper, Crack и LC5 работают со временем: статистика и вычисления.

Игра с парольной атакой Время взломать пароль X. С Радужные столы, это время зависит от насколько большим должен быть ваш стол и как быстро вы можете найти его. С добавочные крекеры, время зависит о том, как быстро вы можете сделать пароль запуск хеш-функции.

Чем лучше вы можете оптимизировать свой хэш-функция пароля, быстрее хэш-функция вашего пароля получает, слабее твоя схема есть. MD5 и SHA1, даже обычные блочные шифры, такие как DES, предназначены для быстрой работы. MD5, SHA1 и DES являются слабым паролем хэши. На современных процессорах, сырой крипто строительные блоки, такие как DES и MD5 могут быть нарезанным, векторизованным и распараллелен, чтобы сделать поиск пароля молниеносно Game-over FPGA внедрения стоят только сотни долл.

Некоторые комментарии к документации PHP MD5 также обсуждают предпочтения медлительности.

Чтобы ответить на ваш вопрос, похоже, BCrypt - это путь. Однако я не смог найти никаких реализаций для ASP Classic. Если это правда, я бы придерживался обычной хеш-функции, такой как SHA512.

5 голосов
/ 31 октября 2008

Я проигнорирую медленную часть, и вместо этого перейду к "хорошей" части.

Я предлагаю вам использовать SHA-512 с солью, чтобы победить словарь и атаки радуги. Я не верю, что существуют какие-либо известные уязвимости для SHA-512.

3 голосов
/ 31 октября 2008

Если вы пытаетесь победить атаки методом "грубой силы", вам лучше применять принудительное окно / счетчик неудачных попыток, а не полагаться на скорость механизма хеширования (или сравнения хешей), чтобы атака продолжалась дольше. Блокируйте учетную запись после определенного количества неудачных попыток в окне сбоя и разрешайте новые попытки только по истечении значительного времени.

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

[РЕДАКТИРОВАТЬ] Чтобы помочь отразить радужные атаки - когда злоумышленник извлек ваши хешированные пароли и находит подходящие совпадения, которые хэшируются с одинаковыми значениями - рассмотрите возможность использования случайной соли, уникальной для хеш-пароля каждого пользователя, и фиксированной соли, которая является частью алгоритма, а не данных. Например:

  testHash = computeHash( user.salt + "98hloj5674" + password );
  if (testHash == user.hashedPassword)
  {
      valid = true;
  }

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

В ASP Classic вам нужно будет сделать это в библиотеке, а не на странице, чтобы убедиться, что пользователь не сможет увидеть вашу фиксированную соль.

2 голосов
/ 21 января 2009
Dim sPassword, sSalt
sPassword = "Lorem"
sSalt = "Ipsum"
With CreateObject("CAPICOM.HashedData")
  .Algorithm = 0 ' CAPICOM_HASH_ALGORITHM_SHA1
  .Hash sPassword & sSalt
  Response.Write "Here is your hash: " & .Value
End With

Документация Capicom

Алгоритм любой из следующих:

CAPICOM_HASH_ALGORITHM_SHA1      = 0
CAPICOM_HASH_ALGORITHM_MD2       = 1
CAPICOM_HASH_ALGORITHM_MD4       = 2
CAPICOM_HASH_ALGORITHM_MD5       = 3
CAPICOM_HASH_ALGORITHM_SHA_256   = 4 - Not supported on Windows XP or 2000
CAPICOM_HASH_ALGORITHM_SHA_384   = 5 - Not supported on Windows XP or 2000
CAPICOM_HASH_ALGORITHM_SHA_512   = 6 - Not supported on Windows XP or 2000
0 голосов
/ 01 ноября 2008

Я лично предпочитаю алгоритм Whirlpool для всех моих нужд хеширования. Он выдает 512-битный выход и, следовательно, имеет те же требования к пространству, что и SHA-512. К сожалению, я не могу авторитетно говорить о том, является ли один из них более безопасным, чем другой, но в этой третьей версии Whirlpool, похоже, нет никаких вопиющих недостатков.

Ссылочные реализации находятся в свободном доступе, и это хорошо, потому что я редко нахожу это реализованным по умолчанию в различных инструментах и ​​языках.

(Если кто-нибудь знает причину, по которой SHA следует отдавать предпочтение Whirlpool, пожалуйста, дайте мне знать.)

0 голосов
/ 31 октября 2008

На самом деле, лучшая хеш-функция - это та, которая не генерирует коллизии и не подвержена атакам с радужных таблиц.

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

Здесь представлена ​​одна реализация SHA-256 (мне нравится, как они называют это «односторонним шифрованием»):
http://www.freevbcode.com/ShowCode.Asp?ID=2565

Хотя это еще не проверено, но, безусловно, есть реализации SHA2 для Classic ASP.

0 голосов
/ 31 октября 2008

psuedocode для самого медленного метода:

function hashPassword(password)
    sleep for 10 seconds
    return password
end function

Это, конечно, не самый безопасный (или вообще), но он медленный ...

(я просто указываю, что замедление - это не ответ ...)

...