Welke beveiliging voor mijn wachtwoorden?
Quote:
En hier een hash van slechts 4 tekens, met UTF-8 characterset:
98c3fb05726ecc2c96153ec6e4bf2895
98c3fb05726ecc2c96153ec6e4bf2895
Bedoel je hier letterlijk álle karakters mee, dus ook de éáí e.d.?
John Berg op 20/08/2012 10:36:08:
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.
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.
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.
Anders zoek er nog wat berichten van 6 jaar oud bij! Je link is van 28-08-2006.
Met jou methode is collision gewoon veel voorkomender, en waarom? Dat is heel makkelijk.
Mensen die site's gebruiken zoals die link wordt het niet alleen omgezet, maar ook gelijk toegevoegd aan een database. Dus jou mooie dubbele MD5 kan zomaar ook 'iamgod' betekenen of iets dergelijks. Z'n databases zoeken of de hash voorkomt in hun database, en zoja welke plaintext daar aan vast hangt. Dit kan zomaar iets heel anders zijn dan jij gemaakt hebt, dit wordt bedoeld met collision.
Maarja ik ga niet tegen een muur praten, MD5 kan gewoon gebruikt worden, echter raad ik en sommige andere mede forum leden dit niet aan. Ga naar nieuwere modellen.
En je mooie post van de sha() in principe gehacked is leuk, maar met een goede salt en pepper lukt dat natuurlijk ook niet!
Gewijzigd op 20/08/2012 11:05:58 door Chris PHP
Chris op 20/08/2012 11:03:01:
John, je berekeningen kloppen gewoon en ik ben het met je eens dat MD5 in sommige gevallen wel degelijk veilig is. Kun je me meer info geven over de string van 4 karakters? Je geeft aan:
Bedoel je hier letterlijk álle karakters mee, dus ook de éáí e.d.?
Quote:
En hier een hash van slechts 4 tekens, met UTF-8 characterset:
98c3fb05726ecc2c96153ec6e4bf2895
98c3fb05726ecc2c96153ec6e4bf2895
Bedoel je hier letterlijk álle karakters mee, dus ook de éáí e.d.?
Natuurlijk, het is utf-8. Er zijn dus ook multi byte combi's mogelijk. Tja .. en utf-8 chars kunnen 1,2 of 3 bytes lang zijn .. Dus €ö@! is een geldige 4 char utf-8 string.
Ik wilde een voorbeeld geven, maar het forum accepteerd helaas geen UTF-8 chars. De editor wel, maar als je dan post komen er ????
linkje met voorbeeld van 3 chars http://translate.google.nl/#nl/zh-TW/vrede
Gewijzigd op 20/08/2012 11:28:55 door John Berg
Pfoe, dan wordt het best lastig ja ;-) Hépíng zelf zou nog wel lukken, maar met de chinese karakters zelf wordt het ondoenlijk haha!
Chris op 20/08/2012 11:40:55:
Pfoe, dan wordt het best lastig ja ;-) Hépíng zelf zou nog wel lukken, maar met de chinese karakters zelf wordt het ondoenlijk haha!
Het waren russische chars, de plain text was € + het russisch van vrede. ;-)
Waar het om ging, als je 4 char utt chars als salt gebruikt moet je in beginsel alle 256 chars berekenen, en dan uitgaan van 12 bytes.
Dat geeft 256^12 mogelijkheden = 7,9 x 10^28 .. zelfs als je 1 miljard hashes per seconde kunt berekenen (wat sommige GPU's claimen te kunnen, nooit bewijs gezien) dan duurt het nog steeds 2,5 triljoen jaar om alle combinaties door te rekenen :-)))
n.b. Het opnemen van een UTF-8 teken, zoals € of ? (griekse P ) in je password doet de veiligheid dus enorm toenemen. TIP!
Gewijzigd op 20/08/2012 12:02:03 door John Berg
Enorm bedankt voor de berichten en informatie. Ik heb nu bijna alleen berichten gezien die over de veiligheid van MD5 gaan. zouden jullie misschien ook nog voor/nadelen kunnen noemen van Sha1 en bijv bcrypt?(kan ik alle manieren met elkaar afwegen). Ik wil graag een beveiliging opstellen die nog een poos mee kan gaan.
alvast thx!!
Sander Heuv op 20/08/2012 12:39:34:
Wow zeg, toen ik zojuist ging kijken of ik al wat reacties had gekregen op mijn topic, leek het net of er oorlog was uitgebroken :P
Enorm bedankt voor de berichten en informatie. Ik heb nu bijna alleen berichten gezien die over de veiligheid van MD5 gaan. zouden jullie misschien ook nog voor/nadelen kunnen noemen van Sha1 en bijv bcrypt?(kan ik alle manieren met elkaar afwegen). Ik wil graag een beveiliging opstellen die nog een poos mee kan gaan.
alvast thx!!
Enorm bedankt voor de berichten en informatie. Ik heb nu bijna alleen berichten gezien die over de veiligheid van MD5 gaan. zouden jullie misschien ook nog voor/nadelen kunnen noemen van Sha1 en bijv bcrypt?(kan ik alle manieren met elkaar afwegen). Ik wil graag een beveiliging opstellen die nog een poos mee kan gaan.
alvast thx!!
Ik denk dat de moraal van het verhaal er eigenlijk op neer komt dat het niet zoveel uitmaakt welk (bekend) algoritme je voor de versleuteling gebruikt.
Belangrijker is het dat je password gesalt wordt met een voldoende lange string, die waar mogelijk multibyte characters bevat.
En wat totaal onderbelicht is gebleven, als een hacker de hashes niet kan bemachtigen valt er ook niks te kraken. Zou je je password in een msql database opslaan en je kiest voor de mysqli driver dan ben je veel gevoeliger voor SQL injection (en dus het verlies van hashes aan hackers) dan wanneer je de pdo_mysql driver met parameter binding gebruikt.
crypt() te gaan. Kijk op de site voor gebruik en voorbeelden.
Ik raad je aan om voor Chris NVT op 20/08/2012 12:50:13:
Ik raad je aan om voor crypt() te gaan. Kijk op de site voor gebruik en voorbeelden.
Haha .. grapjes. Uit het linkje dat je gaf (2e regel):
Some operating systems support more than one type of hash. In fact, sometimes the standard DES-based algorithm is replaced by an MD5-based algorithm.
John Berg op 20/08/2012 12:56:40:
Haha .. grapjes. Uit het linkje dat je gaf (2e regel):
Some operating systems support more than one type of hash. In fact, sometimes the standard DES-based algorithm is replaced by an MD5-based algorithm.
Some operating systems support more than one type of hash. In fact, sometimes the standard DES-based algorithm is replaced by an MD5-based algorithm.
Wat wil je hier mee zeggen? Raad ik hier ergens aan om DES of MD5 te gebruiken? crypt ondersteunt ook gewoon sha vriend.
Gewijzigd op 20/08/2012 13:00:02 door Chris PHP
Chris NVT op 20/08/2012 12:58:56:
Wat wil je hier mee zeggen? Raad ik hier ergens aan om DES of MD5 te gebruiken? crypt ondersteunt ook gewoon sha vriend.
John Berg op 20/08/2012 12:56:40:
Haha .. grapjes. Uit het linkje dat je gaf (2e regel):
Some operating systems support more than one type of hash. In fact, sometimes the standard DES-based algorithm is replaced by an MD5-based algorithm.
Some operating systems support more than one type of hash. In fact, sometimes the standard DES-based algorithm is replaced by an MD5-based algorithm.
Wat wil je hier mee zeggen? Raad ik hier ergens aan om DES of MD5 te gebruiken? crypt ondersteunt ook gewoon sha vriend.
Vriend .. ik raad je aan om dat wat in het linkje staat eens goed te lezen. De Crypt() functie gebruikt een algoritme dat afhankelijk is van de libraries die op het host systeem staan. Als je Crypt gebruikt weet je vooraf niet welk algoritme hij zal gebruiken, tenzij je zelf de host beheert en een algoritme dwingend oplegt!!
Lekker om iets te beveiligen waarbij je vooraf niet weet welk algoritme het systeem zal gebruiken. Het wordt vast ik zeker heel veilig wat je gaat maken.
John Berg op 20/08/2012 13:04:14:
Vriend .. ik raad je aan om dat wat in het linkje staat eens goed te lezen. De Crypt() functie gebruikt een algoritme dat afhankelijk is van de libraries die op het host systeem staan. Als je Crypt gebruikt weet je vooraf niet welk algoritme hij zal gebruiken, tenzij je zelf de host beheert en een algoritme dwingend oplegt!!
Lekker om iets te beveiligen waarbij je vooraf niet weet welk algoritme het systeem zal gebruiken. Het wordt vast ik zeker heel veilig wat je gaat maken.
Chris NVT op 20/08/2012 12:58:56:
Wat wil je hier mee zeggen? Raad ik hier ergens aan om DES of MD5 te gebruiken? crypt ondersteunt ook gewoon sha vriend.
John Berg op 20/08/2012 12:56:40:
Haha .. grapjes. Uit het linkje dat je gaf (2e regel):
Some operating systems support more than one type of hash. In fact, sometimes the standard DES-based algorithm is replaced by an MD5-based algorithm.
Some operating systems support more than one type of hash. In fact, sometimes the standard DES-based algorithm is replaced by an MD5-based algorithm.
Wat wil je hier mee zeggen? Raad ik hier ergens aan om DES of MD5 te gebruiken? crypt ondersteunt ook gewoon sha vriend.
Vriend .. ik raad je aan om dat wat in het linkje staat eens goed te lezen. De Crypt() functie gebruikt een algoritme dat afhankelijk is van de libraries die op het host systeem staan. Als je Crypt gebruikt weet je vooraf niet welk algoritme hij zal gebruiken, tenzij je zelf de host beheert en een algoritme dwingend oplegt!!
Lekker om iets te beveiligen waarbij je vooraf niet weet welk algoritme het systeem zal gebruiken. Het wordt vast ik zeker heel veilig wat je gaat maken.
=.= voordat je nu nog meer gaat roepen, kijk eens naar de eerste voorbeelden. Ik zal ze hieronder zetten voor je.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
/* These salts are examples only, and should not be used verbatim in your code.
You should generate a distinct, correctly-formatted salt for each password.
*/
if (CRYPT_STD_DES == 1) {
echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n";
}
if (CRYPT_EXT_DES == 1) {
echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n";
}
if (CRYPT_MD5 == 1) {
echo 'MD5: ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n";
}
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";
}
if (CRYPT_SHA256 == 1) {
echo 'SHA-256: ' . crypt('rasmuslerdorf', '$5$rounds=5000$usesomesillystringforsalt$') . "\n";
}
if (CRYPT_SHA512 == 1) {
echo 'SHA-512: ' . crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$') . "\n";
}
?>
/* These salts are examples only, and should not be used verbatim in your code.
You should generate a distinct, correctly-formatted salt for each password.
*/
if (CRYPT_STD_DES == 1) {
echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n";
}
if (CRYPT_EXT_DES == 1) {
echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n";
}
if (CRYPT_MD5 == 1) {
echo 'MD5: ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n";
}
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";
}
if (CRYPT_SHA256 == 1) {
echo 'SHA-256: ' . crypt('rasmuslerdorf', '$5$rounds=5000$usesomesillystringforsalt$') . "\n";
}
if (CRYPT_SHA512 == 1) {
echo 'SHA-512: ' . crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$') . "\n";
}
?>
Zo gebruik je crypt, niemand gebruikt crypt zonder aan te geven welke methode hij wil gebruiken. Ik ga hier nu niet verder in discussie, aangezien dit niet mijn topic is.
Om op dat laatste nog even door te gaan... Je berekeningen zijn wellicht correct, ik heb ze niet gecontroleerd. Alleen voor zover ik ze bekeken heb, ga je er altijd vanuit dat een hacker maar 1 machine gebruikt. Dat is niet erg realistisch... Er zijn in het verleden al enorme botnets blootgelegd. Ik zeg niet dat deze daarom voor een MD5 te kraken gebruikt worden (lijkt me eerder uitzonderlijk), maar het zou wel kunnen. Ik herinner me bijvoorbeeld nog het Grum botnet, dat maar liefst (even gegoogeled) 560 000 840 000 'slachtoffers' had.
Of MD5 nu lastig te kraken is of niet, ik vind het naïef wanneer je beweerd dat MD5 de beste oplossing is. Er zijn nu eenmaal sterkere algoritmes beschikbaar. Waarom zou je dan ook niet gebruiken? Dit is ook eerder het punt dat ik wou maken en wellicht ook Chris.
Code (php)
Wat ik in feite heb gedaan is een sha1 encryptie over het wachtwoord gedaan, een md5 encryptie over de gebruikersnaam gedaan (wat dus de salt moet worden), en vervolgens een random getal ingevoerd als pepper. vervolgens dit achter elkaar geplaatst.
als jullie hier een oordeel over kunnen vellen zou dat nice wezen.
alvast bedankt!
Gewijzigd op 21/08/2012 20:47:10 door Sander Heuv
maar ik zou hellemaal geen md5 meer gebruiken.
ik zou het dan zo doen:
(met eventueel nog een salt erbij)
Je kan dan beter ipv dat random getal een vaste waarde pakken en daar een leuke berekening op los laten. Voorbeeld: Gebruikers registratie datum van de gebruiker en daar 1000 dagen vanaf halen dan heb je gelijk een leuke pepper
Het is de bedoeling dat je de salt in de sha1 stopt.
Dit lijkt me meer dan voldoende:
Code (php)
1
2
3
4
2
3
4
<?php
$salt = "l81hb42asv52"; <-- heb ik ff veranderd ofc :P
$wachtwoordhash = sha1( $salt . $_POST['wachtwoord'] );
?>
$salt = "l81hb42asv52"; <-- heb ik ff veranderd ofc :P
$wachtwoordhash = sha1( $salt . $_POST['wachtwoord'] );
?>
Gewijzigd op 21/08/2012 23:31:14 door John Berg