[security] wachtwoord/sleutel, hoeveel tekens?
Lang geleden heb ik ook ooit zoiets gevraagd, en toen had SanThe er volgens mij een tooltje voor gemaakt, maar ik kan het helaas niet meer terugvinden.
Anyhow ... mijn vraag is de volgende. Ik ben benieuwd hoeveel tekens er nodig zijn voordat een wachtwoord of (encryptie)sleutel (relatief) veilig is, waarbij ik de veiligheid in dit geval enkel laat afhangen van de tijd die het kost om een wachtwoord of sleutel te "raden". Tegenwoordig zijn computers veel sneller dan vroeger, speelt dat nog een rol?
Stel je encrypt een bestand met een sleutel. De (zelf te verzinnen) encryptiesleutel moet minimaal 8 en maximaal 20 tekens zijn. Stel nu dat Pietje een sleutel van 8 tekens invoert, en Jantje een sleutel van 20 tekens. Een kwaadwillende hacker weet ook dat de sleutel minimaal 8 en maximaal 20 tekens is. Hij hoeft dus niet te zoeken naar sleutels kleiner dan 8 of groter dan 20 tekens. Hoe lang is hij dan bezig om de sleutel van Pietje (8 tekens) en van Jantje (20 tekens) te vinden? Waarbij de hacker dus niet weet uit hoeveel tekens beide sleutels bestaan. Ik ga er vanuit dat ie eerst alle combinaties met 8 tekens zal proberen, en dat ie het wachtwoord van Pietje dus eerder te pakken zal hebben dan het wachtwoord van Jantje.
Oh ja, alle tekens op het toetsenbord kunnen gebruikt worden, dus (hoofd)letters, getallen en vreemde tekens als ! @ # $ enzovoorts.
Wie kan en vooral DURFT hier iets over te zeggen? Ik ben erg benieuwd namelijk! Zelf heb ik geen idee :)
Voor een wachtwoord met exact 8 tekens zijn dan 94^8 = 6095689385410816 combinaties mogelijk, voor een wachtwoord met exact 20 tekens zijn dat 94^20 = 2901062411314618233730627546741369470976 combinaties.
Stel dat je een miljoen combinaties per seconde kunt checken. Om alle mogelijkheden te proberen ben je dan voor een wachtwoord met 8 tekens 6095689385 seconden kwijt, oftewel 70552 dagen, oftewel ruim 193 jaar.
Heb je een wachtwoord van 20 tekens, dan duurt ben je met het checken van alle mogelijkheden 2901062411314618233730627546741369 seconden kwijt, oftewel 33577111242067340668178559568 dagen, oftewel ruim 91929120443716196216779081 jaar.
Statistisch gezien zul je slechts de helft van alle combinaties hoeven te proberen, maar dat is dan evengoed bijna 46 triljard jaar.
Toevoeging op 13/04/2015 19:02:14:
Stel nu dat je er een botnetje van maakt dat 1 miljard computers infecteert (die elk 1 miljoen combinaties per seconde kunnen checken).
Een wachtwoord van 8 tekens is dan in iets meer dan 6 seconden gekraakt (worst case). Voor een wachtwoord van 20 tekens heb je in het slechtste geval nog steeds 91929120443716196 (bijna 92 biljoen) jaar nodig.
Gewijzigd op 13/04/2015 18:57:54 door Willem vp
Dat zijn interessante berekeningen. Je kunt dus eigenlijk zeggen dat een wachtwoord van 8 tekens al wel veilig is, maar het kan geen kwaad om er nog een paar tekens bij te stoppen dus :)
Met zo'n botnet wordt het wel even een ander verhaal, maar ja ... ik acht de kans dat iemand een botnet maakt om mijn wachtwoord te kraken niet zo heel groot :-)
Overigens ben ik wel benieuwd. Een wachtwoord van 8 tekens doe je dus 193 jaar over, maar zou er ooit een tijd komen, bijv. over 10 jaar, dat computers dusdanig snel zijn dat het ineens minutenwerk wordt, of zijn zulke snelheden voor een enkele processor onhaalbaar?
Gewijzigd op 13/04/2015 20:53:03 door Ozzie PHP
Als het wachtwoord elke lengte tussen 8 en 20 tekens kan zijn, heb je 2932256630791119505061064336537627364096 combinaties, wat bij een miljoen combinaties per seconde uitkomt op ongeveer 92917605609777660692228316 jaar. Niet echt een noemenswaardig verschil dus. ;-)
> of zijn zulke snelheden voor een enkele processor onhaalbaar?
Nou, het schijnt dat een kwantumcomputer wel raad weet met dat soort wachtwoorden. Tegen de tijd dat die computers gemeengoed gaan worden, zullen we moeten gaan nadenken over een andere manier van beveiligen.
Gewijzigd op 13/04/2015 21:17:18 door Willem vp
Maar praten we dan over tientallen jaren denk je? Of zit over 5 jaar zo'n chip al in iedere smartphone? Ik ben overigens wel benieuwd wat voor andere manieren er dan overblijven om te beveiligen. Pasjes / fysieke kenmerken / onderhuidse chips ... het lijkt me allemaal niet echt ideaal. En het nadeel blijft dat het allemaal digitaal is, en dat het dus op de een of andere manier weer te kraken valt als de computers sneller worden. Best heel irritant eigenlijk.
Als je nú een hash van een wachtwoord opslaat, weet je inderdaad niet of die 180 jaar of maar 90 dagen meegaat. Je systeem moet dus ingesteld zijn op variabele wachtwoordhashes én wachtwoorden met een variabele uiterste houdbaarheidsdatum.
Je bedoelt dan variabel in de zin van een variabele lengte?
Tsja, moeilijk te zeggen. De ontwikkeling staat nog in de kinderschoenen, maar je weet nooit wanneer er een groeispurt komt.
> Ik ben overigens wel benieuwd wat voor andere manieren er dan overblijven om te beveiligen.
Nou, om te beginnen zullen de password-hashes moeten worden gegenereerd met andere algoritmes. Momenteel is de encryptie gebaseerd op grote priemgetallen, maar dat moet je opzij schuiven. Er zijn algoritmes die wél bestand zijn tegen een aanval door kwantumcomputers.
Verder zou je naar een meerstaps-autorisatiemechanisme moeten overstappen, zodat je ook niet zomaar iets kan wanneer je het wachtwoord hebt. Dus bijvoorbeeld na het invoeren van je wachtwoord een code per SMS/IM sturen die je moet invoeren om het inlogproces af te ronden.
Daar zat ik dus ook inderdaad aan te denken, maar dat wordt toch wel iets raars dan. Want dat wordt dus een extra stap waarop de luie consument niet echt zit te wachten. Zou je het nog zo kunnen maken dat je gewoon in plaats van een wachtwoord je e-mailadres moet invullen, en dat je dan een wachtwoord krijgt toegemaild wat maar een minuut geldig is of zo? Zou dat een oplossing zijn? Dan hoef je ook geen wachtwoord meer te onthouden ...
Waarom heeft de lengte enige invloed, aannemende dat ze gehashed worden en deze hashes dezelfde lengte hebben (of in elk geval, geen lengte die afhangt van de input)?
De hash is als het goed is uniek. Ieder wachtwoord heeft een unieke hash. Als je een wachtwoord van maar 2 tekens hebt, dan heb je veel minder mogelijkheden dan wanneer het wachtwoord bijvoorbeeld 10 tekens heeft. Een wachtwoord van 2 tekens heb je dus veel sneller "geraden" dan een wachtwoord van 10 tekens.
Tsja, veiligheid en gebruiksgemak zijn omgekeerd evenredig aan elkaar. Wanneer het belangrijk is, kun je het best aan de consument verkopen dat hij een extra stap nodig heeft. Denk aan pincodecalculators of TAN-lijsten (op papier dan wel per SMS) die bij banken worden gebruikt. Geen enkele klant die zal vinden dat dat te omslachtig is, omdat het hem direct geld kost als er misbruik van wordt gemaakt. Als het alleen maar gaat om het bijhouden van de high score van een of ander dom spelletje kun je met een veel eenvoudiger mechanisme werken.
> Zou je het nog zo kunnen maken dat je gewoon in plaats van een wachtwoord je e-mailadres moet invullen
Zoiets bestaat al. Dat heet "wachtwoord vergeten" en wordt daadwerkelijk door sommige mensen gebruikt om in te loggen. Dat zijn -denk ik- mensen die te lui zijn om een wachtwoord te onthouden. ;-) Ik weet overigens niet of je het redt met een levensduur van 1 minuut. Het duurt soms wel langer dan dat om een email op de plaats van bestemming te krijgen. Je kan het window echter ook weer niet te lang maken, omdat dat ten koste gaat van de veiligheid.
> Waarom heeft de lengte enige invloed, aannemende dat ze gehashed worden en deze hashes dezelfde lengte hebben
Ter aanvulling op het verhaal van Ozzie: dat werkt alleen omdat tijdens het hashen informatie wordt weggegooid, waardoor het originele wachtwoord niet kan worden teruggerekend vanuit de hash. Als het een omkeerbaar proces zou zijn, zou de lengte van een wachtwoord inderdaad niet (of in ieder geval minder) relevant zijn. De enige manier om nu te kijken welk wachtwoord bij een bepaalde hash hoort is door alle wachtwoorden afzonderlijk te hashen en de gehashte versie te vergelijken. En bij korte wachtwoorden gaat dat nu eenmaal een stuk sneller (want minder mogelijkheden) dan bij lange.
Haha, ja da's waar. Maar daar is het natuurlijk niet voor bedoeld. Maar zou je het er wel voor kunnen gebruiken eigenlijk? Zou dat volledig veilig zijn ... net zo veilig als het invoeren van gebuikersnaam en wachtwoord? Want eigenlijk is het zo'n gek idee helemaal niet toch? Je hoeft als gebruiker niks te onthouden, je moet alleen even op je mailtje wachten. Enige nadeel is dat iemand anders jouw e-mailadres kan invoeren waardoor jij gespamt wordt met e-mail ... hmmm :-s
Ja hoor. Ik ken mensen die die functie structureel misbruiken voor dat doel. 100% veilig zal het niet zijn; hangt een beetje af van het achterliggende mechanisme. Sommige sites sturen je een plaintext wachtwoord per email dat je niet hoeft te veranderen. Dat is slecht. Andere sites sturen je een link naar een pagina waarop je een nieuw wachtwoord kunt/moet invoeren. Dat is beter. De zwakke plek is dat email onderschept kan worden.
Ja oke ... dan zul je toch inderdaad moeten denken aan het invullen van een gebruikersnaam en wachtwoord, en als die kloppen dan als extra een "inlogcode" per mail die bijv. maar 5 minuten geldig is. Voor de gevoeligere systemen lijkt dat me dan de beste oplossing.