Gå til innhold

Moddet hashing Sikkert?


Anbefalte innlegg

<?php
/* Kodet 22.12.2008 av Kai Nilsen */

function krypt($tekst) {

$md5 = md5($tekst);

$ned = substr($md5, 15);

$sha1 = sha1($ned);

$ned = substr($sha1, 15, 10);

$md5 = md5($ned);

$ned = substr($md5, 15, 8);

$sha1 = sha1($ned);

return $sha1;
}
?>

 

Som dere ser kombinerer jeg sha1 og md5, vil denne krypteringen være sikkrere en sha1 og/eller md5?

Lenke til kommentar
Videoannonse
Annonse

Sett at du skal bruke dette til ett profilscript/brukerscript, ville heller tatt i bruk salts.

 

 

Da kan du gjøre det slik som jeg pleier å gjøre:

Jeg har ett salt som ligger i config filen min(Dette er likt for alle brukere som registrerer seg.) Kan se slik ut :

 

$sidewidesalt = "5hgkr3s2";

 

Så bruker jeg ett script som lager en tilfeldig streng som kan inneholde mellom 6 og 9 forskjellige tegn.

 

Dette saltet blir lagret i databasen sammen med brukerinformasjon og hashet passord.

 

Når du kjører sha1 på dette kan det se slik ut:

 

$hash = sha1( $sitewidesalt . "\n" . $_GET['password'] . "\n" $randomsalt ) ;

 

Da har du $sitewidesalt lagret i config filen din og $random salt blir lagret sammen med informasjonen til hver bruker. Slik e $sitewidesalt likt for alle, men $randomsalt varierer fra bruker til bruker.

Lenke til kommentar

Svaret på spørsmålet ditt er nei, og cronic ga bare et eksempel på "best practice" (dog med parse error :) når det kommer til hashing av passord. Les innlegget hans flere ganger til du skjønner det.

 

Salt er en streng du legger til for å lage hashen, for å gjøre at rainbow tables ikke funker. (Slå opp i wikipedia på ord du ikke skjønner)

Lenke til kommentar

Salts er enkelt og greit en ekstra verdi du legger til passordet før du hasher det, slik at det ikke skal kunne knekkes ved hjelp av rainbow tables eller dictionary attack. F.eks;

 

$salt = "Nh23z";
$passord = $passord . $salt;
$passord = md5($passord);

 

På denne måten så forebygger du at passordet som ligger i databasen kan f.eks være et helt alminnelig ord som lett kan finnes ved hjelp av en ordbok. Kort sagt, så styrker det brukerens passord utan at brukeren engang vet om det.

Endret av Bakke
Lenke til kommentar

Hvorfor har dere ett salt som er likt`?

 

er det liksom når brukeren skriver inn passordet krypteres passordet hans og saltet så det blir en helt annen hash?

 

Så hvis jeg bruker forestiller meg noe som dette:

 

$salt = "h7T9sM";

$passord = sha1($_POST['Passord'] . $salt);

 

Og her skal jeg legge $passord i databasen?

Lenke til kommentar

Dersom $salt er hardkodet, legger du $passord i databasen. Dersom $salt genereres for hvert $passord, legger du $salt og $passord i databasen i hvert sitt felt.

 

De fleste bruker også et hardkodet passord i koden sin som et tilleggssalt, i tilfelle noen skulle få tak i databasen, så vil de fortsatt ikke ha alt de trenger for å kunne begynne å generere rainbow tables. Noen vil kanskje kalle det paranoia, men det er jo veldig enkelt å legge inn, så hvorfor ikke.

Lenke til kommentar

I dag bruker jo noen som heter logonkey

 

dette rendomgeneres når du registrere deg vær gang du logger på og når du logger av

 

Hvis du skriver inn riktig passord når du logger på lager jeg en cookie som har logonkeyen i seg og hvis du endrer den eller noe annet blir du logget ut...

 

Hvis noen hadde greid å "cracke" hash'en med den saltetet passordet i ville det jo ikke vært veldig vanskelig å finne ut brukerens egentlig passord?

Lenke til kommentar
I dag bruker jo noen som heter logonkey

 

dette rendomgeneres når du registrere deg vær gang du logger på og når du logger av

 

Hvis du skriver inn riktig passord når du logger på lager jeg en cookie som har logonkeyen i seg og hvis du endrer den eller noe annet blir du logget ut...

 

Hvis noen hadde greid å "cracke" hash'en med den saltetet passordet i ville det jo ikke vært veldig vanskelig å finne ut brukerens egentlig passord?

Man cracker ikke en hash. Det er enten bruteforce, som vil si du går gjennom alle løsninger, eller rainbowtables, som vil si du allerede har gått gjennom alle løsningene og lagret dem i en database. Jo større salt jo vanskeligere er det å få alle verdiene i en rainbowtable. Så det er bedre å bruke noe slikt som "9isdfj9kodfk9ff3f9fks+9kdmvo" enn "434ffs". Jo større jo bedre med andre ord.

Lenke til kommentar
vil randomsalt være noe sikrere en en fast salt?

Det er 2 typer salt.

Et er random for hver bruker, som lagres sammen med passordet.

Et er fast for alle brukerne, og brukes av alle applikasjonene.

 

For de paranoide er det best å bruke begge. Og innenfor datasikkerhet, er vel alle paranoide? :)

Endret av OISNOT
Lenke til kommentar

joja, men som du ser på det scriptet jeg har laget over så vil jeg vi få fram resultatene: c225e72478 (I form 15, 10 og 8 [Dette er 10]) 3 ganger før den endelige krypten er satt

og c225e72478 ville jo fungert som ett bra salt..

og da salter jo egentlig denne funksjonen passorden for meg..

 

Hvis noen hadde funnet krypten (Brukerens passord) på nettet ett sted hadde han jo kun fått resultetet: c225e72478

 

Og hvordan skulle han liksom kommet videre med den?

 

For det første han har ikke hele hash'en og for det andre tror ikke folk lager databaser for slike ord...

Derfor lurer jeg på hvorfor dette ikke skulle bli sikrere?

Lenke til kommentar
joja, men som du ser på det scriptet jeg har laget over så vil jeg vi få fram resultatene: c225e72478 (I form 15, 10 og 8 [Dette er 10]) 3 ganger før den endelige krypten er satt

og c225e72478 ville jo fungert som ett bra salt..

og da salter jo egentlig denne funksjonen passorden for meg..

 

Hvis noen hadde funnet krypten (Brukerens passord) på nettet ett sted hadde han jo kun fått resultetet: c225e72478

 

Og hvordan skulle han liksom kommet videre med den?

 

For det første han har ikke hele hash'en og for det andre tror ikke folk lager databaser for slike ord...

Derfor lurer jeg på hvorfor dette ikke skulle bli sikrere?

Det kan lages rainbowtables for de mest brukte passordene, siden 2 brukere med samme passord vil få samme resultat til slutt.

Den er mer kompleks.

Andre programmerere vil nok lure på ka den egentlig gjør.

Lenke til kommentar

Ja, men krypteringen har jo ikke kryptert brukerens passord den har kryptert c225e724 (Eks)

og uansett hvordan resultatet til en sha1 eller md5 hash blir så blir det ikke i nærheten av en ofte brukt passord..

 

sluttresultetet til scriptet mitt er jo ikke en kryptering av passordet til brukeren men en annen forkortet hash.

 

Hvorfor skulle disse ligge i rainbowtables?

Lenke til kommentar
Ja, men krypteringen har jo ikke kryptert brukerens passord den har kryptert c225e724 (Eks)

og uansett hvordan resultatet til en sha1 eller md5 hash blir så blir det ikke i nærheten av en ofte brukt passord..

 

sluttresultetet til scriptet mitt er jo ikke en kryptering av passordet til brukeren men en annen forkortet hash.

 

Hvorfor skulle disse ligge i rainbowtables?

Det er nok ingen rainbowtables som har startstreng og sluttstreng for den prosessen du har oppgitt her.

Men hvis noen vil, så kan de lage det. Fordi en sluttstreng er lik for samme startstreng.

 

Poenget med salt er at det må lages et rainbowtables per salt. Og for store verdier av mulige salt vil dette være ugunstig.

 

For å si det slik, skal du bruke dette på din private hjemmeside så er sikkerheten bra nok. Da er det nok andre ting du burde bekymre deg over hvis de får tilgang til databasen din.

Lenke til kommentar

Pølsevev. Det gir ingen betydelig økt sikkerhet å dobbelt-hashe eller hashe en substring av den originale hashen. Potensielt kan dette gi lavere sikkerhet, siden en substring av to forskjellige hasher kan være identisk. Det du bør vurdere er en annen, mindre populær og tregere algoritme enn MD5, i tillegg til et hardkodet salt. Selv bruker jeg vanligvis SHA-256 med hardkodet salt, og det er vel omtrent så sikkert som man kan få det. Se også hash()-funksjonen på php.net for flere detaljer.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...