This is an archive of past FreeBSD releases; it's part of the FreeBSD Documentation Archive.
S/Key is een eenmalige wachtwoord methode die gebaseerd is op de eenweg hashfunctie. FreeBSD gebruikt een MD4 hash om aansluiting te houden, maar andere systemen gebruiken ook wel MD5 en DES-MAC. S/Key is al een onderdeel van het FreeBSD basissysteem vanaf versie 1.1.5 en wordt ook in een groeiend aantal andere besturingssystemen gebruikt. S/Key is een geregistreerd handelsmerk van Bell Communications Research, Inc.
Vanaf versie 5.0 van FreeBSD is S/Key vervangen door OPIE (Eenmalige Wachtwoorden in Alles - “One-time Passwords In Everything”). OPIE gebruikt standaard een MD5 hash.
Hier worden drie verschillende soorten wachtwoorden besproken. De eerste is het normale UNIX® of Kerberos wachtwoord. Dit heet het “UNIX wachtwoord”. Het tweede type is een eenmalig wachtwoord dat wordt gemaakt met het S/Key programma key of het OPIE programma opiekey(1) en dat wordt geaccepteerd door keyinit of opiepasswd(1) en de aanmeldprocedure. Dit heet het “eenmalige wachtwoord”. Het laatste type wachtwoord is het wachtwoord dat wordt opgegeven aan de key/ opiekey programma's (en soms aan de keyinit / opiepasswd programma's) die gebruikt worden om eenmalige wachtwoorden te maken. Dit type heet “geheim wachtwoord” of gewoon een “wachtwoord” zonder toevoeging.
Het geheime wachtwoord heeft niets te maken met het UNIX wachtwoord; ze kunnen hetzelfde zijn, dat wordt afgeraden. S/Key en OPIE geheime wachtwoorden kennen niet de beperking van 8 karakters als de oude UNIX wachtwoorden. [1] Het mag onbeperkt lang zijn. Wachtwoorden van een zes of zeven woorden lange zin zijn niet ongewoon. Voor het overgrote deel werkt het S/Key of OPIE systeem volledig onafhankelijk van het UNIX wachtwoordsysteem.
Buiten het wachtwoord zijn er nog twee stukjes data die van belang zijn voor S/Key en OPIE. Het eerste wordt “zaad” (“seed”) of “sleutel” (“key”) genoemd en bestaat uit twee letters en vijf cijfers. Het tweede stukje data heet de “iteratieteller” (“iteration count”), een nummer tussen 1 en 100. S/Key maakt een eenmalig wachtwoord door het zaad en het geheime wachtwoord aaneen te schakelen en daarop het door de iteratieteller aangegeven keren MD4/MD5 hash toe te passen. Daarna wordt het resultaat omgezet in zes korte Engelse woorden. Die zes woorden zijn een eenmalige wachtwoord. Het authenticatiesysteem (hoofdzakelijk PAM) houdt bij welk eenmalig wachtwoord het laatst is gebruikt en de gebruiker wordt geauthenticeerd als de hash van het door de gebruiker ingegeven wachtwoord gelijk is aan het vorige wachtwoord. Omdat er een eenweg hash wordt gebruikt, is het onmogelijk om toekomstige eenmalige wachtwoorden te maken als iemand toch een eenmalig wachtwoord heeft afgevangen. De iteratieteller wordt verlaagd na iedere succesvolle aanmelding om de gebruiker en het aanmeldprogramma synchroon te houden. Als de iteratieteller op 1 staat, moeten S/Key en OPIE opnieuw ingesteld worden.
Er zijn drie programma's bij ieder systeem betrokken die hieronder worden besproken. De key en opiekey programma's hebben een iteratieteller, zaad en een geheim wachtwoord nodig en maken dan een eenmalig wachtwoord of een lijst van opeenvolgende eenmalige wachtwoorden. De programma's keyinit en opiepasswd worden gebruikt om respectievelijk S/Key en OPIE te initialiseren en om wachtwoorden, iteratietellers en zaad te wijzigen. Ze accepteren zowel wachtwoordzinnen als een iteratieteller, zaad en een eenmalig wachtwoord. De programma's keyinfo en opieinfo bekijken de relevante bestanden waarin de eigenschappen staan (/etc/skeykeys of /etc/opiekeys) en tonen de huidige iteratieteller en zaad van de gebruiker die het commando uitvoert.
Nu worden vier verschillende acties besproken. Bij de eerste worden keyinit of opiepasswd gebruikt in een beveiligde verbinding om voor het eerst eenmalige wachtwoorden in te stellen of om een wachtwoord of zaad aan te passen. Bij de tweede worden keyinit of opiepasswd gebruikt in een niet-beveiligde verbinding samen met key of opiekey over een beveiligde verbinding om hetzelfde te bereiken. In een derde scenario wordt key/opiekey gebruikt om te melden over een onveilige verbinding. Het vierde scenario behandelt het gebruik van key of opiekey om een aantal sleutels aan te maken die opgeschreven of afgedrukt kunnen worden, zodat ze meegenomen kunnen worden naar een plaats van waar geen enkele veilige verbinding opgezet kan worden.
Om S/Key voor de eerste keer te initialiseren, een wachtwoord te wijzigen of zaad te veranderen over een beveiligde verbinding (bijvoorbeeld op het console van een machine of via ssh), moet het commando keyinit gebruikt worden zonder parameters terwijl een gebruiker als zichzelf is aangemeld:
% keyinit Adding unfurl: Reminder - Only use this method if you are directly connected. If you are using telnet or rlogin exit with no password and use keyinit -s. Enter secret password: Again secret password: ID unfurl s/key is 99 to17757 DEFY CLUB PRO NASH LACE SOFT
Bij OPIE wordt opiepasswd gebruikt:
% opiepasswd -c [grimreaper] ~ $ opiepasswd -f -c Adding unfurl: Only use this method from the console; NEVER from remote. If you are using telnet, xterm, or a dial-in, type ^C now or exit with no password. Then run opiepasswd without the -c parameter. Using MD5 to compute responses. Enter new secret pass phrase: Again new secret pass phrase: ID unfurl OTP key is 499 to4268 MOS MALL GOAT ARM AVID COED
Als Enter new secret pass phrase: of Enter secret password: op het scherm verschijnt, dient een wachtwoord of wachtwoordzin ingevoerd te worden. Dit is dus niet het aanmeldwachtwoord is, maar dat dit wordt gebruikt om eenmalige wachtwoorden te maken. De “ID” regel geeft de parameters van het verzoek weer: de aanmeldnaam, de iteratieteller en zaad. Bij het aanmelden kent het systeem deze parameters en worden deze weergegeven zodat ze niet onthouden hoeven te worden. Op de laatste regel staat het eenmalige wachtwoord dat overeenkomt met die parameters en het geheime wachtwoord. Als de gebruiker direct opnieuw zou aanmelden, zou hij dat eenmalige wachtwoord moeten gebruiken.
Om te initialiseren of een wachtwoord te wijzigen over een onveilige verbinding, moet er al ergens een veilige verbinding bestaand de gebruiker key of opiekey kan uitvoeren. Dit kan een desktop programma zijn op een Macintosh® of een shell prompt op een machine die vertrouwd wordt. De gebruiker moet ook een iteratieteller verzinnen (100 is wellicht een prima getal) en moet een eigen zaad bedenken of er een laten fabriceren. Over de onveilige verbinding (naar de machine die de gebruiker wil initialiseren) wordt het commando keyinit -s gebruikt:
% keyinit -s Updating unfurl: Old key: to17758 Reminder you need the 6 English words from the key command. Enter sequence count from 1 to 9999: 100 Enter new key [default to17759]: s/key 100 to 17759 s/key access password: s/key access password:CURE MIKE BANE HIM RACY GORE
Bij OPIE is dat opiepasswd:
% opiepasswd Updating unfurl: You need the response from an OTP generator. Old secret pass phrase: otp-md5 498 to4268 ext Response: GAME GAG WELT OUT DOWN CHAT New secret pass phrase: otp-md5 499 to4269 Response: LINE PAP MILK NELL BUOY TROY ID mark OTP key is 499 gr4269 LINE PAP MILK NELL BUOY TROY
Om het standaard zaad te accepteren (dat het programma keyinit nogal verwarrend een key) noemt, is de invoer Return. Voor een toegangswachtwoord wordt ingevoerd, dient eerst gewisseld te worden naar de veilige verbinding of het S/Key desktop programma en dienen dezelfde parameters ingegeven te worden:
% key 100 to17759 Reminder - Do not use this program while logged in via telnet or rlogin Enter secret password: <secret password> CURE MIKE BANE HIM RACY GORE
Of bij OPIE:
% opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT
In de onveilige verbinding wordt nu het eenmalige wachtwoord in het relevante programma gekopieerd.
Als S/Key of OPIE eenmaal is ingesteld staat er bij het aanmelden iets als het volgende:
% telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <username> s/key 97 fw13894 Password:
Of bij OPIE:
% telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <username> otp-md5 498 gr4269 ext Password:
NB: de S/Key en OPIE meldingen hebben een erg zinvolle optie (die hier niet te zien is): als er op Return wordt gedrukt bij de wachtwoordregel, wordt de echo aangezet, zodat de invoer zichtbaar is. Dit is erg handig als er met de hand een wachtwoord wordt ingegeven, zoals wanneer het wordt ingevoerd vanaf een afdruk.
Nu moet het eenmalige wachtwoord gemaakt worden om het aanmeldprompt mee te antwoorden. Dit moet gedaan worden op een vertrouwd systeem waarop key of opiekey beschikbaar is. Er zijn ook versies voor MS-DOS®, Windows® en Mac OS®. Voor beide commando's moet zowel de iteratieteller als het zaad ingeven worden op de commandoregel. Deze kan zo overgenomen worden vanaf het aanmeldprompt op de machine waarop de gebruiker wil aanmelden.
Op het vertrouwde systeem:
% key 97 fw13894 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: WELD LIP ACTS ENDS ME HAAG
Bij OPIE:
% opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT
Nu het eenmalige wachtwoord er is, kan het aanmelden doorgang vinden:
login: <username> s/key 97 fw13894 Password: <return to enable echo> s/key 97 fw13894 Password [echo on]: WELD LIP ACTS ENDS ME HAAG Last login: Tue Mar 21 11:56:41 from 10.0.0.2 ...
Soms moet is een gebruiker ergens waarvandaan er geen toegang is tot een vertrouwde machine of een beveiligde verbinding. In dat geval is het mogelijk om met de key en opiekey commando's een aantal eenmalige wachtwoorden te maken om uit te printen en deze mee te nemen:
% key -n 5 30 zz99999 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: <secret password> 26: SODA RUDE LEA LIND BUDD SILT 27: JILT SPY DUTY GLOW COWL ROT 28: THEM OW COLA RUNT BONG SCOT 29: COT MASH BARR BRIM NAN FLAG 30: CAN KNEE CAST NAME FOLK BILK
Of bij OPIE:
% opiekey -n 5 30 zz99999 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: <secret password> 26: JOAN BORE FOSS DES NAY QUIT 27: LATE BIAS SLAY FOLK MUCH TRIG 28: SALT TIN ANTI LOON NEAL USE 29: RIO ODIN GO BYE FURY TIC 30: GREW JIVE SAN GIRD BOIL PHI
Met -n 5
worden vijf opeenvolgende sleutels aangevraagd,
30
geeft aan wat het laatste iteratiegetal moet zijn. Deze
wachtwoorden worden weergegeven in omgekeerde volgorde voor gebruik. Als de gebruiker echt
paranoïde bent kan hij ze opschrijven of hij kan er ook voor kiezen ze af te drukken
met lpr. Op iedere regel staat dus de iteratieteller en het
eenmalige wachtwoord, maar misschien is het toch handig om ze na gebruik af te
strepen.
S/Key kan beperkingen plaatsen op het gebruik van UNIX wachtwoorden gebaseerd op hostnaam, gebruikersnaam, terminalpoort of IP adres van een aanmeldsessie. Deze beperkingen staan in het instellingenbestand /etc/skey.access. De handleiding voor skey.access(5) bevat meer informatie over de inhoud van het bestand en bevat ook details over een aantal aandachtspunten voor beveiliging voordat besloten wordt dit bestand te gebruiken in de beveiliging.
Als het bestand /etc/skey.access niet bestaat (dat mag in FreeBSD 4.X systemen), dan mogen alle gebruikers hun UNIX wachtwoord gebruiken. Maar als het bestand wel bestaat, dan moeten alle gebruikers S/Key gebruiken, tenzij iets anders expliciet wordt toegestaan door instellingen in het bestand skey.access. In alle gevallen worden UNIX wachtwoorden op het console wel toegestaan.
Nu volgt een voorbeeld met instellingen in het bestand skey.access waarin de drie meest gebruikte instellingen terugkomen:
permit internet 192.168.0.0 255.255.0.0 permit user fnord permit port ttyd0
In de eerste regel (permit internet) staat dat gebruikers met een bron IP adres (wat gefingeerd kan worden) dat past binnen de aangegeven waarde en masker altijd UNIX wachtwoorden mogen gebruiken. Dit mag niet gezien worden als beveiligingsmechanisme, maar eerder als een mogelijkheid om gebruikers aan wie het wordt toegestaan eraan te herinneren dat ze op een onveilig netwerk zitten en gebruik moeten maken van S/Key bij het aanmelden.
De tweede regel (permit user) staat de gebruiker fnord toe om altijd UNIX wachtwoorden te gebruiken. In het algemeen dient dit alleen gebruikt te worden voor gebruikers die niet in staat zijn het programma key te gebruiken, zoals gebruikers met domme terminals of gebruikers die totaal niet op te voeden zijn.
De derde regel (permit port) staat gebruikers die aanmelden vanaf een aangegeven terminalverbinding toe om UNIX wachtwoorden te gebruiken. Dit kan gebruikt worden voor inbellers.
Met OPIE kan ook paal en perk gesteld worden aan het gebruik van UNIX wachtwoorden op basis van het IP adres van een aanmeldsessie, net als met S/Key. Dat kan met het bestand /etc/opieaccess dat standaard aanwezig is op FreeBSD 5.0 en latere systemen. Bij opieaccess(5) staat meer informatie over dit bestand en welke beveiligingsoverwegingen bestaan bij het gebruik.
Hieronder een voorbeeld voor een opieaccess bestand:
permit 192.168.0.0 255.255.0.0
In deze regel (permit internet) staat dat gebruikers met een bron IP adres (wat gefingeerd kan worden) dat past binnen de aangegeven waarde en masker altijd UNIX wachtwoorden mogen gebruiken.
Als geen van de regels uit opieaccess van toepassing is, worden standaard pogingen zonder OPIE geweigerd.
[1] |
Bij FreeBSD mag het wachtwoord voor aanmelden tot 128 karakters lang zijn. |
Deze en andere documenten kunnen worden gedownload van ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Lees voor vragen over FreeBSD de documentatie alvorens contact te zoeken
<questions@FreeBSD.org>.
Vragen over deze documentatie kunnen per e-mail naar <doc@FreeBSD.org>.