––El "mantra" de cualquier buen ingeniero de
seguridad es : «La seguridad no es un producto, sino un
proceso.» Es algo más que diseñar
criptografía fuerte en un sistema; es diseñar el sistema
por completo de manera que todas las medidas de seguridad, incluyendo la
criptografía, funcionen al unísono.——
-- Bruce Schneier, autor de "Applied Cryptography".
Criptografía
Índice de contenidos
¿Por qué incluimos
criptografía?.
OpenSSH.
Generadores de números pseudoaleatorios
(PRNG): ARC4, ...
Funciones de resumen criptográfico
("hash functions"): MD5, SHA1, ...
Transformaciones criptográficas: DES,
Blowfish, ...
Soporte para componentes
criptográficos
Se buscan criptógrafos internacionales
Otros textos
¿Por qué incluimos
criptografía?
En dos palabras: porque podemos.
El proyecto OpenBSD está ubicado en Canadá.
La Lista sobre Controles a la Exportación
de Canadá no impone ninguna restricción significativa
a la exportación de software criptográfico, y es
incluso más explícita sobre la exportación de
software de libre disponibilidad. Marc Plumb ha realizado un
estudio para
comprobar las leyes sobre criptografía.
Gracias a este detalle, el proyecto OpenBSD ha integrado
criptografía en muchas partes del sistema operativo. Una
condición sine qua non que exigimos del
software criptográfico que usamos es que sea de
dominio público y con licencias
decentes. No hacemos uso directo de criptografía con
patentes restrictivas. También exigimos que provenga de
países con leyes sobre la exportación útiles para
nosotros, ya que no deseamos quebrantar las leyes de ningún
país. Los componentes criptográficos que usamos hoy en
día fueron escritos en Argentina, Australia, Canadá,
Alemania, Grecia, Noruega, y Suecia.
Cuando creamos revisiones de las versiones de OpenBSD, las versiones
preliminares (snapshots), construimos los binarios para
éstas en países libres, para asegurarnos de que todo el
código fuente y binario que ponemos a disposición de los
usuarios esté libre de toda sospecha. En el pasado hemos
compilado nuestras versiones binarias en Canadá, Suecia y
Alemania.
OpenBSD incluye Kerberos V. El código base que usamos es el de
la versión exportable de Heimdal, de Suecia. Hemos ampliado
nuestro código fuente del entorno gráfico X11 para usar
Kerberos.
OpenBSD fue el primer sistema operativo que incluyó IPsec. Hemos
incluido IPsec desde el lanzamiento de OpenBSD 2.1 en 1997. Nuestra
implementación de IPsec integrada en el núcleo, con
aceleración de hardware basada en una variedad de
tarjetas, y nuestro dæmon libre ISAKMP, se usa como una de las
máquinas para las pruebas de conformidad de IPsec realizadas por
VPNC.
La criptografía es hoy un importante medio para mejorar la
seguridad en un sistema operativo. La
criptografía que se utiliza en OpenBSD se puede clasificar
según varios aspectos, descritos en esta página.
OpenSSH
Desde la versión 2.6, OpenBSD contiene
OpenSSH, una versión de
ssh totalmente libre y sin gravámenes de patentes.
OpenSSH interaccionaba con la
versión 1 de ssh y además añadía muchas
características:
- todos los componentes de naturaleza restrictiva (o sea, patentes;
veáse
ssl(8))
habían sido eliminados directamente del código fuente;
cualquier componente bajo licencia o patentado usaba bibliotecas
externas;
- había sido actualizado para dar soporte al protocolo 1.5 de
ssh;
- contenía además soporte para autenticación y
pases de tickets con Kerberos;
- incluía soporte para autenticación con
«contraseña de uso de una sola vez» (one-time
password) con
skey(1).
Dicho brevemente, tomamos una versión de ssh bajo licencia libre
y la «OpenBSD-izamos». Un año más tarde,
extendimos OpenSSH para que también incluyera el protocolo SSH 2.
El resultado fue el soporte para los 3 protocolos principales de SSH:
1.3, 1.5 y 2.0.
Generadores de números
pseudoaleatorios
Un generador de números pseudoaleatorios (PRNG, Pseudo Random
Number Generator) provee a las aplicaciones con una fuente de
números que tienen ciertas propiedades importantes para la
seguridad del sistema:
- Debería ser imposible que un extraño pudiera predecir
la salida del generador de números aleatorios, incluso si conoce
la salida anterior.
- Los números generados no deberían tener patrones que
se repitieran, lo que quiere decir que el PRNG debería tener una
longitud de ciclo muy larga.
Un PRNG es, por lo general, un algoritmo en el que los mismos valores
iniciales producirán las mismas secuencias de salida. En un
sistema operativo multiusuario existen muchos recursos que permiten
alimentar el PRNG con datos aleatorios. El núcleo de OpenBSD usa
el interruptor de tiempo del ratón, las señales de
interrupción de datos de la red, las señales producidas
entre diferentes pulsaciones de teclado y la información de E/S
del disco, para alimentar la entropía. Los números
aleatorios están disponibles para las rutinas del núcleo y
se exportan mediante dispositivos a programas en los directorios de
usuario.
Hasta el momento, los números aleatorios se usan en las
siguientes partes:
- Asignación dinámica de sin_port en bind(2).
- PIDs de procesos.
- IDs de datagramas de IP.
- IDs de transacción de RPC (XID).
- IDs de transacción de NFS RPC (XID).
- IDs de requerimiento de DNS.
- Números de generación de I-nodos (ver
getfh(2) y fsirand(8)).
- Perturbaciones de tiempo en traceroute(8).
- Nombres temporales más robustos para mktemp(3) y
mkstemp(3).
- Aleatoriedad añadida al valor TCP ISS para la
protección contra ataques de «falseamiento de
direcciones» (spoofing).
- Relleno aleatorio en los paquetes esp_old de IPsec.
- Generación de «sales» para los distintos
algoritmos de las contraseñas.
- Generación de retos S/Key falsos.
- En isakmpd(8),
proveer pruebas vivas de intercambios de claves.
Funciones de resumen criptográfico
(hash functions)
Una función de resumen criptográfico comprime sus datos de
entrada en una cadena de tamaño constante. Para una
función de resumen criptográfico no es factible encontrar:
- dos entradas que tengan la misma salida (resistencia a la
colisión);
- una entrada diferente para una entrada dada con la misma salida
(resistencia a 2a preimagen).
MD5, SHA1 y RIPEMD-160 se usan en OpenBSD como funciones de resumen
criptográfico, v.g.:
- En
S/Key(1) para proveer contraseñas de uso de una sola vez.
- En
IPsec(4)
e isakmpd(8)
para autenticar el origen de los datos de los paquetes y asegurar la
integridad de los paquetes.
- Para las contraseñas MD5 de estilo FreeBSD (no activadas por
definición), véase
passwd.conf(5)
- En libssl para la firma digital en los mensajes.
Transformaciones
criptográficas
Las transformaciones criptográficas se usan para cifrar y
descifrar datos. Éstas son comúnmente utilizadas con una
clave de cifrado para cifrar datos, y con una clave de descifrar para
descifrarlos. La seguridad de una transformación
criptográfica debería descansar sólo en el material
de la clave.
OpenBSD provee transformaciones como DES, 3DES, Blowfish y Cast para el
núcleo del sistema y los programas en directorios de usuario, y
se usan en muchas partes, como por ejemplo:
- En libc para crear contraseñas con
Blowfish(3).
Véanse también las
ponencias de USENIX sobre este
tema.
- En
IPsec(4)
para proveer confidencialidad en la red.
- En
isakmpd(8)
para proteger los intercambios en los que se negocie material de clave
IPsec.
- En AFS para proteger los mensajes que pasan por la red, dando
confidencialidad para el acceso remoto a los sistemas de archivos.
- En libssl para dejar que las aplicaciones se comuniquen mediante el
protocolo de facto criptográficamente seguro, SSL.
Soporte para componentes criptográficos
(hardware)
A partir de la versión 2.7 de OpenBSD se empezó a
añadir soporte para componentes criptográficos, como
aceleradores de cifrado y generadores de números aleatorios.
- IPsec crypto dequeue
Hemos modificado IPsec para poder implementar algunas funciones
criptográficas. La mayor parte del código de IPsec
necesita usar criptografía para procesar cada paquete, lo que
requiere cierta sincronización. Para usar el hardware
de un modo correcto y rápido, es necesario separar estos dos
componentes, como hemos hecho nosotros. De este modo se mejoran incluso
los resultados obtenidos del software.
- Hifn 7751
Las tarjetas que usen Hifn 7751 se pueden utilizar como aceleradoras de
criptografía simétrica, o sea
Soekris VPN1201 o
VPN1211 (
información sobre compra) o
PowerCrypt. Con el uso de una
Hifn 7751 en cada extremo de un túnel se obtienen unos resultados
de 64Mbits por segundo para 3DES/SHA1 ESP, una mejoría de casi un
600% en una CPU P3/550. Estamos trabajando para mejorar unos cuantos
puntos, pero desde el 13 de abril de 2000, el código ya se
considera estable. Hemos desarrollado nuestro propio dispositivo para
el soporte de este chip, en lugar de usar el dispositivo de
PowerCrypt (desarrollado en los
EE.UU.), así como nuestros enlaces del dispositivo con IPsec.
El 7751 está actualmente considerado como lento de acuerdo con
las normas de la industria, y muchos distribuidores disponen de
chips más veloces (en la actualidad, incluso el Hifn
tiene un chip más veloz aunque más caro). El
rendimiento máximo con 3DES SHA1 ESP es de unos 64Mbit/seg.
Después del lanzamiento de la versión 2.9, se
añadió soporte para el chip Hifn 7951, un
versión simplificada del 7751 que incluye un acelerador de claves
públicas (sin soporte) y un generador de números
aleatorios (con soporte). Las tarjetas fueron una donación de
Soekris Engineering.
Después del lanzamiento de la versión 3.0, se
añadió soporte para el chip Hifn 7811, una
versión más rápida del 7751 (unos 130Mbit/s) con un
generador de números aleatorios. La tarjeta fue una
donación de GTGI.
Con posterioridad al lanzamiendo de la versión 3.2, se
añadió soporte para el algoritmo de compresión LZS
utilizado por
ipcomp(4).
Con posterioridad a OpenBSD 3.4 se ha añadido soporte para los
chips 7955 y 7956. Además de todas las funcionalidades
que ya tenía en chip 7951 anterior, con éstos se
añade AES.
Al principio fue muy difícil tratar con la compañía
Hifn (incluso llegaron a amenazarnos con llevarnos a juicio por haber
aplicado ingeniería inversa en su algoritmo de desbloqueo
criptológico), pero recientemente han sido muy amables y nos han
ofrecido placas y soporte.
- Hifn 6500
Este dispositivo es una unidad criptogr´fica asimétrica.
Contiene soporte para los algoritmos RSA, DSA, y DH, así como
para otras funciones principales de c´lculo. También
contiene un generador de números aleatorios de alto rendimiento.
Disponemos de uno de estos dispositivos, toda la documentación
necesaria, y código de muestra. A partir de OpenBSD 3.1, tanto
el generador de números aleatorios como la unidad de
números grandes funcionan.
- Hifn 7814/7851/7854
Este dispositivo es un procesador de paquetes y una unidad de
criptografía asimétrica. Tiene soporte para los
algortimos RSA, DSA, y DH, así como para otras funciones
importantes con números grandes, y también tiene un
generador de números aleatorios. En la actualidad sólo
hay soporte para la máquina de números grandes y el
generador de números aleatorios (no para transformaciones de
paquetes).
- Broadcom BCM5801/BCM5802/BCM5805/BCM5820/BCM5821/BCM5822/5823 (o el chip beta Bluesteelnet 5501/5601)
Inmediatamente después del lanzamiento de OpenBSD 2.7,
conseguimos añadir el soporte para las primeras piezas que nos
dio el fabricante, en concreto empezamos con el 5501. Estos
dispositivos ofrecen el rendimiento criptográfico más alto
que hemos visto.
Bluesteelnet fue adquirida por Broadcom y comenzó a fabricar
piezas reales. Su nuevo BCM5805 es parecido, con la excepción de
que también le han añadido un artefacto asimétrico
para el funcionamiento de DSA, RSA, y otros algoritmos parecidos. Con
un rendimiento inicial aproximado de una velocidad más de cuatro
veces superior a la del Hifn, esperamos que este procesador se
popularice muy pronto.
El trato con la gente de Broadcom/Bluesteelnet ha sido exquisito. Nos
entregaron la documentación completa y código de muestra
de sus procesadores, y una cantidad de tarjetas suficiente para hacer
pruebas.
A partir de la versión 2.8 se modificó este controlador
para que pudiera generar números aleatorios en el BCM5805 y en
versiones similares, y que pasara esos datos al dispositivo de
entropía del núcleo del sistema.
A partir de la versión 2.9 se añadió soporte para
el BCM5820, que es en gran parte una versión más
rápida del BCM5805 (64 bits, mayor velocidad de reloj). A partir
de la versión 3.0 también se añadió soporte,
no verificado, para el BCM5821.
A partir de la versión 3.1, hay soporte para la máquina de
números grandes, y las operaciones de RSA/DH/DSA pueden ser
aceleradas.
El soporte para las BCM5801, BCM5802, BCM5821 y BCM5822 se
añadió antes de la versión 3.2 (el soporte para la
BCM5821 no funcionaba a causa de algunos requisitos de manejos del
interruptor no documentados).
En la versión 3.4 se ha añadido soporte parcial para
BCM5823. El chip tiene soporte para AES, pero el controlador no.
- Securealink PCC-ISES
PCC-ISES es un nuevo chipset de los Países Bajos.
Hemos recibido muestras del hardware y documentación, y
ya estamos trabajando en el desarrollo de un controlador. Por el
momento el controlador es capaz de alimentar al dispositivo de
entropía del núcleo con números aleatorios.
- SafeNet SafeXcel 2141
Hemos recibido documentación y muestras de las tarjetas
criptográficas de
SafeNet. Ya hemos empezado a trabajar para desarrollar, como
mínimo, el soporte de la criptografía simétrica de
estos dispositivos.
- 3com 3cr990
3com nos entregó un controlador para el soporte del componente de
ethernet de este chipset, y bas´ndonos en esto hemos
desarrollado nuestro propio controlador de ethernet. Este controlador
ya ha sido integrado, después de haber conseguido una licencia
libre sobre el microcódigo. Debido a la pobre
documentación y a una falta de cooperación (en parte
debida a los altos tipos de beneficios de 3Com), las funciones de IPsec
del chip no tienen soporte... esto ha resultado ser una
completa pérdida de tiempo.
- Tarjeta Intel IPsec
Del mismo modo en que Intel se niega en rotundo a proveer
información sobre sus componentes de la división de redes,
a diferencia de la mayoría de compañías,
también se ha negado a proveernos de ningún tipo de
documentación. Hemos hablado con unos cinco técnicos
integrados en proyectos de desarrollo para esos productos. Todos ellos
querían que pudiéramos disponer de la documentación
necesaria. Pero están atados de manos por unos gestores que no
alcanzan a entender qué beneficio podrían obtener
dándonos documentación. Ólvidese de Intel (si
quiere adquirir hardware gigabit ethernet, le recomendamos
cualquier otra cosa... por un simple motivo: la mayoría de
controladores que tenemos para componentes de redes de Intel han sido
desarrollados sin documentación).
- Intel 82802AB/82802AC Firmware Hub RNG
El chip 82802 (que se encuentra en las placas base i810, i820,
i840, i850 e i860) contiene un generador de números aleatorios
(RNG). Para IPsec de alto rendimiento se requiere más
entropía de números aleatorios. Desde el 10 de abril de
2000, disponemos de soporte para el RNG. Añadiremos más
soporte para otros RNG que se encuentran en chips
criptográficos.
- VIA C3 RNG
La nueva cpu VIA C3 contiene un generador de números aleatorios
como instrucción. Desde OpenBSD 3.3, este
generador de números aleatorios se usa dentro del núcleo
del sistema para alimentar la fuente de entropía.
- Instrucciones VIA C3 AES
Los CPU VIA C3 con un núcleo Nehemiah step 8 o posterior contienen una
implementación de AES accesible a través de instrucciones sencillas.
En 3.4 el núcleo los soporta para ser usados
en un contexto IPsec y exportados por /dev/crypto. En 3.5 el desempeño ha sido sumamente mejorado y OpenSSL
usa ahora la nueva instrucción directamente si está disponible sin
necesidad de entrar al núcleo, dando como resultado una considerable mejora
en velocidad (AES-128 medido a 780MByte/seg) en aquellas aplicaciones que
usan OpenSSL para cifrar con AES.
- OpenSSL
Hace unos años teníamos un proyecto para el soporte de
tarjetas criptográficas con capacidad para RSA/DH/DSA de forma
automática, a través de llamadas a OpenSSL. A partir de
OpenBSD 3.2 ese soporte funciona, y cualquier tarjeta que tenga soporte
con esa funcionalidad utilizará automáticamente el
hardware, incluidos OpenSSH y httpd en modo SSL. No se
requiere ningún cambio en las aplicaciones.
Si alguna persona quiere ayudarnos a programar controladores,
puede unirse al equipo.
Se buscan criptógrafos
internacionales
Nuestro proyecto necesita personas que trabajen en estos sistemas. Si
algún criptógrafo, que no sea estadounidense y que cumpla
los requisitos que se han enumerado en esta página, está
interesado en ayudar con criptografía integrada en OpenBSD, puede
contactar con nosotros.
Otros textos
Los miembros del equipo de OpenBSD han escrito unas cuantas ponencias
sobre los cambios en criptografía que ellos mismos han aplicado a
OpenBSD. Las versiones en postscript de estos documentos estan
disponibles como sigue.
- A Future-Adaptable Password Scheme.
Usenix 1999,
por Niels Provos,
David Mazieres.
Ponencia y
diapositivas.
- Cryptography in OpenBSD: An Overview.
Usenix 1999,
por Theo de Raadt,
Niklas Hallqvist,
Artur Grabowski,
Angelos D. Keromytis,
Niels Provos.
Ponencia y
diapositivas.
- Implementing Internet Key Exchange (IKE).
Usenix 2000,
por Niklas Hallqvist y
Angelos D. Keromytis.
Ponencia y
diapositivas.
- Encrypting Virtual Memory
Usenix Security 2000,
por Niels Provos.
Ponencia y
diapositivas.
- The Design of the OpenBSD Cryptographic Framework.
Usenix 2003, por
Angelos D. Keromytis,
Jason L. Wright, y
Theo de Raadt.
Ponencia.
www@openbsd.org
Originally [OpenBSD: crypto.html,v 1.127 ]
$Translation: crypto.html,v 1.62 2004/08/21 02:26:36 santana Exp $
$OpenBSD: crypto.html,v 1.60 2004/08/21 11:43:46 jufi Exp $