Criptografía básica

La palabra criptografía proviene del griego: kriptos (oculto) + graphos (escritura). La criptografía moderna es una técnica o un conglomerado de técnicas para garantizar ciertos aspectos sobre la seguridad de la información. La criptografía engloba la "Teoría de la información", la "Matemática discreta" y la "Complejidad algorítmica".

La criptografía sólo hace referencia al uso de códigos, y no engloba las técnicas para romper dichos códigos (llamadas criptoanálisis). Para referirse a ambas disciplinas (criptografía y criptoanálisis), se utiliza el término criptología.

Criptosistema

Un criptosistema es una quíntupla (M,C,K,E,D), donde:

  • M representa el conjunto de todos los mensajes sin cifrar que pueden ser enviados.
  • C es el conjunto de todos los posibles mensajes cifrados o criptogramas
  • K representa todas las claves que se pueden usar en el criptosistema.
  • E son las transformaciones de cifrado aplicadas a cada elemento de M para obtener un elemento de C. Existe una transformación diferente para cada clave k, a la que llamamos Ek.
  • D es el conjunto de transformaciones de descifrado, similar a E. Existe una transformación diferente para cada clave k, a la que llamamos Dk

Todo criptosistema debe cumplir lo siguiente:

Dk(Ek(m)) = m

Tipos de criptosistemas

Existen dos tipos de criptosistemas: simétricos o de clave privada, y asimétricos o de clave pública.

Un criptosistema simétrico emplea la misma clave para cifrar como para descifrar. La clave debe estar tanto en el emisor como en el receptor, por lo que hay que transmitirla previamente de manera segura.

Un criptosistema asimétrico emplea dos claves, una pública y otra privada. Una de ellas es empleada para cifrar y la otra para descifrar. Estos criptosistemas son más complejos computacionalmente que los simétricos.

Esteganografía

La esteganografía consiste en la ocultación de información dentro de otra aparentemente inocua. Por ejemplo, se podría ocultar cierta información dentro de una imagen. De este modo la información pasa desapercibida (ya que enviar el mensaje cifrado, es visto claramente una información que se desea ocultar).

Existen aplicaciones que permiten ocultar archivos o texto dentro de un medio multimedia (audio, video o imagen). Por ejemplo, la aplicación steghide en GNU/Linux:

sudo aptitude install steghide

para esconder un archivo dentro de una imagen con steghide tendremos que hacer lo siguiente

steghide embed -cf fotobase.jpg -ef documento a esconder.txt

donde:

  • cf indica el archivo de portada
  • ef Indica el archivo oculto

steghide protege aun mas el documento oculto pidiendo una contraseña así q después de teclear el comando de arriba tendremos que asignar una contraseña escribiéndola dos veces. Y para extraer el contenido oculto lo único q tenemos que hacer es teclear:

steghide extract -sf fotobase.jpg

y ahora nos creara el documento oculto en la carpeta en la que estemos actualmente.

Criptoanálisis

Consisten en comprometer la seguridad de un criptosistema. Esto se puede hacer o bien descifrando el mensaje sin conocer la clave, o bien obteniendo la clave a partir de varios criptogramas.

Para descrifrar el mensaje sin conocer la clave, se pueden utilizar diferentes técnicas. Por ejemplo, se puede escuchar un canal por el que circulan los criptogramas o bien acceder al objeto de nuestro ataque, para que responda con un criptograma cuando le enviemos un mensaje.

También se puede contar con un conjunto de partes de textos claros y sus criptogramas correspondientes. Cuando el sistema es débil, pueden bastar unos cientos de mensajes para obtener información que permita deducir la clave empleada.

Otra estrategia consiste en criptoanalizar el algoritmo de descifrado, con todas y cada una de las claves, a un mensaje cifrado y comprobar las salidas que se obtiene por si alguna tiene sentido. En general, la búsqueda por el espacio de las claves (K) se denomina ataque de fuerza bruta, y solo tienen sentido en ataques a debilidades intrínsecas en el algoritmo de cifrado o al uso de claves débiles. El avance en el hardware hace que los ataques de fuerza bruta puedan comprometer algoritmos que anteriormente eran fuertes (como DES, por ejemplo).

Afortunadamanete existen sistemas poco costosos (o gratuitos, com PGP) que permiten garantizar una seguridad irrompible (de momento).

Seguridad por oscuridad

La seguridad por oscuridad es un principio de ingeniería que busca garantizar la seguridad mediante la ocultación de los detalles de diseño. Por ello, la seguridad por oscuridad se ve comprometida cuando el secreto se desvela.

Un buen algoritmo de cifrado basa su fortaleza en una contraseña fuerte y no en el secretismo del algoritmo. Por ello, los algoritmos libres tienen a ser los más seguros, ya que toda la comunidad puede buscar agujeros de seguridad.

Algoritmos de cifrado

Los algoritmos de cifrado se clasifican en dos grandes tipos:

  • De cifrado de bloque: dividen el texto origen en bloques de bits con un tamaño fijo y los cifran de manera independiente.
  • De cifrado de flujo: el cifrado se realiza bit a bit, byte a byte o carácter a carácter.

Las dos técnicas más sencillas de cifrado de flujo son la sustitución y la transposición.

Cifrado de sustitución

Supongamos que Alicia quiere mandar a Antonio el mensaje siguiente: "meet me at central park". Para que nadie entienda el mensaje, lo que Alicia envía es lo siguiente: "phhw ph fhqwudo sdun". Sin tener conocimientos de criptoanálisis, todos nos fijaremos en la secuencia "hh" de la primera palabra. El cifrado empleado en este mensaje, es llamado cifrado César, porque se achaca a Julio César (el emperador romado) que lo empleó en sus campañas.

Práctica 1. Empleando el el siguiente comando se puede obtener un código cesar a partir de una archivo:

cat documento | tr [a-z] [d-zabc] | tr [A-Z] [D-ZABC]

Por ejemplo, observa el siguiente ejemplo, donde el archivo "documento" contiene la cadena "meet me at central park":

mauri@nostromo:~$ cat documento | tr [a-z] [d-zabc] | tr [A-Z] [D-ZABC] phhw ph dw fhqwudo sdun mauri@nostromo:~$

Crea tu propio algoritmo de sustitución, y pásale el criptograma a un compañero, para que deduzca las sustituciones aplicadas.

Práctica 2. Trata de descifrar el siguiente criptograma obtenido mediante sustitución:

uj larycxpajorj nb uj cnlwrlj zdn jucnaj ujb anyanbnwcjlrxwnb mn dw unwpdjsn.

Cifrado de transposición

Práctica 3. Emplea el siguiente script para aplicar un algoritmo de transposición, consistente en invertir el orden de las palabras.

#!/bin/bash if [ ! -f $1 ] then echo "No existe archivo de origen: $1" else test -f $1_transposicion && touch $1_transposicion while read linea do for palabra in $linea do longitud=`echo $palabra | wc -c` longitud=$(($longitud-1)) for i in `seq $longitud -1 1` do reves=$reves`echo $palabra | cut -c$i` done echo -n "$reves " >> $1_transposicion reves="" done echo "" >> $1_transposicion done < $1 fi

Criptografía simétrica

Dada una clave k, un algoritmo de cifrado E, y otro de descifrado, D, la criptografía simétrica es aquella en la que dado un mensaje de texto claro, m, se cumple que:

D(E(m,k),k)=m

Para que las partes que se comunican puedan cifrar y descifrar, es preciso que intercambien la clave previamente mediante algún canal seguro. En los sistemas actuales, donde un ordenador común puede tener una capacidad de cómputo muy elevada, el tamaño de la clave es el elemento más importante.

Algoritmos criptográficos simétricos

DES

Cada uno de los algoritmos presentados a continuación, pueden utilizar diferentes longitudes de clave, diferentes propiedades de seguridad, de forma que son ideales para diferentes aplicaciones. Vamos a hablar de DES, Triple-DES, Blowfish, IDEA, AES y RC5, aunque hayan más algoritmos.

Data Encryption Standard (DES) es un algoritmo de cifrado, es decir, un método para cifrar información, escogido por FIPS en los Estados Unidos en 1976, y cuyo uso se ha propagado ampliamente por todo el mundo. Hoy en día, DES se considera inseguro para muchas aplicaciones.

El DES (también llamado DEA) es un algoritmo de cifrado por bloques de 64 bits de tamaño. Emplea una clave de 56 bits durante la ejecución (se eliminan 8 bits de paridad del bloque de 64). El algoritmo fue diseñado para ser implementado en hardware. Cuando se utiliza en comunicaciones ambos participantes deben conocer la clave secreta (para intercambiarla se suelen emplear algoritmos de clave pública). El algoritmo se puede usar para encriptar y desencriptar mensajes, generar y verificar códigos de autentificación de mensajes (MAC) y para encriptación de un sólo usuario (p. ej para guardar un archivo en disco).

Aunque el DES era un algoritmo computacionalmente seguro, esto ha dejado de ser cierto, ya que con hardware específico es posible realizar ataques por fuerza bruta que descubran una clave en pocos días. El problema principal es que el tamaño de la clave (56 bits) es demasiado pequeño para la potencia de cálculo actual. De hecho, el DES dejó de ser el algoritmo empleado por el gobierno norteamericano en Noviembre de 1998 y fué elegido AES como sustituto a principio de los 2000. La alternativa Triple DES es segura aunque existen ataques teóricos.

Triple-DES

Triple-DES consiste en encriptar tres veces una clave DES. Esto se puede hacer de varias maneras:

  • DES-EEE3: Tres encriptaciones DES con tres claves distintas.
  • DES-EDE3: Tres operaciones DES con la secuencia encriptar-desencriptar-encriptar con tres claves diferentes.
  • DES-EEE2 y DES-EDE2: Igual que los anteriores pero la primera y tercera operación emplean la misma clave.

Dependiendo del método elegido, el grado de seguridad varía; el método más seguro es el DES-EEE3.

La razón de ser de Triple-DES es mantener compatibilidad con dispositivos que emplean DES, incrementando la seguridad con el alargamiento de la clave. Por ejemplo en DES-EEE3, la clave pasa a ser de 64 bits (contando los bits de paridad) a 192 bits.

AES

El AES (Advanced Encription Standard o Estándar Criptográfico Avanzado), también conocido como Rijndael, es un esquema de cifrado por bloques adoptado como un estándar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de un proceso de estandarización que duró 5 años. Se transformó en un estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los algoritmos más populares usados en criptografía simétrica.

RC4

RC4 es un algoritmo de cifrado de flujo diseñado por Ron Rivest para RSA Data Security. Es un algoritmo de tamaño de clave variable con operaciones a nivel de byte. Es un algoritmo de ejecución rápida en software. El algoritmo se emplea para encriptación de ficheros y para encriptar la comunicación en protocolos como el SSL (TLS).

RC5

RC5 es un algoritmo parametrizable con tamaño de bloque variable, tamaño de clave variable y número de rotaciones variable. Los valores más comunes de los parámetros son 64 o 128 bits para el tamaño de bloque, de 0 a 255 rotaciones dependientes de los datos (operaciones de permutación controlada) y claves de 0 a 2048 bits. Fue diseñado en 1994 por Ron Rivest. La mezcla de rotaciones dependientes de los datos y de distintas operaciones lo hace resistente al criptoanálisis lineal y diferencial. El algoritmo RC5 es fácil de implementar y analizar y, de momento, se considera que es seguro.

IDEA

IDEA (International Data Encription Algorithm) es un algoritmo de cifrado por bloques de 64 bits iterativo. La clave es de 128 bits. La encriptación precisa 8 rotaciones complejas. El algoritmo funciona de la misma forma para encriptar que para desencriptar (excepto en el cálculo de las subclaves). El algoritmo es fácilmente implementable en hardware y software, aunque algunas de las operaciones que realiza no son eficientes en software, por lo que su eficiencia es similar a la del DES. El algoritmo es considerado inmune al criptoanálisis diferencial y no se conocen ataques por criptoanálisis lineal ni debilidades algebraicas. La única debilidad conocida es un conjunto de 251 claves débiles, pero dado que el algoritmo tiene 2128 claves posibles no se considera un problema serio.

Blowfish es un algoritmo de cifrado por bloques de 64 bits desarrollado por Scheiner. Es un algoritmo de tipo Feistel y cada rotación consiste en una permutación que depende de la clave y una sustitución que depende de la clave y los datos. Todas las operaciones se basan en o-exclusivas sobre palabras de 32 bits. La clave tiene tamaño variable (con un máximo de 448 bits) y se emplea para generar varios vectores de subclaves. Este algoritmo se diseño para máquinas de 32 bits y es considerablemente más rápido que el DES. El algoritmo es considerado seguro aunque se han descubierto algunas claves débiles, un ataque contra una versión del algoritmo con tres rotaciones y un ataque diferencial contra una variante del algoritmo.

Práctica 4. Responde las siguientes preguntas:

Ventajas y desventajas de la criptografía simétrica

En los algoritmos de cifrado de bloques hay diferentes modos de operación dependiendo de cómo se mezcla la clave con el texto claro. Estos modos son ECB, CBC, PCBC, CFB, OFB y CTR. Están descritos en http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29. El uso de un modo u otro puede ser determinante en su eficacia en determinados problemas. Por ejemplo, a continuación se muestra una imagen .raw, y su aspecto tras encriptar con AES-128 en dos modos diferentes:

Imagen raw original

Imagen encriptada con AES-128 en modo EBC.

Imagen encriptada con AES-128 en modo CBC.

Como ventajas de los algoritmos de criptografía simétrica están los siguientes:

  • Gran velocidad
  • No aumenta el tamaño del mensaje

Como desventajas, está la distribución de claves:

  • Es preciso que el receptor conozca la clave que se va a utilizar.
  • Si tenemos un número n de personas que necesitan comunicarse entres sí, se necesitan n/2 claves diferentes para cada pareja de personas que tengan que comunicarse de modo privado. Esto puede funcionar con grupos pequeños de personas, pero no con grupos grandes.

PGP y GPG

PGP (Pretty Good Privacy) es un programa de Phil Zimmermann, cuya finalidad es proteger la información que circula por Internet mediante el uso de criptografía asimétrica, y facilitar la autenticación de documentos gracias a firmas digitales. Combina tanto características de criptografía simétrica y asimétrica. Se puede conocer más sobre PGP en http://es.wikipedia.org/wiki/Pretty_Good_Privacy

GPG (GNU Privacy Guard) es una herramienta de cifrado y firmas digitales que implementa el estándar OpenPGP de la IETF, derivado de PGP, aunque liberado bajo licencia GPL. GPG permite el cifrado simétrico y asimétrico. Es posible conocer más sobre GPG en http://es.wikipedia.org/wiki/GNU_Privacy_GuardG.

Práctica 5. Para conocer las opciones que soporta gpg (en GNU/Linux) podemos escribir man gpg. Para cifrar simétricamente, podemos utilizar la opción -c del siguiente modo:

$ gpg -c documento

Mediante la opción --armor (o su abreviatura -a) es posible generar una salida en texto ASCII.

Es posible utilizar diferentes algoritmos criptográficos mediante la opción --cipher-algo. Para conocer los algoritmos soportados, podemos ejecutar el comando siguiente:

$ gpg --version gpg (GnuPG) 1.4.10 Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Home: ~/.gnupg Algoritmos disponibles: Clave pública: RSA, RSA-E, RSA-S, ELG-E, DSA Cifrado: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 Resumen: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 Compresión: Sin comprimir, ZIP, ZLIB, BZIP2

Elige un archivo de tu PC y cifra el documento con uno de los algoritmos disponibles en tu versión de GPG. Anota el algoritmo utilizado. Haz llegar el documento a un compañero. Pásale mediante algún medio seguro la contraseña empleada, para que descifre el archivo.

Repite el proceso anterior, pero en este caso empleando la opción -a para que que el archivo cifrado esté en formato ASCII (base64). Observa el contenido del archivo generado con un editor de textos.

Práctica 6. Existen distintas alternativas para proteger los datos en una unidad, como por ejemplo EFS. En esta ocasión conoceremos la herramienta TrueCrypt. TrueCrypt permite crear sistemas de archivos virtuales (o aprovechar una partición existente) cifrados. TrueCrypt tiene versiones para diferentes sistemas operativos.

Descargar Truecrypt e instalarlo (ya sea en Windows o GNU/Linux). Posteriormente crear un volumen encriptado y montarlo. Copiar dentro del volumen algunos archivos. Después desmontar el volumen.

La página http://www.kriptopolis.org/truecrypt-windows-01 contiene un toturial sobre Truecrypt.

Ampliación. TrueCrypt permite la creación de volúmenes ocultos (dentro de volúmenes externos). De este modo, si nos vemos obligados a revelar la clave del volumen (por ejemplo, bajo extorsión), podemos revelar la clave del volumen externo (donde habrán archivos supuestamente secretos), y no revelar la clave del volumen oculto que contiene. Investiga esta opción y aplícala sobre un disco de 1GB.

Criptografía de clave asimétrica

Durante miles de años, la criptografía simétrica ha sido la única existente. Pero en los 70, dos científicos llamados Diffie y Hellman descubrieron un nuevo método llamado criptografía de clave asimétrica (o de clave pública).

Para la comunicación entre personas que no se conocen, la criptografía simétrica es muy inconveniente. Además, la comunicación entre varias personas requiere una clave por cada par. Cuando hay muchas personas, la criptografía simétrica no es viable.

En la criptografía asimétrica existen dos claves, llamémoslas Kpv (clave privada) y Kpb (clave pública). Supongamos que llamamos E(m,k) al algoritmo de cifrado para el mensaje m, empleando la clave k, y D(x,k) el algoritmo de descifrado para el mensaje x y la clave k. Entonces de cumple lo siguiente:

D(E(m,kpv),kpb) = D(E(m,kpb),kpv) = m

El nacimiento de la criptografía asimétrica se dio al estar buscando un modo más práctico de intercambiar las llaves simétricas Diffie y Hellman, proponen una forma para hacer esto. Sin embargo no fue hasta que el popular método de Rivest Shamir y Adleman RSA publicado en 1978, cuándo toma forma la criptografía asimétrica. Su funcionamiento esta basado en la imposibilidad computacional de factorizar números enteros grandes. Por ejemplo, verás que estas dos operaciones implican un esfuerzo muy diferente a pesar de ser los mismos números:

  • Obtener los factores primos de 527.
  • Multiplicar 17·31.

Algoritmos de criptografía asimétrica

Algunos algoritmos de criptografía asimétrica son Diffie-Hellman, RSA, DSA o ElGamal.

RSA utiliza el problema matemático de la factorización de un número entero n grande (1024 bits). Este número entero se sabe es producto de dos números primos p y q de la misma longitud. Entonces la clave pública es el número n y la privada es (p,q). El tamaño de la llave pública debería ser mas grande que 1024 bits para un márgen razonable de seguridad. Llaves de tamaño, sopongamos, de 2048 bits deberían brindar seguridad por muchos años.

DSA (Digital Signature Algorithm) es un estándar del Gobierno Federal de los Estados Unidos para firmas digitales. Fue un Algoritmo propuesto por el Instituto Nacional de Normas y Tecnología de los Estados Unidos para su uso en su Estándar de Firma Digital(DSS), especificado en el FIPS 186. DSA se hizo público el 30 de agosto de 1991, este algoritmo como su nombre lo indica, sirve para firmar y no para cifrar información. Una desventaja de este algoritmo es que requiere mucho más tiempo de cómputo que RSA.

El protocolo Diffie-Hellman, debido a Whitfield Diffie y Martin Hellman, es un protocolo de establecimiento de claves entre partes que no han tenido contacto previo, utilizando un canal inseguro, y de manera anónima (no autenticada). Se emplea generalmente como medio para acordar claves simétricas que serán empleadas para el cifrado de una sesión (establecer clave de sesión). Siendo no autenticado, sin embargo, provee las bases para varios protocolos autenticados. Su seguridad radica en la extrema dificultad (conjeturada, no demostrada) de calcular logaritmos discretos en un cuerpo finito.

El procedimiento de cifrado/descifrado ElGamal se refiere a un esquema de cifrado basado en problemas matemáticos de logaritmos discretos. Es un algoritmo de criptografía asimétrica basado en la idea de Diffie-Hellman y que funciona de una forma parecida a este algoritmo discreto. El algoritmo de ElGamal puede ser utilizado tanto para generar firmas digitales como para cifrar o descifrar. Fue descrito por Taher Elgamal en 1984 y se usa en software GNU Privacy Guard, versiones recientes de PGP, y otros sistemas criptográficos. Este algoritmo no esta bajo ninguna patente lo que lo hace de uso libre.

Ventajas y desventajas del cifrado asimétrico

El tamaño de la clave es una medida de la seguridad del sistema, pero no se puede comparar el tamaño de la clave del cifrado simétrico con el cifrado de la clave pública para medir la seguridad.

En un ataque de fuerza bruta sobre un cifrado simétrico con una clave de 80 bits, el tacante debe probar hasta 280-1 claves para encontrar la clave correcta.

En cambio, en el cifrado asimétrico, con una clave de 512 bits, el atacante debe factorizar un número compuesto codificado en 512 bits. Mientras 128 bits pueden ser suficientes para los cifrados simétricos, en el cifrado se recomienda el uso de claves públicas de 1024 bits.

La ventaja principal del cifrado asimétrico, es que se emplean dos claves diferentes, de forma que la clave pública se puede distribuir sin poner en riesgo la privacidad de los mensajes cifrados. Pero también tiene bastantes desventajas:

  • Los algoritmos son mucho más lentos que los de cifrado simétrico para la misma longitud de clave.
  • Las claves deben ser de mayor tamaño.
  • El mensaje cifrado ocupa más espacio que el original.

Criptografía híbrida

El cifrado asimétrico ralentiza el proceso de cifrado. Por eso, para la comunicación cifrada se suele combinar la criptografía simétrica y asimétrica:

  • Para intercambiar la clave simétrica, se utiliza criptografía asimétrica. Esta clave es llamada clave de sesión.
  • Una vez intercambiada la clave de sesión de forma secreta, se emplea la criptografía simétrica para el intercambio de mensajes.

De esta forma conseguimos tanto confidencialidad como integridad. Aún nos queda resolver el problema de la autenticación y el no repudio.

El cifrado asimétrico en la práctica

Existen distintas herramientas para aplicar los algoritmos de cifrado asimétrico, que pueden utilizar los usuarios para proteger sus mensajes. Entre ellas tenemos PGP, GPG, SSH, SSL y TLS.

GPG y la criptografía asimétrica

Para generar un par de claves con GPG se utiliza la opción --gen-key. A partir de este momento, el usuario debe ir respondiendo a preguntas que GPG le hará, para decidir los detalles de las claves:

$ gpg --gen-key gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Por favor seleccione tipo de clave deseado: (1) RSA y RSA (predeterminado) (2) DSA y Elgamal (3) DSA (sólo firmar) (4) RSA (sólo firmar) ¿Su selección?:

Habría que responder con el algoritmo deseado.

las claves RSA pueden tener entre 1024 y 4096 bits de longitud. ¿De qué tamaño quiere la clave? (2048) 2048 El tamaño requerido es de 2048 bits Por favor, especifique el período de validez de la clave. 0 = la clave nunca caduca = la clave caduca en n días w = la clave caduca en n semanas m = la clave caduca en n meses y = la clave caduca en n años ¿Validez de la clave (0)?

Si respondemos "1m", la respuestas será:

La clave caduca sáb 04 feb 2012 20:02:58 CET ¿Es correcto? (s/n)

Responderemos afirmativamente. A continuación se pide el identificador de usuario para identificar la clave. Debemos responder con los datos que se piden:

Necesita un identificador de usuario para identificar su clave. El programa construye el identificador a partir del Nombre Real, Comentario y Dirección de Correo electrónico de esta forma: "Heinrich Heine (Der Dichter) " Nombre y apellidos: Mauricio Matamala Dirección de correo electrónico: mauriciomatamala@hotmail.com Comentario: mauri Ha seleccionado este ID de usuario: «Mauricio Matamala (mauri) » ¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir?

Respondemos con "V", y continuamos

Necesita una frase contraseña para proteger su clave secreta. Enter passphrase:

Debemos introducir una contraseña, o más bien una passphrase.

Es necesario generar muchos bytes aleatorios. Es una buena idea realizar alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar la red y los discos) durante la generación de números primos. Esto da al generador de números aleatorios mayor oportunidad de recoger suficiente entropía. No hay suficientes bytes aleatorios disponibles. Por favor, haga algún otro trabajo para que el sistema pueda recolectar más entropía (se necesitan 278 bytes más). .+++++ ....+++++ Es necesario generar muchos bytes aleatorios. Es una buena idea realizar alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar la red y los discos) durante la generación de números primos. Esto da al generador de números aleatorios mayor oportunidad de recoger suficiente entropía. No hay suficientes bytes aleatorios disponibles. Por favor, haga algún otro trabajo para que el sistema pueda recolectar más entropía (se necesitan 92 bytes más). ....+++++ No hay suficientes bytes aleatorios disponibles. Por favor, haga algún otro trabajo para que el sistema pueda recolectar más entropía (se necesitan 114 bytes más). ......+++++ gpg: clave 1557FFBF marcada como de confianza absoluta claves pública y secreta creadas y firmadas. gpg: comprobando base de datos de confianza gpg: 3 dudosa(s) necesarias, 1 completa(s) necesarias, modelo de confianza PGP gpg: nivel: 0 validez: 2 firmada: 0 confianza: 0-, 0q, 0n, 0m, 0f, 2u gpg: siguiente comprobación de base de datos de confianza el: 2012-02-04 pub 2048R/1557FFBF 2012-01-05 [[caduca: 2012-02-04]] Huella de clave = 4251 FEFB EB99 1FA3 34ED 8586 D5A7 39B2 1557 FFBF uid Mauricio Matamala (mauri) sub 2048R/6AB95412 2012-01-05 [[caduca: 2012-02-04]]

Durante el proceso de generación de la clave, gpg pide que se realien varias tareas adicionales (abrir archivos, mover ventanas, mover el ratón) para que los eventos relacionados contribuyan a la entropía de la misma.

Práctica 7. Crear un par de claves pública-privada empleando GPG. La clave debe tener un periodo de validez de 1 mes.

Certificado de revocación

En ocasiones, la clave privada puede verse comprometida, o el usuario olvidar la contraseña. En tal caso, es preciso emitir un certificado de revocación para la clave pública. Es conveniente generar dicho certificado cuanto antes, puesto que si después se pierde la clave privada, o se olvida la contraseña, no se podrá generar. Supongamos que dispongo de los siguientes anillos de claves públicas (en concreto solo una clave pública, la que cree hace un momento):

$ gpg --list-keys /home/mauri/.gnupg/pubring.gpg ------------------------------ pub 2048R/1557FFBF 2012-01-05 [[caduca: 2012-02-04]] uid Mauricio Matamala (mauri) sub 2048R/6AB95412 2012-01-05 [[caduca: 2012-02-04]]

Entonces, para crear el certificado de revocación para la clave pública, 1557FFBF:

$ gpg --output revocacion-1557FFBF.asc --gen-revoke 1557FFBF

Visualizar el anillo de claves públicas

Para poder obtener un listado del contenido del archivo (anillo) de claves públicas, ejecutamos el comando gpg con la opción --list-keys:

$ gpg --list-keys /home/mauri/.gnupg/pubring.gpg ------------------------------ pub 2048R/1557FFBF 2012-01-05 [[caduca: 2012-02-04]] uid Mauricio Matamala (mauri) sub 2048R/6AB95412 2012-01-05 [[caduca: 2012-02-04]]

Exportación de una clave pública

Para que un interlocutor pueda cifrar con nuestra clave pública, primero debemos exportar la clave pública desde nuestro anillo de claves públicas a un archivo. Para ello, haremos los siguiente:

$ gpg --output mauri.gpg --export mauriciomatamala@hotmail.com

El archivo exportado, mauri.gpg, está en binario. Para poder exportarlo en código ascii, utilizaremos el siguiente comando:

$ gpg --armor --output mauri.asc --export mauriciomatama@hotmail.com

De forma que el contenido sería como el siguiente:

-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.10 (GNU/Linux) mQENBE8F+aIBCAC6H0B/3W4Ykpu1knbFfDkdNrZMmJOt1li+a8AGd82e61qft9Jn BtLj0Wzr+3Viwib3xLMp1yQz6Hhcnm2xBaIifOSyQz2xbLaKsHEouL+yXZ7PlukV Fxj9n7j2pE92i5rNGBh9GZcaA9mEi+DEmRpK0UdFrBm15bHJ3+Lun2klq32isIki Y4/w58DsA7jnQUUzAax5GqjaJfCpGMFMt1j5mUEih/JSmfffOojXJ0jEnla7pNHD bD28gsL5Wfy9JuKWMu10eBoJFJQB0Dw/tvFv4a10cLHsKcfNfYzBSCnE6PDPiXt/ ebqkJ7jIZCPtDrmBQL7gtpulQqsX59pJFqUfABEBAAG0OE1hdXJpY2lvIE1hdGFt YWxhIChtYXVyaSkgPG1hdXJpY2lvbWF0YW1hbGFAaG90bWFpbC5jb20+iQE+BBMB AgAoBQJPBfmiAhsDBQkAJ40ABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDV pzmyFVf/v42QB/0cfFvUG2wsPJg219s2wtd6oRT+6dDZ8D7yH8pq/ZOZf/BPFd1O Ubt5YH48PYOn/cFmClLuvKL4NyhOD2M1KLcYR4oEnE16P/O9OAz8qjAoWDGyjDP4 Pr3sCej7UfNKEkKWjoQy38lsq85vBdqfx3xTl8AhoJlkB+e2MlUqXQl9RyTz3z2/ IOtt6rq6pw8L7Xt4CeWCuNeQPJwUUURhRhUZSCiHiOv0LM3/UTny1Rs0YkyrfXb/ OImNVNT+L2uiFrJ+8q7sA9oxlGz8m2YU34MuF8JH+Gmgpmjaqly36/Oq9OZmAKUv +8c1WDYw7kR8f35wjX3YALz2ufMK1WFG1y0RuQENBE8F+aIBCADeu4xt4A84iH1Y k/6s/MWA/hArxRqSoFBwScc1usjerXrB+XEnlZqHPJ7QUAE6LVjU/o1/GZU7UFLa qaT83siX/UZMQVUf3vSnjdcfpGcryQ74J/88/1pd9wxDnbrkOhwVVsXUPMuUrxYZ 7VzP25IFKwZwZSkku+Ejda2kbB1bKXEf4P4Afo3TizzhMMfK5guVeBXoilUL+dfO yQYooa+VVF8SWWGwmYxQ8OIE49FLW6Qp/RzNmME5/oXHGqNjiNVngOnZielwvuGw 1mq9k6fqZ9qCdviRKrMQprS/nsNu5kjG62u88DLmt9Ir0fL45ME4xCEezpvhq4hR mqsHfrvdABEBAAGJASUEGAECAA8FAk8F+aICGwwFCQAnjQAACgkQ1ac5shVX/78G fggAs/s2wg/RXPalwn6RGC/oBkcJwTq6IbCqxRE0JN1PA6hYf3LAQBR8IO8sro+P pfuW3/qq08TeXVmF3Z/kgvoN15/lc3+E5EufHA8D03pOreQ+F0dxe5XEToHplmfn KEmNvFEgXrl9TGE2RBpZ1zfU0R5KtGJUWZ7Y2Lbja3qlIJRNPo4qcrBTOQpWxJgx +GDkfz0z8wcGU3nC0qX6fDi6vX6T9DdN2yOKgbT5JOI0eDT6MGzIQBbWkwB0FkcA 35N54Re2zP6AlfGe0LzPIoblTbkVQ6A5Mk5lTAbghxk4BZ+lXlainn8AOCfrUqK7 zeW8vc9WTx2NAvFpLXeXfUhgzQ== =a25Z -----END PGP PUBLIC KEY BLOCK-----

También se puede exportar la clave privada mediante el comando gpg --armor --output privada.asc --export-secret-key mauriciomatamala@hotmail.com

Esta clave pública debe ser compartida con los usuarios que deseen comunicarse conmigo de manera segura. Supongamos que deseo que Fulano de Cuadros me pueda enviar mensajes cifrados con mi clave pública. Entonces, Fulano debe copiar mi clave pública, guardarla en un archivo, e importarla a su anillo de claves públicas:

$ gpg --import mauri.gpg

Servidores de claves públicas

Una forma de distribuir una clave pública es mediante un servidor de claves públicas. Por ejemplo, pgp.rediris.es. Para remitir nuestra clave, debemos hacer lo siguiente:

gpg --send-keys --keyserver pgp.rediris.es

Para hacer una búsqueda de claves públicas que queramos añadir a nuestro anillo de claves públicas, podemos buscar en http://www.rediris.es/keyserver/. O bien debemos ejecutar lo siguiente:

gpg --keyserver pgp.rediris.es --recv-keys 1557FFBF

¿Qué pasa si se me olvida mi contraseña o pierdo mi clave privada? En este caso, o en el caso de nuestra clave haya sido comprometida, tenemos que generar un certificado de revocación, como vimos anteriormente. Luego importamos el certificado de revocación.

gpg --import revocacion.asc

... y lo subimos al servidor de claves (elegiremos RedIRIS de nuevo):

gpg --keyserver pgp.rediris.es --send-keys 1557FFBF

Una vez subida la clave al servidor, ésta ya no servirá para firmar, sino solamente para abrir mensajes cifrados antiguos.

Cifrado/descifrado de documentos

Suponiendo que deseo enviar un mensaje cifrado a Fulano de Cuadros, primero he debido importar su clave pública. De este modo, mi anillo de claves públicas será como el siguiente:

$ gpg --list-keys /home/mauri/.gnupg/pubring.gpg ------------------------------ pub 2048R/1557FFBF 2012-01-05 [[caduca: 2012-02-04]] uid Mauricio Matamala (mauri) sub 2048R/6AB95412 2012-01-05 [[caduca: 2012-02-04]] pub 2048R/C3E0AE8B 2011-12-30 [[caduca: 2012-01-29]] uid Fulano de Cuadros (ful) sub 2048R/FA18112B 2011-12-30 [[caduca: 2012-01-29]]

A continuación, para enviar un mensaje cifrado a Fulano de Cuadros, necesito contar con el mensaje. Pongamos por caso, que tengo un archivo, llamado "mensaje.txt" con el contenido siguiente: "La contraseña de administrador del dominio es 5up3R)eKr3t0!". Entonces, el cifrado de dicho mensaje se hará del siguiente modo:

$ gpg --armor --output mensaje.asc --encrypt --recipient fulano.cuadros@mimail.com mensaje.txt

Se pueden indicar más de un recipiente a la vez. Por ejemplo: gpg --armor --output mensaje.asc --encrypt --recipient fulano.cuadros@mimail.com --recipient zutano.copas@mimail.com mensaje.txt.

El mensaje generado es como lo siguiente:

-----BEGIN PGP MESSAGE----- Version: GnuPG v1.4.10 (GNU/Linux) hQEMAxb00iD6GBErAQf9HwJyqyXRfDkxTedhFQR1S0nOFxFX6eVLQoQ7GzHiDnd6 QVbknoBzTmj4Bh5rrNDoM1LMLVESqUYjbacOteTmxyKLXbHZCDahKN9YznMu2Wjq 5sL/VWGO0m6IoORBql+XGutcw523q8joCmg4uvxoxq/SGQFHDofvkKFr0NDifHzA HOyRAojd+oWi6rlBhNTaZS4pVKeK49g/RT1SToFmLXucfaXoastKoubPugcuVcs9 wtS0Hfhdcv+TisQxdHBT8MLzSh41PG73UY9EAxw2x2LTr63Bu0fBbpPtlAWo+RaH tK7GBkI7fCwXviefi/meoEvWE5Uc7cnv7GVTqZzPPdJ/AR9DcVE9f0FYDgQkifrl iHURQh2I4G9AuM7/6ElMrISomL69rL5SaY1Ij3eUHDtx7lEP7UBCRvoUea9zfxf+ jp9RABWeMTouy/yzGv+5Y9+YSodU9VYSp5KrzatL/BToBfQ0KKot8r8ELt7O4eTU LbN3a1RGUhwVHnuLRz+HlA== =ZqVK -----END PGP MESSAGE-----

Cuando Fulano de Cuadros reciba el mensaje, podrá desencriptar del siguiente modo:

fulano:~$ gpg --output mensaje.txt --decrypt mensaje.asc

De ese modo se generará el archivo mensaje.txt con el mensaje original.

Validación de la clave pública

Si hemos seguido los pasos anteriormente indicados, podremos ver como GPG nos ha advertido de que la clave pública de Fulano de Cuadros podría ser falsa. Esta advertencia se debe a que no hemos firmado la clave pública. Para firmar la clave pública primero se supone que hemos comprobado que la clave es auténtica.

$ gpg --edit-key fulano.cuadros@mimail.com gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. pub 2048R/C3E0AE8B creado: 2011-12-30 [caduca: 2012-01-29] uso: SC confianza: desconocido validez: desconocido sub 2048R/FA18112B creado: 2011-12-30 [caduca: 2012-01-29] uso: E desconocido (1). Fulano de Cuadros (ful)

Una vez editada la clave, podemos obtener su huella digital (fingerprint). Si la clave pública es falsa, la huella digital no será la correcta:

Orden> fpr pub 2048R/C3E0AE8B 2011-12-30 Fulano de Cuadros (ful) Huella de clave primaria: C183 DC34 F569 08AF 458B 0788 6EB3 101B C3E0 AE8B

Ahora debemos comprobar con Fulano de Cuadros, ya sea por teléfono, en persona o mediante algún canal seguro, la huella digital de la clave. Una vez que la hayamos comprobado, la podemos firmar, con la orden "sign":

Orden> sign pub 2048R/C3E0AE8B creado: 2011-12-30 [caduca: 2012-01-29] uso: SC confianza: desconocido validez: desconocido Huella de clave primaria: C183 DC34 F569 08AF 458B 0788 6EB3 101B C3E0 AE8B Fulano de Cuadros (ful) Esta clave expirará el 2012-01-29. ¿Está realmente seguro de querer firmar esta clave con su clave: "Mauricio Matamala (mauri) " (1557FFBF)? ¿Firmar de verdad? (s/N) s Necesita una frase contraseña para desbloquear la clave secreta del usuario: "Mauricio Matamala (mauri) " clave RSA de 2048 bits, ID 1557FFBF, creada el 2012-01-05 gpg: el agente gpg no esta disponible en esta sesión Introduzca frase contraseña:

Finalmente, podemos comprobar el anillo de firmas, con la orden "check":

Orden> check uid Fulano de Cuadros (ful) sig!3 C3E0AE8B 2011-12-30 [autofirma] sig! 1557FFBF 2012-01-05 Mauricio Matamala (mauri)

Para terminar la edición de la clave pública de Fulano de cuadros, usamos la orden "quit":

A partir de ahora, cuando firmemos con la clave de Fulano de Cuadros, no recibiremos la advertencia.

Suponiendo que hemos intercambiado la clave pública con un compañero, hacer los siguiente:

  • Cifraremos un archivo que contenga una pregunta y lo remitiremos por email al compañero que nos proporcionó su clave pública.
  • Nuestro compañero, a su vez, nos remitirá un archivo cifrado para que nosotros lo descifremos, con la respuesta a nuestra pregunta.
  • Por último, enviaremos el documento cifrado a alguien que no estaba en la lista de destinatarios y comprobaremos que este usuario no podrá descifrar este archivo.

Firma digital

La firma digital ofrece soporte para la autentificación e integridad, así como para el no repudio en origen, ya que la persona que crea y firma el mensaje, no puede luego desdecirse, puesto que el mensaje está firmado con la clave privada, que solo está en poder de una persona.

Para la creación y verificación de firmas, se utiliza el par público y privado de claves en una operación que es diferente a la de cifrado y descifrado. Se genera una firma con la clave privada del firmante. La firma se verifica por medio de la clave pública correspondiente. Por ejemplo, Fulano de Cuadros haría uso de su propia clave privada para firmar digitalmente un artículo, cuya autoría quiere poder demostrar si alguien la pone en duda. El receptor usaría la clave pública de Fulano para comprobar la firma, verificando de este modo que el envío proviene realmente de Fulano, y que no ha sido modificado desde el momento en que lo firmó. Una consecuencia directa del uso de firmas digitales es la dificultad en negar que fue el propio usuario quien puso la firma digital, ya que ello implicaría que su clave privada ha sido puesta en peligro.

Para firmar un documento con GPG, podemos hacer los siguiente:

$ gpg --output mensaje.sig --sign mensaje.txt

De este modo obtendremos un archivo "mensaje.sig" en formato binario, con la firma. Dentro de dicho archivo está tanto el mensaje como la firma. Para verificar el mensaje, debemos ejecutar el siguiente comando:

$ gpg --verify mensaje.sig

Y para extraer el mensaje, debemos ejecutar el siguiente comando:

$ gpg --output mensaje.txt --decrypt mensaje.sig

En ocasiones no es conveniente tener dos archivos separados (como por ejemplo para uso en el correo electrónico). En tal caso, hay una forma que que mensaje y firma viajen juntos:

$ gpg --clear-sign mensaje.txt

El resultado será como el siguiente:

-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 La contraseña de administrador del dominio es 5up3R)eKr3t0! -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iQEcBAEBAgAGBQJPBjx8AAoJENWsiD1717WbbpwIALYl0DAGevXdJFOjIA4+Xwb5 uWzXLitc3w8H8LGa/e2Wh4wB9VZeQz8qEFnZ3zyh2Q+25Z2VAggYl1uPekNd6LMX EJ/rhgcGqGnNtiAfKPXPanoWmrTSkDo8CjyyGA5JvpxzfJBRxqHW1xbhLSgwWxgw eCBxyrTWn5ycfh6gHdWcqLVGNNEAr7E3PHbFdxUdVoOyIq1pGugdT5SKHUPNnAQd 2JPanx5QaVpx46OwqnURMg2MoPokD4S5ZBbQKdXKYZfn5Rv615Xt4ZFrJyOhJN+M wTgePYnuPMQF4H1CCygd3eI9ZcIcqL7ZVOmItEGfmNkfzjBTxSA2DOw0veOz3EU= =YpQm -----END PGP SIGNATURE-----

Cualquier cambio en el mensaje o en la firma, dará un error en la validación.

Práctica. Crea la firma digital de un archivo de texto cualquiera y envíale éste junto al documento con la firma a un compañero por correo electrónico. Verifica que la firma recibida del documento es correcta. Después, modifica el archivo ligeramente, insertando un carácter o un espacio en blanco, y vuelve a comprobar si la firma se verifica.

Certificados digitales

Según puede interpretarse de los apartados anteriores, la eficacia de las operaciones de cifrado y firma digital basadas en criptografía de clave pública sólo está garantizada si se tiene la certeza de que la clave privada de los usuarios sólo es conocida por dichos usuarios y que la pública puede ser dada a conocer a todos los demás usuarios con la seguridad de que no exista confusión entre las claves públicas de los distintos usuarios.

Para garantizar la unicidad de las claves privadas se suele recurrir a soportes físicos tales como tarjetas inteligentes o tarjetas PCMCIA que garantizan la imposibilidad de la duplicación de las claves. Además, las tarjetas criptográfica suelen estar protegidas por un número personal sólo conocido por su propietario que garantiza que, aunque se extravíe la tarjeta, nadie que no conozca dicho número podrá hacer uso de ella.

Por otra parte, para asegurar que una determinada clave pública pertenece a un usuario en concreto se utilizan los certificados digitales. Un certificado digital es un documento electrónico que asocia una clave pública con la identidad de su propietario.

Adicionalmente, además de la clave pública y la identidad de su propietario, un certificado digital puede contener otros atributos para, por ejemplo, concretar el ámbito de utilización de la clave pública, las fechas de inicio y fin de la validez del certificado, etc. El usuario que haga uso del certificado podrá, gracias a los distintos atributos que posee, conocer más detalles sobre las características del mismo.

Terceras partes de confianza

Una vez definido el concepto de certificado digital se plantea una duda: ¿cómo confiar si un determinado certificado es válido o si está falsificado?. La validez de un certificado es la confianza en que la clave pública contenida en el certificado pertenece al usuario indicado en el certificado. La validez del certificado en un entorno de clave pública es esencial ya que se debe conocer si se puede confiar o no en que el destinatario de un mensaje será o no realmente el que esperamos.

La manera en que se puede confiar en el certificado de un usuario con el que nunca hemos tenido ninguna relación previa es mediante la confianza en terceras partes. La idea consiste en que dos usuarios puedan confiar directamente entre sí, si ambos tienen relación con una tercera parte ya que ésta puede dar fé de la fiabilidad de los dos.

La necesidad de una Tercera Parte Confiable (TPC ó TTP, Trusted Third Party) es fundamental en cualquier entorno de clave pública de tamaño considerable debido a que es impensable que los usuarios hayan tenido relaciones previas antes de intercambiar información cifrada o firmada. Además, la mejor forma de permitir la distribución de los claves públicas (o certificados digitales) de los distintos usuarios es que algún agente en quien todos los usuarios confíen se encargue de su publicación en algún repositorio al que todos los usuarios tengan acceso.

En conclusión, se podrá tener confianza en el certificado digital de un usuario al que previamente no conocemos si dicho certificado está avalado por una tercera parte en la que sí confiamos. La forma en que esa tercera parte avalará que el certificado es de fiar es mediante su firma digital sobre el certificado. Por tanto, podremos confiar en cualquier certificado digital firmado por una tercera parte en la que confiamos. La TPC que se encarga de la firma digital de los certificados de los usuarios de un entorno de clave púbica se conoce con el nombre de Autoridad de Certificación (AC).

Infraestructura de clave pública (PKI)

El modelo de confianza basado en Terceras Partes Confiables es la base de la definición de las Infraestructuras de Clave Pública (ICPs o PKIs, Public Key Infrastructures).

Una infraestructura de Clave Pública es un conjunto de protocolos, servicios y estándares que soportan aplicaciones basadas en criptografía de clave pública. Algunos de los servicios ofrecidos por una ICP son los siguientes:

  • Registro de claves: emisión de un nuevo certificado para una clave pública.
  • Revocación de certificados: cancelación de un certificado previamente emitido.
  • Selección de claves: publicación de la clave pública de los usuarios.
  • Evaluación de la confianza: determinación sobre si un certificado es válido y qué operaciones están permitidas para dicho certificado.
  • Recuperación de claves: posibilitación de recuperar las claves de un usuario.

Las ICPs están compuestas por distintas terceras partes en los que todos los demás usuarios de la infraestructura confían:

  • Autoridad de Certificación: emite y elimina los certificados digitales.
  • Autoridad de Registro: controla la generación de los certificados, procesa las peticiones y comprueba la identidad de los usuarios, mediante el requerimiento de documentación de identificación personal oportuna.
  • Autoridad de Repositorio: almacenan los certificados emitidos y eliminados.

El estándar X.509

El formato estándar de certificados es X.509. Su distribución se puede hacer:

  • Con clave privada (suele tener extensión *.pfx o *.p12). Está destinado a su uso privado, mediante la exportación/importación como método de copia de seguridad.
  • Sólo con clave pública (con extensión *.cer o *.crt), destinado a la distribución no segura, para que otras entidades o usuarios puedan verificar la identidad, en los archivos o mensajes firmados.

Práctica. Abrir la página www.juntadeandalucia.es/educacion/portalseneca y comprobar el fallo al no contar con el certificado raíz que emitió el certificado de www.juntadeandalucia.es. A continuación añadir el certificado raíz de la FNMT en el navegador web que utilices. Por último volver a abrir la página, de forma que ya no se produzca el error.

En el sitio http://library.linode.com/web-servers/apache/ssl-guides/ubuntu-10.04-lucid se muestra como obtener un certificado firmado por una CA.

SSH

SSH es la herramienta más usada en el mundo *N?X para la administración remota, gracias a su seguridad. Al iniciar una sesión por SSH es preciso autenticarse en primer lugar. La autenticación es posible hacerla mediante contraseña, aunque también la podemos hacer empleando certificados. El proceso sería el siguiente:

Vamos a suponer que estamos en "laptop-52" y queremos poder autenticarnos contra el servidor "SSH-srv" utilizando certificados en vez de contraseña. El primer paso es crear la clave pública y la privada en "laptop-52", mediante el siguiente comando:

$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/usuario/.ssh/id_rsa): Enter passphrase (empty for no passphrase):

Si dejamos en blanco, no tendremos que introducir contraseña al iniciar sesión ssh.

Enter same passphrase again: Your identification has been saved in /home/usuario/.ssh/id_rsa. Your public key has been saved in /home/usuario/.ssh/id_rsa.pub. The key fingerprint is: 0e:73:29:66:8e:f8:2e:fb:96:49:e4:02:3a:1c:61:5d usuario@laptop-50

Si comprobamos en el directorio "/home/usuario/.ssh", veremos lo siguiente:

$ cd /home/usuario/.ssh $ ls id_rsa id_rsa.pub known_hosts

Ahora debemos copiar la clave pública de "laptop-50" en "SSH-srv". Podemos hacer utilizando el mismo SSH:

$ scp /home/usuario/.ssh/id_rsa.pub usuario@SSH-srv:/home/usuario/.ssh/authorized_keys

Listo. Con esto, ya podemos iniciar una sesión desde "laptop-50" en "SSH-srv" mediante clave pública, sin contraseña:

$ ssh usuario@SSH-srv SSH-srv 2.6.32-33-generic #70-Ubuntu SMP Thu Jul 7 21:09:46 UTC 2011 i686 GNU/Linux Ubuntu 10.04.3 LTS Welcome to Ubuntu! * Documentation: https://help.ubuntu.com/ 129 packages can be updated. 85 updates are security updates. Last login: Fri Jan 6 20:58:15 2012 from laptop-50.local

Práctica. Intercambia con un un compañero tu clave pública de SSH. Después añade la clave pública del compañero al anillo de claves públicas de SSH. Crea una cuenta de usuario en tu sistema para que el compañero pueda iniciar sesión por SSH. Comprueba que podéis iniciar sesión en la otra máquina sin que os pida la contraseña.

Saludos.