* Добавяне на Salt към паролите

Публикувано на 21 ноември 2008 в раздел ПТСК.

Има два вида добавяне на salt към парола. Първия вид е залепването на допълнителния код към паролата и криптирането им заедно. Ето какво би се получило след използването на изключително популярната за повечето англоговорящи потребители парола „password“:

<?php
	define(SALT, "fd321sfds%#%");

	function saltencrypt($password, $salt){
		return md5($salt.$password);
	}

	echo md5("password");
	echo "<br>";
	echo saltencrypt("password", SALT);
?>


Първият отпечатан на екрана hash ще бъде разпознат от всяка налична rainbow таблица. При втория сме добавили един сложен символен низ в началото и сме почти убедени, че не съществува rainbow таблица, в която той да участва в някаква комбинация. Както забелязвате този символен низ е статичен (дефиниран е като константа). Той трябва да бъде пазен в скрипта за автентикация, защото е нужно да го използваме при сравняване на потребителската парола. Този salt символен низ трябва да бъде пазен изключилено строго. Практически обаче дори този константен низ да бъде „разсекретен“ (т.е. видян чрез някакъв вид пробив в сигурността на скрипта) ние все още сме защитени от бързите rainbow търсения и атакуващия все пак ще трябва да използва brute force метод (но ще бъде изключително улеснен!).

Друг рядко разглеждан като сериозен проблем е този с повтарящите се пароли. Винаги е възможно двама потребители в системата да използват една и съща парола. Нормално е да се досетим, че записаните в базата данни криптирани версии също ще съвпадат. Въпреки, че в повечето случаи е безполезна, това все пак е допълнителна информация за атакуващия, чрез която все пак му даваме насока за търсене. За избягване на този проблем се използва вторият вид salt. При него генерираме обикновено случайно число, което отново долепваме до нашата парола. В базата данни трябва да запишем както криптираната парола, така и въпросното число. За всеки потребител трябва да се генерира случайно число. Така самите пароли в базата данни ще изглеждат различни, а тъй като в базата данни пазим самите числа, то ще можем да го използваме при сравненията.

Още по-напреднали методи са тези, при които salt не само се долепя отпред или отзад към паролата, но се използва и специален алгоритъм за вмъкване на части от този salt вътре в нея. За съжаление всеки подобен трик е с цената на допълнително отделено процесорно време.

Задача: Реализирайте скрипт за автентикация, който работи с пароли чрез първия вид salt и база данни.

Задача: Реализирайте скрипт за автентикация, който работи с пароли чрез втория вид salt и база данни.

Задача: Реализирайте скрипт за автентикация, който работи и с двата вида salt едновременно.



3 коментара за “Добавяне на Salt към паролите”

 
  1. dhtodorov:

    Принципно идеата е хубава, но е безполезна.
    Да речем така. Аз се регистрирам в твоят сайт и ти ползваш този SALT метод.
    Аз пиша парола „dhtodorov“ и ти я минаваш през md5 така – „md5(SALT .’dhtodorov’)“ и я записваш в базата данни.
    Тръгвам да се логвам и пиша „dhtodorov“ за парола, ти пак трябва да минеш въведената от мен стойност за да съвпадне с преработката от SALT.
    Аз въвеждам „dhtodorov“ и ти автоматично добавяш SALT отпред. Така моята парола е вярва и ме логва… Когато някой направи brute force атака и в даден момент стигне до моята парола „dhtodorov“ ти пак ще му добавиш този SALT и той ще получи достъп до системата.
    Поправи ме ако греша.

     
  2. Филип Петров:

    Не грешиш, но тук аз говоря за brute force атака на съвсем друго ниво – на ниво база данни. В случая SALT е защита на информацията в базата данни когато тя евентуално бъде открадната (а потенциални крадци в една фирма има колкото искаш).

     
  3. dhtodorov:

    Да :-) Така вече става.

     

RSS за коментарите

Пусни коментар