Имя пользователя, Пароль, Соление, Шифрование, Хэш - Как все это работает? [Дубликат]

Возможный дубликат:
Безопасный хэш и соль для паролей PHP

Я читал много постов, как в stackoverflow, так и на других сайтах, рассказывающих о веб-безопасности. Такие как солёное шифрование и т. Д. И я вроде не понимаю, так что простое объяснение было бы очень полезно.

Итак, вот что я знаю до сих пор. Пользователь входит в систему вводит свое имя пользователя и пароль. Ввод затем проходит через процесс. Допустим, имя пользователя и пароль объединены, например:

$username = (USERS USERNAME INPUT);
$password = (USERS PASSWORD INPUT);
$userinput = $username . $password;

Затем мы добавляем немного соли.

$salt1 = "13$13aVc!kd";
$salt2 = "4kr$!vlmeoc";

$salted = $salt1 . $userinput . $salt2;

Затем мы зашифровываем это.

$encrypted = encrypt($salted);

Затем проверьте базу данных и войдет ли ее правильный пользователь.

Вот как это работает правильно? Но я читал о грубой атаке. Это угадывает входные значения правильно? С процедурой выше. Разве это не показывает, что злоумышленнику нужно только правильно получить информацию о $ userinput? Ему не нужно угадывать длинную $ зашифрованную строку правильно?

Примечание. Допустим, в этой ситуации нет ни капчи, ни ограничения количества попыток, ни блокировки, ничего, кроме приведенного выше.

Примечание: будь осторожен, я все еще учусь.

 Shomz21 янв. 2013 г., 06:03
Соль и шифрование не бесполезны - они служат для защиты паролей пользователей в случае взлома базы данных ... беспрепятственный перебор откроет практически все ... вовремя;)
 Deadlock21 янв. 2013 г., 05:51
Вот почему пользователям рекомендуется использовать надежный пароль вместо «12345», но в вашем сценарии возможна грубая сила.
 martinstoeckli22 янв. 2013 г., 08:25
Написал учебник онадежное хранение пароляМожет быть, это могло бы помочь вам.
 Jo E.21 янв. 2013 г., 05:53
так соль и шифрование бесполезны?
 Deadlock21 янв. 2013 г., 05:56
В некотором роде, но опубликованная дата, если перехвачен между ними, не будет бесполезной для угонщика, так как она будет в зашифрованной строке и не может быть отменена, пока у него нет значения соли.

Ответы на вопрос(5)

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

Решение Вопроса

пробуете ограничения, локауты и так далее ... тогда да. Вы просто должны грубо заставить текстовую строку.

Тем не менее, это займетвремя - по крайней мере, он ограничен скоростью, с которой сервер будет отвечать на запросы входа в систему. Даже если разработчик не добавляет каких-либо мер для предотвращения перебора, сам сервер может только быстро пройти процесс шифрования + проверки и может обрабатывать только столько параллельных запросов.

Тем не менее, именно поэтому важно

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

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

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

 Amber21 янв. 2013 г., 06:02
@ user1429811 Если вы хотите больше читать, у меня есть целый пост на эту тему здесь -codingkilledthecat.wordpress.com/2012/09/04/...

скорее, его следует использовать на защищенном сайте). То есть вы берете пароль и создаете его хеш. Например, bcrypt является приемлемым стандартом для этого сегодня.

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

Проблема с простым хэшированием пароля - просто перебор или радуга. Вы можете Google Rainbow Table, чтобы узнать больше об этом. Но по сути это способ превратить эти хэши обратно в пароли.

Введите соления. Соление - это добавление случайных данных практически к каждому паролю. Это превосходит радужные таблицы. Смысл скомпрометированной базы данных будет означать грубую силу. Что, если вы используете систему хеширования, такую как bcrypt, отнимает много времени и усилий у атакованного.

Сказав все это. Лучше не изобретать велосипед. Просто используйте известную хорошую систему авторизации, если можете.

Вот

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

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

Следующий пример сделан с SHA1 и MD5, так что он уязвим для атак грубой силы, однако солт-часть должна быть в порядке, чтобы использовать:

$salt = md5(microtime().uniqueid());

Это выдаст уникальную соль из 32 символов, которую вы положите вместе с паролем.

$passwod = $_POST['password'];
$hashed_password = sha1($password.$salt);

Теперь вы должны хранить как пароль, так и соль в базе данных. А когда вы проверяете пароль пользователя inputtet, вы получаете соль и все хешируете.

$temp_pass = $_POST['temp_pass'];
$salt = //from database;
$database_pass = //hashed pass from database;

$hashed_temp_pass = sha1($temp_pass.$salt);

if(hashed_temp_pass == $database_pass){
//Welcome user!
}
else{
//go away
}

Ваш ответ на вопрос