salting vraagje
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:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
function salt($password){
$salt = "abcjkl123";
$user_salt = sha1(microtime());
$password = md5($user_salt . $salt . $password);
return $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?
Gewijzigd op 01/01/1970 01:00:00 door Kristof s
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.
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..
@Lode
je bedoelt zoiets dan: ?
Code (php)
1
2
3
2
3
$md5_paswordhash = 123456;
$md5_paswordhash_modified = (substr ($md5_paswordhash,0,2).'STX'.substr ($md5_paswordhash,2,6));
echo ($md5_paswordhash_modified);
$md5_paswordhash_modified = (substr ($md5_paswordhash,0,2).'STX'.substr ($md5_paswordhash,2,6));
echo ($md5_paswordhash_modified);
en om het eruit te filteren:
Code (php)
1
2
3
4
5
2
3
4
5
$search = array('STX');
$replace = array(''); // aka verwijderen
$target = $md5_paswordhash_modified;
echo stro_replace($search, $replace, $target);
$replace = array(''); // aka verwijderen
$target = $md5_paswordhash_modified;
echo stro_replace($search, $replace, $target);
zit dit zowat juist f helemaal fout?
Gewijzigd op 01/01/1970 01:00:00 door Kristof s
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...
zeg nooit nooit!!!
Er zijn voor alles manieren
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???
Hmm, duizenden computers :P
Maar enigzins wel respect dat ze het kunnen,
Keur hun werk niet goed ofzo he!
maar helemaal veilig ben je natuurlijk nooit
Als je nu eens altijd versleuteld met het IP vanwaar de account geregisteerd word,
Dat gegeven moet nooit veranderd worden, Kan opgeslagen worden ook in db om te decoderen.
En is een op elke account veranderende versleuteling :)
Gewijzigd op 01/01/1970 01:00:00 door Matthias R
het idee van Lode vind ik wel leuk gevonden
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
function ValidatePassword($string){
if(preg_match('~^[\w-]{1,}$~D')){
//geldig
}
//blaat...
}
?>
function ValidatePassword($string){
if(preg_match('~^[\w-]{1,}$~D')){
//geldig
}
//blaat...
}
?>
En dan gaan we naar: http://www.asciitable.com/ zie de Dec(imal) column.
1 t/m 44 kunnen we dus gebruiken gezien ze niet in het wachtwoord voorkomen.
127 t/m 255 ook...
Jij weet dat... iemand anders niet natuurlijk...
Oke dan kan je die ASCII tekens dus random in het password gaan strooien..
En er ook weer uit filteren.
Dat is mijn random salt basis curses denk ik.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$chars = array_rand(
array_merge(
range(1, 44),
range(127, 255)
),
5);
//nou heb je 5 random extended ASCII nummers die je dan weer random in een string kan gooien middels http://nl.php.net/manual/en/function.chr.php
?>
$chars = array_rand(
array_merge(
range(1, 44),
range(127, 255)
),
5);
//nou heb je 5 random extended ASCII nummers die je dan weer random in een string kan gooien middels http://nl.php.net/manual/en/function.chr.php
?>
Gewijzigd op 01/01/1970 01:00:00 door Lode
Zolang je de salt maar niet "static" of "dynamic" gaat opslaan (in raw formaat), want dan kunnen er problemen ontstaan. Vooral de tekens 1 tm 44 kunnen niet "opgeslagen" worden. Je kan het wel als extra laag salting opnemen in de hash :-)