Manuel FreeBSD
Précédent | Chapitre 14. Sécurité | Suivant

# 14.5. Mots de passe non réutilisables

S/Key est un système de mots de passe non réutilisables basé sur une fonction de hachage irréversible. FreeBSD utilise le hachage MD4 pour des raisons de compatibilité mais d'autres système utilisent MD5 et DES-MAC. S/Key fait partie du système de base de FreeBSD depuis la version 1.1.5 et est aussi utilisé sur un nombre toujours plus important d'autres systèmes d'exploitation. S/Key est une marque déposée de Bell Communications Research, Inc.

Depuis la version 5.0 de FreeBSD, S/Key a été remplacé par la fonction équivalente OPIE (``One-time Passwords In Everything'' -- Mots de passe non réutilisables dans toutes les applications). OPIE utilise le hachage MD5 par défaut.

Il existe trois types de mots de passe dont nous parlerons dans ce qui suit. Le premier est votre mot de passe UNIX® habituel ou mot de passe Kerberos; nous appellerons ``mot de passe UNIX``. Le deuxième type est le mot de passe généré par les programmes S/Key `key` ou OPIE opiekey(1) et reconnu par les programmes `keyinit` ou opiepasswd(1) et l'invite de session; nous appellerons ceci un ``mot de passe non réutilisable''. Le dernier type de mot de passe est le mot de passe secret que vous donnez aux programmes `key`/`opiekey` (et parfois aux programmes `keyinit`/`opiepasswd`) qui l'utilisent pour générer des mots de passe non réutilisable; nous l'appellerons ``mot de passe secret'' ou tout simplement ``mot de passe''.

Le mot de passe secret n'a rien à voir avec votre mot de passe UNIX; ils peuvent être identique, mais c'est déconseillé. Les mots de passe secret S/Key et OPIE ne sont pas limités à 8 caractères comme les anciens mots de passe UNIX [1], ils peuvent avoir la longueur que vous désirez. Des mots de passe de six ou sept mots de long sont relativement communs. La plupart du temps, le système S/Key ou OPIE fonctionne de façon complètement indépendante du système de mot de passe UNIX.

En plus du mot de passe, deux autres types de données sont importantes pour S/Key et OPIE. L'une d'elles est connue sous le nom de ``germe'' (``seed'') ou ``clé'', formé de deux lettres et cinq chiffres. L'autre est ce que l'on appelle le ``compteur d'itérations'', un nombre compris entre 1 et 100. S/Key génère un mot de passe non réutilisable en concaténant le germe et le mot de passe secret, puis en appliquant la fonction de hachage MD4/MD5 autant de fois qu'indiqué par le compteur d'itérations, et en convertissant le résultat en six courts mots anglais. Ces six mots anglais constituent votre mot de passe non réutilisable. Le système d'authentification (principalement PAM) conserve une trace du dernier mot de passe non réutilisable utilisé, et l'utilisateur est authentifié si la valeur de hachage du mot de passe fourni par l'utilisateur est la même que celle du mot de passe précédent. Comme le hachage utilisé est irréversible, il est impossible de générer de mot de passe non réutilisable si on a surpris un de ceux qui a été utilisé avec succès; le compteur d'itérations est décrémenté après chaque ouverture de session réussie, de sorte que l'utilisateur et le programme d'ouverture de session restent en phase. Quand le compteur d'itération passe à 1, S/Key et OPIE doivent être réinitialisés.

Il y a trois programmes impliqués dans chacun des systèmes que nous aborderons plus bas. Les programmes `key` et `opiekey` ont pour paramètres un compteur d'itérations, un germe, et un mot de passe secret, et génère un mot de passe non réutilisable ou une liste de mots de passe non réutilisable. Les programmes `keyinit` et `opiepasswd` sont utilisés pour initialiser respectivement S/Key et OPIE, et pour modifier les mots de passe, les compteurs d'itérations, ou les germes; ils prennent pour paramètres soit un mot de passe secret, soit un compteur d'itérations, soit un germe, et un mot de passe non réutilisable. Le programme `keyinfo` ou `opieinfo` consulte le fichier d'identification correspondant (`/etc/skeykeys` ou `/etc/opiekeys`) et imprime la valeur du compteur d'itérations et le germe de l'utilisateur qui l'a invoqué.

Nous décrirons quatre sortes d'opérations. La première est l'utilisation du programme `keyinit` ou `opiepasswd` sur une connexion sécurisée pour initialiser les mots de passe non réutilisables pour la première fois, ou pour modifier votre mot de passe ou votre germe. La seconde opération est l'emploi des programmes `keyinit` ou `opiepasswd` sur une connexion non sécurisée, en conjonction avec `key` ou `opiekey` sur une connexion sécurisée, pour faire la même chose. La troisième est l'utilisation de `key`/`opiekey` pour ouvrir une session sur une connexion non sécurisée. La quatrième est l'emploi de `key` ou `opiekey` pour générer un certain nombre de clés qui peuvent être notées ou imprimées et emportées avec vous quand vous allez quelque part ou il n'y a aucune connexion sécurisée.

## 14.5.1. Initialisation depuis une connexion sécurisée

Pour initialiser S/Key pour la première fois, changer votre mot de passe, ou changer votre germe quand vous êtes attaché sous votre compte par l'intermédiaire d'une connexion sécurisée (e.g., sur la console d'une machine ou via ssh), utilisez la commande `keyinit` sans paramètres:

    % 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

Pour OPIE, `opiepasswd` est utilisé à la place:

    % 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 l'invite `Enter new secret pass phrase:` ou `Enter secret password:`, vous devez entrer un mot de passe ou une phrase. Rappelez-vous que ce n'est pas le mot de passe que vous utiliserez pour ouvrir une session, mais celui utilisé pour générer vos clés non réutilisables. La ligne commençant par ``ID'' liste les paramètres de votre instance: votre nom d'utilisateur, la valeur de votre compteur d'itérations et votre germe. Quand vous ouvrirez une session, le système aura mémorisé ces paramètres et vous les redonnera, vous n'avez donc pas besoin de les retenir. La dernière ligne donne le mot de passe non réutilisable correspondant à ces paramètres et à votre mot de passe secret; si vous devez vous reconnectez immédiatement, c'est ce mot de passe que vous utiliseriez.

## 14.5.2. Initialisation depuis une connexion non sécurisée

Pour initialiser ou changer votre mot de passe secret par l'intermédiaire d'une connexion non sécurisée, il faudra avoir déjà une connexion sécurisée sur une machine où vous pouvez exécuter `key` ou `opiekey`; ce peut être depuis une icone sur le bureau d'un Macintosh ou depuis la ligne de commande d'une machine sûre. Il vous faudra également donner une valeur au compteur d'itération (100 est probablement une bonne valeur), et indiquer un germe ou utiliser la valeur aléatoire générée par le programme. Sur la connexion non sécurisée (vers la machine que vous initialisez), employez la commande `keyinit -s`:

    % 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

Pour OPIE, vous devez utiliser `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

Pour accepter le germe par défaut (que le programme `keyinit` appelle `key`, ce qui prête à confusion), appuyez sur Entrée. Ensuite avant d'entrer un mot de passe d'accès, passez sur votre connexion sécurisée et donnez lui les mêmes paramètres:

    % 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

Ou pour 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

Retournez maintenant sur votre connexion non sécurisée, et copiez le mot de passe non réutilisable généré par le programme adapté.

## 14.5.3. Générer un unique mot de passe non réutilisable

Une fois que vous avez initialisé S/Key ou OPIE, lorsque que vous ouvrez une session, une invite de ce type apparaîtra:

    % 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:

Ou pour 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:

Les invites S/Key et OPIE disposent d'une fonction utile (qui n'est pas illustrée ici): si vous appuyez sur la touche Entrée lorsque l'on vous demande votre mot de passe, le programme active l'écho au terminal, de sorte que vous voyez ce que vous êtes en train de taper. Ceci est très utile si vous essayez de taper un mot de passe à la main, à partir d'un résultat imprimé par exemple.

A ce moment vous devez générer votre mot de passe non réutilisable pour répondre à cette invite de session. Cela doit être effectué sur une machine de confiance sur laquelle vous pouvez exécuter `key` ou `opiekey` (il y a des versions de ces programmes pour DOS, Windows et MacOS). Ces programmes ont besoin du compteur d'itérations et du germe comme paramètres. Vous pouvez les copier-coller de l'invite de session de la machine sur laquelle vous voulez ouvrir une session.

Sur le système sûr:

    % 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

Pour 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

Maintenant que vous disposez de votre mot de passe non réutilisable vous pouvez continuer et vous connecter:

    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 ...

## 14.5.4. Générer de multiples mots de passe non réutilisables

Il faut parfois se rendre en des endroits où vous n'avez pas accès à une machine de confiance ou à une connexion sécurisée. Dans ce cas, vous pouvez utiliser la commande `key` ou `opiekey` pour générer plusieurs mots de passe non réutilisables que vous pouvez imprimer et transporter avec vous. Par exemple:

    % 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

Ou pour 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

L'option `-n 5` demande cinq clés en séquence, l'option `30` indique quel doit être le rang de la dernière itération. Notez que les clés sont imprimées dans l'ordre inverse de celui où elles seront éventuellement utilisées. Si vous êtes vraiment paranoïaque, vous pouvez les recopier à la main, sinon vous pouvez les copier-coller vers la commande `lpr`. Remarquez que chaque ligne liste le compteur d'itération et le mot de passe non réutilisable; vous trouverez peut-être utile de rayer les mots de passe au fur et à mesure de leur utilisation.

## 14.5.5. Restreindre l'utilisation des mots de passe UNIX®

S/Key peut placer des restrictions sur l'utilisation des mots de passe UNIX en fonction des noms de machine, d'utilisateur, de la ligne utilisée par le terminal ou de l'adresse IP de la machine connectée à distance. Ces restrictions peuvent être trouvées dans le fichier de configuration `/etc/skey.access`. La page de manuel skey.access(5) donne de plus amples informations sur le format de ce fichier et elle détaille également certains avertissements relatifs à la sécurité qu'il faut lire avant de se fier à ce fichier pour sa sécurité.

S'il n'y a pas de fichier `/etc/skey.access` (ce qui est le cas par défaut sur les systèmes FreeBSD 4.X), tous les utilisateurs pourront se servir de mots de passe UNIX. Si le fichier existe, alors tous les utilisateurs devront passer par S/Key, à moins qu'ils ne soient explicitement autorisés à ne pas le faire par des instructions du fichier `/etc/skey.access`. Dans tous les cas l'usage des mots de passe UNIX est autorisé sur la console.

Voici un exemple de configuration du fichier `skey.access` qui illustre les trois types d'instructions les plus courantes:

    permit internet 192.168.0.0 255.255.0.0
    permit user fnord
    permit port ttyd0

La première ligne (`permit internet`) autorise les utilisateurs dont l'adresse IP (ce qui rend vulnérable en cas d'usurpation) appartient au sous-réseau spécifié à employer les mots de passe UNIX. Cela ne doit pas être considéré comme une mesure de sécurité, mais plutôt comme un moyen de rappeler aux utilisateurs autorisés qu'ils sont sur un réseau non sécurisé et doivent utiliser S/Key pour s'authentifier.

La seconde ligne (`permit user`) autorise l'utilisateur désigné, dans notre cas `fnord`, à employer n'importe quand les mots de passe UNIX. En général, il faut se servir de cette possibilité si les personnes soit n'ont pas moyen d'utiliser le programme `key`, s'ils ont par exemple des terminaux passifs, soit s'ils sont définitivement réfractaires au système.

La troisième ligne (`permit port`) autorise tous les utilisateurs d'un terminal sur une liaison particulière à utiliser les mots de passe UNIX; cela devrait être employé pour les connexions téléphoniques.

OPIE peut restreindre l'usage des mots de passe UNIX sur la base de l'adresse IP lors de l'ouverture d'une session comme peut le faire S/Key. Le fichier impliqué est `/etc/opieaccess`, qui est présent par défaut sous FreeBSD 5.0 et versions suivantes. Veuillez consulter la page de manuel opieaccess(5) pour plus d'information sur ce fichier et certaines considérations sur la sécurité dont vous devez être au courant en l'utilisant.

Voici un exemple de fichier `opieaccess`:

    permit 192.168.0.0 255.255.0.0

Cette ligne autorise les utilisateurs dont l'adresse IP (ce qui rend vulnérable en cas d'usurpation) appartient au sous-réseau spécifié à employer les mots de passe UNIX à tout moment.

Si aucune règle du fichier `opieaccess` ne correspond, le comportement par défaut est de refuser toute ouverture de session non-OPIE.

### Notes

[1] | Sous FreeBSD le mot de passe standard peut avoir une longueur de 128 caractères maximum.

Précédent | Sommaire | Suivant
DES, MD5, et chiffrement | Niveau supérieur | L'encapsuleur TCP (TCP Wrappers)

Ce document, ainsi que d'autres peut être téléchargé sur ftp.FreeBSD.org/pub/FreeBSD/doc/.

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.