Насколько безопасен этот хэш?(PHP) - PullRequest
3 голосов
/ 06 марта 2011
function oneWayEncrypt($string) { 
    $salt = md5($string."yHuJ@8&6%4#%([@d-]"); 
    $salt2 = md5($string."@!#&+-)jU@[yT$@%"); 

    $string = hash('sha512',"$salt$string$salt2"); 

    return $string; 
} 

Ответы [ 3 ]

15 голосов
/ 06 марта 2011

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

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

Если вы хотите улучшить систему безопасности, вместо этого рассмотрите возможность использования соли, которая генерируется случайным образом и затем сохраняется вместе с полученным хешем.Таким образом, независимо от того, какие таблицы я предварительно вычисляю, есть небольшая вероятность, что таблица будет полезна, потому что я не обязательно вычислял таблицы для всех возможных солей.По сути, каждый случайный бит в вашей соли удваивает объем работы, которую я должен сделать, поэтому, если вы выберете хорошую случайную соль (скажем, 128 битов), то не существует никакого способа, которым я мог бы выполнить атаку до вычисления.Мне пришлось бы атаковать SHA-512, хеш, предположительно криптографически безопасный (имя означает «алгоритм безопасного хэширования»), чтобы взломать вашу систему.

4 голосов
/ 06 марта 2011

Насколько безопасен для чего ?

Для хранения хешированных паролей? - Используйте случайные соли, разные для каждого пароля.

Для подписи куки? - Используйте HMAC, код аутентификации сообщений на основе хэша.

Вы говорите, что хотите использовать его для хранения паролей в БД и файлах cookie, оба из которых должны быть выполнены с использованием других проверенных методов, см. Выше. Не пытайтесь изобретать велосипед.

Когда вы спрашиваете, насколько безопасно что-то, вы должны знать не только то, как вы собираетесь его использовать, но также и то, от какой атаки вы хотите, чтобы оно было защищено. Вещи небезопасны в вакууме.

Кроме того, не думайте, что SHA-512 лучше для вашего приложения только потому, что в нем больше битов. Прочитайте статью «Атаки прообразов на 41-шаговом SHA-256 и 46-шаговом SHA-512» Ю Сасаки, Лэй Вана и Казумаро Аоки ( PDF ), чтобы увидеть, что для некоторых приложений некоторые более короткие хэши могут быть на самом деле более безопасны, чем SHA-256 и SHA-512, потому что нет известных атак с прообразом, которые бы тормозили столько раундов, как для SHA-256 и SHA-512.

2 голосов
/ 06 марта 2011

Хотя SHA-512 является хорошим выбором для криптографической хеш-функции в целом, ее все равно может быть слишком легко вычислить: SHA-512 является достаточно быстрым в вычислительном отношении для обработки 154 МБ / с . Вам следует лучше выбрать криптографическую хеш-функцию, которая вычислительно медленнее, чем bcrypt , которую можно замедлить с коэффициентом стоимости.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...