Manual de FreeBSD
Anterior | Capítulo 14. Seguridad | Siguiente

# 14.5. Contraseñas de un solo uso

S/Key es un esquema de contraseña de un solo uso basado en una función de hash de sentido único. FreeBSD utiliza el hash MD4 por compatibilidad, pero otros sistemas usan MD5 y DES-MAC. S/Key forma parte del sistema base de FreeBSD desde la versión 1.1.5 y se usa también en un número creciente de otros sistemas operativos. S/Key es una marca registrada de Bell Communications Research, Inc.

A partir de la versión 5.0 de FreeBSD S/Key fué reemplazado por su equivalente OPIE (One-time Passwords In Everything, Contraseñas de un solo uso para todo). OPIE usa por defecto hash MD5.

En esta sección se explican tres tipos de contraseña. La primera es la típica contraseña al estilo UNIX® o Kerberos; las llamaremos contraseñas UNIX. El segundo tipo es la contraseña de un solo uso, que se genera con el programa `key` de S/Key o con opiekey(1) de OPIE, y que aceptan los programas `keyinit`, opiepasswd(1), y el prompt de login; llamaremos a esta una contraseña de un solo uso. El último tipo de contraseña es la contraseña secreta que le da usted a los programas `key`/`opiekey` (y a veces `keyinit`/`opiepasswd`), que se usa para generar contraseñas de un solo uso; a estas las llamaremos contraseñas secretas, o simplemente contraseña.

La contraseña secreta no tiene nada que ver con su contraseña UNIX; pueden ser la misma, pero no es recomendable. Las contraseñas secretas S/Key y OPIE no están limitadas a 8 caracteres como las contraseñas UNIX antiguas[1], pueden ser tan largas como se quiera. Las contraseñas con frases de seis o siete palabras muy largas son bastante comunes. El funcionamiento del sistema S/Key o el OPIE es en gran parte completamente independiente del sistema de contraseñas UNIX.

Además de la contraseña hay dos datos que son importantes para S/Key y OPIE. Uno es lo que se conoce como semilla o llave, que consiste en dos letras y cinco dígitos. El otro dato importante se llama la cuenta de iteración, que es un número entre 1 y 100. S/Key genera la contraseña de un solo uso concatenando la semilla y la contraseña secreta, aplica el hash MD4/MD5 tantas veces como especifique la cuenta de iteración y convierte el resultado en seis palabras cortas en inglés. Estas seis palabras en inglés son su contraseña de un solo uso. El sistema de autentificación (principalmente PAM) mantiene un registro del uso de contraseñas de un solo uso, y el usuario puede validarse si el hash de la contraseña que proporciona es igual a la contraseña previa. Como se utiliza un hash de sentido único es imposible generar futuras contraseñas de un solo uso si una contraseña que ya ha sido usada fuera capturada; la cuenta de iteración se reduce después de cada login correcto para sincronizar al usuario con el programa login. Cuanto la iteración llega a 1, S/Key y OPIE deben reinicializar.

Hay tres programas involucrados en cada uno de estos sistemas. Los programas `key` y `opiekey` aceptan una cuenta iterativa, una semilla y una contraseña secreta, y generan una contraseña de un solo uso o una lista consecutiva de contraseñas de un solo uso. Los programas `keyinit` y `opiepasswd` se usan respectivamente para inicializar S/Key y OPIE, y para cambiar contraseñas, cuentas iterativas o semillas; toman ya sea una frase secreta, o una cuenta iterativa y una contraseña de un solo uso. Los programas `keyinfo` y `opieinfo` examinan los ficheros de credenciales correspondientes (`/etc/skeykeys` o `/etc/opiekeys`) e imprimen la cuenta iterativa y semilla del usuario invocante.

Explicaremos cuatro tipos de operaciones diferentes. La primera es usar `keyinit` o `opiepasswd` a través de una conexión segura para configurar contraseñas de un solo uso por primera vez, o para cambiar su contraseña o semilla. La segunda operación es utilizar `keyinit` o `opiepasswd` a través de una conexión insegura, además de usar `key` u `opiekey` sobre una conexión segura para hacer lo mismo. La tercera es usar `key`/`opiekey` para conectarse a través de una conexión insegura. La cuarta es usar `opiekey` o `key` para generar numerosas llaves, que pueden ser escritas para llevarlas con usted al ir a algún lugar desde el que no se puedan hacer conexiones seguras a ningún sitio.

## 14.5.1. Inicialización de conexiones seguras

Para inicializar S/Key por primera vez cambie su contraseña, o cambie su semilla mientras está conectado a través de una conexión segura (esto es, en la consola de una máquina o vía ssh); use `keyinit` sin ningún parámetro:

    % 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

En OPIE se utiliza `opiepasswd`:

    % 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

En `Enter new secret pass phrase:` o `Enter secret password:`, debe introducir una contraseña o frase. Recuerde que no es la contraseña que utilizará para entrar, se usará para generar sus llaves de un solo uso. La línea ID da los parámetros de su instancia en particular: su nombre de login, la cuenta iterativa y semilla. En el momento del login el sistema recordará estos parámetros y los presentará de nuevo para que no tenga que recordarlos. La última línea proporciona las contraseéas de un solo uso que corresponden a esos parámetros y su contraseña secreta; si fuera a hacer login de manera inmediata, debería usar esta contraseña de una sola vez.

## 14.5.2. Inicialización de conexiones inseguras

Para inicializar o cambiar su contraseña secreta a través de una conexión insegura, necesitará tener alguna conexión segura a algún lugar donde pueda ejecutar `key` u `opiekey`; puede ser gracias a un accesorio de escritorio o en una Macintosh®, o un prompt de shell en una máquina en la que confíe. Necesitará también una cuenta iterativa (100 probablemente sea un buen valor), y puede usar su propia semilla, o usar una generada aleatoriamente. Siguiendo con la conexión insegura (hacia la máquina que está inicializando), ejecute `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

En OPIE debe usar `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

Para aceptar la semilla por defecto (la que el programa `keyinit` llama `key`, llave, para terminar de complicar las cosas), pulse Enter. Antes de introducir una una contraseña de acceso cambie a su conexión o accesorio de escritorio S/Key y dele el mismo parámetro:

    % 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

O para 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

Vuelva a la conexión insegura y copie la contraseña de un solo uso generada al programa que quiera usar.

## 14.5.3. Generación una sola contraseña de un solo uso

Una vez que ha inicializado S/Key u OPIE, cuando haga login verá un prompt parecido al siguiente:

    % telnet ejemplo.com
    Trying 10.0.0.1...
    Connected to ejemplo.com
    Escape character is '^]'.

    FreeBSD/i386 (ejemplo.com) (ttypa)

    login: <username>
    s/key 97 fw13894
    Password:

O, en el caso de OPIE:

    % telnet ejemplo.com
    Trying 10.0.0.1...
    Connected to ejemplo.com
    Escape character is '^]'.

    FreeBSD/i386 (ejemplo.com) (ttypa)

    login: <nombre_de_usuario>
    otp-md5 498 gr4269 ext
    Password:

Como una nota aparte, el prompt de S/Key y OPIE cuenta con una opción útil (que no se muestra aquí): si pulsa Enter en el prompt de contraseña el prompt activará el eco para que pueda ver en pantalla lo que teclea. Esto puede ser extremadamente útil si está tecleando una contraseña a a mano o desde un la lista impresa.

Ahora necesitará generar su contraseña de un sólo uso para responder a este prompt de login. Debe hacerlo en un sistema digno de confianza y en el que pueda ejecutar `key` u `opiekey`. Existen versiones DOS, Windows® y también para Mac OS®. Ambos usarán la cuenta iterativa y la semilla como opciones de línea de órdenes. Puede cortarlas y pegarlas desde el prompt de login de la máquina en la que se está identificando.

En el sistema de confianza:

    % 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

Con 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

Ahora que tiene su contraseña de un solo uso puede proceder con el login:

    login: <nombre_de_usuario>
    s/key 97 fw13894
    Password: <Enter para activar el eco>
    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. Generación de múltiples contraseñas de un solo uso

A veces usted hay que ir a lugares donde no hay acceso a una máquina de fiar o a una conexión segura. En estos casos, puede utilizar `key` y `opiekey` para generar previamente numerosas contraseñas de un solo uso para, una vez impresas, llevárselas a donde hagan falta. Por ejemplo:

    % 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

O para 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

El `-n 5` pide cinco llaves en secuencia, la opción `30` especifica que ese debe ser el último número de iteración. Observe que se imprimen en el orden inverso de uso. Si es realmente paranoico escriba los resultados a mano; si no, puede enviar la salida a `lpr`. Observe que cada línea muestra la cuenta iterativa y la contraseña de un solo uso; puede ir tachando las contraseñas según las vaya utilizando.

## 14.5.5. Restricción del uso de contraseñas UNIX®

S/Key puede implantar restricciones en el uso de contraseñas UNIX basándose en el nombre de equipo, nombre de usuario, puerto de terminal o dirección IP de una sesión de login. Consulte el fichero de configuración `/etc/skey.access`. La página de manual de skey.access(5) contiene más información sobre el formato del fichero y detalla también algunas precauciones de seguridad que hay que tener en cuenta antes de basar nuestra seguridad en este fichero.

Si `/etc/skey.access` no existiera (por defecto es así en sistemas FreeBSD 4.X) todos los usuarios podrán disponer de contraseñas UNIX. Si el fichero existe se exigirá a todos los usuarios el uso de S/Key, a menos que se configure de otro modo en `skey.access`. En todos los casos las contraseñas UNIX son admiten en consola.

Aquí hay un ejemplo del fichero de configuración `skey.access` que muestra las tres formas más comunes de configuración:

    permit internet 192.168.0.0 255.255.0.0
    permit user fnord
    permit port ttyd0

La primera línea (`permit internet`) permite a usuarios cuyas direcciones IP origen (las cuales son vulnerables a una falsificación) concuerden con los valores y máscara especificados utilizar contraseñas UNIX. Esto no debe usarse como mecanismo de seguridad, sino como medio de recordarle a los usuarios autorizados que están usando una red insegura y necesitan utilizar S/Key para la validación.

La segunda línea (`permit user`) permite al nombre de usuario especificado, en este caso `fnord`, utilizar contraseñas UNIX en cualquier momento. Hablando en general, esto solo debe ser usado por gente que no puede usar el programa `key`, como aquellos con terminales tontas o refractarios al aprendizaje.

La tercera línea (`permit port`) permite a todos los usuarios validados en la línea de terminal especificada utilizar contraseñas UNIX; esto puede usarse para usuarios que se conectan mediante dial-ups.

OPIE puede restringir el uso de contraseñas UNIX basándose en la dirección IP de una sesión de login igual que lo haría S/Key. El fichero que gestiona esto es `/etc/opieaccess`, que está incluído por defecto en sistemas FreeBSD 5.0 o posteriores. Revise opieaccess(5) para más información sobre este fichero y qué consideraciones de seguridad debe tener presentes a la hora de usarlo.

Veamos un ejemplo de `opieaccess`:

    permit 192.168.0.0 255.255.0.0

Esta línea permite a usuarios cuya dirección IP de origen (vulnerable a falsificación) concuerde con los valores y máscara especificados, utilizar contraseñas UNIX en cualquier momento.

Si no concuerda ninguna regla en `opieaccess` se niegan por defecto los logins no-OPIE.

### Notas

[1] | En FreeBSD la contraseña del login estándar puede ser de hasta 128 caracteres de longitud.

Anterior | Inicio | Siguiente
DES, MD5 y Crypt | Subir | TCP Wrappers

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.