logo   Salt og #hash




Det kan være uhensigtsmæssigt og usikkert at have passwords liggende åbne i en database.


Salt og Hash er to metoder, der kan anvendes til at prøve sig frem til / læse.


Princippet i dem begge to er, at der sker en kodemæssig bearbejdning af det password brugeren kender i forløbet mellem at passwordet tilgår PHP og det gemmes i databasen eller bruges til sammenligning. Det er den samme bearbejdning der foretages i begge situationer og de sædvanlige passwordprincipper kan derfor stadig anvendes.


Benytter man Salt og Hash skal den samme kode indsættes de relevante steder i programmerne til login, oprettelse og rettelse af brugerstamdata.




Salt


Til det password brugeren kender tilføjes der ved konkatenering en tekststreng - altid den samme. Det resulterende password vil derved blive længere.


Passwordet forbliver i 'klart sprog' og skal efterfølgende HASHes. Ved at gøre passwordet længere opnår man, at den hashede datastreng bliver mere kompleks og dermed vanskeligere / mere usandsynlig at "dekode" (manuelt eller systematisk).


$salt = "2w9nnjtp";
$log_pass = $log_pass . $salt;




Hash


Ved hashing foretages en egentlig kryptering af passwordet. Der findes ganske mange algoritmer, der kan anvendes til hashing. De mest almindelige synes at være 'md5' og 'sha1'. Md5 resulterer i en streng, der altid er 32 kar. lang. Med sha1 bliver den 40 kar. (Sha256 leverer til sammenligning en streng på ca. 100 kar.)


Hashede datastrenge består altid af hexa-cifrene 0-9 og A-F.


$log_pass = sha1($log_pass);




Salt + Hash


Begge principper kan kombineres i en arbejdsgang


$salt = "2w9nnjtp";
$log_pass = sha1($log_pass . $salt);


De kan også sammensættes med andre metodestrenge.




Hvor


Den samme Salt+hash-kode indsættes i login-programmer og i de programmer, der vedligeholder password:


Login


Indsættes lige før opkald til database.


//Valider mod brugertabel
$salt = "2w9nnjtp";
$log_pass = sha1($log_pass . $salt);

$query = "SELECT * FROM bruger WHERE log_navn = '$log_navn' AND log_pass = '$log_pass'";


INSERT og UPDATE.


Indsættes lige før opdatering af database.


$salt = "2w9nnjtp";
$log_pass_a = sha1($log_pass_a . $salt);

$query = "
INSERT INTO bruger




OBS


Det er væsentligt, at koderne bliver koblet til begge steder samtidig. Man skal være logget på før tilkoblingen, og foretage de nødvendige test på en anden bruger, end den der udfører ibrugtagningen. Alternativet kan være, at man lukker sig selv ude.





















x
x