Diferencia entre revisiones de «GPG»

De FdIwiki ELP
Saltar a: navegación, buscar
(Creando una clave válida)
Línea 1: Línea 1:
{{#breadcrumb: }}
+
 
  
 
[[Archivo:logoGPG.png|250px|thumb|Logo de ''Gnu Privacy Guard'']]
 
[[Archivo:logoGPG.png|250px|thumb|Logo de ''Gnu Privacy Guard'']]

Revisión de 14:50 1 feb 2015


Logo de Gnu Privacy Guard

GPG es un sistema multiplataforma de gestión de llaves utilizado para el cifrado y firma digital de mensajes y archivos. Es un software libre liberado bajo la licencia GPL e implementa el estándar OpenPGP.

GPG puede comunicarse con la versión actual de PGP y con cualquier otro sistema que implemente el estándar OpenPGP.

GPG es un software híbrido de cifrado que combina tanto criptografía simétrica o de clave privada y criptografía asimétrica o de clave pública.

Historia

Lo comenzó a desarrollar Werner Koch en 1997, recibiendo grandes ayudas y subvenciones por parte del gobierno alemán pero su primera versión productiva no apareció hasta 1999 . Surgió como una alternativa de software libre a PGP debido a los conflictos que rodearon durante un tiempo a este sistema y a que cerraron su código.

En 1991 surgió PGP (Pretty Good Privacy) de la mano de Philip Zimmermann. Zimmermann creó un sistema criptográfico híbrido que usaba el algoritmo de clave asimétrica RSA para cifrar la clave generada al cifrar de forma simétrica lo requerido a través del algoritmo de su propia invención Bass-O-Matic. Zimmerman se encontró con muchos problemas por parte de la NSA y del gobierno de EEUU ya que en aquella época era ilegal exportar software fuera del país pero no código fuente. De esta manera surgieron versiones internacionales de PGP.

PGP a su vez pasó por manos de diversas empresas, las cuales mantuvieron su código abierto hasta que, en 1999 y debido a que EEUU decidió relajar su política sobre exportación de software,NAI (Network Associates) la empresa que adquirió PGP Inc. decidió cerrar su código.

Aquí fue donde surgió GPG como la alternativa de software libre a PGP.


Clasificación

  • La criptografía simétrica esta basada en el uso de una clave privada, que solo deberían conocer el emisor y el receptor, utilizada tanto para cifrar como para descifrar los archivos o mensajes.
  • La criptografia asimétrica esta basada en un sistema de pares de llaves, una pública y una privada. La llave privada solo es conocida por su dueño y solo ha de ser accesible por el mismo mientras que la clave pública es accesible por el resto de usuarios. Además los métodos criptográficos utilizados para su generación garantizan que ese par de llaves solo puede generarse una vez. Muchos de los algoritmos utilizados están basados en aritmética modular y utilización de números primos aleatorios de gran tamaño.

Funcionamiento y Algoritmos

Una vez generado un par de claves también se puede generar un certificado de revocación con el fin de invalidar las claves en caso de que sean robadas u olvidadas.

Para que la clave pública sea accesible por otros usuarios es usual subirlas a servidores de claves. Los servidores se mandan entre ellos los datos permitiendo que la búsqueda de la clave sea independiente del servidor al que accedas. De esta manera se puede buscar la clave de cualquier usuario a través de sus datos o dirección e-mail.

Para cifrar mensajes, el emisor cifra el contenido utilizando la clave pública del receptor, y este mensaje solo podrá ser descifrando con la clave privada del receptor.

Así mismo, el método para firmar digitalmente los mensajes es análogo pero intercambiando las claves. A la hora de firmar un mensaje el emisor utiliza su clave privada y el receptor puede verificar que el mensaje ha sido escrito por el emisor gracias a que posee la clave pública de este y coinciden, además, se asegura la integridad del mensaje (no ha sido modificado) desde que fue firmado.

Para asegurar que la clave pública de un usuario verdaderamente pertenece a él se utilizan los denominados anillos de confianza. Un usuario puede firmar la clave pública de otros usuarios para indicar que verdaderamente su “dueño” es quien dice ser. Para aumentar y mejorar los anillos de confianza, los usuarios pueden llevar a cabo key signing party.

GPG tiene diversos algoritmos de cifrado tanto simétricos como asimétricos. Entre ellos se encuentran RSA, IDEA, SHA1, ELG, DSA, 3DES, CAST5, AES o BLOWFISH entre otros. Por defecto el utilizado por GPG es CAST5 aunque esto puede ser modificado y ser indicado por el usuario que algoritmo quiere utilizar para cifrar.

GPG posee una interfaz de linea de comandos, pero también existen pluggins como por ejemplo Enigmail para Thunderbird, o software con interfaz gráfica que lo integran.

Comandos Principales

  • Generar par de llaves : gpg --gen-key

Este comando solicitará una serie de datos con el fin de generar las claves. Al final del mismo será necesario generar entropía para dotar al equipo de una elevada carga computacional que utilizará para crear los números aleatorios utilizados para obtener las claves.


  • Ver la lista de claves: gpg --list-keys

Muestra todas las claves almacenadas.


  • Generar una salida ASCII: gpg -a

Opción que genera un archivo binario cifrando en código ASCII. Se puede añadir a cualquiera de los comandos de cifrado tanto de mensajes o contenido como de claves.


  • Cifrado simétrico: gpg -c archivo

En este caso se generará un archivo con el mismo nombre que el original y extensión .gpg . Sin embargo se puede añadir la opción -o NuevoNombre para indicar el nombre del nuevo archivo generado.


  • Descifrando: gpg archivo

Solicitará la clave privada para poder descifrar el archivo indicado.


  • Subir clave a un servidor: gpg --send-keys claveID

Sube la clave al servidor keys.gnupg.net . Se puede elegir a que servidor subirlo añadiendo la opción --keyserver nombreServidor .


  • Exportar clave: gpg --export identificador

Muestra por pantalla el cifrado de la clave pública asociada al identificador (puede ser el Id de una clave o el e-mail asociado a la misma). Permite la opción -a y -o para que sea guardada en el fichero indicado.


  • Importar una clave: gpg -- import archivo

Importa a nuestra lista de claves la clave pública que se encuentra almacenada en el archivo indicado junto a los datos de la misma.


  • Busqueda de clave en un servidor: gpg --search-keys identificador

Busca en los servidores la clave asociada al identificador (puede ser la Id de una clave o un e-mail). Se puede especificar en que servidor buscar con la opción --keyserver.


  • Cifrado asimétrico : gpg -e -r idReceptor archivo

Cifra el archivo indicado con la clave pública del receptor ( opción -r). Admite las opciones -a y -o.


  • Firma de una clave: gpg --sign-key identificador

El usuario firma con su clave privada la clave pública asociada al identificador para generar un anillo de confianza.


  • Firma digital: gpg -se archivo

Firma y cifra el archivo indicado. Admite la opción -r para especificar el destinatario además de las opciones -a y -o.


  • Modificar algoritmo: gpg --cipher-algo nombreAlgoritmo

Con esta opción se puede cambiar el algoritmo con el que cifrar el mensaje o archivo. Normalmente por defecto vienen algoritmos más debiles para evitar probemas de compatibilidad. Se puede añadir al resto de opciones.


Se pueden ver todas las opciones consultando el manual desde una terminal de Linux o mediante el comando gpg --help.

Ejemplo de uso

Creando una clave válida

Escribimos el siguiente comando en una consola unix que tenga gpg instalado y disponible en el path.

$ gpg --gen-key

gpg (GnuPG) 1.4.12; Copyright (C) 2012 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 and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sólo firmar)
   (4) RSA (sólo firmar)
Su elección: 1
las claves RSA pueden tener entre 1024 y 4096 bits de longitud.
¿De qué tamaño quiere la clave? (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
      <n>  = la clave caduca en n días
      <n>w = la clave caduca en n semanas
      <n>m = la clave caduca en n meses
      <n>y = la clave caduca en n años
¿Validez de la clave (0)? 1y
La clave caduca sáb 09 ene 2016 18:11:58 CET
¿Es correcto? (s/n) s

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) <heinrichh@duesseldorf.de>"

Nombre y apellidos: Wiki FDI
Dirección de correo electrónico: wiki@fdi.com
Comentario: Clave de prueba para wiki de la fdi
Ha seleccionado este ID de usuario:
    "Wiki FDI (Clave de prueba para wiki de la fdi) <wiki@fdi.com>"

¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? v
Necesita una frase contraseña para proteger su clave secreta.

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 277 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 24 bytes más).
.+++++
gpg: clave E849520F 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: 2016-01-09
pub   2048R/E849520F 2015-01-09 [caduca: 2016-01-09]
      Huella de clave = 3DBE 61D9 59EA 33AD A392  928C 5C80 8BF7 E849 520F
uid                  Wiki FDI (Clave de prueba para wiki de la fdi) <wiki@fdi.com>
sub   2048R/8FB3F3B5 2015-01-09 [caduca: 2016-01-09]

Cifrando el primer archivo

Vamos primero a crear un archivo de prueba llamado archivowiki

$ touch archivowiki

A continuación, para que el ejemplo sea más claro, vamos a introducir un mensaje dentro del archivo.

$ echo "Esto es un archivo de la wiki" > archivowiki
$ cat archivowiki 
Esto es un archivo de la wiki

En el ejemplo anterior vimos que al crear nuestra clave, se nos proporcionó un ID de clave que nos hará falta en el próximo paso E849520F . Ahora vamos a cifrar el archivo.

$ gpg -e archivowiki 
No ha especificado un ID de usuario (puede usar "-r")

Destinatarios actuales:

Introduzca ID de usuario. Acabe con una línea vacía: E849520F

Destinatarios actuales:
2048R/8FB3F3B5 2015-01-09 "Wiki FDI (Clave de prueba para wiki de la fdi) <wiki@fdi.com>"

Introduzca ID de usuario. Acabe con una línea vacía:
 
$ cat archivowiki.gpg 
��
  �X��
����
    ���O�Y�Kr��[Z[��O�}�xX��6��
                                8����)#�U9h�E����$���Ns��Zvz�
                                                             ��j����G�p`]���Ea�������c�����|e���)��Q���r�����6![�챰�X�+u���~�I��#�^p��3��#�:�R���:�8�
                                                                                                                                                      ׼��l��ӏ�R���}��j��2'T��_�ҍ
        ����G����b�'�U����[Ӥ�������@�v�A�@�ƽ��QB
                                                u�9�p���?��el��
                                                               d5�]�c�̏�'��
o�g��n@

Como podemos observar el archivo es ilegible porque ahora está cifrado con una clave RSA de 2048 bits. Vamos a probar a descifrarlo.

Descifrando un archivo

$ gpg -d archivowiki.gpg 

Necesita una frase contraseña para desbloquear la clave secreta
del usuario: "Wiki FDI (Clave de prueba para wiki de la fdi) <wiki@fdi.com>"
clave RSA de 2048 bits, ID 8FB3F3B5, creada el 2015-01-09(ID de clave primaria E849520F)

gpg: cifrado con clave RSA de 2048 bits, ID 8FB3F3B5, creada el 2015-01-09
      "Wiki FDI (Clave de prueba para wiki de la fdi) <wiki@fdi.com>"
Esto es un archivo de la wiki

Enlaces Externos