Welke beveiliging voor mijn wachtwoorden?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Sander Heuv

Sander Heuv

19/08/2012 22:44:51
Quote Anchor link
Hallo allemaal,

Ik ben de laatste tijd bezig met een eigen projectje waarbij ik OOP PHP probeer te leren. Maar nu kom ik dus tegen het volgende probleempje aan. Ik ben nog niet erg bekend met het beveiligen van wachtwoorden (Alleen MD5 ben ik bekend mee, maar dat is achterhaald heb ik begrepen (iig zonder salt)). Mijn vraag is dus: welke manier kan ik het beste gebruiken om mijn wachtwoorden op te slaan?

ik heb op het forum al verschillende technieken langs zien komen, zoals:

Sha1 + salt
crypt methode
en de bcrypt class (wat mij wel een goede oplossing lijkt vanwege het automatisch Salten, en het vertragen van brute force aanvallen).


Mijn 2de vraag is eigenlijk het volgende.

als ik een wachtwoord op welk van de bovenstaande manieren beveilig, welke manier kan ik dan het beste gebruiken om de input van het inlogformulier te vergelijken met de data in de database? dit omdat Salt random is.

alvast enorm bedankt voor de hulp!
 
PHP hulp

PHP hulp

24/11/2024 23:14:38
 
John Berg

John Berg

19/08/2012 23:10:01
Quote Anchor link
Een MD5($pass) is niet helemaal veilig omdat er woordenboeken bestaan waarin je de hash kunt opzoeken en zo het originele password kunt verkrijgen.

Dit is wel veilig:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
define( 'MY_SECRET', 'AS@LT_#RAN31' );
$passhash = MD5( MY_SECRET . $pass);


Van MY_SECRET moet je uiteraard zelf iets maken, bij voorkeur 9 tekens of meer, met ook cijfers en rare chars erin.

De passhash sla je op in de database, en als je wil checken of iemand het juiste wachtwoord geeft vergelijk je de database waarde met de $passhash.

Waarom zou je het moeilijk maken, als het ook eenvoudig kan?
Gewijzigd op 19/08/2012 23:19:51 door John Berg
 
Write Down

Write Down

19/08/2012 23:28:08
Quote Anchor link
John Berg:
Waarom zou je het moeilijk maken, als het ook eenvoudig kan?


Omdat dit nog te makkelijk is...

Gebruik toch op zijn minst sha1 i.p.v. md5. Er zijn decoders in het donkere milieu te vinden die gelijk welke md5 kraken. Overigens is het verstand de salt (MY_SECRET) eerder iets meer afhankelijk te maken van de combinatie.
 
John Berg

John Berg

19/08/2012 23:45:15
Quote Anchor link
Write Down op 19/08/2012 23:28:08:
John Berg:
Waarom zou je het moeilijk maken, als het ook eenvoudig kan?


Omdat dit nog te makkelijk is...

Gebruik toch op zijn minst sha1 i.p.v. md5. Er zijn decoders in het donkere milieu te vinden die gelijk welke md5 kraken. Overigens is het verstand de salt (MY_SECRET) eerder iets meer afhankelijk te maken van de combinatie.


Broodje aap verhaal dat MD5 gekraakt is, er zijn alleen dictonaries met bekende hashes en hun originele waarde. Als je hash maar afstamt van een string die lang genoeg is (10 karakters of meer) is hij niet meer terug te zoeken.

nb: uitgaande van een ascii character set en 10 tekens dient je woordenboek 256^10 entries van 32 bytes te bevatten wat neerkomt op 3,5 10^13 PetaBytes. Duurt nog even voordat we zuke grote harde schijven hebben.
Gewijzigd op 19/08/2012 23:52:10 door John Berg
 
Write Down

Write Down

19/08/2012 23:48:02
Quote Anchor link
Niet dus... Ik ga hier geen links posten naar underground forums, maar geloof mij, md5 lachen hackers mee. Uiteraard, als het te kraken is via een rainbow table, gaat het nog sneller.
 
John Berg

John Berg

19/08/2012 23:59:28
Quote Anchor link
Write Down op 19/08/2012 23:48:02:
Niet dus... Ik ga hier geen links posten naar underground forums, maar geloof mij, md5 lachen hackers mee. Uiteraard, als het te kraken is via een rainbow table, gaat het nog sneller.


Er is geen enkel bewijs, behalve hash collisions, dat MD5 via brute force te kraken is.
http://nl.wikipedia.org/wiki/MD5

Ik daag je uit om deze hash deedd61c041810a9a8f2e5e4e17c50e1 via je underground te kraken. NO WAY!
 
Chris -

Chris -

20/08/2012 00:17:23
Quote Anchor link
John, met behulp van een juiste hash/pepper is het goed mogelijk dat je strings kan maken die niet in de rainbowtabellen terug te vinden zijn. Betekend niet dat het onmogelijk is om de juiste combinatie terug te vinden door middel van een brute-force aanval of een rainbow tabel. Als je puur letters, cijfers en speciale tekens heb gebruikt voor bovenstaande hash, en je het aantal karakters doorgeef, is het goed mogelijk om het origineel te vinden. Ik heb hiervoor een zeer specifieke methode ontwikkeld die snel en krachtig werkt, enige probleem is de schijfruimte. Toch ga ik graag jouw uitdaging aan. Geef me het aantal karakters in totaal en of je wel of geen andere methodes heb gebruikt en ik ga kijken of ik je in een fair enough time de juiste string kan geven :)
 
John Berg

John Berg

20/08/2012 00:34:55
Quote Anchor link
De string bestaat uit 22 tekens. Ik help je nog verder: Alleen het eerste teken is een hoofdletter, alle andere tekens behalve de laatste zijn kleine letters. Het laatste teken is een uitroepteken. De string bestaat uit 4 woorden, het derde woord is fout gespeld.

Ik ben zeer benieuwd: een kratje bier voor je als je hem weet te kraken.
 
G P

G P

20/08/2012 00:53:39
Quote Anchor link
MD5 => tekst: Klik Hier
 
Chris -

Chris -

20/08/2012 00:54:07
Quote Anchor link
John, het is nu 0:54 dat ik dit lees en uitvoer. BRB :-)

Toevoeging op 20/08/2012 01:03:07:

Overigens Gunther, die website kan'm ook niet vinden ;-)
Even misgelezen dat de laatste karakter een uitroep teken is, opnieuw haha!
 
John Berg

John Berg

20/08/2012 01:16:58
Quote Anchor link
Lees mijn recactie nog eens na over hoeveel schijfruimte je nodig heb om een rainbow tabel te maken van 10 tekens! Ik wil ook nog wel een hash van een plain text van 10 tekens plaatsen, 2 kratjes bier voor wie hem vind.

Ik blijf erbij dat md5, mits de plaintext voldoende lang is, niet te kraken is. Ook niet door NSA of andere geheime diensten. En dan moet je de hash natuurlijk ook nog bemachtingen, die zit in een datbase, die niet vanaf het net te benaderen is, maar allen via http over poort 80.
Gewijzigd op 20/08/2012 01:25:21 door John Berg
 
Chris -

Chris -

20/08/2012 01:29:53
Quote Anchor link
John, die van 10 tekens is een stuk sneller (hoewel 't mij niet gaat om 't kratje bier ;-)). Zet 'm maar neer, als jij verteld met welke karakters het precies is zal ik 'm proberen te bruteforcen.

Edit; als toevoeging op wat je net zei. Zolang het lang genoeg is, is het inderdaad aan de veilige kant. Er zijn echter een hoop ontwikkelaars die het wachtwoord van 10 karakters gewoon in MD5 zetten en hopen dat het veilig genoeg is. En dát is het probleem, dat is niet veilig genoeg!

Toevoeging op 20/08/2012 02:13:45:

Hm. Resultaten zijn niet zoals gewenst, heb m'n krachtigere pc nu niet bij de hand. Haalde om en nabij de 1085 hashes per seconde, maar kan sneller. Zal 'm voor ffies laten draaien. Échte start (had wat hickups) van de bruteforce, 02:08. Sleep tight!
Gewijzigd op 20/08/2012 01:31:02 door Chris -
 
John Berg

John Berg

20/08/2012 09:12:02
Quote Anchor link
Ik zal het nog eens voorrekenen:
Stel je krijgt e.e.a. nog opgevoerd, en je kunt op 10.000 hashes per seconde komen (factor 10 sneller dus) en je weet dat de plaintext alleen uit hoofd- en kleine letters bestaat dan kun je uitrekenen hoelang het duurt om alle hashes te berekenen:

Totaal hashes 64^10 = 1,15 * 10^18
Totale tijd: 1,15 * 10^18 / 10.000 = 1,15 * 10^14 seconden.

Gemiddeld vind je de oplossing na 50% van de tijd hetgeen neerkomt op 667 dagen oftewel ongeveer 2 jaar. Als je pech hebt worden het 4 jaar.
Onderstaande hash van 10 chars ascii vind je gemiddeld na 504 miljoen jaar, moet je wel e.e.a. opgevoerd krijgen tot 10.000 hashes per seconden anders worden het 5040 miljoen jaar.

Maar goed, hier een hash van 10 chars, ascii characterset (dus tussen #32 en #255):
3ff1e4fc0e461f432fcadfe5a640a5fd

En hier een hash van slechts 4 tekens, met UTF-8 characterset:
98c3fb05726ecc2c96153ec6e4bf2895

2 kratjes bier voor wie de plaintext weet te vinden.

n.b. Als je echt paranoia bent gebruik je dit om je passwords op te slaan, dan is het ECHT helemaal klaar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
define( 'MY_SECRET', 'AS@LT_#RAN31' );
$passhash = MD5( MD5( MY_SECRET . $pass) );
Gewijzigd op 20/08/2012 09:20:23 door John Berg
 
Chris PHP

Chris PHP

20/08/2012 09:45:23
Quote Anchor link
een MD5 over een MD5? Waarom raad je dat aan? Heeft weinig nut.
 
John Berg

John Berg

20/08/2012 10:00:57
Quote Anchor link
Chris NVT op 20/08/2012 09:45:23:
een MD5 over een MD5? Waarom raad je dat aan? Heeft weinig nut.


Noem het maar weinig nut!! Eerst moet je de hash ontcijferen en krijg je een nieuwe hash, waarvan je nooit zult weten of je de juiste hebt. Je kunt d.m.v. brute force dus wel alle sleutels terugrekenen, maar je weet nooit of je hem daadwerkelijk gevonden hebt. En als je denkt hem gevonden te hebben, moet je daarna de plaintext proberen te vinden.

In beginsel kwadrateert hierdoor de oplos tijd, 5000 miljoen jaar wordt ineens 25.000.000 miljoen jaar ;-)

Praktijk voorbeeld: Je PIN code staat op je bankpas d.m.v. DES encryptie. Bij DES is de sleutel lengte maar 56 bits, en op een gegeven moment is besloten om DES te vervangen door Triple DES. Dus DES(DES(DES())) En daarmee was het probleem weer uit de wereld.
Gewijzigd op 20/08/2012 10:05:11 door John Berg
 
- Ariën  -
Beheerder

- Ariën -

20/08/2012 10:04:15
Quote Anchor link
Plus dat je meer kans hebt op collissions als je vaker md5() gebruikt, bovenop elkaar.
 
John Berg

John Berg

20/08/2012 10:08:25
Quote Anchor link
- Aar - op 20/08/2012 10:04:15:
Plus dat je meer kans hebt op collissions als je vaker md5() gebruikt, bovenop elkaar.

Ik denk dat de kans om als je op straat loopt door een meteoriet "from outher space" geraakt te worden groter is.
 
Chris PHP

Chris PHP

20/08/2012 10:09:22
Quote Anchor link
John Berg op 20/08/2012 10:00:57:
Chris NVT op 20/08/2012 09:45:23:
een MD5 over een MD5? Waarom raad je dat aan? Heeft weinig nut.


Noem het maar weinig nut!! Eerst moet je de hash ontcijferen en krijg je een nieuwe hash, waarvan je nooit zult weten of je de juiste hebt. Je kunt d.m.v. brute force dus wel alle sleutels terugrekenen, maar je weet nooit of je hem daadwerkelijk gevonden hebt. En als je denkt hem gevonden te hebben, moet je daarna de plaintext proberen te vinden.

In beginsel kwadrateert hierdoor de oplos tijd, 5000 miljoen jaar wordt ineens 25.000.000 miljoen jaar ;-)

Praktijk voorbeeld: Je PIN code staat op je bankpas d.m.v. DES encryptie. Bij DES is de sleutel lengte maar 56 bits, en op een gegeven moment is besloten om DES te vervangen door Triple DES. Dus DES(DES(DES())) En daarmee was het probleem weer uit de wereld.


MD5 is verouderd en heeft zeer uitgebreide bruteforce databases. Wat Aar al zegt, de kans op collision met dubbele hashes wordt zo stukken groter. Gebruik gewoon SHA() met salt en peper of ga eens kijken naar crypt();

Ik raad zoiezo niet aan om MD5(); te gebruiken voor wachtwoorden, en zeker niet 2x een MD5 hash, kijk naar betere altenatieven.

Toevoeging op 20/08/2012 10:10:11:

John Berg op 20/08/2012 10:08:25:
- Aar - op 20/08/2012 10:04:15:
Plus dat je meer kans hebt op collissions als je vaker md5() gebruikt, bovenop elkaar.

Ik denk dat de kans om als je op straat loopt door een meteoriet "from outher space" geraakt te worden groter is.


Dat denk ik niet, je kunt binnen 10 minuten een MD5 hash achterhalen met de juiste database.
 
John Berg

John Berg

20/08/2012 10:13:14
Quote Anchor link
Ik zal het erbij laten, ik heb het nu 3x voorgerekend van diverse kanten. Als je het nu nog niet snapt is er weinig hoop.

Wat er bij niet in kan is dat er van alles geroepen wordt, zonder onderbouwing.

Ik heb 3 hashes gepost, en als het dan zo onveilig is, waarom krijgt niemand dat dan even opgelost? De laatste hash was maar 4 tekens (utf-8)!
Gewijzigd op 20/08/2012 10:16:28 door John Berg
 
Chris PHP

Chris PHP

20/08/2012 10:22:58
Quote Anchor link
John Berg op 20/08/2012 10:13:14:
Ik zal het erbij laten, ik heb het nu 3x voorgerekend van diverse kanten. Als je het nu nog niet snapt is er weinig hoop.

Wat er bij niet in kan is dat er van alles geroepen wordt, zonder onderbouwing.

Ik heb 3 hashes gepost, en als het dan zo onveilig is, waarom krijgt niemand dat dan even opgelost? De laatste hash was maar 4 tekens (utf-8)!


'Weinig hoop' Dat is wel een arrogante houding niet? Voordat je zulke uitlatingen doet moet je misschien eerst maar eens Google gebruiken en kijken waarom MD5 niet meer aan te raden is voor wachtwoorden.

Het gaat hier niet over goed of niet goed, het gaat hier om wat veiliger is, en dat is MD5 niet. Nogmaals zoals ik in mijn eerdere post al zij, kijk eens naar sha() met een salt en pepper of naar crypt().

Dit is van een vorige poster link.
Gewijzigd op 20/08/2012 10:24:31 door Chris PHP
 
John Berg

John Berg

20/08/2012 10:36:08
Quote Anchor link
Chris NVT op 20/08/2012 10:22:58:
Het gaat hier niet over goed of niet goed, het gaat hier om wat veiliger is, en dat is MD5 niet. Nogmaals zoals ik in mijn eerdere post al zij, kijk eens naar sha() met een salt en pepper of naar crypt().

Dit is van een vorige poster link.


Als ik google op "MD5 veilig", dan staat hier dat SHA "gekraakt" is, en MD5 nog steeds veilig. http://www.security.nl/article/14293/1/%22SHA-1_algoritme_in_principe_gekraakt%22.html

Het zal allemaal wel, veel geroep maar geen bewijs!

Oh ja. .. het linkje met de reverse hashing geeft voor alle 3 de opgeven hashes geen oplossing. Had ik ook niet verwacht.
Gewijzigd op 20/08/2012 10:39:55 door John Berg
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.