2009-03-07 7 views
17

Я планирую использовать jBCrypt для хэширования паролей в новом веб-приложении, так как он должен быть лучшим из того, что я прочитал. Поскольку я не использовал его, прежде чем я заглядываю, если есть какая-то причина не использовать его.Что использовать для хэширования паролей? Любая причина не использовать jBCrypt?

У меня есть это:

  • я не нашел его в хранилище Maven (искал jbcrypt и Bcrypt в mvnrepository.org), который является неудачником, как я хотел бы, чтобы моя зависимость управляется с помощью если возможно, репозиторий Maven. Если jBCrypt - лучшее решение для хеширования паролей, я должен был бы настроить собственный локальный репозиторий и иметь его таким образом. Или я просто пропустил это? Может быть, он где-то там?
  • Это только в версии 0.2, но, возможно, она стабильная в любом случае, и причина для номера с низкой версией имеет еще одну причину?

ответ

5

jBcrypt, вероятно, прекрасен как криптоалгоритм для ваших паролей; blowfish относительно силен. Хотя некоторые ошибки реализации в Blowfish были обнаружены, я не нашел ничего о jBcrypt. С другой стороны, Blowfish не тестировался почти так же сильно, как и другие алгоритмы, а атака известная-обломок crack часто срабатывает лучше, чем ожидалось, удивительных криптоватов.

Так вот что я предлагаю:

  • идти вперед и использовать jBcrypt но защитить зашифрованные файлы паролей в той мере, вы можете разумно - как вы бы использовать/и т.д./тень на системе UNIX.
  • Вопреки предложению Никхиля, будет вытащить источники в ваш контроль версий по двум причинам: (1) где бы вы их сохранили, поскольку они вам нужны, когда вы строите, и (2), потому что всегда есть случайный человек, делающий jBcrypt, перейдет к другим вещам, и вы не хотите, чтобы он оставался висевшим перед доставкой (что неизбежно, когда вы узнаете.) В такой ситуации я бы поместите источники в ваш контроль версий, как если бы они были вашим кодом, а затем любые изменения можно вставить, как если бы вы построили новую версию самостоятельно. Не нужно быть более сложным, чем обычно.
+0

Да, теперь это в моем управлении версиями. Я должен использовать Google для этих слабых мест в Blowfish, поскольку это новость для меня. Что касается «атаки типа трещины в стиле открытого текста», вы имеете в виду атаку типа слова грубой силы? Если это бросок, это вся причина, по которой я хочу использовать Blowfish, так как это медленный алгоритм. – 2009-03-26 07:34:03

+0

Нет, посмотрите на треск Alec Muffet: он предварительно вычислит большой словарь общих паролей, а затем сравнивает зашифрованные тексты. И дело не в том, что у Blowfish были известные недостатки, это значит, что некоторые из них, как сообщается, имеют недостатки. –

+0

Хм, хорошо. Но я использую pasword salting, поэтому атака словаря не должна быть такой. – 2009-04-05 12:53:12

0

Я сомневаюсь, что стабильность будет проблемой, поскольку сам bcrypt является зрелым, а его крошечные стандартизированные обертки не делают ничего экстраординарного. Я доволен другой оберткой Bcrypt от Damien Miller, python-bcrypt, которая находится только на версии 0.1.

Я незнакомый с Maven, но (ересь предупреждает!) Я сомневаюсь, что вам нужен контроль версий для компонента, такого же простого, как bcrypt. Чтобы процитировать сайт, изменения от v0.1 до v0.2 были «правильностью, опечатками и твитами API (полностью обратно совместимыми)», а список TODO пуст.

+0

jBcrypt на самом деле не является оболочкой. Это естественная реализация. Я использую его сейчас, я включил исходный код в проект. – 2009-03-26 07:28:38

2

Насколько ваше беспокойство, что это не зрелая, я собирался предложить вам создать свои собственные тесты JUnit сравнивающие результаты jBcrypt и более проверенную Bcrypt, чтобы увидеть, если вы получите те же результаты, и затем вносить вклад в проект jBcrypt.

Но это уже было сделано:

...корабли с комплектом JUnit unit проверили правильность работы библиотеки и совместимость с канонической реализацией C с помощью каскадного алгоритма .

Просматривая тесты JUnit, чтобы увидеть, если они удовлетворяют свой уровень удовлетворенности, где я хотел бы начать ...

+0

Да, у меня есть. Тесты JUnit по-прежнему весьма ограничены и основаны на жестко закодированных значениях в методах тестирования. Поэтому, если я не сравниваю их с значениями из BCrypt, я все еще не могу быть уверенным, что значения фактически взяты из BCrypt (что я уверен, что они есть). – 2009-03-26 07:31:14