Fråga angående md5 lösenord och salt

Permalänk
Medlem

Fråga angående md5 lösenord och salt

Tjenare Swec!

Jag håller på med salt algoritm till en hemsida som vi har som projekt på skolan. Det jag undrar över är om följande saltteknik är vettig:
1. Varje tecken i lösenordet konverteras till bytes av utf8.
2. En ny byte-array som är lika lång som den första skapas.
3. Den nya byte-arrayen fylls med (byte cast) array1[(array1[(i * randommatte) % array1.length] * randomtal) % array1.length] * en liknande algoritm % nyaArray.length.
4. Skapar sedan en 3e array som är dubbel så lång som de två första. Använder sedan en liknande teknik men med fler kalkylationer.

Edit: Det som är tanken är att ett lösenord som skiljer sig med endast ett tecken från ett gammalt kommer vara helt annorlunda när dubbelsalten är klar vilket borde resultera i hög säkerhet.

Detta ger resultatet:
Sträng: password
Sträng i bytes: 112 97 115 115 119 111 114 100
Saltat och dubbelsaltat utan md5: 209 147 126 137 144 76 165 127 207 189 169 203 134 147 123 0
MD5 Hashat med salt och dubbelsalt: 250 76 56 151 157 83 220 158 8 108 227 165 254 194 135 154

Är det ett säkert sätt att skydda lösenordet eller finns det något kryphål jag missat? Tanken är att även om en person kommer över alla saltade + md5 hashade lösenord i databasen så ska denne inte komma över de faktiska lösenorden.

Tack för all hjälp och respons!

Permalänk
Medlem

Det blir väl inte säkrare ju mer du saltar om saltalgoritmen att köra baklänges. Att skydda sig mot MD5 rainbow tables kommer du runt med enklare salt.
Det bästa du kan göra är väl att byta hashalgoritm till någon bättre än MD5.

Visa signatur

I'm Winston Wolfe. I solve problems.

Permalänk
Medlem

Vet väl inte riktigt hur det ligger till med saltet, men en sak är säker i alla fall; MD5 ska man inte använda sig av för att skydda lösenord, det finns mycket bättre hashtekniker. Det och lite till fick jag lära mig i min tråd jag startade för ett tag sen: http://www.sweclockers.com/forum/10-programmering-och-digital...

Sammanfattning: För att skydda sig mot bruteforce så behöver man en hashmetod som är långsam, t.ex. bcrypt.

Visa signatur

Desktop|i5 3570k(@4,4GHz)|Asus P8Z77-V|AMD 6950|12GB RAM|Crucial BX500 480GB|Manjaro|
Laptop|Lenovo T440s|i7|8GB RAM|Debian Jessie|
Server|Fujitsu Primergy TX1310|G1820|8GB RAM|15TB|Unraid|
Ring, lånad mail

Permalänk
Medlem
Skrivet av 2infinity:

Edit: Det som är tanken är att ett lösenord som skiljer sig med endast ett tecken från ett gammalt kommer vara helt annorlunda när dubbelsalten är klar vilket borde resultera i hög säkerhet.

Det du beskriver kallas "the avalanche effect". Häftigt att du själv listat ut att det är en högst önskvärd egenskap!

Det är inte helt klart hur din lösning är tänkt att fungera, t ex är det du beskriver endast genereringen av saltet eller är slumptalen en del av saltet? Oberoende av det, lite feedback:

Det positiva med din lösning är att (i) den skapar unika salt (förutsatt att din generering av slumptal är OK) för varje lösenord och (ii) du expanderar lösenordet med saltet vilket kräver mer minne vid beräkning. Utöver det så tillför din lösning inte mycket utöver att slumpa fram ett stort nog salt. Ett unikt slumpat salt, som sparas bredvid resultatet av att hasha saltet med lösenordet, är ett absolut minimum för att skydda lösenord i en databas. Dock, som påpekades tidigare i tråden, använd inte MD5. Om du måste använda en snabb hash-algoritm så använd någon i SHA-2 familjen.

Det är bättre att använda bcrypt, som gör att mängden beräkningar som behövs för att beräkna "hashet" av ett lösenord blir större. Det bästa du kan göra är att använda scrypt, som gör att mängden beräkningar och minne som behövs för att beräkna "hashet" av ett lösenord blir större. Du kan läsa om scrypt här: http://www.tarsnap.com/scrypt.html. Jag rekommenderar varmt en presentation kring ämnet, som du hittar här: http://www.tarsnap.com/scrypt/scrypt-slides.pdf.

För att komma tillbaka till din lösning. Den har både mer beräkningar och krav på minne än de flesta standard lösningar, vilket är bra! Om du förstår dig på resonemanget så vet du mer än de allra flesta om det här ämnet. Jag skulle rekommendera att du använder någon av de beprövade metoderna och kollar på scrypt.