Hallo, ik heb zopas een filmpje gezien over PHP-security. Het ging hierbij op een moment over salting/rainbowtables etc.

Na heb bekijken van het filmpje kwam het hierp neer:

je hebt de gebruiker zijn psw die verstuurd wordt bij registratie
daarnaast heb je een vaste $salt die je in een config bijhoudt

en nu komt het

daarnaast heb je ook een unieke salt per persoon/gebruiker.

ik maakte er dan maar een functie van:

function salt($password){
		$salt = "abcjkl123";
		$user_salt = sha1(microtime());
		$password = md5($user_salt . $salt .  $password);
		return $password;
	}

nu ik snap het nut van de $user_salt echter wel, zo is niet elke hash hetzelfde (ook niet als er gebruikers zijn met eenzelfde paswoord). Maar het nut ontgaat me toch een beetje. Aangezien ik bij de login het wachtwoord moet kunnen terugvinden, heb ik de $user_salt ook nodig. Dus als ik het goed begrijp, dan moet ik deze bijhouden in een DB, wat is dan nog het nu ?

Begrijp ik het nu fout of niet? Kan iemand me hier even duidelijkheid brengen?

De static salt (in dit geval $salt) kan je instellen in je config.php. De dynamic salt (in dit geval $user_salt) zal je samen met het wachtwoord van de gebruiker in de database moeten opslaan en iedere keer oproepen als iemand zich wil inloggen.

Het nut van een dynamic salt is dat een hacker dan wel een static salt kan verkrijgen, maar dan heeft de hacker nog altijd de dynamic salt nodig (die per gebruiker dus verschilt!!). Het geeft een extra dimensie aan de gegenereerde hash die dus uit een static en dynamic salt en het wachtwoord bestaat.
je kan nog een veel leukere salt maken...

stel je laat als wachtwoord tekens A-Za-z0-9 toe (sha1 / md5 bestaan hier altijd uit).
Dan kan je dus alle overige tekens in ASCII (http://www.asciitable.com/)
random gebruiken om te salten op willekeurige plekken.
Met name 0-31 zijn hiervoor wellicht interesant.

Gezien jij de reeks salt tekens weet kan je die ook filteren.

sha1 en md5 zijn onomkeerbare algoritmes, maar wel de meest gebruikte ook. Er zijn heel veel algoritmes ook omkeerbare, als je iets verder gaat dan md5 en sha1 alleen ben je ook al een stuk veiliger wellicht..
@GaMer13 dank je je beantwoorde mooi mijn vraag:)

@Lode
je bedoelt zoiets dan: ?


$md5_paswordhash = 123456;
$md5_paswordhash_modified = (substr ($md5_paswordhash,0,2).'STX'.substr ($md5_paswordhash,2,6));
echo ($md5_paswordhash_modified);

en om het eruit te filteren:

$search = array('STX');
$replace = array(''); // aka verwijderen
$target = $md5_paswordhash_modified;

echo stro_replace($search, $replace, $target); 


zit dit zowat juist f helemaal fout?
Wat is het nut hiervan?
zijn gegevens neit even veilig als je ze gwn MD5 doet als met salting

Wat wel in me opkomt is voor een login
Dat maakt sql injection al een heel stuk moeilijker
md5 zijn via websites waar miljarden records in staan van de md5 hashes veel woorden nog wel terug te halen, zeker gewone taal. Als je je eigen salt maakt, en jij houd gewoon je hash voor jezelf, is er niemand die het gaat lukken om dat te kraken tenzij je guus geluk heet...
:o
zeg nooit nooit!!!
Er zijn voor alles manieren
@Matthias, salting voegt een extra dimensie toe aan de hash. Bruteforcing met een woordenlijst zal dan dus niet meer lukken, omdat de hash nu ook bestaat uit X aantal onbekende tekens die van alles kunnen zijn.

Het enige wat nu kan optreden is hash-collision, wat inhoud dat een andere (veel simpelere) woord dezelfde hash kan opleveren als de hash die bestaat uit twee salts en het wachtwoord.
...
Het MOET mogelijk zijn er gwn achter te komen...
want je gaat mij niet wijsmaken dat Banken te hacken zijn maar een simpele salt codering niet...

Maar swat
idd is handig voor extra beveileging...
Maar als je nu vermoed dat iemand dat woordje teweten is gekomen..
En dit wilt veranderen...
Dan heb je ook zooi he...
:P Alles is mogelijk. Mij hoor je ook niet zeggen dat het helemaal onmogelijk is. Met een paar clusters aan computers is het makkelijk te doen, maar dat heeft een doorsnee wanna-be-hacker niet.
En wat zijn een paar clusters aan computers???

Reageren