webForumDet fria alternativet

Salt + MD5

Datasäkerhet

11 svar · 1 071 visningar · startad av KoTTeN

Medlem sedan sep. 20011 722 inlägg
Frågan#1

Hej!

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.

Vilket är mest rätt?
Tacksam för svar!

Medlem sedan apr. 20022 743 inlägg
#2

Jag skulle (och har) använt alternativ 1.

Medlem sedan maj 20033 218 inlägg
#3

Poffe skrev:

Jag skulle (och har) använt alternativ 1.

Jag med!

Medlem sedan mars 200642 inlägg
#4

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.

Medlem sedan maj 20033 218 inlägg
#5

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:

http://www.phpsidan.nu/res_articles.php?view=art&id=68

Kod:

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: ?>
Medlem sedan aug. 20039 340 inlägg
#6

Om någon får tag på din databas vet hon två saker:

  1. En användares lösenord, om detta är ett så pass vanligt ord att det finns i md5-reverse-listor.
  2. 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.
Medlem sedan sep. 20011 722 inlägg
#7

nitro2k01 skrev:

Ditt alternativ 2 var ju för övrigt ganska meningslöst.

Fick den känslan också, men då jag inte var helt säker och inte ville tulla på säkerheten var jag tvungen att fråga först. :)

Tack för alla svar, nu ska det kodas!

Medlem sedan juni 20015 009 inlägg
#8

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. :)

Medlem sedan juni 20008 205 inlägg
#9

Qimen skrev:

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.

Medlem sedan juni 20015 009 inlägg
#10

spango skrev:

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.

Medlem sedan nov. 20041 189 inlägg
#11

http://www.codeproject.com/cs/algorithms/StoringPasswords.asp
Använder själv SHA2 (SHA384) + salt i min MembershipProvider i ASP.Net.

Medlem sedan juni 20008 205 inlägg
#12

Qimen skrev:

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
156 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
151 ms — ändringar (db)