A FreeBSD alapértelmezés szerint támogatja az OPIE-t (One-time Passwords In Everything, azaz "Egyszeri jelszavak mindenben"), ami alapból az MD5 függvényét használja.
A jelszavak három fajtáját fogjuk a
továbbiakban tárgyalni. Az első a megszokott
UNIX(R) stílusú avagy Kerberos jelszó. Ezt a
továbbiakban "UNIX(R) jelszónak"
nevezzük. A második fajtában az OPIE
opiekey(1) nevű segédprogramja által
generált és a bejelentkezésnél a
opiepasswd(1) által elfogadott jelszavak tartoznak.
Ezeket "egyszeri jelszavaknak" fogjuk nevezni. A
jelszavak utolsó típusa az a titkos jelszó,
amit az opiekey
programnak (és
néha a opiepasswd
programnak) adunk meg,
ami ebből egyszer használatos jelszavakat
állít elő. Ezt innentől "titkos
jelszónak" vagy csak egyszerűen
"jelszónak" hívjuk.
A titkos jelszónak semmi köze sincs a UNIX(R) jelszavunkhoz. Természetesen megegyezhetnek, de ezt nem ajánljuk. Az OPIE által használt titkos jelszavaknak nem kell a régi UNIX(R) jelszavakhoz hasonlóan legfeljebb 8 karakteresnek lenniük [8], bármekkorát használhatunk. A hat vagy hét szóból álló jelszavak ilyenkor igen gyakoriak. Az OPIE jobbára a UNIX(R) jelszórendszerétől teljesen függetlenül működik.
A jelszavak mellett két másik fajta adat fontos az OPIE számára. Közülük az egyiket "magnak" vagy "kulcsnak" nevezik, ami két betűből és öt számjegyből áll. A másik az "iterációk száma", ami egy 1 és 100 közötti számot takar. Az OPIE úgy hozza létre az egyszeri jelszavakat, hogy egymás után fűzi a magot és a titkos jelszót, majd az iterációk megadott számának megfelelő mennyiségben kiszámolja rá az MD5 függvény értékét és az eredményt hat rövid angol szóba önti. Ez a hat angol szó lesz a mi egyszeri jelszavunk. A hitelesítéssel foglalkozó rendszer (elsősorban a PAM) figyelemmel kíséri a legutoljára használt egyszeri jelszavunkat, és csak akkor engedi a felhasználót hitelesíteni, ha az általa megadott jelszó kódolt változata megegyezik az előzőleg megadott jelszaváéval. A csapóajtó függvények használata miatt lehetetlen legenerálni a következő egyszeri jelszót, ha a sikerült megszereznünk az egyiket. Az iterációk száma minden egyes sikeres bejelentkezés után csökken eggyel, amivel a felhasználót és a bejelentkeztető programot szinkronban tartja. Amikor így az iterációk száma eléri az egyet, az OPIE-t újra kell inicializálni.
Az említésre kerülő rendszerek
mindegyikéhez tartozik néhány program. Az
opiekey
bekéri az
iterációk számát, a magot és a
titkos jelszót, majd előállít egy
egyszer használatos jelszót vagy azok folytonos
listáját. Az opiepasswd
az OPIE
inicializálásért, a jelszavak, az
iterációk számának és a mag
megváltoztatásáért felelős.
Egyaránt elfogad titkos jelmondatot,
iterációs számot vagy magot és egy
egyszeri jelszót. Az opieinfo
megvizsgálja a felhasználókra
vonatkozó adatbázist
(/etc/opiekeys
) és kiírja az
adott felhasználó által használt
iterációs számot és magot.
Négyféle különböző
műveletről fogunk most itt beszélni. Az
elsőben egy biztonságos kapcsolaton keresztül
elsőként inicializáljuk az egyszeri
jelszavakat, vagy megváltoztatjuk a jelszót vagy a
magot az opiepasswd
segítségével. A második
műveletben ugyanarra adjuk ki az
opiepasswd
parancsot egy nem biztonságos
kapcsolaton keresztül az opiekey
paranccsal együtt egy biztonságos kapcsolaton
keresztül. A harmadikban az opiekey
használatával nem biztonságos kapcsolaton
keresztül jelentkezünk be. A negyedikben az
opiekey
paranccsal létrehozunk egy adott
mennyiségű kulcsot, amelyeket aztán
leírhatunk vagy kinyomtathatunk, hogy magunkkal tudjuk
vinni olyan helyre, ahonnan nem tudnk biztonságos
módon csatlakozni.
Az OPIE első inicializálásához
adjuk ki az opiepasswd
parancsot:
%
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
A figyelmeztetés fordítása:
Ezt a módszert csak konzolról alkalmazzuk, SOHA ne távoli kapcsolaton keresztül! Ha telnetet, xtermet vagy betárcsázós kapcsolatot használunk, akkor azonnal nyomjunk ^C-t vagy ne adjunk meg jelszót.
Az Enter new secret pass phrase:
vagy
Enter secret password:
kérdések
után adjunk meg egy jelmondatot, illetve jelszót.
Ne felejtsük el, hogy ez nem bejelentkezéshez
használt jelszó lesz, hanem ebből jönnek
majd létre az egyszeri kulcsaink. Az "ID"
sor adja meg az aktuális példányunk
paramétereit: a bejelentkezéshez használt
nevünket, az iterációk számát
és a magot. Amikor a bejelentkezések során
a rendszer emlékszik a paraméterekre és
megjeleníti ezeket, nem kell megjegyeznünk. Az
utolsó sor adja meg a paramétereinknek és a
titkos jelszavunknak megfelelő egyszeri jelszót. Ha
most azonnal akarnánk bejelentkezni, akkor ezt az
egyszeri jelszót kellene hozzá
használnunk.
Ha egy nem biztonságos kapcsolaton keresztül
akarjuk inicializálni vagy megváltoztatni a
jelszavunkat, akkor szükségünk lesz valahol egy
megbízható kapcsolatra, ahol le tudjuk futtatni az
opiekey
parancsot. Ez lehet egy
számunkra biztonsági szempontból
elfogadható gép parancssora. Emellett ki kell
találnunk egy iterációs számot (erre
a 100 egy jó választás) és adnunk
egy magot vagy használni egy véletlenszerűen
generáltat. Az inicializálás
színtere felé vezető nem biztonságos
kapcsolaton keresztül adjuk ki az
opiepasswd
parancsot:
%
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
Az alapértelmezett mag elfogadásához nyomjuk le a Return billentyűt. Mielőtt megadnánk a hozzáférés jelszavát, menjünk át a biztonságos kapcsolatra és adjuk meg neki ugyanezeket a paramétereket:
%
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
Most váltsunk vissza a nem biztonságos kapcsolatra és másoljuk be az így generált egyszeri jelszót a megfelelő programba.
Miután sikeresen inicializáltuk az OPIE-t és bejelentkezünk, a következőket láthatjuk:
%
telnet example.com
Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login:felhasználói_név
otp-md5 498 gr4269 ext Password:
Mellékesen megjegyezzük, hogy az OPIE paranccsorának van egy (itt nem látható) hasznos képessége: ha Return billentyűt nyomunk a jelszó bekérésekor, akkor a program megmutatja a begépelt betűket, így láthatjuk pontosan mit is írunk be. Ez nagyon kényelmes lehet olyankor, amikor valahonnan, például egy lapról olvassuk a jelszót.
A bejelentkezéshez ekkor le kell valahogy
generálnunk az egyszeri jelszavunkat. Ezt egy
megbízható rendszeresen tudjuk megtenni az
opiekey
lefuttatásával. (Ennek
vannak DOS-os, Windows(R)-os és Mac OS(R)-es
változatai is.) Paraméterként az
iterációs számot és a magot kell
megadnunk. Ezt akár közvetlenül át is
másolhatjuk annak a gépnek a bejelentkezési
képernyőjéről, ahova be akarunk
jelentkezni.
A megbízható rendszeren tehát:
%
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
Most már megvan a bejelentkezéshez szükséges egyszeri jelszavunk.
Néha olyan helyekre kell mennünk, ahol se egy
megbízható gép, sem pedig
biztonságos kapcsolat nem található. Ilyen
esetekben megadhatjuk az opiekey
parancsnak,
hogy előre gyártson le több egyszer
használatos jelszót, amit később
aztán ki tudunk nyomtatni. Például:
%
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
Az -n 5
öt kulcsot kér
egymás után, a 30
pedig megadja
az utolsó iterációs számot.
Vegyük észre, hogy a kulcsokat a
felhasználás sorrendjével
ellentétes sorrendben írja ki
a program. Ha igazán paranoiások vagyunk, akkor
írjuk le kézzel a jelszavakat. Ha viszont annyira
nem, akkor egyszerűen küldjük át ezeket az
lpr
parancsnak. Megfigyelhetjük, hogy
minden sorban látható az iterációs
szám és a hozzá tartozó egyszeri
jelszó. Hasznos lehet a felhasználás
szerinti felírni a jelszavakat.
Az OPIE képes a bejelentkezéshez
használt IP-címek alapján
leszűkíteni a UNIX(R) jelszavak
használatát. Ehhez az
/etc/opieaccess
használható,
amely alapból megtalálható a
rendszerünkön. Az opieaccess(5) man
oldalán találhatjuk meg a rá
vonatkozó információkat és az
összes vele kapcsolatos biztonsági
megfontolást.
Íme egy példa az
opieaccess
állományra:
permit 192.168.0.0 255.255.0.0
Ezzel a sorral megengedjük a UNIX(R) jelszavak használatát minden olyan felhasználó számára, akinek az IP-je illeszkedik a megadott címre és maszkra (ez viszont álcázással kijátszható).
Ha az opieaccess
állományból egyetlen szabály sem
illeszkedik, akkor alapértelmezés szerint nem
engedélyezettek a nem OPIE típusú
jelszavak.
[8] FreeBSD alatt a bejelentkezéshez használt szabványos jelszavak akár 128 karakteresek is lehetnek.
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.