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