NOMBRE¶
crypt - cifrado de contraseñas y datos
SINOPSIS¶
#define _XOPEN_SOURCE
#include <unistd.h>
char *crypt(const char *key, const char
*salt);
DESCRIPCIÓN¶
crypt es la función de cifrado de contraseñas. Está basada
en el algoritmo DES (Data Encryption Standard) con algunas variaciones
tendentes (junto con otras cosas) a desalentar el uso de implementaciones por
hardware de buscadores de claves.
key es una contraseña tecleada por el usuario.
salt es una cadena de dos caracteres elegidas del conjunto [
a–
zA–
Z0–
9./]. Esta cadena se
emplea para variar el algoritmo en uno de 4096 modos diferentes.
Al tomar los 7 bit más bajos de cada uno de los primeros ocho
carácteres de
key, se obtiene una clave de 56 bits. Esta clave de
56 bits se utiliza para cifrar repetidamente una cadena constante (usualmente
una cadena consistente en ceros). El valor devuelto apunta a la
contraseña cifrada, una serie de 13 caracteres imprimibles (los primeros
dos caracteres representan al propio
salt). El valor devuelto apunta a
datos estáticos cuyos contenidos se sobreescriben en cada llamada.
Cuidado: El espacio de claves consiste en 2**56 igual a 7.2e16 valores posibles.
Son posibles exhaustivas búsquedas en este espacio de claves empleando
computadores masivamente paralelos. Existen programas, como
crack(1),
que pueden buscar en la porción del espacio de claves que es generalmente
usado por los humanos para sus contraseñas. De aquí que en la
selección de contraseñas se debe, como mínimo, evitar palabras
y nombres comunes. Se recomienda el uso de un programa
passwd(1) que
compruebe durante el proceso de selección si la contraseña es
vulnerable.
El algoritmo DES en sí tiene unas peculiaridades que hacen que el empleo de
la interfaz
crypt(3) sea una pobre elección para otro fin más
allá de la autenticación de contraseñas. Si está planeando
utilizar la interfaz
crypt(3) para un proyecto criptográfico, no
lo haga: consiga un buen libro sobre cifrado y una de las ampliamente
disponibles bibliotecas DES.
VALOR DEVUELTO¶
Se devuelve un puntero a la contraseña cifrada. En caso de error se
devuelve NULL.
ERRORES¶
- ENOSYS
- La función crypt no fue implementada,
probablemente por causa de restricciones de exportación de
EE.UU.
EXTENSIÓN DE GNU¶
La versión glibc2 de esta función tiene las siguientes
características adicionales. Si
salt es una cadena de
carácteres que comienza con los tres carácteres "$1$"
seguidos como mucho por ocho carácteres, y opcionalmente terminada en
"$", en lugar de usar la máquina DES, la función crypt de
glibc usa un algoritmo basado en MD5, y produce una salida de hasta 34 bytes,
a saber "$1$<cadena>$", donde "<cadena>"
representa hasta los 8 carácteres que siguen a "$1$" en la
"sal", seguidos por 22 bytes escogidos del conjunto [
a–
zA–
Z0–
9./]. La clave al
completo tiene significado propio (en lugar de solamente los 8 primeros
bytes).
Los programas que usen esta función deben ser enlazados con la opción
-lcrypt.
SVID, X/OPEN, BSD 4.3, POSIX 1003.1-2001
VÉASE TAMBIÉN¶
login(1),
passwd(1),
encrypt(3),
getpass(3),
passwd(5)