Kom ihåg mig?

Hash + salt av lösenord

 
Ämnesverktyg Visningsalternativ
Oläst 2008-07-27, 23:18 #1
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
När det gäller lösenordslagring så har det redan diskuterats en del på WN men jag kunde inte hitta något om lämplig längd att salta sin hashade sträng med? Nu vill jag inte tala om vilka längder jag själv använder eftersom det inte gynnar ändamålet så att säga.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-27, 23:30 #2
dimkas avatar
dimka dimka är inte uppkopplad
Nykomling
 
Reg.datum: Mar 2007
Inlägg: 22
dimka dimka är inte uppkopplad
Nykomling
dimkas avatar
 
Reg.datum: Mar 2007
Inlägg: 22
Jag tycker att osCommerce funktion att kryptera lösenord är bäst!

Citat:

function encrypt_password($plain) {

$password = '';

for ($i=0; $i<10; $i++) {
$password .= tep_rand();
// tep_rand() returnerar ett slumpvis tioställigt numeriskt värde (ex. 3541976724)
// utifrån php-funktionerna nedan;
// mt_srand((double)microtime()*1000000);
// mt_rand();
}

// utifrån det slumpade "lösenordet" ovan hämtas saltet
$salt = substr(md5($password), 0, 2);

$password = md5($salt . $plain) . ':' . $salt;

return $password;

}
dimka är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-27, 23:44 #3
Drew Drew är inte uppkopplad
Medlem
 
Reg.datum: May 2007
Inlägg: 132
Drew Drew är inte uppkopplad
Medlem
 
Reg.datum: May 2007
Inlägg: 132
Det är ju åtminstone vänligt av osCommerce att lägga med saltet i databasen. Känns lite meningslöst att salta då.
Drew är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-27, 23:47 #4
SimonPs avatar
SimonP SimonP är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2006
Inlägg: 832
SimonP SimonP är inte uppkopplad
Mycket flitig postare
SimonPs avatar
 
Reg.datum: May 2006
Inlägg: 832
Citat:
Originally posted by dimka@Jul 27 2008, 23:30
Jag tycker att osCommerce funktion att kryptera lösenord är bäst!

Citat:

function encrypt_password($plain) {

$password = '';

for ($i=0; $i<10; $i++) {
* $password .= tep_rand();
* // tep_rand() returnerar ett slumpvis tioställigt numeriskt värde (ex. 3541976724)
* // utifrån php-funktionerna nedan;
* // mt_srand((double)microtime()*1000000);
* // mt_rand();
}

// utifrån det slumpade "lösenordet" ovan hämtas saltet
$salt = substr(md5($password), 0, 2);

$password = md5($salt . $plain) . ':' . $salt;

return $password;

}
Det är inte bra att lägga saltet först som dom gör här: md5($salt . $plain) , eftersom en bruteforce attack blir enklare då, saltet skall läggas sist eller på båda sidorna om lösenordet.

Längden på saltet bör ligga på mer än 2 bytes, för att förhindra dom som sitter på regnbågstabeller där man även "inkluderat" salt, men samtidigt är det onödigt ha en större salt än hashalgoritmens egna styrka, i md5:s fall 16 bytes (32 st hex).
SimonP är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-27, 23:58 #5
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Kod:
function generateHash($plainText, $salt = null)
{
  if ($salt === null)
    $salt = substr(md5(uniqid(rand(), true)), 0, SALT_LENGTH);
  else
    $salt = substr($salt, 0, SALT_LENGTH);

  return $salt . sha1($salt . $plainText);
}
Varför inte något sådant?
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-28, 00:26 #6
gsocs avatar
gsoc gsoc är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2007
Inlägg: 568
gsoc gsoc är inte uppkopplad
Mycket flitig postare
gsocs avatar
 
Reg.datum: Jun 2007
Inlägg: 568
Citat:
Ursprungligen postat av SimonP
Citat:
Ursprungligen postat av dimka
Jag tycker att osCommerce funktion att kryptera lösenord är bäst
Citat:

function encrypt_password(plain) {
password = ;
for (i=0; i10; i++) {
* password .= tep_rand();
* // tep_rand() returnerar ett slumpvis tioställigt numeriskt värde (ex. 3541976724)
* // utifrån php-funktionerna nedan;
* // mt_srand((double)microtime()*1000000);
* // mt_rand();
}
// utifrån det slumpade lösenordet ovan hämtas saltet
salt = substr(md5(password), 0, 2);
password = md5(salt . plain) . : . salt;
return password;

}


Det är inte bra att lägga saltet först som dom gör här: md5(salt . plain) , eftersom en bruteforce attack blir enklare då, saltet skall läggas sist eller på båda sidorna om lösenordet.
Längden på saltet bör ligga på mer än 2 bytes, för att förhindra dom som sitter på regnbågstabeller där man även inkluderat salt, men samtidigt är det onödigt ha en större salt än hashalgoritmens egna styrka, i md5:s fall 16 bytes (32 st hex).

//Remove
gsoc är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-28, 10:49 #7
SimonPs avatar
SimonP SimonP är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2006
Inlägg: 832
SimonP SimonP är inte uppkopplad
Mycket flitig postare
SimonPs avatar
 
Reg.datum: May 2006
Inlägg: 832
Citat:
Originally posted by Jonas@Jul 27 2008, 23:58
Kod:
function generateHash($plainText, $salt = null)
{
 * *if ($salt === null)
 * * * *$salt = substr(md5(uniqid(rand(), true)), 0, SALT_LENGTH);
 * *else
 * * * *$salt = substr($salt, 0, SALT_LENGTH);

 * *return $salt . sha1($salt . $plainText);
}
Varför inte något sådant?
Denna funktion är inte så bra av två anledningar:

-salt läggs på före lösenordet
-funktionen rand() är dålig, mt_rand() rekommenderas för kryptofunktioner
SimonP är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-28, 11:37 #8
Jonathan P Jonathan P är inte uppkopplad
Medlem
 
Reg.datum: Feb 2008
Inlägg: 141
Jonathan P Jonathan P är inte uppkopplad
Medlem
 
Reg.datum: Feb 2008
Inlägg: 141
Citat:
Originally posted by Drew@Jul 27 2008, 23:44
Det är ju åtminstone vänligt av osCommerce att lägga med saltet i databasen. Känns lite meningslöst att salta då.
Man måste ju veta saltet för att kunna jämföra lösenordet i databasen med det som användaren uppger vid en autentisering. Fördelen med att ha ett dynamiskt salt är att förhindra möjligheten att kunna bruteforcea en hel databas med en regnbågstabell.
Jonathan P är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-28, 12:58 #9
jimmies avatar
jimmie jimmie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 751
jimmie jimmie är inte uppkopplad
Mycket flitig postare
jimmies avatar
 
Reg.datum: Oct 2004
Inlägg: 751
Citat:
Ursprungligen postat av SimonP
Citat:
Ursprungligen postat av Jonas
Kod:
function generateHash($plainText, $salt = null)
{
 * *if ($salt === null)
 * * * *$salt = substr(md5(uniqid(rand(), true)), 0, SALT_LENGTH);
 * *else
 * * * *$salt = substr($salt, 0, SALT_LENGTH);

 * *return $salt . sha1($salt . $plainText);
}
Varför inte något sådant?
Denna funktion är inte så bra av två anledningar:

-salt läggs på före lösenordet
-funktionen rand() är dålig, mt_rand() rekommenderas för kryptofunktioner
Nu har jag saltet längst bak men har funderat lite på varför man egentligen gör det? På vilket sätt blir bruteforce svårare?

Att bruteforca antingen xxxxxxxxxxf3931e5339f5073b23188d1b357715a0 eller f3931e5339f5073b23188d1b357715a0xxxxxxxxxx bör väl kräva samma antal försök?

Obs. är måndag idag så hjärnan är inte riktigt igång än
jimmie är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-07-28, 14:02 #10
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
I den här artikeln från Php Security Consortium läggs också saltet i början av strängen [antar att Jonas exempel ovan är hämtat därifrån]. Tycker inte heller det borde göra någon skillnad?
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 05:58.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017