Це повинно бути досить , щоб сказати , є чи Bcrypt або SHA-512 (в контексті відповідного алгоритму , як PBKDF2) є досить хорошим . І відповідь - так, будь-який алгоритм достатньо безпечний, що порушення відбудеться через недоліки реалізації, а не криптоаналіз.
Якщо ви наполягаєте на тому, щоб знати, що є "кращим", SHA-512 провів глибокі огляди від NIST та інших. Це добре, але були визнані недоліки, які, хоча зараз не використовуються, призвели до змагань SHA-3 за нові хеш-алгоритми. Також майте на увазі, що вивчення алгоритмів хешу "новіше", ніж у шифрів, і криптографи досі дізнаються про них.
Незважаючи на те, що bcrypt в цілому не настільки ретельно перевіряється, як сам Blowfish, я вважаю, що, будучи на основі шифру з добре зрозумілою структурою, надає йому певної притаманної безпеки, якої не вистачає на основі хеш-аутентифікації. Крім того, простіше використовувати загальні графічні процесори як інструмент для атаки хешей на основі SHA-2; через свої вимоги до пам'яті оптимізація bcrypt вимагає більш спеціалізованого обладнання, наприклад FPGA, з деякою бортовою пам'яттю.
Примітка: bcrypt - це алгоритм, який використовує Blowfish внутрішньо. Це не сам алгоритм шифрування. Він використовується для незворотно затемнення паролів, подібно до того, як хеш-функції використовуються для "однобічного хешу".
Алгоритми криптографічного хешу розроблені таким чином, що неможливо повернути назад. Іншими словами, враховуючи лише вихід хеш-функції, потрібно «назавжди» знайти повідомлення, яке дасть той самий хеш-вихід. Насправді, обчислювально неможливо знайти будь-які два повідомлення, які виробляють однакове хеш-значення. На відміну від шифру, хеш-функції не параметризуються ключем; той самий вхід завжди дасть однаковий вихід.
Якщо хтось надає пароль, який відповідає хеш-значенню, збереженому в таблиці паролів, він підтверджується автентифікацією. Зокрема, через незворотність хеш-функції передбачається, що користувач не є зловмисником, який узявся за хеш і повернув його назад, щоб знайти робочий пароль.
Тепер розглянемо bcrypt. Він використовує Blowfish для шифрування магічної стрічки, використовуючи ключ, "похідний" від пароля. Пізніше, коли користувач вводить пароль, ключ виводиться знову, і якщо шифротекст, що утворюється при шифруванні з цим ключем, відповідає збереженому шифротексту, користувач аутентифікується. Шифротекст зберігається в таблиці "пароль", але похідний ключ ніколи не зберігається.
Щоб зламати криптографію тут, зловмиснику доведеться відновити ключ із шифротексту. Це називається атакою "відомого простого тексту", оскільки атака знає зашифровану магічну рядок, але не використовується ключ. Сипуха вивчена широко, і досі невідомі напади, які дозволяли б зловмисникові знайти ключ із єдиного відомого простого тексту.
Так, як і незворотні алгоритми, засновані на криптографічних дайджестах, bcrypt виробляє незворотний вихід із пароля, солі та коефіцієнта витрат. Її сила полягає в стійкості Blowfish до відомих атак з простого тексту, що є аналогом "першої попередньої атаки зображення" за алгоритмом дайджесту. Оскільки його можна використовувати замість хеш-алгоритму для захисту паролів, bcrypt плутано називають самим алгоритмом "хеш".
Якщо припустити, що таблиці веселок були зірвані правильним використанням солі, будь-яка справді незворотна функція зводить зловмисника до спроб та помилок. І швидкість, з якою зловмисник може проводити випробування, визначається швидкістю цього незворотного алгоритму "хеш". Якщо використовується одна ітерація хеш-функції, зловмисник може робити мільйони випробувань в секунду, використовуючи обладнання, яке коштує близько 1000 доларів, випробовуючи всі паролі довжиною до 8 символів протягом декількох місяців.
Якщо, однак, дайджест виводиться "тисячами разів", знадобиться сотні років, щоб перевірити той самий набір паролів на цьому апараті. Bcrypt досягає того ж ефекту «підсилення ключів» шляхом ітерації всередині своєї ключової програми виведення, а правильний метод на основі хешу, як PBKDF2, робить те саме; в цьому відношенні два методи схожі.
Отже, моя рекомендація bcrypt випливає з припущень 1), що Blowfish має аналогічний рівень уважності, як сімейство SHA-2 хеш-функцій;