Nuestro objetivo es simple: como telnet y rlogin no son seguros, todos los sistemas operativos deberían incluir el soporte para el protocolo SSH (véase la imagen al final del texto).
Existen dos variedades del protocolo SSH que son incompatibles: SSH 1 y SSH 2.
La más antigua, el protocolo SSH 1, se encuentra en dos
subvariedades: el protocolo 1.3 y el protocolo 1.5. OpenSSH
tiene soporte para ambas. Las dos usan el algoritmo de
criptografía asimétrica
RSA
(cuya patente en los EE.UU. ha caducado, permitiendo
así su libre utilización) para la
negociación de claves, y luego usan una pequeña
lista de algoritmos simétricos para esconder datos:
3DES
y
Blowfish.
(solía haber otros cuantos algoritmos como RC4, pero
sus implementaciones tenín problemas de seguridad).
Algunas implementaciones del protocolo SSH 1 también
incluyen soporte para el algoritmo simétrico
IDEA, pero debido a que está patentado en
algunos países, y a que los otros dos algoritmos ya
incluidos son suficientes, el soporte para IDEA
no está incluido en OpenSSH.
El protocolo SSH 1 usa un simple CRC para la integridad de los
datos que contiene un error de diseño; se sabe que es
posible un ataque de inserción, sin embargo, debido a
una cantidad de ayudas de banda que han sido aplicadas a SSH
durante todos estos años, los ataques contra
éste son muy difíciles de llevar a cabo. Cuando
se usa el algoritmo de cifrado 3DES, la
posibilidad de un ataque de inserción es
significativamente menor (esto lo podemos solucionar en
breve).
La segunda variedad principal de SSH es el protocolo SSH 2.
SSH 2 se inventó para evitar los problemas de patentes
relacionados con RSA (problemas que ya no existen
puesto que la patente ya ha caducado), y para solucionar el
problema de integridad de datos de CRC que tiene SSH1,
además de otras varias razones de naturaleza
técnica. Usando los algoritmos asimétricos
DSA y
DH, el
protocolo 2 evita todas las patentes. El problema con CRC
también se ha solucionado usando un algoritmo real
HMAC.
El protocolo SSH 2 tiene soporte para muchos otros cifrados
simétricos, así como muchas otras nuevas
funcionalidades.
El código de OpenSSH que contiene soporte completo para los protocolos SSH 1.3 y SSH 1.5 fue lanzado el 1 de septiembre de 1.999.
Para muchas de sus funcionalidades criptográficas, OpenSSH depende de la biblioteca OpenSSL, la cual se encuentra bajo una licencia no GPL.
Casi inmediatamente después del lanzamiento de nuestra implementación del protocolo SSH 1, varios grupos ajenos a OpenBSD empezaron a mostrar un gran interés. Damien Miller, Philip Hands, y unos cuantos más, comenzaron a portar OpenSSH a Linux y a otros sistemas operativos Unix. Desde el momento en que empezamos con esta tarea pensamos que el código original de SSH era demasiado complejo; tenía demasiadas dependencias de sistemas operativos como para tratar con él. El modo en que lo abordamos para escribir un código completamente seguro y sólido como una roca, evita tener que tratar con diferencias excesivas como las que se presentaban. Así pues, para facilitarnos el proceso completo de desarrollo a todos, decidimos separar nuestro esfuerzo de desarrollo central del de desarrollo de portabilidad. Esto nos ha funcionado muy bien (como prueba, compare el número de líneas de código entre la versión base y la portable).
Continuando con esa tendencia, los miembros del proyecto OpenBSD que trabajaron en OpenSSH hicieron un esfuerzo para implementar también el soporte del protocolo SSH 2. Este trabajo fue llevado a cabo principalmente por Markus Friedl. Alrededor del 4 de mayo de 2.000, el soporte para el protocolo SSH 2 se implementó lo suficiente como para que ya se pudiera utilizar.