Как добавить округления к такой функции, как hash_hmac()?

Я прочитал из этой статьи http://codahale.com/how-to-safely-store-a-password/ и говорит, что использование соли небезопасно даже против атак грубой силы на GPU. Я не хочу, чтобы меня взломали и расшифровали пароли через несколько недель... Итак, я прочитал еще немного, и решение было bcrypt, однако я не хочу реализовывать phpass class, мне нравится SHA-512.

Однако, если можно добавить раунды к sha-512, чтобы замедлить атаки GPU... как это можно сделать? Означают ли раунды итерации?

Как вы добавляете раунды, чтобы замедлить sha512?


person user121235    schedule 28.03.2012    source источник
comment
Вы действительно думаете, что SHA512 сам по себе недостаточно безопасен для вашего приложения?   -  person Dejan Marjanović    schedule 28.03.2012
comment
@webarto, если база данных будет украдена, они смогут взломать SHA-512 с помощью высокопроизводительного графического процессора / CUDA?   -  person user121235    schedule 28.03.2012
comment
Итак... вы определили, что bcrypt — превосходное решение, но не хотите его использовать, потому что вам нравится SHA-512, и теперь вам нужна помощь в том, чтобы заставить SHA-512 работать как bcrypt?   -  person Alex Howansky    schedule 28.03.2012
comment
@AlexHowansky да, я не понимаю определение раундов, я бы хотел применить такую ​​тактику к sha-512, если у меня есть уникальная соль. Я хотел бы замедлить алгоритм.   -  person user121235    schedule 28.03.2012
comment
Хех, это должно было быть риторическим. Ваша логика подобна утверждению: «Я знаю, что Феррари быстрее моего велосипеда, но мне нравится мой велосипед, поэтому, пожалуйста, помогите мне понять, как заставить его разогнаться до 200 миль в час».   -  person Alex Howansky    schedule 28.03.2012
comment
хаха. Ну... Скажем, тогда меня взломают. Сколько времени потребуется графическому процессору, чтобы взломать хэш SHA-512 с помощью солей?   -  person user121235    schedule 28.03.2012


Ответы (2)


Один из наиболее безопасных способов хранения пароля, который я нашел, следующий:

<?php    
function createPasswordSalt($saltLength = 20) {
    return substr(md5(uniqid(rand(), true)), 0, $saltLength);
}

function createPasswordHash($password, $salt = null, $staticKey = null) {
    if ($staticKey === null) {
        $staticKey = "Some passphrase that will be only in your php script";
    }

    if ($salt === null) {
        $salt = self::createPasswordSalt(); 
    }       

    return hash_hmac('sha512', $password . $salt, $staticKey);

}

И я храню в базе данных пароль и хэш...

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

person Arman P.    schedule 28.03.2012

Увеличение числа раундов для SHA512 не означает перебор уже хэшированного значения с той же хеш-функцией. На самом деле это может УМЕНЬШИТЬ безопасность, так как после первого хэша ваш новый «пароль» имеет сокращенный набор символов. См. эту ссылку на security.stackexchange, которая частично объясняет, почему.

Я предлагаю НЕ использовать собственную функцию защиты паролей. Вместо этого используйте более хорошо изученное и проверенное решение, такое как PHPass.

На их сайте также есть очень хорошо написанная и подробная статья, объясняющая последствия для безопасности хеширования паролей. и создание.

person PenguinCoder    schedule 28.03.2012