[PHP] Veilige wachtwoorden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • naam
  • Registratie: Oktober 2007
  • Laatst online: 20-09 22:03
Ik ben al een tijdje bezig met een eigen forum geheel geschreven in PHP met MySQL, maar nu heb ik een vraag over wachtwoorden,
de meeste kant-en-klare forum pakketten die ik heb geprobeerd slaan hun wachtwoorden op als:
PHP:
1
2
3
<?php
    $pass = md5("Wachtwoord");
?>


Maar nu is de methode die ik zelf bedacht had:
PHP:
1
2
3
4
<?php
    $pass = md5("Wachtwoord");
    $pass = substr($pass, 0, 26);
?>


dus eerst een MD5 van het wachtwoord nemen en daar vervolgens substr op uitvoeren zodat niet de gehele md5 in de database komt. Dit zorgt er ( in mijn theorie ) voor dat als de database gehackt zou worden dat de hackers niet de wachtwoorden van gebruikers in handen hebben ( er zijn genoeg sites te vinden die een database met ge-bruteforcede md5's hebben ), echter als ze niet de volledige md5 hebben maar een aantal karakters missen, dan kost het aanzienlijk veel meer moeite om 1, alle mogelijke karakters te gaan proberen, 2 alle md5's met alle karakters op mijn site te gaan proberen.

Wie kan hier iets over zeggen of dit zinnig is of niet? :)

Acties:
  • 0 Henk 'm!

  • dvdheiden
  • Registratie: Maart 2006
  • Laatst online: 19:03
Je kan ook naar de krachtiger SHA algoritme kijken, ook ingebouwd in PHP.

Zie: PHP.net manual -> sha1()

Edit: en voor onderstaande opmerkingen heeft PHP dan weer crypt

[ Voor 28% gewijzigd door dvdheiden op 11-11-2008 12:23 ]


Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Hiervoor wordt over het algemeen een salt gebruikt.

Acties:
  • 0 Henk 'm!

  • keejoz
  • Registratie: November 2008
  • Laatst online: 28-08 15:53
Je kunt een stuk zelfgekozen tekst toevoegen (salt) zodat het nog moeilijker wordt om die terug te vinden in een table :)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Nee, dit is voor een brute-force attack minder veilig aangezien je het aantal mogelijkheden juist verminderd. Je kan beter kijken naar 'salting'

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • naam
  • Registratie: Oktober 2007
  • Laatst online: 20-09 22:03
Ook voor sha1 geld dat er databases (http://www.tmto.org/search/) zijn die een ongelofelijke berg wachtwoorden gewoon als sha1 en als plaintext opgeslagen hebben.. ik wil juist dat het zo veilig mogelijk is, echter misschien is een combinatie van sha1 en substr een idee?

Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Of een Salt toevoegen

PHP:
1
2
3
4
<?php
    $salt = "hele lange en moeilijke string";
    $pass = md5("Wachtwoord".$salt);
?>

[ Voor 0% gewijzigd door DanielG op 11-11-2008 12:22 . Reden: altijd spuit 11 :p ]

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • Flard
  • Registratie: Februari 2001
  • Laatst online: 18-09 22:09
Wiskundig gezien maak je het alleen maar onveiliger ;)

md5 is een hash-algoritme, waar (simpel gezegd) altijd 32 karakters uit komen. Daardoor is er kans op zogenaamde collisions: het is mogelijk dat de string "aaa" en "bbb" allebei hetzelfde resultaat opleveren. Door de string korter te maken, wordt die kans op collisions alleen maar groter (de 'poel' waaruit 'gekozen' kan worden, wordt immers alleen maar kleiner).

Ook wordt er vaak gebruik gemaakt van tabellen waar veelgebruikte wachtwoorden en hun md5 hash in staan. Ook hier neemt de kans alleen maar toe op goede hits in die tabel.

Niet doen dus, gewoon md5 volledig opslaan, bij voorkeur met een aparte 'unieke' waarde erbij (de salt), waardoor 'hacken' via zo'n tabel nog moeilijker wordt.

Acties:
  • 0 Henk 'm!

  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 20-09 00:06
marabunta2048 schreef op dinsdag 11 november 2008 @ 12:15:
dus eerst een MD5 van het wachtwoord nemen en daar vervolgens substr op uitvoeren zodat niet de gehele md5 in de database komt. Dit zorgt er ( in mijn theorie ) voor dat als de database gehackt zou worden dat de hackers niet de wachtwoorden van gebruikers in handen hebben ( er zijn genoeg sites te vinden die een database met ge-bruteforcede md5's hebben ), echter als ze niet de volledige md5 hebben maar een aantal karakters missen, dan kost het aanzienlijk veel meer moeite om 1, alle mogelijke karakters te gaan proberen, 2 alle md5's met alle karakters op mijn site te gaan proberen.

Wie kan hier iets over zeggen of dit zinnig is of niet? :)
Nee, totaal niet zinnig. Het is zelfs makkelijker geworden voor een attacker. Elke string die hasht naar een hash met dezelfde eerste 104 bits werkt nu (deze string hoeft niet hetzelfde te zijn als het wachtwoord - je applicatie kan het verschil niet zien!). Je kan beter een salt gebruiken.

Acties:
  • 0 Henk 'm!

  • naam
  • Registratie: Oktober 2007
  • Laatst online: 20-09 22:03
wow, veel reacties in weinig tijd, aangezien in nog nooit van het concept van salt gehoord had zal ik ook daar zeker eens een kijkje naar gaan nemen :)

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

marabunta2048 schreef op dinsdag 11 november 2008 @ 12:21:
Ook voor sha1 geld dat er databases (http://www.tmto.org/search/) zijn die een ongelofelijke berg wachtwoorden gewoon als sha1 en als plaintext opgeslagen hebben.. ik wil juist dat het zo veilig mogelijk is, echter misschien is een combinatie van sha1 en substr een idee?
Jij overschat lichtelijk de macht van bruteforcing. Een database met 2^128 md5 hashes of erger nog 2^160 sha1 hashes bestaat niet - daar vallen alleen mensen in met passwords als 'qwerty' en '12345'. Met een goed password is dit al per definitie geen probleem, en met salting volstrekt een non-issue.

Mocht je trouwens in de verleiding gooien om meerdere hashes over elkaar te gooien (bijv. sha1(md5($pass)) of zo) in de hoop dat dit veiliger wordt - nee daarmee verklein je ook de namespace aanzienlijk :)

[ Voor 13% gewijzigd door curry684 op 11-11-2008 12:46 ]

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

Ik probeer mijn wachtwoorden altijd op te slaan met de Timestamp waarop de gebruiker zich heeft aangemeld.
Meestal doe ik iets als:

PHP:
1
2
3
4
5
function maakWachtwoord($Wachtwoord, $Timestamp)
{
    $result = sha1(floor(($Timestamp * 0.12345)).$Wachtwoord);
    return $result;
}


Waarbij $Wachtwoord het door de gebruik ingevulde wachtwoord is en de $Timestamp de huidige timestamp, dezelfde timestamp als wordt opgeslagen in de database.
0.12345 is een getal dat ik gebruik om de $Timestamp ook weer wat te door elkaar te gooien en varieert bij mij van site tot site. Eventueel kun je hier ook weer een dynamisch getal voor gebruiken, dat je in de gebruiker tabel opslaat.

Een wachtwoord controleren bij het inloggen is dus infeite zo:

PHP:
1
2
3
4
if ($Wachtwoord == maakWachtwoord($Gebruiker->Wachtwoord, $Gebruiker->DatumToegevoegd))
{
    $ingelogd = true;
}


Maarja iedereen doet dit natuurlijk op zijn/haar manier, zoek even de voor jou meest prettige

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
curry684 schreef op dinsdag 11 november 2008 @ 12:42:
[...]

Jij overschat lichtelijk de macht van bruteforcing. Een database met 2^128 md5 hashes of erger nog 2^160 sha1 hashes bestaat niet - daar vallen alleen mensen in met passwords als 'qwerty' en '12345'. Met een goed password is dit al per definitie geen probleem, en met salting volstrekt een non-issue.

Mocht je trouwens in de verleiding gooien om meerdere hashes over elkaar te gooien (bijv. sha1(md5($pass)) of zo) in de hoop dat dit veiliger wordt - nee daarmee verklein je ook de namespace aanzienlijk :)
Hoezo is dit onveiliger?

Als je puur uitgaat van bruteforcing dan is dit toch sneller te kraken:
md5("12345");
dan dit:
md5( md5("12345") . md5("mijngeheimeuniekesalt") );

Acties:
  • 0 Henk 'm!

  • writser
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:58
curry684 schreef op dinsdag 11 november 2008 @ 12:42:
[...]

Jij overschat lichtelijk de macht van bruteforcing. Een database met 2^128 md5 hashes of erger nog 2^160 sha1 hashes bestaat niet - daar vallen alleen mensen in met passwords als 'qwerty' en '12345'.
Maar hoeveel mensen hebben nou een goed wachtwoord?

Onvoorstelbaar!


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

Aangezien je blijkbaar nogal gecharmeerd bent van substr() kan je beter de optionele parameter $raw_output van sha1() gebruiken om zo in plaats van hexadecimale string van 40 bytes een binare string van 20 bytes te krijgen (opslaan in een binary(20) veld in je database), deze bevat precies dezelfde informatie en is dus even veilig, maar wel kleiner en efficiënter.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
writser schreef op dinsdag 11 november 2008 @ 13:14:
[...]
Maar hoeveel mensen hebben nou een goed wachtwoord?
Hashes in een security context == _altijd_ een salt gebruiken.

{signature}


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Megamind schreef op dinsdag 11 november 2008 @ 13:09:
[...]

Hoezo is dit onveiliger?

Als je puur uitgaat van bruteforcing dan is dit toch sneller te kraken:
md5("12345");
dan dit:
md5( md5("12345") . md5("mijngeheimeuniekesalt") );
Het ligt er maar net aan wat je onder kraken verstaat. Het vinden van een string waarmee je zou kunnen inloggen gaat niet korter duren door je ingewikkeldere procedure. Integendeel, de input van je tweede hash bestaat uit 64 tekens in de range [0-9A-F] (twee geconcatte md5-hashes in hexnotatie). Je hebt de mogelijke variatie in je hash dus gereduceerd van 2128 naar 6416 = 296.

Het vinden van het exacte wachtwoord wat de gebruiker heeft ingevuld wordt wel lastiger door je tweede methode.

[ Voor 0% gewijzigd door T-MOB op 11-11-2008 13:41 . Reden: Iets met rekenen... ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
T-MOB schreef op dinsdag 11 november 2008 @ 13:34:
Je hebt de mogelijke variatie in je hash dus gereduceerd van 2128 naar 64^16 = 296.
Que? Reken maar dat die hex notatie de volledige 2128 mogelijkheden kan weergeven hoor. :z Het zijn dan ook 32 tekens met 16 mogelijkheden, oftewel 1632, wat hetzelfde is als 24*32, wat gewoon 2128 is. :z

{signature}


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Och natuurlijk 8)7 Denkvout de gekste...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Megamind schreef op dinsdag 11 november 2008 @ 13:09:
[...]

Hoezo is dit onveiliger?

Als je puur uitgaat van bruteforcing dan is dit toch sneller te kraken:
md5("12345");
dan dit:
md5( md5("12345") . md5("mijngeheimeuniekesalt") );
Nope, bij bruteforcing is de explorable namespace van de eerste groter dan die van de 2e. Marginaal overigens in dit specifieke geval, en als je meeneemt dat je bruteforcen meestal 'short to long' doet is 1. wel sneller gekraakt. Jouw voorbeeld 2 heeft overigens niets van doen met het voorbeeld dat ik noemde.
writser schreef op dinsdag 11 november 2008 @ 13:14:
[...]

Maar hoeveel mensen hebben nou een goed wachtwoord?
Dat hangt van jou als siteontwikkelaar af of jij een error geeft bij $user=$pass of als strlen($pass) < 8 of als preg_match('#[A-Za-z]+#', $pass) true is. Dat probleem ligt dus eerder in de chain dan de hashing.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Inderdaad, goede wachtwoorden kun je gewoon afdwingen tijdens registratie/wachtwoord wijzigen procedure. Overigens denk ik dat het 'gewoon' salten nog steeds t veiligste is. Gebruik bijna altijd de sha256 methode ervoor maar soms ook de whirlpool methode (wisselt per server of het wel of niet ondersteund wordt).

Je kunt ook nog een unieke salt gebruiken zoals zn userid of registratietijd (eerder genoemd) maar ik ben er niet echt meer een fan van. Als je clientside de boel wil versleutelen (soort Random Reader stijl) dan heb je die gegevens niet en kun je niet echt anders dan plaintekst dat wachtwoord over de lijn sturen (tenzij je met https werkt).

[ Voor 35% gewijzigd door Cartman! op 11-11-2008 14:06 ]


Acties:
  • 0 Henk 'm!

  • writser
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:58
Tja, hoeveel sites doen dat nou? Ik heb net even geprobeerd: zelfs op tweakers.net kan ik mijn wachtwoord zonder problemen instellen op 1234567 en zelfs op mijn gebruikersnaam! Had toch beter verwacht :) Maar voor de topicstarter: een salt gebruiken. Ga in elk geval niet zelf proberen om iets veiligers in elkaar te knutselen: laat dat aan experts over.

edit:
Wannabe-hackers, ik heb mijn wachtwoord weer teruggezet hoor :P

[ Voor 10% gewijzigd door writser op 11-11-2008 14:10 ]

Onvoorstelbaar!


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
writser schreef op dinsdag 11 november 2008 @ 14:09:
Tja, hoeveel sites doen dat nou?
Wat is dat nou voor argument? Sinds wanneer heeft dat te maken met hoe je zélf iets implementeert? En je kunt er voor kiezen iets af te dwingen of niet; hier op T.net gebeurt het dus niet (het wordt wel geadviseerd en duidelijk aangegeven, maar niet afgedwongen (in ernstige mate)). Het is een balans tussen gebruiksvriendelijkheid en mate van beveiliging. En je beseft natuurlijk ook dat een forum lang geen supersterke beveiliging behoeft i.t.t. bijvoorbeeld een site waar je je aandelen verhandelt of je bankzaken doet.

[ Voor 46% gewijzigd door RobIII op 11-11-2008 14:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • writser
  • Registratie: Mei 2000
  • Laatst online: 19-09 20:58
Ik had het niet tegen jou, maar tegen Curry. Er zijn genoeg sites die geen eisen stellen aan een wachtwoord en gewoon een MD5-hash opslaan (of nog erger: het wachtwoord in plaintekst opslaan en in plaintekst naar je emailen). Kennelijk zitten gebruikers niet te wachten op een systeem dat jou gaat vertellen wat voor wachtwoord je moet nemen. En als je dat niet doet is een bruteforce-oplossing wel degelijk effectief om x% van de wachtwoorden te kraken. Dus adviseer ik de topicstarter: gebruik een salt.

[ Voor 22% gewijzigd door writser op 11-11-2008 14:38 ]

Onvoorstelbaar!


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:24

Patriot

Fulltime #whatpulsert

curry684 schreef op dinsdag 11 november 2008 @ 13:59:
[...] of als preg_match('#[A-Za-z]+#', $pass) true is [...]
Maar, dat is 'ie toch nooit? :+
writser schreef op dinsdag 11 november 2008 @ 14:36:
Ik had het niet tegen jou, maar tegen Curry. Er zijn genoeg sites die geen eisen stellen aan een wachtwoord en gewoon een MD5-hash opslaan (of nog erger: het wachtwoord in plaintekst opslaan en in plaintekst naar je emailen). Kennelijk zitten gebruikers niet te wachten op een systeem dat jou gaat vertellen wat voor wachtwoord je moet nemen. En als je dat niet doet is een bruteforce-oplossing wel degelijk effectief om x% van de wachtwoorden te kraken. Dus adviseer ik de topicstarter: gebruik een salt.
Dat betekend toch niet dat het een goede reden is om het maar niet te doen? Je "ik had het niet tegen jouw"-opmerking is een beetje vreemd trouwens, dan had je het in een DM moeten gooien ;)

[ Voor 67% gewijzigd door Patriot op 11-11-2008 14:57 ]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

writser schreef op dinsdag 11 november 2008 @ 14:36:
Ik had het niet tegen jou, maar tegen Curry. Er zijn genoeg sites die geen eisen stellen aan een wachtwoord en gewoon een MD5-hash opslaan (of nog erger: het wachtwoord in plaintekst opslaan en in plaintekst naar je emailen). Kennelijk zitten gebruikers niet te wachten op een systeem dat jou gaat vertellen wat voor wachtwoord je moet nemen.
Jij haalt 'need for security' en 'wish for security' door elkaar. Iedere online bank, aandelentoko etc. waar ik ervaring mee heb dwingt zware password security af, evenals fileservers, domain controllers enzovoorts. Dat phpBB het niet doet omdat mensen geen strong password willen hoeven invoeren voor hun kantklosdiscussies staat daar los van.

TS boeit het blijkbaar wel om meer-dan-simpele security te hebben, als ie bang is dat z'n database in verkeerde handen valt en dan gebruteforced wordt. Nou, dan moet je dat bij de bron oplossen, en dat is dat er geen simpel bruteforcebare passwords in die DB komen. Salt is daar een 2e hulpmiddel bij.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Data-base
  • Registratie: Maart 2007
  • Laatst online: 07-09 10:33
Ik heb t topic niet helemaal gelezen maar wat ik vaak tegenkom is dat mensen hun wachtwoorden op de meest gekke manieren (al dan niet veilige) proberen op te slaan om te voorkomen dat t wordt gebruteforced. Maar mocht iemand je database in handen krijgen hóeft ie t niet te bruteforcen aangezien hij/zij gewoon de hash zelf in zn eigen cookie kan stoppen en klaar is kees! (even onder de aanname dat je forum cookies gebruikt om gebruikers te "onthouden").
Verder zou ik me meer druk maken over xss, csrf en sql-injection (en de gevorderden onder ons kunnen t lijstje wel verder afmaken) dan om dat iemand je wachtwoorden gaan bruteforcen.

Ontopic:
Zoals gezegd is salten een goede manier om je password veilig op te slaan. Alhoewel ik er zelf niet zo fan van ben. Dan zou ik eerder een vorm van encryptie gebruiken als je echt zo bang bent om gebruteforced te worden.

Edit:
Denk er ook vooral aan dat hashing en encryptie bouwstenen zijn voor security, en niet security zelf zijn.

[ Voor 6% gewijzigd door Data-base op 11-11-2008 19:33 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Data-base schreef op dinsdag 11 november 2008 @ 19:32:
Ik heb t topic niet helemaal gelezen maar wat ik vaak tegenkom is dat mensen hun wachtwoorden op de meest gekke manieren (al dan niet veilige) proberen op te slaan om te voorkomen dat t wordt gebruteforced. Maar mocht iemand je database in handen krijgen hóeft ie t niet te bruteforcen aangezien hij/zij gewoon de hash zelf in zn eigen cookie kan stoppen en klaar is kees! (even onder de aanname dat je forum cookies gebruikt om gebruikers te "onthouden").
Zeg professor, het opslaan van hashes in plaats van de échte wachtwoorden maakt een applicatie nul komma nul veiliger of onveiliger. Het gaat erom dat je als iemand toegang heeft tot de database de wachtwoorden van iedereen niet zodanig op straat liggen, omdat ze die wachtwoorden ergens anders ook weleens zouden kunnen gebruiken.
Verder zou ik me meer druk maken over xss, csrf en sql-injection (en de gevorderden onder ons kunnen t lijstje wel verder afmaken) dan om dat iemand je wachtwoorden gaan bruteforcen.
Het kost je exact een halve minuut om de regel code te schrijven die een wachtwoord controleert, dus daari heb je helemaal gelijk. Er is gewoon geen enkel geldig excuus om een wachtwoord plain-text op te slaan. Als je het goed doet, salt je met bijvoorbeeld het emailadres. Zo kun je ook onmogelijk het te makkelijk maken om gelijke wachtwoorden uit een database te filteren. Die zijn namelijk veel makkelijker te kraken omdat ze bijna gegarandeerd in een dictionary voorkomen.
Ontopic:
Zoals gezegd is salten een goede manier om je password veilig op te slaan. Alhoewel ik er zelf niet zo fan van ben. Dan zou ik eerder een vorm van encryptie gebruiken als je echt zo bang bent om gebruteforced te worden.
Onzin. Encryptie is niet voor het opslaan van wachtwoorden. Als je het daar wel voor gebruikt, heb je gewoon niet in de gaten waarom je een hash opslaat in plaats van het echte wachtwoord. Encryptie is haast altijd te reversen als iemand eenmaal toegang heeft tot de server, en moet je nooit gebruiken als het niet van essentieel belang is dat je het "origineel" nodig hebt. Een wachtwoord kun je altijd resetten. Het origineel boeit niet.
Edit:
Denk er ook vooral aan dat hashing en encryptie bouwstenen zijn voor security, en niet security zelf zijn.
Dat is weer waar. Het is een hulpmiddel. Als ze niet juist worden gebruikt dienen ze geen enkel doel.

Acties:
  • 0 Henk 'm!

  • ibmos2warp
  • Registratie: Januari 2007
  • Laatst online: 20-11-2023

ibmos2warp

Eval is Evil

Data-base schreef op dinsdag 11 november 2008 @ 19:32:
(...) Verder zou ik me meer druk maken over xss,
Dat zou ik inderdaad maar gaan doen:
Data-base schreef op dinsdag 11 november 2008 @ 19:32:
(...) aangezien hij/zij gewoon de hash zelf in zn eigen cookie kan stoppen en klaar is kees! (even onder de aanname dat je forum cookies gebruikt om gebruikers te "onthouden").
Je gaat toch geen password (aldanniet gehashed) in een cookie zetten |:( :X, dan hoef je alleen maar effe die cookie te stelen...

Ik weet alles van niks
Vind Excel ongelovelijk irritant.


Acties:
  • 0 Henk 'm!

  • Data-base
  • Registratie: Maart 2007
  • Laatst online: 07-09 10:33
Verwijderd schreef op dinsdag 11 november 2008 @ 19:44:
Zeg professor, het opslaan van hashes in plaats van de échte wachtwoorden maakt een applicatie nul komma nul veiliger of onveiliger. Het gaat erom dat je als iemand toegang heeft tot de database de wachtwoorden van iedereen niet zodanig op straat liggen, omdat ze die wachtwoorden ergens anders ook weleens zouden kunnen gebruiken.
Het kost je exact een halve minuut om de regel code te schrijven die een wachtwoord controleert, dus daari heb je helemaal gelijk. Er is gewoon geen enkel geldig excuus om een wachtwoord plain-text op te slaan. Als je het goed doet, salt je met bijvoorbeeld het emailadres. Zo kun je ook onmogelijk het te makkelijk maken om gelijke wachtwoorden uit een database te filteren. Die zijn namelijk veel makkelijker te kraken omdat ze bijna gegarandeerd in een dictionary voorkomen.
Kwam ik zo arrogant over dat je me professor noemt ja? Zo bedoelde ik het in ieder geval niet!
En tuurlijk ik zeg ook absoluut niet dat je wachtwoorden plaintext op moet slaan, maar ik vind t idee van salten maar beperkt nuttig. Iemand moet wel heel erg hard willen om 1) in je database te komen en 2) eem md5 te gaan bruteforcen (of dictioary attack) en 3) gaan proberen of iemand dat ook op andere plaatsen gebruikt (wat wrs zo is:p). Tuurlijk de kans dat dat gebeurt is absoluut niet 0, maar als iemand stap 1 en stap 2 kan doen, kan die ook je saltingalgoritme achterhalen en bruteforcen met salt. (Kerckhofss principe)

Persoonlijk zou ik vooral voor een collision gaan zoeken, en de kans dat een collision optreed is zo op t eerste oog intuitief gezien niet afhankelijk van de lengte je input. (Mn intuitie kan ook gewoon ernaast zitten hoor).
Onzin. Encryptie is niet voor het opslaan van wachtwoorden. Als je het daar wel voor gebruikt, heb je gewoon niet in de gaten waarom je een hash opslaat in plaats van het echte wachtwoord. Encryptie is haast altijd te reversen als iemand eenmaal toegang heeft tot de server, en moet je nooit gebruiken als het niet van essentieel belang is dat je het "origineel" nodig hebt. Een wachtwoord kun je altijd resetten. Het origineel boeit niet.
True, encryptie is niet per se voor het opslaan van wachtwoorden, maar als je per se wil dat je wachtwoorden veilig zijn, dan is encryptie veiliger. Je kan creatief doen met security protocols, en dan is zoiets als RSA veel veilger dan een md5 hash, als is het alleen omdat RSA "doen" veel langzamer is dan md5.

http://www.cl.cam.ac.uk/~rja14/Papers/SE-02.pdf (interessant stukje over security protocols ;))
ibmos2warp schreef op dinsdag 11 november 2008 @ 19:51:
Je gaat toch geen password (aldanniet gehashed) in een cookie zetten |:( :X, dan hoef je alleen maar effe die cookie te stelen...
Als je zorgt dat je security op orde is, is een cookie jatten niet mogelijk. Dat was juist heel mn punt!
Heb al tijdje geen web gedaan, maar hoe zou jij anders de "onthouden" functie maken zodat ik niet bij elk bezoek in hoef te loggen? (Behalve een sessie aan een ip te koppelen)

Acties:
  • 0 Henk 'm!

  • martijnve
  • Registratie: December 2004
  • Laatst online: 16:12
Data-base schreef op dinsdag 11 november 2008 @ 20:27:
[...]

Kwam ik zo arrogant over dat je me professor noemt ja? Zo bedoelde ik het in ieder geval niet!
En tuurlijk ik zeg ook absoluut niet dat je wachtwoorden plaintext op moet slaan, maar ik vind t idee van salten maar beperkt nuttig. Iemand moet wel heel erg hard willen om 1) in je database te komen en 2) eem md5 te gaan bruteforcen (of dictioary attack) en 3) gaan proberen of iemand dat ook op andere plaatsen gebruikt (wat wrs zo is:p). Tuurlijk de kans dat dat gebeurt is absoluut niet 0, maar als iemand stap 1 en stap 2 kan doen, kan die ook je saltingalgoritme achterhalen en bruteforcen met salt. (Kerckhofss principe)

Persoonlijk zou ik vooral voor een collision gaan zoeken, en de kans dat een collision optreed is zo op t eerste oog intuitief gezien niet afhankelijk van de lengte je input. (Mn intuitie kan ook gewoon ernaast zitten hoor).

[...]

True, encryptie is niet per se voor het opslaan van wachtwoorden, maar als je per se wil dat je wachtwoorden veilig zijn, dan is encryptie veiliger. Je kan creatief doen met security protocols, en dan is zoiets als RSA veel veilger dan een md5 hash, als is het alleen omdat RSA "doen" veel langzamer is dan md5.

http://www.cl.cam.ac.uk/~rja14/Papers/SE-02.pdf (interessant stukje over security protocols ;))


[...]


Als je zorgt dat je security op orde is, is een cookie jatten niet mogelijk. Dat was juist heel mn punt!
Heb al tijdje geen web gedaan, maar hoe zou jij anders de "onthouden" functie maken zodat ik niet bij elk bezoek in hoef te loggen? (Behalve een sessie aan een ip te koppelen)
Met alle respect je praat onzin. Je zegt een hoop moeilijke dingen waardoor het lijkt alsof je er verstand van hebt maar dit is imho niet zo, dadelijk gaan mensen op grond van wat jij zegt dingen maken waarvan ze denken dat het veilig is maar wat niet zo blijkt te zijn.

Over salting: als je geen salt gebruikt kan iemand die je db kraakt met een rainbowtable relatief eenvoudig alle wachtwoorden achterhalen. En als dit niet lukt kan hij altijd nog gaan bruteforcen. Het risico hier is niet dat mensen op jouw site in kunnen loggen, want dat kunnen ze toch wel als ze in je db kunnen. (alhoewel mochten ze readonly toegang hebben en je gebruikt een salt die niet in de db staat zijn ze nog nergens) Maar bijna alle mensen gebruiken op allerlij sites dezelfde wachtwoorden (ja dat is hun fout dat snap ik) waardoor ze meteen goed de klos zijn als een hacker uit jouw db hun wachtwoord (of een ongesalte hash daarvan) haalt. Want als iemand een ongesalte hash heeft kan hij vaak met een rainbow table het orgineel terug halen, en zelfs als dat niet lukt en bruteforcing lukt ook niet kan hij op veel niet zo goed beveiligde websites met alleen de hash misschien ook nog wel inloggen! (als de hashing clientside zonder salt met javascript gebeurt)

Encryptie is voor het oplaan van wachtwoorden gewoon 100x fout want het is altijd omkeerbaar. Als iemand je server hacked kan hij zo de key die je gebruikt om de wachtwoorden te versleutelen vinden en die gebruiken om de wachtwoorden te achterhalen. Ok toegegeven hij moet dan meer kunnen dan alleen je db lezen maar als hij root toegang heeft tot je server ben je de klos. Hashes daar-en-tegen zijn veilig omdat ze niet terug te rekenen zijn. (mits je dus een salt EN een voldoende veilig algoritme gebruikt).

Cookie jatten is inderdaad niet mogenlijk als je je security op orde hebt maar je kunt beter alleen een sessie key in de cookie op slaan. (Alhoewel iemand natuurlijk de cookie gewoon fysiek kan jatten terwijl jij niet achter je pc zit ofzo)Als iemand dan toch de cookie jat kunnen ze wel de sessie overnemen (als ze vanaf het zelfde ip komen of je de sessie niet aan een ip locked) maar dan hebben ze in ieder geval niet het wachtwoord. En als je een mooie timeout op je sessie hebt zitten is het helemaal goed. Als het wachtwoord in de cookie staat kun je zo uit een 3 weken oude cookie het wachtwoord halen en inloggen. 8)7

[ Voor 1% gewijzigd door martijnve op 11-11-2008 21:53 . Reden: typos ]

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Als je iemand zn wachtwoord in een cookie zet is je systeem gewoon fout inderdaad. Ik kan me ook totaal niet vinden in de praat van data-base. Encryptie voor je wachtwoorden, wtf? Iemand die bij je db kan heeft 9 v'/d 10 keer ook toegang tot de rest van je code en daar staat...jawel..de key om de wachtwoorden te decrypten :+

Ik werk met een eigen session-handler (die soortgelijk werkt als hier op GoT) en daarin kun je ook iplocken en timeouten op een voorbepaald tijdstip. Tuurlijk kan iemand fysiek je cookie stelen, maar daarmee heeft ie niet je wachtwoord te pakken.

Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

Ik maak gebruik van een Multi-Salt systeem, gebruikers krijgen een wachtwoord toegewezen, waarna deze veranderd moet worden. Op dat moment krijgen ze een willekeurig SALT toegewezen (dit wordt bijgehouden, duh!), waardoor het al lastiger is om de salt (+ wachtwoord) te raden.

don't be afraid of machines, be afraid of the people who build and train them.


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

curry684 schreef op dinsdag 11 november 2008 @ 12:42:
Mocht je trouwens in de verleiding gooien om meerdere hashes over elkaar te gooien (bijv. sha1(md5($pass)) of zo) in de hoop dat dit veiliger wordt - nee daarmee verklein je ook de namespace aanzienlijk :)
Heb je daar weleens een uitleg voor gezien die voor niet-specialisten te volgen is? Googlen op die termen levert niet veel op...

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • martijnve
  • Registratie: December 2004
  • Laatst online: 16:12
curry684 schreef op dinsdag 11 november 2008 @ 12:42:
[...]
Mocht je trouwens in de verleiding gooien om meerdere hashes over elkaar te gooien (bijv. sha1(md5($pass)) of zo) in de hoop dat dit veiliger wordt - nee daarmee verklein je ook de namespace aanzienlijk :)
Is het dan niet gewoon zo sterk als de zwakste-schakel?
Ik gebruik zelf in mn laatste project meerdere hashes paralel.
hash = md5($pass . $saltA) . sha1($pass . $saltB);
Daardoor wordt het welliswaar niet moeilijker om het wachtwoord te achterhalen, maar wel om een collission te vinden.
Wil mensen trouwens nog niet aanraden dit zomaar over te nemen, heb nog niet onderzocht of mogenlijke hackers iets hebben aan de extra informatie mochten ze ooit in de db komen. Als iemand met kennis van cryptoanalyse hier iets over kan zeggen is dat welkom 8)

Verder heb ik ook altijd een eigen hashing functie (die in dit geval niets meer doet dan de bovenstaande regel) die de hashes maakt, op die manier kan ik, mocht ik ooit een ander hash systeem in gebruik nemen, alles in een keer aanpassen.

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Confusion schreef op dinsdag 11 november 2008 @ 22:24:
[...]

Heb je daar weleens een uitleg voor gezien die voor niet-specialisten te volgen is? Googlen op die termen levert niet veel op...
Kan wel even een simpele poging wagen....

Het md5-algoritme genereert een 'vingerafdruk' van een bestand een willekeurige grootte met willekeurige inhoud. Het idee achter de hash is dat het door de tijd benodigd om het algoritme uit te voeren gecombineerd met de aanwezige namespace van 2^128 niet haalbaar is om handmatig clashes te gaan zoeken. Het is echter doordat er een vernietigende berekening wordt gedaan ondenkbaar dat de eerste 2^128 mogelijkheden zullen leiden tot 2^128 unieke hashes. Hieruit volgt dus dat de namespace kleiner wordt met iedere hash-slag omdat je de input-namespace beperkt en er dus clashes zullen gaan missen.

Iow, als je stelt dat een password 8 tot 12 karakters lang moet zijn en alleen letters en cijfers mag bevatten reduceer je de input tot (62^8+62^9+62^10+62^11+62^12) mogelijkheden. Zodra je over dit password een md5 haalt heb je (62^8+62^9+62^10+62^11+62^12 minus clashes) mogelijkheden. Zodra je er ook nog een sha1 overheen haalt heb je (62^8+62^9+62^10+62^11+62^12 minus md5-clashes minus sha1-clashes) mogelijkheden. Met iedere stap verkleint dus de namespace.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

martijnve schreef op dinsdag 11 november 2008 @ 22:34:
[...]

Ik gebruik zelf in mn laatste project meerdere hashes paralel.
hash = md5($pass . $saltA) . sha1($pass . $saltB);
Daardoor wordt het welliswaar niet moeilijker om het wachtwoord te achterhalen, maar wel om een collission te vinden.
Uhm nee je geeft ze nu 2 parallelle paden om een collision te vinden waarmee je de complexiteit aanmerkelijk verlaagt. Je hebt enkel de MTTF voor de security gereduceerd tot welk algoritme van de 2 toevallig eerder op z'n knieen gaat.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Confusion schreef op dinsdag 11 november 2008 @ 22:24:
[...]

Heb je daar weleens een uitleg voor gezien die voor niet-specialisten te volgen is? Googlen op die termen levert niet veel op...
Een hashingalgoritme is een niet-injectieve afbeelding: er zijn in het algemeen meerdere inputs die dezelfde output opleveren (namelijk collisions). Bij elke volgende hash wordt je uitkomstenruimte kleiner (of hij blijft even groot).

ascii-art:
   1 2 3 4 5 6 7 8 9 
a -x-------x-x-x-x-x->  A
b -/       |            
c ---x-----/            
d ---/                  
e ---------------x--->  E
f ---------\     |      
g ---------x-----/

inputs a en b hebben na de eerste hashfunctie dezelfde hash, de 5e hash van a/b en de 5e hash van c/d zijn hetzelfde, etc.

nouja, wat ^^ zegt dus, ik ben te traag :P

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
sky- schreef op dinsdag 11 november 2008 @ 21:58:
Ik maak gebruik van een Multi-Salt systeem, gebruikers krijgen een wachtwoord toegewezen, waarna deze veranderd moet worden. Op dat moment krijgen ze een willekeurig SALT toegewezen (dit wordt bijgehouden, duh!), waardoor het al lastiger is om de salt (+ wachtwoord) te raden.
Uh...dan kun je toch nog steeds de gebruikte salt matchen bij elke user? Ik zie het nu niet zo van dit.

Oh, tipje... een sha1 hash levert altijd een string van 40 tekens, neem dan char(40) ipv. varchar(255) ;)

Acties:
  • 0 Henk 'm!

  • martijnve
  • Registratie: December 2004
  • Laatst online: 16:12
curry684 schreef op dinsdag 11 november 2008 @ 22:40:
[...]

Uhm nee je geeft ze nu 2 parallelle paden om een collision te vinden waarmee je de complexiteit aanmerkelijk verlaagt. Je hebt enkel de MTTF voor de security gereduceerd tot welk algoritme van de 2 toevallig eerder op z'n knieen gaat.
Niet toch? want ze moetten een string vinden die op BEIDE hashes een colission geeft? kans vrijwel 0 lijkt me?

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

martijnve schreef op dinsdag 11 november 2008 @ 22:44:
[...]

Niet toch? want ze moetten een string vinden die op BEIDE hashes een colission geeft? kans vrijwel 0 lijkt me?
Nee omdat je ze simpel aan elkaar concat tot een string van 72 chars hoef ik maar op 1 van de 2 een collision te zoeken, tenzij ik stomtoevallig de verkeerde collision vind maar doordat je systematische beperkingen op je passwords zal hebben (te gebruiken chars en lengte) is dat aardig onwaarschijnlijk.

[ Voor 20% gewijzigd door curry684 op 11-11-2008 22:52 ]

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Cartman! schreef op dinsdag 11 november 2008 @ 22:43:
Uh...dan kun je toch nog steeds de gebruikte salt matchen bij elke user? Ik zie het nu niet zo van dit.
Ja, maar je moet wel voor iedere gebruiker gaan brute-forcen. Een rainbowtable maken voor één database kan nog interessant zijn, maar voor iedere gebruiker brute-forcen is bijna nooit zinvol. Daarnaast zorg je ervoor dat dezelfde wachtwoorden in de tabel niet als zodanig te herkennen zijn.

Een salt heeft trouwens nog een voordeel, los van dat rainbow tables onbruikbaar zijn. Collisions heb je nog wel, maar zijn grotendeels onbruikbaar: het wachtwoord moet immers eindigen (of beginnen met) je salt. Je voorkomt daarmee dus ook dat dat collisions van een andere site ook op jouw site werken.
(bv: wachtwoord = 'test', met salt='test1', hash('test1') = hash('fdsaf') maar met fdsaf kan je verder niets...)
martijnve schreef op dinsdag 11 november 2008 @ 22:44:
Niet toch? want ze moetten een string vinden die op BEIDE hashes een colission geeft? kans vrijwel 0 lijkt me?
De kans op collisions in het eindantwoord lijkt me inderdaad kleiner, maar als je een salt gebruikt is dat je probleem niet. Je kunt wél uit twee rainbow tables (nl. md5 en sha1) proberen het wachtwoord te halen...

Acties:
  • 0 Henk 'm!

  • martijnve
  • Registratie: December 2004
  • Laatst online: 16:12
curry684 schreef op dinsdag 11 november 2008 @ 22:49:
[...]

Nee omdat je ze simpel aan elkaar concat tot een string van 72 chars hoef ik maar op 1 van de 2 een collision te zoeken, tenzij ik stomtoevallig de verkeerde collision vind maar doordat je systematische beperkingen op je passwords zal hebben (te gebruiken chars en lengte) is dat aardig onwaarschijnlijk.
Als je 1 collision hebt is de string die er uit komt anders (de andere hash is immers anders) dan de opgeslagen string in de db? dus geen toegang?

[ Voor 3% gewijzigd door martijnve op 11-11-2008 22:57 ]

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
ValHallASW schreef op dinsdag 11 november 2008 @ 22:55:
[...]

Ja, maar je moet wel voor iedere gebruiker gaan brute-forcen. Een rainbowtable maken voor één database kan nog interessant zijn, maar voor iedere gebruiker brute-forcen is bijna nooit zinvol. Daarnaast zorg je ervoor dat dezelfde wachtwoorden in de tabel niet als zodanig te herkennen zijn.
Iemand die er moeite in steekt om jouw database te gaan bruteforcen wil vast wel de moeite nemen om die extra check er ook bij te nemen. Ik weet niet hoeveel salts je gebruikt verder maar dat moet n flink aantal zijn wil het niet meer rendabel worden voor iemand om even die extra slag erin te bouwen.

Acties:
  • 0 Henk 'm!

  • CMG
  • Registratie: Februari 2002
  • Laatst online: 10-12-2024

CMG

Ik zou stoppen met MD5 als het op security en consequences aan komt. Maak liever gebruik van een one way hash functie (e.g.: string -> hash waarbij de hash niet terug is om te zetten in de originele string). Zelf hoef je het wachtwoord niet te weten, je hoeft alleen maar te weten of het wachtwoord klopt, niet wat het wachtwoord is. Lees bijv. eens een artikel als http://www.cs.bham.ac.uk/...curity/lectures/hash.html

NKCSS - Projects - YouTube


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
CMG schreef op woensdag 12 november 2008 @ 01:33:
Ik zou stoppen met MD5 als het op security en consequences aan komt. Maak liever gebruik van een one way hash functie (e.g.: string -> hash waarbij de hash niet terug is om te zetten in de originele string).
Wat denk je dat MD5 is :? Dat er voor MD5 inmiddels wat "kleinigheidjes" zijn opgedoken en dat je het eventueel op basis daarvan afraadt, best. Maar wat je hier verkoopt is klinkklare onzin. MD5 is nog prima bruikbaar voor dingen die geen 'hi-security' nodig hebben zoals een forumpje of iets dergelijks.

Overigens komt in jouw artikel ook MD5 aan bod; sterker: het gaat voornamelijk over MD5...

[ Voor 40% gewijzigd door RobIII op 12-11-2008 01:47 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

CMG schreef op woensdag 12 november 2008 @ 01:33:
Ik zou stoppen met MD5 als het op security en consequences aan komt. Maak liever gebruik van een one way hash functie (e.g.: string -> hash waarbij de hash niet terug is om te zetten in de originele string). Zelf hoef je het wachtwoord niet te weten, je hoeft alleen maar te weten of het wachtwoord klopt, niet wat het wachtwoord is. Lees bijv. eens een artikel als http://www.cs.bham.ac.uk/...curity/lectures/hash.html
Ga je het zelf eerst even lezen zodat je ook een idee hebt waar je over praat? :D

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Even vooraf: ik dacht altijd dat het gewoon niets hielp om sha1 en md5 gecombineerd te gebruiken, maar ik wist niet dat het geheel er zwakker van werd en ik vraag me nu af waarom dat zo is.
curry684 schreef op dinsdag 11 november 2008 @ 22:37:
Het is echter doordat er een vernietigende berekening wordt gedaan ondenkbaar dat de eerste 2^128 mogelijkheden zullen leiden tot 2^128 unieke hashes. Hieruit volgt dus dat de namespace kleiner wordt met iedere hash-slag omdat je de input-namespace beperkt en er dus clashes zullen gaan missen.
OK, dat is de theorie achter de birthday atack:
the expected number of N-bit hashes that can be generated before getting a collision is not 2^N, but rather only 2^(N/2)
Iow, als je stelt dat een password 8 tot 12 karakters lang moet zijn en alleen letters en cijfers mag bevatten reduceer je de input tot (62^8+62^9+62^10+62^11+62^12) mogelijkheden. Zodra je over dit password een md5 haalt heb je (62^8+62^9+62^10+62^11+62^12 minus clashes) mogelijkheden.
Dat wachtwoord heeft ~62^12 = 3.2*10^21 mogelijkheden. Er moeten 2^64 = 1.8*10^19 md5 hashes berekend worden voor je een collision vindt en in die zin is de namespace kleiner: je hoeft een factor 175 minder lang te zoeken. Maar als je een string zoekt die een specifieke hash oplevert, dan gaat de birthday attack niet op. Gegeven dat er voor ieder wachtwoord 10^17 hashes zijn: is de hoeveelheid "minus clashes" dan niet verwaarloosbaar klein?

Wie trösten wir uns, die Mörder aller Mörder?


  • koffie-junk
  • Registratie: Juni 2006
  • Laatst online: 08-11-2022
martijnve schreef op dinsdag 11 november 2008 @ 22:34:
[...]

Is het dan niet gewoon zo sterk als de zwakste-schakel?
Ik gebruik zelf in mn laatste project meerdere hashes paralel.
hash = md5($pass . $saltA) . sha1($pass . $saltB);
Daardoor wordt het welliswaar niet moeilijker om het wachtwoord te achterhalen, maar wel om een collission te vinden.
[...]
offtopic:
En wat als je die twee strings door elkaar gooit? dus:

$deel1 = md5($pass . $salt1);
$deel2 = sha1($pass . $salt2);

Stel:

$deel1 = "aaaa";
$deel2 = "bbbb";

$hash = "abababab";

Volgens mij kan je er dan helemaal niks meer mee.

specs - home


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

koffie-junk schreef op donderdag 13 november 2008 @ 08:29:
En wat als je die twee strings door elkaar gooit?
Dat is geen security, maar obscurity. Zoals iemand eerder stelde: wie toegang tot de database heeft verkregen, kan net zo goed toegang tot de sourcecode krijgen. Dit soort truukjes maken het niet extra veilig.

Het idee van salting is sowieso niet dat je het doet met iets dat bij de aanvaller onbekend is, maar dat daarmee 'rainbow table' aanvallen voorkomt. Zoals Bruce Schneier in boek 'Applied cryptography' stelt: security is niet de brandkast die verstopt is en waarvan het slotmechanisme geheim is: security is de brandkast waarvan het complete ontwerp en de locatie bij de aanvaller bekend is en waar al honderden aanvallen van experts op afgeketst zijn.

Wie trösten wir uns, die Mörder aller Mörder?


  • Data-base
  • Registratie: Maart 2007
  • Laatst online: 07-09 10:33
Cartman! schreef op dinsdag 11 november 2008 @ 21:50:
Als je iemand zn wachtwoord in een cookie zet is je systeem gewoon fout inderdaad. Ik kan me ook totaal niet vinden in de praat van data-base. Encryptie voor je wachtwoorden, wtf? Iemand die bij je db kan heeft 9 v'/d 10 keer ook toegang tot de rest van je code en daar staat...jawel..de key om de wachtwoorden te decrypten :+
Ik blijf er toch bij dat encryptie gebruikt kan worden voor login systemen. Want stel je het volgende versimpelde scenario voor. Je hebt een tabel met user en daarin staat de username en de ge-encrypte username (met de wachtwoord van de gebruiker als key). Wanneer de gebruiker in wil loggen stuurt hij zijn username ge-encrypt met zijn wachtwoord als key. Als de ge-encrypte username matcht met de ge-encrypte username in de database, inloggen. Anders niet inloggen.
Als je encryptie-algoritme goed bestand is tegen een KPA, is zoiets vele malen moeilijker om te breken dan een md5hash, ook al bevat de hash een salt.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Confusion schreef op woensdag 12 november 2008 @ 08:08:
Even vooraf: ik dacht altijd dat het gewoon niets hielp om sha1 en md5 gecombineerd te gebruiken, maar ik wist niet dat het geheel er zwakker van werd en ik vraag me nu af waarom dat zo is.
Het is ook maar geneuzel in de marge natuurlijk, die paar extra collisions. Wmb rond je die paar miljoenste procent rustig af van 'zwakker maken' tot 'niets helpen' ;)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Data-base schreef op donderdag 13 november 2008 @ 23:23:
[...]

Ik blijf er toch bij dat encryptie gebruikt kan worden voor login systemen. Want stel je het volgende versimpelde scenario voor. Je hebt een tabel met user en daarin staat de username en de ge-encrypte username (met de wachtwoord van de gebruiker als key). Wanneer de gebruiker in wil loggen stuurt hij zijn username ge-encrypt met zijn wachtwoord als key. Als de ge-encrypte username matcht met de ge-encrypte username in de database, inloggen. Anders niet inloggen.
Als je encryptie-algoritme goed bestand is tegen een KPA, is zoiets vele malen moeilijker om te breken dan een md5hash, ook al bevat de hash een salt.
Dan hou je toch nog steeds als iemand toegang heeft tot je code dat ie simpelweg de wachtwoorden kan decrypten? En je hebt het enkel over md5, maar wat denk je dan van sha256 en whirlpool bijv? 256-bit hashes.

Acties:
  • 0 Henk 'm!

  • Toolskyn
  • Registratie: Mei 2004
  • Laatst online: 22-06 11:01

Toolskyn

€ 500,-

Cartman! schreef op vrijdag 14 november 2008 @ 12:20:
[...]

Dan hou je toch nog steeds als iemand toegang heeft tot je code dat ie simpelweg de wachtwoorden kan decrypten? En je hebt het enkel over md5, maar wat denk je dan van sha256 en whirlpool bijv? 256-bit hashes.
Euhm nee natuurlijk niet, als je het wachtwoord dus niet opslaat, maar in plaats daarvan de username met encryptie opgeslagen, met als key je wachtwoord, dan weet je natuurlijk niet wat de key is, dus kan je als aanvaller in principe niets uithalen. De vraag is wel wat je hiermee bent opgeschoten. Eventjes er vanuit gaande dat er geen 'slimme' manier is voor zowel hashes als de vorm van encryptie die je gebruikt dan ben je nog steeds puur afhankelijk van de snelheid van je algoritme...

gewooniets.nl


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Toolskyn schreef op vrijdag 14 november 2008 @ 15:21:
[...]
Euhm nee natuurlijk niet, als je het wachtwoord dus niet opslaat, maar in plaats daarvan de username met encryptie opgeslagen, met als key je wachtwoord, dan weet je natuurlijk niet wat de key is, dus kan je als aanvaller in principe niets uithalen. De vraag is wel wat je hiermee bent opgeschoten.
De vraag is eerder hoe diep je in de penarie zit :P Hoe weet je nou of een gebruikersnaam uniek is? En hoe krijg je een lijst van alle gebruikers? Om maar eens wat te noemen...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Toolskyn
  • Registratie: Mei 2004
  • Laatst online: 22-06 11:01

Toolskyn

€ 500,-

RobIII schreef op vrijdag 14 november 2008 @ 15:24:
[...]

De vraag is eerder hoe diep je in de penarie zit :P Hoe weet je nou of een gebruikersnaam uniek is? En hoe krijg je een lijst van alle gebruikers? Om maar eens wat te noemen...
Euhm je slaat natuurlijk daarnaast gewoon de plain username op, anders kun je natuurlijk nooit controleren of de decryptie is gelukt. ;)

gewooniets.nl


Acties:
  • 0 Henk 'm!

  • Razr
  • Registratie: September 2005
  • Niet online
Toevallig ben ik zelf ook een een tijdje met deze vraagstelling bezig geweest. Ik heb dan ook op mijn kersverse nieuwe blog hierover iets proberen te schrijven (dit is niet bedoeld als spam oid :+ ) ik denk dat het goed aansluit op de vraagstelling hier. Als mensen het willen lezen hier klikken.

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Toolskyn schreef op vrijdag 14 november 2008 @ 15:34:
[...]
Euhm je slaat natuurlijk daarnaast gewoon de plain username op, anders kun je natuurlijk nooit controleren of de decryptie is gelukt. ;)
Dan heb je dus hetzelfde princiepe als een pw + salt...
Pagina: 1