Guia basica de GNUpg






Autor: Augusto Sotelo L.



GnuPG es un software Open Source bajo la licencia GPL y por tanto gratuito. Este permite la firma y cifrado de ficheros mediante criptograf�a sim�trica y asim�trica. GnuPG est� inspirado en el bien conocido PGP ( que significa Pretty Good Privacy), este nacio como respuesta de la introducci�n de las variantes PGP comerciales. GnuPG cumple el est�ndar OpenPGP, aunque GnuPG es una herramienta principalmente UNIX que se usa desde el interprete de comandos, tambien existen sus respectivas versiones para plataformas como Windows con sus respectivos GUI.

Partiendo por una breve rese�a de lo que son los tipos de algoritmos usados en GNUpg, los cuales son RSA, DSA y ElGamal:

el Modelo RSA es el algoritmo mas popular de llave P�blica usado a nivel mundial. Las siglas "R" "S" "A" provienen de los apellidos de sus descubridores ( Rivest,Shamir y Adelman). RSA consiste en que por medio de un programa de c�mputo cualquier persona puede obtener un para de n�meros, estos numeros estan relacionados de forma matem�tica y que ademas son denomina llaves. Una llave no es nada mas que un n�mero de gran tama�o, que podemos conceptualizar como un mensaje digital, como un archivo binario o como una cadena de bits o bytes.

el modelo DSA es otro tipo de algoritmo de firma, el cual esta descrito en el standard DSS. DSA usa una clave privada para que forme la firma digital con su correspondiente clave p�blica para asi poder verificar la firma. A diferencia del cifradon, la operaci�n de firma no es reversible. El DSA no hace encriptaci�n de clave p�blica, y el standard DSS no nos provee capacidades para distribuci�n ni intercambio de claves.

Los usuarios que empleen claves ElGamal para firma digital deber�an revocarlas y regenerar claves de firma nuevas.

La vulnerabilidad afecta exclusivamente a las claves de firma ElGamal. Las claves de cifrado RSA y ElGamal, y firma DSA y RSA no se ven afectadas.

Primero ke nada debemos asegurarnos de tener instalado en nuestro systema Linux la Utilidad GnuPG y conforme esto proceder a leer las siguientes lineas.

Comenzare diciendo que existen dos tipos de crifrado, uno es de tipo simetrico y el otro es asimetrico. El sistema de cifrado simetrico consiste en utilizar una UNICA clave para encriptar y desencriptar ficheros. El sistema de cifrado de tipo asimetrico consiste en dos claves, una para encriptar y otra para desencriptar. En el tipo de cifrado asimetrico entramos en dos conceptos, uno es la llave publica ( que nos sirve para encriptar ficheros) y la clave privada ( usada para desencriptar ficheros). Ahora mas que nada explicare el funcionamiento teologico de lo que estamos a punto de realizar. Lo primero es generar las claves publica y privada. La clave publica sera usada para que otras personas puedan enviarnos archivos encriptados con nuestras claves publicas. Las claves privadas seran usadas para desencriptar esos archivos que nos hayan enviado. Con estas claves generadas el resto de procesos es sencillo, ya que solo nos queda por agregar a nuestra lista de llaves una llave publica de otra persona, posterior a esto debemos firmarla y luego asignarle un grado de confiabilidad. Con esto hecho podremos proceder a encriptar archivos con las llavez publicas que tengamos en nuestra lista de claves y si esque lo deceamos al mismo tiempo darle un toque especial a ese archivo encryptado con nuestra firma.

Lista la parte teorica comienzo con lo contundentemente sencillo ;D .. :

Primero procedems a GENERAR las llaves publicas y privadas, lo que se hace con el siguiente comando:

$ gpg --gen-key

En esta parte se nos haran varias preguntas, como lo son el tipo de llave que usaremos, el tamano de esta, su periodo de caducacion, nombre ( que identifica la llave, nuestro UID), email(tambien es usado como identificador, ademas debe ingresarce un mail valido), comentario( el cual se agrega a la firma) y finalmente una contrasena( que usaremos para desencriptar los ficheros encriptados con llaves publicas y para un par de cosillas mas). Todos los archvios de configuracion del GNUpg seran dejados en el dir ~/.gnupg/

Con lo anterior listo podemos proceder a exportar nuestra llave publica en un archivo para asi poder enviarcela a la persona que deceamos nos envie archivos encriptados , esto se logra tecleando lo siguiente:

$ gpg --export [ UID ]

La linea anterior nos genera nuestra llave publica ( en forma binaria), la que se nos muestra en el stdio ( salida estandar de entrada/salida) que en nuestro caso es el terminal. Si queremos que esto nos vaya mas pleno podemos usar la opcion "-a" que nos entregara nuestra licencia publica en formate ascii de 7 bits, para poder ser leida con cualquier editor. Y finalmente con la opcion "-o" le indicamos el nombre del archvio al cual se redireccionara la salida de nuestra llave publica. Esto resume mis palabras:

$ gpg -a --export -o llave_publica [ UID ]

SI el caso fuese que tuvieramos en nuestro listado de llaves publicas, demaciadas llaves, tenemos el beneficio de la opcion "--export-all", la que nos permite exportar todas nuestras llaves publicas. Esta opcion se agrega al final del comando que se encuentra mas arriba.

En lo que concierne a la llave privada tambien puede ser exportada, quedando todas las opciones anteriormente descritas de la llave publica para exportar la llave privada, con la diferencia que debemos usar la opcion "--export-secret-key".

Ahora debemos sabes como importar las llaves de nuestros conocidos, ya sean estas publicas, privadas o algun tipo de archvio que contengas estos dos tipos de llaves. Esto se logra gracias a la opcion "--import", la que se usa de la siguiente forma:

$ gpg --import [nombre_del_archivo]

Con esto la tendremos la llave contenida en [nombre_de_archvo] en nuestro listado de llaves. Este listado de llaves puede ser mostrado con el siguiente comando:

$ gpg --list-keys

Una vez que tengamos agregadas a nuestro listado de llaves las llaves correspondientes, debemos firmarlas y validarlas, ya que sino, no podremos usarlas, para esto debemos editar la llave que agregamos usando el la opcion "--edit-key" como se muestra en la siguiente linea:

$ gpg --edit-key [ UID ]

Esto nos dejara en un promp de la forma:

Orden>

Es aqui donde usamos "sign" que nos sirve para firmar la llave escogida en cuestion. Esto hara que se nos muestren opciones del [0..3] y donde cada uno escogera la opcion dependiendo si esque estamos o no seguros de que la llave que estamos por firmar es realmente de quien se supone es.

Luego nos queda asignarle un grado de confianza, para esto usamos "trust". Al teclear la en el prompt "Orden>", la opcion "trust" nos da opciones desde [1..5] y la opcion "m" para voivver al menu principal, ahi escogemos segun nuestro criterio. Con esto ya podremos salir del prompt y usar nuestra llave para encriptar archivos. Cabe mencionar que existe una gran variedad de opciones, para verlas simplemente tecleas la orden "help" y podras ver cada una.

En el caso que decearamos eliminar una clave publica se usa el siguiente comando:

$ gpg --delete-key [ UID ]

Para eliminar una clave privada se usa este:

$ gpg --delete-secret-key

Ahora que tenemos todo listo alfin vamos a ir a lo que todos buscamos en escencia, dejar seguros nuestros datos ;D . Bueno primero esta decir que si tenemos una gran cantidad de llaves en nuestro listado y deseamos encriptar o desencriptar para una persona determinada debes dejar activa por asi decirlo solo esa llave para poder realizar la operacion, esto se logra usando lo siguiente:

$ gpg -a [UID]

o bien

$ gpg --loca-user [UID]

o en ultimo caso tenemos la alternativa de agregar la linea "default-key UID" en el archivo ~/.gnupg/options.

Otra posibilidad un tanto mas comoda y rapida es usar la opcion "-r" o "--recipient" para indicar directamente desde la linea de comando el [UID] respectivo al momento de encriptar.

Para poder encriptar un archvio usamos la opcion "-e" o "--encrypt", la cual puede ir combinada con opciones como "-r" para indicar el [UID], ya que si este no es indicado el archvio s eencriptara con el [UID] que tengamos indicado en el fichero "~/.gnupg/options" por defecto. La forma de encriptar con un [UID] escogido por nosotros es la siguiente:

$ gpg -er [Destinatario] {archivo]

Esto nos generara un fichero con el mismo nombre que se usa en [archivo], pero con la diferencia que se le agrega la extension ".gpg". Esto puede ser combinado con la opcion "-a" si se decea obtener un fichero encriptado del tipo 7-bit ASCII. El comando para esto es:

$ gpg -a -er [Destinatario [archivo}

Lo que producira un criptograma con la extension ".asc". Para evitar cualquier tipo de riesgo es recomendable que firmemos todo lo que hayamos encriptado, ya que sino cualquier persona que tenga una llave publica podria suplantar a otra con graves consecuencias de por medio. Para firmar nuestros ficheros encriptados usamos la opcion "--sign", la que nos firmara el fichero encriptado, esta se usa de la siguiente forma:

$ gpg --encrypt --sign [Archvio]

Tambien podriamos haber usado la opcion "--clearsign" para firmar el fichero encriptado en formato 7-bit ASCII.

Ahoa para verificar que el archvio este correctamente firmado usamos la opcion "--verify" de la siguiente forma:

$ gpg --verify [Archivo]

Con esto ya podemos proceder a la desencriptacion de un archivo, lo que se hace con la opcion "--decrypt" o "-d". Aqui se nos pedira nuestra contrasena para poder desencriptar el fichero, fichero que si posee una firma esta se nos mostrara en el momento posterior al tecleo de nuestra contrasena. El comando seria de la siguiente forma:

$ gpg --decrypt [Archivo]

Con este ultimo paso ya podremos manejarnos en lo que a GNUpg se refiere, aunque de forma algo superflua, es por eso que a continuacion entrego un listado de las diferentes opciones y una breve resena de su funcion:

SINTAXIS FUNCION

gpg --gen-key #Generar el par de llaves Privada y Publica

gpg --import [fichero] #Agrega llave al llavero desde stdin o file_llave_pub

gpg --export [UID] #Saca llave del llavero de UDI a stdo con -o a archivo -a ascii

gpg --list-keys #Lista las llaves del llavero

gpg --list-sigs #Lista las firmas de cada clave

gpg --fingerprint #Lista las huellas digitales de las llaves

gpg --list-secret-keys #Lista las llaves secretas

gpg --delete-key UID #Borra la llave de UID

gpg --delete-secret-key #Borra la llave secreta

gpg --edit-key UID #Edita la llave del usuario UID

Command> sign #Con este comando se puede firmar la llave pub

-u UID

--local-user UID

HOME/.gnupg/options: #Archivo de Configuracion util default-key

default-key UID #Llave que por defecto se usara si no se indica nada

-r --recipient #recipiente o sea se indica a quien

gpg -e [fichero] #Encripta usando la llave por defecto desde stdin-stdo

gpg --encrypt [fichero] #Lo mismo

gpg -er Destinatario [fichero] #Lo mismo pero usando la llave del destinatario

--armor #Hace referencia a ascii 7 bits

gpg -a -er Destinatario [fichero] # Encripta en ascii para que se no sea bin

gpg [-d] [fichero] #Decifra o decripta desde Stdin - Stdo

gpg [--decrypt] [fichero] #Lo mismo que antenrior usar -o fichero para cambiar

-o [fichero] #Lo anterior

$HOME/.gnupg/options #Opciones de pgp del usuario Ej llave por defecto con que encripta

gpg -s [fichero] #Firma stdio

gpg --sign [fichero] #Lo mismo

gpg --clearsign [fichero] #Firma pero en ascii 7 bits, legible

gpg -b [fichero] #Hace una firma separada en binario fichero o stdio

gpg --detach-sign [fichero] #Crea una firma aparte pero en asscii

gpg [-u Remitente] [-r Destinatario] [--armor] --sign --encrypt [fichero]

gpg [--verify] [fichero] #verifica el fichero trabaja stdio

gpg --help #Ayuda de las opciones