Hash
Ik weet dat er hier al meerder topic's over zijn maar het is mij nog niet helemaal duidelijk. Wat is nou de beste manier om te hashen? En meerdere hashes over elkaar heen is dat veiliger??
Matthijs
Ik gebruik een sha256 in combinatie met een dynamische salt en een statische pepper. Je kunt dit vaker hashen, hier wordt het veiliger van. Maar het wordt dan natuurlijk wel lastiger
dynamische salt?? ken wel gewoon de crypt($wachtwoord, $salt); maar wat is een dynamische salt dan? En pepper kan je me daar meer info/tut o.i.d van geven?
In je topic http://www.phphulp.nl/php/forum/topic/loginscript-werkt-niet/82539/1/ is al geantwoord. Jeroen geeft het nogmaals aan.
Gebruik Google en je vindt heel veel info over salt en pepper.
Gewijzigd op 09/02/2012 21:19:07 door Obelix Idefix
Quote:
Gebruik een Salt + Pepper (liefst dynamisch) en een van de sha* decrypt functies.
Sha* is bv hash('sha521', $wachtwoord); of zie ik dat verkeer?
Edit: Oke bedankt jeroen voor je antwoord over salt en pepper, als ik het goed heb is pepper statisch en salt dynamisch en is het verder hetzelfde??
Gewijzigd op 09/02/2012 21:22:28 door Matthijs Vos
Oke, en dan staat $salt in je database toch?? (Edit: ga ik even op googlen bedankt)
en op de volgende manier is dat veilig?
$ww1 = mysql_real_escape_string (md5($_POST["password"]));
$ww2 = hash('sha521', '$ww1');
$ww3 = crypt($ww2, '*een woord*');
$ww4 = hash('whirlpool', $ww3);
Gewijzigd op 09/02/2012 21:26:24 door Matthijs Vos
$ww = hash('sha256', mysql_real_escape_string($_POST['wachtwoord']) . $salt . $pepper)
Gewijzigd op 09/02/2012 21:33:06 door Jeroen VD
oke.. bedankt voor de info, ik ben al ff aan het googlen over salt
Jeroen vd op 09/02/2012 21:20:16:
Als je een tekenreeks vast opslaat in je script, noem je dat een pepper. En die is statisch, omdat die altijd hetzelfde is. Een dynamische salt is een random gegenereerde tekenreeks, die je apart opslaat in de databe bij het wachtwoord. Deze is voor iedere gebruiker anders, dus dynamisch
Zoals al is aangegeven, zoek eens op google
Zoals al is aangegeven, zoek eens op google
Als je het plain-text opslaat in een database heeft een dynamische salt totaal geen zin.. Als iemand de complete database in handen krijgt ben je nog steeds nergens. Als je het echt dynamisch wil hebben, maak dan gebruik van andere (statische) gegevens van gebruikers, zoals bijvoorbeeld een gehashde registreerdatum. Haal die gegevens op als de gebruiker een gebruikersnaam invult en maak met die gegevens een leuke hash.
Gewijzigd op 09/02/2012 21:33:05 door Jens erd
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$salt = 'lkhe31245nbioh25'; // een static salt
$pepper = uniqid(); // een dynamische pepper
$ww = sha256($_POST[''password]); // real_escape_string overbodig in combinatie met een decrypter
$ww = $salt.$ww.$pepper; // breng alles bij elkaar en serveer een heel mooi diner
?>
$salt = 'lkhe31245nbioh25'; // een static salt
$pepper = uniqid(); // een dynamische pepper
$ww = sha256($_POST[''password]); // real_escape_string overbodig in combinatie met een decrypter
$ww = $salt.$ww.$pepper; // breng alles bij elkaar en serveer een heel mooi diner
?>
Het best is trouwens gebruiken maken van bcrypt, maar dit is misschien iets te moeilijk.
Gewijzigd op 09/02/2012 21:37:39 door Wouter J
De salt wordt random gegenereerd, van bv 19 tekens lang, dus die is nog willekeuriger dan een registreerdatum. Het probleem met zon dynamische salt is dat je die ook weer weer moet opvragen. Je bent dus verplicht om het in de db op te slaan. Verder is het wachtwoord nu op 3 plaatsen opgeslagen: bij de gebruiker, in je script en in je db. Weet je ze niet alle drie, zal de hacker voor elke gebruiker een aparte rainbow table moeten maken, wat veel tijd kost
Hoezo is het nu op 3 plekken opgeslagen??
@wouter
Ik ga je methode uitprobeeren, alleen die uniqid() moet die dan niet worden opgeslagen in de db?
De gebruiker heeft een deel van het wachtwoord, in je script staat een deel, en in je db
oo zo, met de pepper wat hij zelf heeft bedacht en de hashed natuurlijk..
Weet jij hoet dat met de uniqid werkt?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$wwUitDB = $result['password']; // haal de ww uit de database
$wwUitDB = substr($wwUitDB, 16, -13);
// 16 haalt de eerste 16 tekens (dus de salt, in mijn vorige vb is de salt 13 tekens) weg
// -13 haalt de laatste 13 tekens (dus de pepper) weg
if( sha256($_POST['password']) === $wwUitDB )
{
echo 'ww kloppen';
}
?>
$wwUitDB = $result['password']; // haal de ww uit de database
$wwUitDB = substr($wwUitDB, 16, -13);
// 16 haalt de eerste 16 tekens (dus de salt, in mijn vorige vb is de salt 13 tekens) weg
// -13 haalt de laatste 13 tekens (dus de pepper) weg
if( sha256($_POST['password']) === $wwUitDB )
{
echo 'ww kloppen';
}
?>
Gewijzigd op 09/02/2012 21:55:06 door Wouter J
maar dat weet een hacker dan toch ook?? dus dan versterkt dit alles het helemaal niet
En een wachtwoord (of een deel ervan) in een sessie zetten is nooit verstandig. Dat kan alleen maar problemen opleveren.
maar ik denk dat iedereen dan uniqid gebruikt waardoor een registratie datum coderen me dan weer veilig lijkt of zie ik dat verkeerd?
En waar hebben we het over een deel van je ww in een sessie zetten gehad??
En zo kun je natuurlijk hysterisch doorgaan met nog meer kruiden, maar volgens mij is het nu wel goed zo