Rápida introducción a RSA y PGP/GPG
Teoría
RSA es un método de cifrado válido tanto para transmisiones seguras de datos, almacenado de información cifrada y para certificar que la información no ha sido manipulada por terceros.
PGP (Pretty Good Privacy) es el programa, diseñado y desarrollado por Phil Zimmermann en 1991, más conocido que implementaba RSA. El estandar OpenPGP del IETF fue desarrollado basandose en PGP. En el entorno Linux, GnuPG (Gnu Privacy Guard) es la implementación de dicho estándar.
Cada usuario dispone de dos claves, una clave privada y otra clave pública. Dichas claves son generadas por el usuario y nunca se generarán dos parejas de claves iguales. Normalmente cada pareja de claves pública-privada se asocia a una dirección de correo electrónico, aunque no es imprescindible. Mediante éstas claves se pueden realizar las siguientes operaciones:
Uno de los puntos flacos del sistema es el intercambio de claves. El sistema no dispone de un protocolo para la comunicación de las claves públicas que sea absolutamente inmune a engaños. Sólo es posible asegurarse de que una persona nos ha entregado su llave pública si las conocemos y es ella misma la que personalmente nos entrega la llave pública en un medio de almacenamiento físico que él mismo haya escrito, y aún así podrían hacerle dado el cambiazo. Por ello el usuario ha de asegurarse de que cuando recibe una clave pública, ésta pertenece a quién dice. Dado que las claves son bastante largas, se usa una huella digital o fingerprint, que es un resumen de la clave lo suficientemente largo como para que sea única y lo suficientemente corta como para que pueda ser comunicada mediante medios humanos (por ejemplo, por teléfono o escrita a mano). Así, una vez recibida una clave pública, es posible confirmarla recibiendo del dueño la huella digital, y asegurando que la clave que tenemos corresponde con la huella recibida. Por supuesto, hemos de asegurarnos que dicha huella digital nos la da el dueño de la clave que queremos comprobar, pero al ser la huella digital más corta y más fácil de comunicar, esto resulta más sencillo.
Por otro lado existen los servidores de claves públicas. Son ordenadores que almacenan las claves públicas de los usuarios y algunos datos (huella, correo electrónico del usuario, etc.). Un usuario que quiera hacer pública su clave pública puede subirla a uno de estos servidores. Normalmente los servidores de claves están interconectados de manera que periódicamente se informan de las novedades, por lo que sólo es necesario subir la clave pública a uno de los servidores, que en poco tiempo ésta figurará también en el resto de servidores.
Un usuario puede validar una clave pública de otro usuario firmando ésta con su propia clave privada. De ésta manera afirma o certifica que él confía en dicha clave pública. Así, cuando se inserta una clave pública recibida en gpg, ésta en principio no esta avalada. Si el usuario confía en que ha recibido la clave correctamente, firmará (avalará) dicha clave, indicando a gpg que confía en ella. La única diferencia es que cuando gpg usa una clave no avalada, dará un aviso de que, aunque descifre o valide correctamente firmas digitales, no es de confianza.
Éste sistema de firma de claves permite establecer anillos de confianza. Así, si yo recibo una clave pública firmada por un usuario en el que yo confío, se interpreta que la clave recibida es de confianza. De ésta manera, además de poder confiar en las claves que uno mismo valida, es posible confiar en las claves en las que otros usuarios bien conocidos confían. Por supuesto es responsabilidad de cada uno decidir en quién se confía. Así, es posible subir a un servidor de claves una clave pública de un usuario firmada por otros, de manera que dicha clave pública estará avalada por las firmas de los otros usuarios. Conviene tener en cuenta que aunque un usuario puede coger la clave pública de otro usuario, firmarla y subirla a un servidor de claves normalmente es el dueño de la clave quién decide que otros usuarios la avalarán, por lo que se suele enviar la clave pública firmada por otro usuario a su dueño, y será éste el que decida si sube o no su firma avalada por el otro usuario.
Dado que los servidores de claves no permiten el borrado de las claves que almacenan, ha de existir un método para anular una clave. Dicho anulación puede ser por que la correspondiente clave privada ha sido comprometida (robada o publicada), no va a ser usada más, ha sido sustituida por otra o por la razón que fuere. El usuario ha de generar un certificado de revocación, generado mediante su clave privada, que es enviado el servidor. Notar también que las claves pueden generarse con un período de validez concreto, superado el cuál son revocadas automáticamente. También hay que tener en cuenta que una clave revocada o caducada ya no podrá usarse para cifrar ni para firmar datos así como tampoco podrá emplearse para descifrar los datos codificados durante el período de validez de la clave.
gpg permite crear confianza localmente. Es decir, asignar a las claves públicas recibidas un grado de confianza. El nivel de confianza en una clave se establece una vez ésta ha sido avalada por el usuario (mientras no se firme no se podrá establecer el grado de confianza). Así, si recibo una clave pública avalada por alguno de los usuarios de los que ya tengo su clave pública firmada, gpg asignará a dicha nueva clave la confianza que tenemos en dicho usuario.
Por último mencionar que gpg almacena las claves privadas cifradas mediante una clave (cifrado simétrico: una sola clave permite cifrar y descifrar) que será pedida normalmente cada vez que se quiera hacer uso de la clave privada. Esto hace más difícil el robo claves privadas.
Las fuentes para éste artículo ha sido la web de Antonio Caravantes, concretamente su sección sobre PGP. Es una larga explicación de PGP, muy entendible y que profundiza sobre todo en aspectos prácticos y útiles. Del taller de criptografía de Arturo Quirantes Sierra se puede obtener mucha información de carácter más técnico en su sencillo curso de PGP.
Práctica
Para poner a funcionar un sistema de claves en mi sistema Linux he optado por instalar gpg, KGpg para manejar gpg desde KDE de una manera fácil y sencilla, y los plugins enigmail y enigmime para Thunderbird. En el artículo de Kriptopolis Pinguino en salsa de bits se explica como echarlo a andar.
Yo ya tengo mi par de claves generadas y funcionando sin problemas en Thuderbird, así como en los menús contextuales de KDE para cifrar archivos.
RSA es un método de cifrado válido tanto para transmisiones seguras de datos, almacenado de información cifrada y para certificar que la información no ha sido manipulada por terceros.
PGP (Pretty Good Privacy) es el programa, diseñado y desarrollado por Phil Zimmermann en 1991, más conocido que implementaba RSA. El estandar OpenPGP del IETF fue desarrollado basandose en PGP. En el entorno Linux, GnuPG (Gnu Privacy Guard) es la implementación de dicho estándar.
Cada usuario dispone de dos claves, una clave privada y otra clave pública. Dichas claves son generadas por el usuario y nunca se generarán dos parejas de claves iguales. Normalmente cada pareja de claves pública-privada se asocia a una dirección de correo electrónico, aunque no es imprescindible. Mediante éstas claves se pueden realizar las siguientes operaciones:
- Cifrado: La clave pública del usuario permite cifrar los datos de un archivo (o cualquier otro conjunto de datos) de manera que sólo la clave privada es capaz de descifrar la información a su estado original. De ésta manera es posible guardar datos cifrados sólo accesibles por el usuario, ya que será el único poseedor de su clave privada, o enviar datos al usuario a través de un medio inseguro como el correo electrónico de manera que sólo el usuario poseedor de la correspondiente clave privada pueda leerlos correctamente.
- Firma digital: Mediante la clave privada del usuario es posible firmar un conjunto de datos (un correo electrónico, un fichero, etc.). La firma digital es un pequeño anexo de datos a la información original que, mediante el uso de la correspondiente clave pública del usuario, certifica que los dichos datos originales no han sido alterados y que quién los firmó utilizo la clave privada del usuario. De ésta manera es posible que un usuario envíe datos a través de un canal inseguro y se asegure que el contenido es recibido por el destinatario sin haber sido alterado. Si dichos datos son modificados de alguna manera el destinatario será avisado ya que al usar la clave pública del usuario para comprobar la firma digital, ésta no será correcta. Así, también es posible certificar que, por ejemplo, un usuario escribió un mensaje de correo electrónico que después firmó, ya que sólo él podría usar su clave privada para generar una firma válida.
- Firma y cifrado: Es posible combinar ambas acciones, pudiendo así enviar datos a través de un canal inseguro de manera que sólo el destinatario final los pueda leer y se asegure de que dichos datos no han sido alterados.
- Descifrado: Mediante la clave privada de una pareja de claves es posible descifrar los datos codificados usando la clave pública.
- Comprobación de la firma digital: Se verifica, usando la clave pública, que un conjunto de datos no ha sido alterado. La firma digital es añade a los datos originales, pero no forma parte de estos. Cualquier cambio en la firma o en los datos implicará que la firma digital no será válida al comprobarla con la clave pública.
Uno de los puntos flacos del sistema es el intercambio de claves. El sistema no dispone de un protocolo para la comunicación de las claves públicas que sea absolutamente inmune a engaños. Sólo es posible asegurarse de que una persona nos ha entregado su llave pública si las conocemos y es ella misma la que personalmente nos entrega la llave pública en un medio de almacenamiento físico que él mismo haya escrito, y aún así podrían hacerle dado el cambiazo. Por ello el usuario ha de asegurarse de que cuando recibe una clave pública, ésta pertenece a quién dice. Dado que las claves son bastante largas, se usa una huella digital o fingerprint, que es un resumen de la clave lo suficientemente largo como para que sea única y lo suficientemente corta como para que pueda ser comunicada mediante medios humanos (por ejemplo, por teléfono o escrita a mano). Así, una vez recibida una clave pública, es posible confirmarla recibiendo del dueño la huella digital, y asegurando que la clave que tenemos corresponde con la huella recibida. Por supuesto, hemos de asegurarnos que dicha huella digital nos la da el dueño de la clave que queremos comprobar, pero al ser la huella digital más corta y más fácil de comunicar, esto resulta más sencillo.
Por otro lado existen los servidores de claves públicas. Son ordenadores que almacenan las claves públicas de los usuarios y algunos datos (huella, correo electrónico del usuario, etc.). Un usuario que quiera hacer pública su clave pública puede subirla a uno de estos servidores. Normalmente los servidores de claves están interconectados de manera que periódicamente se informan de las novedades, por lo que sólo es necesario subir la clave pública a uno de los servidores, que en poco tiempo ésta figurará también en el resto de servidores.
Un usuario puede validar una clave pública de otro usuario firmando ésta con su propia clave privada. De ésta manera afirma o certifica que él confía en dicha clave pública. Así, cuando se inserta una clave pública recibida en gpg, ésta en principio no esta avalada. Si el usuario confía en que ha recibido la clave correctamente, firmará (avalará) dicha clave, indicando a gpg que confía en ella. La única diferencia es que cuando gpg usa una clave no avalada, dará un aviso de que, aunque descifre o valide correctamente firmas digitales, no es de confianza.
Éste sistema de firma de claves permite establecer anillos de confianza. Así, si yo recibo una clave pública firmada por un usuario en el que yo confío, se interpreta que la clave recibida es de confianza. De ésta manera, además de poder confiar en las claves que uno mismo valida, es posible confiar en las claves en las que otros usuarios bien conocidos confían. Por supuesto es responsabilidad de cada uno decidir en quién se confía. Así, es posible subir a un servidor de claves una clave pública de un usuario firmada por otros, de manera que dicha clave pública estará avalada por las firmas de los otros usuarios. Conviene tener en cuenta que aunque un usuario puede coger la clave pública de otro usuario, firmarla y subirla a un servidor de claves normalmente es el dueño de la clave quién decide que otros usuarios la avalarán, por lo que se suele enviar la clave pública firmada por otro usuario a su dueño, y será éste el que decida si sube o no su firma avalada por el otro usuario.
Dado que los servidores de claves no permiten el borrado de las claves que almacenan, ha de existir un método para anular una clave. Dicho anulación puede ser por que la correspondiente clave privada ha sido comprometida (robada o publicada), no va a ser usada más, ha sido sustituida por otra o por la razón que fuere. El usuario ha de generar un certificado de revocación, generado mediante su clave privada, que es enviado el servidor. Notar también que las claves pueden generarse con un período de validez concreto, superado el cuál son revocadas automáticamente. También hay que tener en cuenta que una clave revocada o caducada ya no podrá usarse para cifrar ni para firmar datos así como tampoco podrá emplearse para descifrar los datos codificados durante el período de validez de la clave.
gpg permite crear confianza localmente. Es decir, asignar a las claves públicas recibidas un grado de confianza. El nivel de confianza en una clave se establece una vez ésta ha sido avalada por el usuario (mientras no se firme no se podrá establecer el grado de confianza). Así, si recibo una clave pública avalada por alguno de los usuarios de los que ya tengo su clave pública firmada, gpg asignará a dicha nueva clave la confianza que tenemos en dicho usuario.
Por último mencionar que gpg almacena las claves privadas cifradas mediante una clave (cifrado simétrico: una sola clave permite cifrar y descifrar) que será pedida normalmente cada vez que se quiera hacer uso de la clave privada. Esto hace más difícil el robo claves privadas.
Las fuentes para éste artículo ha sido la web de Antonio Caravantes, concretamente su sección sobre PGP. Es una larga explicación de PGP, muy entendible y que profundiza sobre todo en aspectos prácticos y útiles. Del taller de criptografía de Arturo Quirantes Sierra se puede obtener mucha información de carácter más técnico en su sencillo curso de PGP.
Práctica
Para poner a funcionar un sistema de claves en mi sistema Linux he optado por instalar gpg, KGpg para manejar gpg desde KDE de una manera fácil y sencilla, y los plugins enigmail y enigmime para Thunderbird. En el artículo de Kriptopolis Pinguino en salsa de bits se explica como echarlo a andar.
Yo ya tengo mi par de claves generadas y funcionando sin problemas en Thuderbird, así como en los menús contextuales de KDE para cifrar archivos.
0 Comments:
Publicar un comentario
<< Home