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.
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:
En hier een hash van slechts 4 tekens, met UTF-8 characterset:
98c3fb05726ecc2c96153ec6e4bf2895
Bedoel je hier letterlijk álle karakters mee, dus ook de éáí e.d.?
[quote="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().
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.
[/quote]
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!
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:
En hier een hash van slechts 4 tekens, met UTF-8 characterset:
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 ????
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!
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.
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!!
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.
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):
[b]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.[b]
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.
Wat wil je hier mee zeggen? Raad ik hier ergens aan om DES of MD5 te gebruiken? crypt ondersteunt ook gewoon sha vriend.