Ska äntligen få ändan ur vagnen och kryptera lösenorden i databasen.
Har sökt och funnit ett bra MD5 script och även att man bör salta den med dels ett system salt, gömt långt in i servern samt även något användarspecifikt salt. Men, hur ska dom kombineras. Har två alternativ.
1: Användarsalt + Användarlösenord + Systemsalt läggs ihop till en enda variabel. Variabeln körs sedan genom MD5 och ut kommer en kombination av kontrolltal.
2: Användarsalt, Användarlösenord och Systemsalt körs var för sig genom MD5, resultatet blir tre MD5 kontrolltals variablar, som sedan läggs ihop till en jättelång i databasen.
Jag antar att man gör som ni, för att göra krypteringen säkrare. Men jag undrar; hur stor är skillnaden mot att bara mh5-hasha lösenordet utan salt?
Finns det något exempel på varför det är motiverat att göra på det viset.
md5 vid inloggning anses vara osäkert då det går att bruteforca utan några problem. En bra lösning till detta är invers MD5 eller SHA1 + salt (helst en kombination av båda. Exempelvis:
001: <?php
002: /*
003: Gör ett litet överdrivet hashschema. Med en drös massa olika hasher. Ju fler, desto svårare blir det att knäcka.
004: Om hackaren får tillgång till saltet blir det ändå svårt för honom att finna självaste lösenordet.
005:
006: @param: password [, salt]
007: @example: chash ('mypassword', md5('4_v3ry_s3cr37_s4l7');
008: */
009:
010: function chash($password, $salt = 'rEtgm31e') {
011: // salt + lösenord
012: return sha1(crypt(md5(sha1($salt)), md5($salt))).sha1(md5($salt).sha1(sha1(md5($salt.sha1(crypt($password, $salt).sha1(md5($password).$salt))))));
013: }
014:
015: echo chash ('phpsidan', crypt(md5('phpsidan'), sha1('phpsidan')));
016: ?>
Om någon får tag på din databas vet hon två saker:
En användares lösenord, om detta är ett så pass vanligt ord att det finns i md5-reverse-listor.
Huruvida två användare har samma lösenord.
Om detta är känsligt eller inte är väl en avvägningsfråga, men att salta är så snabbt och enkelt så att det inte finns någon bra anledning att låta bli enligt mig.
Ditt alternativ 2 var ju för övrigt ganska meningslöst.
Hur pass mycket osäkrare är det att använda en kryptering som går att dekryptera? Jag har en hemmasnickrad kryptering/dekrypteringsfunktion som använder rijndael-256 med hjälp av phps mcrypt_module_open/mcrypt_create_iv etc. :)
Hur pass mycket osäkrare är det att använda en kryptering som går att dekryptera?
Tja, räkna själv: Kommer man över dekrypteringsnyckeln och de krypterade lösenorden får man fram lösenordet på direkten. Kör man med saltat hash ligger det en del brute force i vägen om man skulle komma över saltet och de hashade lösenorden.
Tja, räkna själv: Kommer man över dekrypteringsnyckeln och de krypterade lösenorden får man fram lösenordet på direkten. Kör man med saltat hash ligger det en del brute force i vägen om man skulle komma över saltet och de hashade lösenorden.
Mjo självklart men om en person kommer över den krypterade biten så har man rätt uppenbart något som är fel och skulle den personen även komma över den hemliga nyckeln är det ännu värre.
Mjo självklart men om en person kommer över den krypterade biten så har man rätt uppenbart något som är fel och skulle den personen även komma över den hemliga nyckeln är det ännu värre.
Mja. Kommer man in på webbservern kommer man ju sannolikt över den hemliga nyckeln (ens webapplikation måste ju komma åt den på nåt sätt, om man inte har t.ex. en centraliserad användarserver), och har man tillgång till webbservern bör det vara en smal sak att hämta ut saker ur databasen (bara göra ett script som gör en SELECT * från rätt tabell och sprutar ut det).
293 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e