Beste dienstverlener,

Als u dit leest, bent u waarschijnlijk iemand van een bedrijf of site waar ik diensten van afneem, en heb ik u benaderd over uw onveilige inlogprocedure.

Waarom denk ik dat uw inlogprocedure onveilig is?

Dat kan verschillende redenen hebben. Meestal hebben die te maken met maximumeisen aan het wachtwoord dat ik mag bedenken, zoals bijvoorbeeld:

Een maximaal aantal tekens

Geen speciale tekens, zoals backticks (`), aanhalingstekens (") of ampersands (&)

Geen spaties

Het niet mogen copy & pasten van wachtwoorden

Waarom is dit onveilig?

Omdat u hiermee mensen aanmoedigt zwakke wachtwoorden aan te maken, zoals Welkom01 en D13d3r1ck. Dit vormt een risico bij reverse brute force-aanvallen.

Korte wachtwoorden, die alleen bestaan uit bijvoorbeeld letters en cijfers, zijn snel te kraken. Gemiddeld geprijste GPU's draaien tien miljard md5s per seconde. Dat betekent dat zelfs een volledig willekeurig wachtwoord van 62 alfanumerieke letters in 6 uur gekraakt kan worden.

En u vertelt de krakers bovendien netjes wat de eigenschappen van de te kraken wachtwoorden zijn.

Als u als eigenaar van een site erachter kan komen wat de wachtwoorden van uw gebruikers zijn, dan kunnen kwaadwillenden dat ook als ze bij u inbreken. Dan liggen alle gegevens van uw klanten op straat, en dat is zeer kostbaar, niet alleen voor u.

De enige echt veilige manier van wachtwoorden opslaan heeft dit soort eisen niet. Daarom kan ik dus aan die eisen zien dat uw inlogprocedure onveilig is.

Wat is dan wel een veilige manier?

Als uw klant een wachtwoord invult bij het aanmaken van een account, versleutelt u dat wachtwoord voor u het opslaat, met een eenrichtingsversleuteling. Dat is een sleutel die niet omkeerbaar is. Uit de sleutel kan het oorspronkelijke wachtwoord niet worden afgeleid.

Wanneer die klant bij uw site inlogt vult hij opnieuw zijn wachtwoord in, waarna u het versleutelt. Die versleutelde versie vergelijkt u dan met het versleutelde wachtwoord in uw database. Komen die overeen, dan is de gebruiker succesvol ingelogd.

Wachtwoorden die op deze manier versleuteld zijn, bestaan altijd uit een korte string van letters en cijfers. Een sha256sum van om het even welk wachtwoord, is een string van 64 letters en cijfers, zoals deze:

214e3f59b7ff298696a7bcefdb65e19869c67c932a5f1024c5a05add896e2fb3

En de sha256sum van een sterker wachtwoord als "<];7*Rq1![:\U={V,m85E@/2/" is:

433c7fb6c0b1221a05c7b865b6bba3b25f54905959dce67abb1f04a69716d367

Dus die slaat u makkelijk op in een database. Een wachtzin van vier of vijf woorden kost duizenden jaren om te kraken, omdat het zo lang is.

Kijk op Github of Stack Overflow hoe u dit regelt in de taal en de frameworks die u voor uw site gebruikt. Duizenden zijn u voorgegaan, dus u hoeft niets zelf uit te vinden.

Als ik maximumeisen bij wachtwoorden zie, dan weet ik dat mijn wachtwoord niet versleuteld wordt opgeslagen, en dat mijn gegevens bij u dus niet in goede handen zijn.

Ik hoop dat u uw zaken op orde brengt.

Met vriendelijke groet, Diederick de Vries (Feedback: @diederickdvries)