Как именно реализовать Blowfish на php

Я искал вокруг, и я не могу найти хороший ресурс, который проходит через всю реализацию Blowfish.

Я использую 5.3.8, поэтому знаю, что могу использовать функцию crypt() и что мне нужно передать ей соль в виде

$2[x,y,a]$[журнал числа раундов по основанию 2]$[некоторая строка]

Но я где-то читал, что соль нужно генерировать каждый раз однозначно. Означает ли это, что вы должны хранить соль в своей базе данных? Если кто-то украдет вашу базу данных, разве вы не окажетесь в том же положении, что и при использовании shaX? Как именно все это работает.

ТАКЖЕ

Я читал, что Blowfish также используется для расшифровки паролей. Я понял, что это всего лишь алгоритм хеширования, в котором вы шифруете две строки, а затем проверяете, совпадают ли они. Как и зачем использовать алгоритм, который можно расшифровать?


person SimaPro    schedule 27.10.2012    source источник
comment
Соль предназначена только для предотвращения атак с предварительно вычисленными таблицами (также известными как радужные таблицы). PHP 5.5 будет поддерживать простой API для обработки паролей с хорошими значениями по умолчанию. Если вы используете PHP 5.3.7+, я предлагаю использовать compat lib.   -  person PeeHaa    schedule 27.10.2012
comment
Как и зачем использовать алгоритм, который можно расшифровать? Хэширование != шифрование. Хеширование — это один из способов.   -  person PeeHaa    schedule 27.10.2012
comment
Вы недостаточно искали openwall.com/articles/PHP-Users-Passwords.   -  person Baba    schedule 27.10.2012
comment
См. также: это и это   -  person PeeHaa    schedule 27.10.2012


Ответы (1)


Соль защищает вас от атак с использованием радужных таблиц, поэтому можно хранить соль в той же базе данных.

По сути, радужная таблица — это огромная таблица с миллионами предварительно вычисленных хэшей. Таким образом, если пароль — «some_pass», а хеш — «ABC123», злоумышленник посмотрит на «ABC123» в своей радужной таблице и увидит, что «some_pass» генерирует этот хеш.

Если вы используете соль, у злоумышленника будет хеш и соль, но эта радужная таблица не может работать. Радужные таблицы содержат общие пароли и/или все комбинации из 1-6 (или более) символов. Поэтому, если вы хешируете 'some_pass_salt__123123123123', вы можете видеть, что злоумышленнику не повезет с радужной таблицей.

Что касается реализации собственного Blowfish, я надеюсь, что это для обучения (домашнее задание?). В противном случае реализация собственных алгоритмов безопасности почти всегда является плохой идеей просто потому, что вы не являетесь экспертом в предметной области и упустите некоторые неясные детали.

Обратите внимание, что вы также можете проверить, какой алгоритм шифрования фактически используется, когда вы вызываете crypt(). MD5 больше не является безопасным, и его можно взломать с помощью хорошего графического процессора (это не опечатка, вы можете использовать свою графическую карту для взлома хэша). SHA-1 был взломан, но это сложно сделать с вычислительной точки зрения (это могут сделать военные); поэтому семейство SHA-1 не рекомендуется. Стремитесь к семейству SHA-2.

person Bogdan Gavril MSFT    schedule 27.10.2012