Wachtwoorden die zijn opgeslagen in een goed ontworpen en veilig systeem moeten altijd worden gecodeerd (nauwkeuriger:*gehasht* met behulp van een sterke eenrichtingsfunctie). Het mechanisme en de timing van die versleuteling variëren echter afhankelijk van de context.
Hier volgt een overzicht en enkele veelvoorkomende voorbeelden:
* Besturingssysteemwachtwoorden (Windows, macOS, Linux): Wanneer u uw aanmeldingswachtwoord voor het besturingssysteem van uw computer aanmaakt of wijzigt, hasht (versleutelt) het besturingssysteem het wachtwoord automatisch *voordat* het wordt opgeslagen. Het platte tekstwachtwoord raakt nooit het opslagmedium.
* Websiteaccounts (bijvoorbeeld Google, Facebook, Amazon): Wanneer u een account aanmaakt op een website of uw wachtwoord wijzigt, *moet* de website uw wachtwoord onmiddellijk op de server hashen voordat het in hun database wordt opgeslagen. Gerenommeerde websites volgen deze praktijk. Het proces gebeurt transparant; je ziet het niet. Een *goede* website slaat uw wachtwoord nooit op in platte tekst.
* Databases: Veel databasesystemen bieden mechanismen om gegevens, inclusief wachtwoorden, automatisch te versleutelen wanneer ze worden aangemaakt of gewijzigd. Databasebeheerders kunnen deze instellingen configureren.
* Applicatiespecifieke wachtwoorden: Als een applicatie (zoals een wachtwoordbeheerder, een softwareprogramma, enz.) wachtwoorden opslaat, *moet* deze deze automatisch coderen bij het maken/wijzigen.
Belangrijke overwegingen:
* Encryptie versus hashing: De term 'encryptie' wordt vaak losjes gebruikt, maar in de context van wachtwoordbeveiliging wordt hashing is de preciezere term. Hashing is een *eenrichtingsfunctie*. U kunt een hash niet eenvoudig omkeren om het oorspronkelijke wachtwoord te verkrijgen. Encryptie daarentegen is over het algemeen *omkeerbaar* (met de juiste sleutel). Het opslaan van wachtwoorden als hashes is veel veiliger, omdat zelfs als een database gecompromitteerd is, de aanvallers de originele wachtwoorden niet gemakkelijk kunnen herstellen. Ze worden gereduceerd tot brute-force-aanvallen (veel wachtwoorden proberen en deze hashen om te zien of ze overeenkomen met de opgeslagen hash).
* Zouten: Naast hashen wordt doorgaans vóór het hashen aan elk wachtwoord een willekeurige "salt"-waarde toegevoegd. Dit maakt het aanzienlijk moeilijker voor aanvallers om vooraf berekende ‘regenboogtabellen’ of andere technieken voor het kraken van wachtwoorden te gebruiken.
* Het belang van sterke hashes: Niet alle hash-algoritmen zijn gelijk gemaakt. Moderne systemen zouden sterke, computationeel dure hash-algoritmen moeten gebruiken, zoals:
* Argon2
* bcrypt
* scrypt
* PBKDF2 (vaak gebruikt in combinatie met HMAC-SHA256 of andere veilige hash-functies)
* De aanname van "zou moeten": Het is van cruciaal belang om te begrijpen dat hoewel alle bovengenoemde systemen (hash)wachtwoorden automatisch *moeten* versleutelen, dit niet *gegarandeerd* is. Beveiligingsinbreuken gebeuren als gevolg van slechte praktijken.
Samengevat: Hoewel niet *gegarandeerd* dat alle wachtwoorden automatisch worden gecodeerd, moeten goed ontworpen systemen (en dat doen ze meestal) altijd (en doen dat ook) zodra ze worden aangemaakt, om de veiligheid van de gebruiker te beschermen. Aanmeldingen bij besturingssystemen, website-accounts en databasesystemen zijn uitstekende voorbeelden van plaatsen waar u automatische wachtwoordhash verwacht. |