2014-01-08 3 views
-1

У меня есть следующий код: (только тестовый файл для шифрования/хеширования)соль + sha512 + md5 шифрование

<!doctype html> 
<html> 
<head></head> 
<body> 

    <?php 

    error_reporting('off'); 

    if (isset($_POST['submit'])) { 
     $salt = "[email protected]<^$"; 
     $hash = hash("sha512", $_POST['hash']); 
     $hash = $salt . $hash; 
     $hash = md5($hash); 
     echo $hash; 
     $hashLen = strlen($hash); 
     echo "<br>The length of the hashed word is " . $hashLen . " characters long!"; 
    } 

    ?> 

    <form action="hashed.php" method="post"> 
     <input type="text" name="hash"> 
     <input type="submit" value="Hash" name="submit"> 
    </form> 

</body> 
</html> 

Насколько безопасно это? Я знаю, что это, скорее всего, можно взломать, но как долго это займет? В настоящее время я создаю регистрационную форму php/mysqli и хочу сделать пароли пользователя безопасными, насколько я могу, так что взломать один из паролей пользователя потребуется очень долгое время. Чтобы зашифровать его еще больше, я могу использовать это, например:

Хеширование его с помощью sha512, md5 (md5), добавление другой соли, еще двух sha512, еще одного md5 и другой соли!

Насколько это безопасно? Как долго понадобится взломать этот пароль хакером? Пожалуйста, не могли бы вы посоветовать мне использовать очень, очень безопасный метод шифрования. Кроме того, я хочу, чтобы пользователь вошел в систему с файлом cookie: нужен безопасный способ хранения их информации в cookie!

Заранее спасибо

+1

Повышенная сложность! = Повышенная безопасность. Использование одной и той же соли для всех паролей совершенно небезопасно. [password_hash()] (http://us1.php.net/manual/en/function.password-hash.php) является безопасным и имеет встроенные надежные соли. –

ответ

9

Это небезопасно. Это похоже на Dave's home brew hash/kinda stupid algorithm, и ответы объясняют, что с ним не так. В вашем случае я просто скажу, что вы делаете только 2 вычисления, используя очень быстрые хэши, и это нигде не достаточно, чтобы победить крекирование на основе GPU.

Кроме того, вы должны never roll your own cryptography, конечно, то же самое относится и к хэширующим функциям. Вместо того, чтобы использовать стандартный и хорошо проверенные password hashing functions, которые приходят с PHP:

$password = "HelloStackOverflow"; // example password 

$hash = password_hash($password, PASSWORD_BCRYPT); // here's the hash of the previous password 

// you can set the "complexity" of the hashing algorithm, it uses more CPU power 
// but it'll be harder to crack, even though the default is already good enough 

$hash = password_hash($password, PASSWORD_BCRYPT, ["cost" => 10]); 

if (password_verify($password, $hash)) { // checking if a password is valid 
    echo "Welcome back !"; // valid password 
} else { 
    echo "You're not the one you're pretending to be..."; // invalid password 
} 

Если установка PHP слишком старая (< 5,5) и не имеет password_* функции, вы можете использовать this library, которая обеспечивает прямую совместимость с эти функции; использование остается таким же, как в примере выше.

1

Я в настоящее время делаю PHP/Mysqli регистрационной форму и хочу, чтобы пароли пользователя в безопасности, как я могу, так что это займет хакеру очень много времени, чтобы взломать один из паролей пользователя

Ну, для элементов хорошей системы хранения паролей (и угроз, которые они защищают против), см. Secure Password Storage Cheat Sheet и Secure Password Storage paper Джон Стивен написал для OWASP. Он проводит вас через всю модель угрозы и объясняет, почему все происходит определенным образом.

Хеширование его с помощью sha512, md5 (md5), добавление другой соли, еще двух sha512, еще одного md5 и другой соли! ... Насколько это безопасно?

Ну, есть стандартные и принятые способы делать вещи, а затем нет стандартных способов делать что-то. Я думаю, что ваша схема попадает в более позднюю.

Возможно, было бы неплохо использовать то, что принято считать.

Как долго взломать этот пароль взломал хакер?

Трещин - не единственная угроза. Скорее всего, парень, пытающийся проникнуть в вашу организацию, будет использовать один из лучших паролей из миллионов паролей, собранных в результате взлома Adobe, нарушения LinkedIn, пролома Last.fm, < здесь, >. ... Например:

Зачем перебирая, когда у вас есть список из тысяч популярнейших пароль s для использования?

Итак, ваш FIRST Лучшая защита - использовать список слов, который фильтрует неправильный пароль пользователя. То есть, не позволяйте пользователю выбирать слабые или известные пароли в первую очередь.

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

Как я понимаю, эти списки слов довольно малы, когда реализованы как Bloom Filter. Они имеют размер только KB, хотя есть миллионы паролей. См. Статью Engineering Security Питера Гутманна для углубленного обсуждения.

Смежные вопросы