WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hash + salt av lösenord (https://www.wn.se/forum/showthread.php?t=30777)

Jonas 2008-09-29 10:14

Citat:

Originally posted by SimonP@Sep 29 2008, 10:08
Men som jag skrev tidigare i denna tråd är SHA-512 overkill.

512 är högre än 1 :) Därför drar man till med overkill...

SimonP 2008-09-29 10:38

2 bifogad(e) fil(er)
Kör man krypteringen lokalt så minskar man även belastningen på servern. Iofs märks detta inte förrän man har en mkt välbesökt sajt.
Här är en test som jag gjorde på en server förut.
Första kurvan är SHA-1, andra är SHA-256, tredje är SHA-512, fjärde är RIPE-160 och sista är MD5.
Den enda som sticker ut är SHA-512, som belastar CPU:n ungefär dubbelt så länge som de andra.

grinditwp 2008-09-29 16:24

Citat:

Originally posted by znap@Aug 11 2008, 22:28
Tar tillfället i akt och frågar om denna funktion är en bra lösning. Själv känner jag mig hyffsat noob på det här med säker kryptering av lösenord. Med följande funktion följer jag dessa principer som jag snappat upp på lite här och där på nätet.

- Blanda md5 och sha1
- Kryptera flera gånger om
- Använd ett dynamiskt salt kopplat till användarens lösenord
- Använd även ett statiskt salt som man "gömmer" någonstans i applikationskoden

Kod:

        function generatePassword($password, $salt) {
 *$str = md5($password.$salt);
 *for($i=0; $i<5; $i++) {
 *        $str = sha1($str);
 *}       
 *return md5($salt.($str).$salt.STATIC_SALT);       
        }

Är något onödigt? Är det något annat jag bör tänka på?

// Vic

Att dubbel hasha ett lösenord är ingen bra idé.
Vad som sker är att du tar ett lösenord och skapar en sträng på exakt 32 tecken med enbart 0-9 och a-f. Hashar du detta igen ökar du chansen att man kan gissa en sträng som kommer att hasha fram samma värde.

Ännu värre blir det om du blandar sha1 och md5, t.ex. sha1(md5($pass))
Vad du då gör är att ta 128-bitars information för att skapa 256-bitar, vilket betyder att det blir 50% överflödig information.

Allt detta bidrar bara till att det är enklare att skapa en hash kollision. Alltså att två fraser kan bli samma hash.

Rätta mig om jag har fel!

SimonP 2008-09-29 16:57

Citat:

Originally posted by grinditwp@Sep 29 2008, 16:24
Att dubbel hasha ett lösenord är ingen bra idé.
Vad som sker är att du tar ett lösenord och skapar en sträng på exakt 32 tecken med enbart 0-9 och a-f. Hashar du detta igen ökar du chansen att man kan gissa en sträng som kommer att hasha fram samma värde.

Ännu värre blir det om du blandar sha1 och md5, t.ex. sha1(md5($pass))
Vad du då gör är att ta 128-bitars information för att skapa 256-bitar, vilket betyder att det blir 50% överflödig information.

Allt detta bidrar bara till att det är enklare att skapa en hash kollision. Alltså att två fraser kan bli samma hash.

Rätta mig om jag har fel!

Ok, det du skriver stämmer ej, det finns inga bevis för att risken för kollisioner ökar om man hashar flera gånger.

I dagsläget finns det ingen risk att nån hittar en lösenordskollision, inte ens på MD5.
Med ordet lösenordskollision menar jag att någon hittar ett annat lösenord som genererar samma hashsumma som ett annat.

emilv 2008-09-29 19:49

Citat:

Originally posted by SimonP@Sep 29 2008, 16:57
I dagsläget finns det ingen risk att nån hittar en lösenordskollision, inte ens på MD5.
Med ordet lösenordskollision menar jag att någon hittar ett annat lösenord som genererar samma hashsumma som ett annat.

Ingen reell risk. Det finns enstaka lyckade försök att skapa två filer som ger samma MD5-hash, men ett lösenord är sällan speciellt långt :-) Det var dock först när man lyckades med detta som det rent allmänt började pratas om att byta till SHA-1, så möjligen är det därför MD5 anses "osäkert" idag. Så ska vi ju inte sticka under stol med att det finns en drös regnbågstabeller för MD5 numera också, och det hjälper ju till att minska säkerheten.

SimonP 2008-09-29 23:58

Citat:

Originally posted by emilv@Sep 29 2008, 19:49
Ingen reell risk. Det finns enstaka lyckade försök att skapa två filer som ger samma MD5-hash, men ett lösenord är sällan speciellt långt :-) Det var dock först när man lyckades med detta som det rent allmänt började pratas om att byta till SHA-1, så möjligen är det därför MD5 anses "osäkert" idag. Så ska vi ju inte sticka under stol med att det finns en drös regnbågstabeller för MD5 numera också, och det hjälper ju till att minska säkerheten.
Fast det är ändå stor skillnad på att modifiera två filer som ger samma hashvärde, än att leta efter "kollisioner" till en given hash (pre-image attack).

Det tar inte många sekunder att skapa två olika texter som ger samma MD5-hashvärde, dock måste jag modifiera båda texterna för att kunna göra detta. Så som signeringsalgoritm är MD5 relativt värdelös. Men som lösenordsalgoritm där attackeraren bara kan modifiera den ena av strängarna funkar MD5 än idag, ingen har lyckats hitta den typen av "kollision" i MD5.

Jag håller med om att det finns mkt regnbågstabeller till just MD5, därav ska man inte använda en ren MD5 summa i lösenordsystem, vill man fortsätta med MD5 måste man se till att ha salt för att motverka regnbågarna + att man itererar hashen några gånger för att försvåra bruteforce.

Sen finns det ju folk som inte litar på SHA-algoritmerna över huvudtaget pga att amerikanska myndigheterna varit inblandade i framställningen av dessa, så en del föredrar t.ex den europeiska RIPEMD-160 istället.


Alla tider är GMT +2. Klockan är nu 18:19.

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