Iedere gebruiker op een UNIX® systeem heeft een wachtwoord bij zijn account. Het lijkt voor de hand liggend dat deze wachtwoorden alleen bekend horen te zijn bij de gebruiker en het eigenlijke besturingssysteem. Om deze wachtwoorden geheim te houden, zijn ze gecodeerd in een “eenweg hash” (“one-way hash”), wat betekent dat ze eenvoudig gecodeerd kunnen worden maar niet gedecodeerd. Met andere woorden, wat net gesteld werd is helemaal niet waar: het besturingssysteem kent het echte wachtwoord niet. De enige manier om een wachtwoord in “platte tekst” te verkrijgen, is door er met brute kracht naar te zoeken in alle mogelijke wachtwoorden.
Helaas was DES, de Data Encryption Standard, de enige manier om wachtwoorden veilig te coderen toen UNIX® ontstond. Dit was geen probleem voor gebruikers in de VS, maar omdat de broncode van DES niet geëxporteerd mocht worden moest FreeBSD een manier vinden om zowel te gehoorzamen aan de wetten van de Verenigde Staten als aansluiting te houden bij alle andere varianten van UNIX® die nog steeds DES gebruikten.
De oplossing werd gevonden in het splitsen van de coderingsbibliotheken zodat gebruikers in de Verenigde Staten de DES-bibliotheken konden installeren en gebruiken en internationale gebruikers een coderingsmethode konden gebruiken die geëxporteerd mocht worden. Zo is het gekomen dat FreeBSD MD5 is gaan gebruiken als coderingsmethode. Van MD5 wordt aangenomen dat het veiliger is dan DES, dus de mogelijkheid om DES te installeren is vooral beschikbaar om aansluiting te kunnen houden.
Op dit moment ondersteunt de bibliotheek DES, MD5, Blowfish, SHA256 en SHA512 hashfuncties. Standaard gebruikt FreeBSD 9.1 en nieuwer SHA512 om wachtwoorden te coderen. Oudere versies gebruiken standaard MD5.
Het is vrij makkelijk om uit te vinden welke
coderingsmethode FreeBSD op een bepaald moment gebruikt. De
gecodeerde wachtwoorden in
/etc/master.passwd
bekijken is een manier.
Wachtwoorden die gecodeerd zijn met MD5 zijn langer dan wanneer
ze gecodeerd zijn met DES-hash. Daarnaast beginnen ze met de
karakters $1$
. Wachtwoorden
die beginnen met $2a$
zijn
gecodeerd met de Blowfish hashfunctie. DES-wachtwoordstrings
hebben geen bijzondere kenmerken, maar ze zijn korter dan MD5
wachtwoorden en gecodeerd in een 64-karakter alfabet waar geen
$
karakter in zit. Een relatief korte
string die niet begint met een dollar teken is dus
waarschijnlijk een DES-wachtwoord. Zowel SHA256 als SHA512 beginnen
met de tekens $6$
.
Het wachtwoordformaat voor nieuwe wachtwoorden wordt
ingesteld met de passwd_format
aanmeldinstelling in /etc/login.conf
waar
des
, md5
,
blf
, sha256
of
sha512
in mag staan. Zie de login.conf(5)
handleiding voor meer informatie over
aanmeldinstellingen.