BitcoinMonero

OpenPGP, PGP y GPG (Linux) Monero y Bitcoin

EDICION: Riccardo Spagni ya no firma los binarios de Monero PGP, ahora son firmados por binaryFate. AQUÍ su llave pública.

Antes de comenzar esta guiá, vamos a repasar rápidamente una lista con las diferencias entre estos términos: OpenPGP, PGP y GPG.

La capacidad de privacidad de métodos de encriptación como Pretty good Privcy (PGP), permite a las empresas aumentar su seguridad y la protección de sus datos.

No obstante existen diferentes tipos y métodos de encriptación y cada uno tiene su propia historia, características y capacidades. Esta guiá sera rápida, precisa y concisa, trataré de que el usuario entienda los conceptos básicos para poder verificar firmas y la fiabilidad de un archivo.

PGP “Pretty good Privacy”

Seguro habrás escuchado hablar sobre claves PGP, verificar firmas, etc. PGP utiliza una combinación de métodos de encriptacion tales como hashing, comprensión de datos, criptografía de clave simétrica y criptografía de clave publica para mantener los datos seguros. Este proceso se puede utilizar para encriptar archivos de texto, correos electrónicos, archivos de datos, directorios y particiones de disco.

PGP se origino en la compañía PGP Inc. Ésta poseía los derechos del software de encriptacion original PGP lanzado en 1991. Éste software fué desarrollado por Phil Zimmermann como una forma de garantizar la seguridad de los archivos publicados en las carteleras de anuncios previas a Internet. Entre 1997 y 2010 PGP cambio de propietario varias veces, hasta que finalmente fue adquirida por Symantec. Hay una critica grande hacia los Dev que abandonaron el proyecto vendiendo la empresa.

OpenPGP

OpenPGP es un estándar de código abierto de PGP para uso público. El término “OpenPGP” puede ser utilizado para describir cualquier programa que soporte el sistema OpenPGP.

El mismo Dev, Zimmerman en 1990 comenzó a desarrollar una versión de encriptación PGP de código abierto que utilizaba algoritmos de encriptación sin problemas de licencia. Actualmente muchas soluciones populares desarrollan sus productos de encriptación PGP siguiendo los estándares de OpenPGP.

GPG “GnuPGP”

Básicamente es otra solución popular que sigue los estándares de OpenPGP y provee una interfaz para que los usuarios puedan fácilmente encriptar sus archivos.

Este tipo de métodos de encriptación los puedes utilizar tanto en Windows, Mac y Linux. En esta guiá me enfocaré sólo en Linux (Como SO mas “Seguro” que Windows.). Todos estos cifrados son conocidos como cifrados de llave publica.

  • El cifrado de llave pública permite a alguien enviar su llave pública en un canal abierto e inseguro.
  • Tener la llave pública de alguna amistad o contacto te permite cifrar los mensajes que le envía.
  • Tu llave privada se usa para descifrar los mensajes que se le envían cifrados.
  • Los intermediarios — como los proveedores de servicios de correo electrónico, los proveedores de servicios de Internet y los de sus redes- pueden ver metadatos todo el tiempo: quién está enviando qué, a quién, cuándo, a qué hora se recibe, cuál es la línea de asunto, que el mensaje está cifrado, etc.
  • El cifrado de llave pública te permite verificar la identidad digital de alguien con su identidad de la vida real a través de algo llamado “verificación de huellas dactilares”.

Comenzamos:

Para que sea mas sencillo de entender, colocaré ejemplos para verificar una firma PGP de Binarios tanto de Bticoin (BTC) como de Monero (XMR).

En linux puedes utilizar el comando “gpa” a través de la consola de comandos el cual tiene una interfaz grafica y es mas fácil de interactuar.

~$ gpa

Básicamente utilizaremos una implementación de PGP como GPG el cual es un software gratis a partir del estándar OpenPGP, de esta manera verificaremos la integridad de los archivos descargados.

Proceso:

  1. Descargas la llave pública del autor del software o al menos de la persona que se encarga de firmar dicho software. (En Bitcoin Wladimir J. van der Laan’s y en Monero Por binaryFate)
  2. Chequeamos/Verificamos la huella digital de dicha llave pública. (Este es un proceso vital para evitar descargar una llave pública errónea o creada especialmente por un atacante)
  3. Importamos esta llave publica a nuestro llavero/base de llaves GPG.
  4. En este paso pueden presentarse dos casos, a) Descargamos un archivo .sig el cual verificará la integridad del Software automáticamente o b) Descargamos un archivo el cual contiene los hashes correctos del software y ha sido firmado previamente por el autor.
  5. Utilizamos la llave publica para verificar la firma PGP del archivo.

Comenzamos con Monero:

1. Obtener llave publica

Debemos obtener la llave publica de Fluffy (Ricardo Spagni) esto lo puedes hacer a través de vínculos de confianza, puedes descargarlo directamente de GitHub, a través de la pagina de GetMonero o incluso a través de los servidores públicos como: a) Keyserver.ubuntu.com b) pgp.mit.edu entre otros. Usualmente los software sensibles siempre te darán las rutas para que descargues las llaves publica.

2. Verificar huella digital

Verificaremos la Huella digital: Aun sabiendo que hemos descargado la llave publica correcta, debemos verificar la huella digital y corroborar una vez mas a través de medios de confianza que la huella digital para la llave publica que hemos descargado pertenece a la persona REAL en cuestión. Es decir que la llave publica de Ricardo Spagni realmente es de Ricardo y no de un tercero/atacante. Para ello:

gpg --keyid-format long --with-fingerprint fluffypony.asc

Aquí debes verificar que la huella de clave coincida con la huella de clave de Ricardo Spagni, no voy a especificar lo que significa un anillo de confianza o los niveles de confianza que existen, esto lo dejaré para otra guiá mas avanzada. Básicamente debes 1) Mirar en algún servidor publico las personas que han firmado esa clave publica y confiar que has descargado la correcta 2) Verificar en la página Web del autor la huella digital publicada y compararla con la que tú tienes. 3) Pedirle a un tercero que te indique la huella digital de X firma pública. En este caso la de Ricardo Spagni. Incluso puedes escribirle un DM a Ricardo para que le mismo te lo corrobore. En la mayoría de los casos para los usuarios Novatos seria suficiente con corroborar en la pagina web que ambas huellas digitales coincidan.

3. Importar la llave

Una vez estemos seguro de todo, importamos dicha llave publica a nuestra base de llaves GPG, de esta manera ya estará integrada en el sistema y posteriormente podremos usarla para verificar firmas de archivos.

gpg --import fluffypony.asc

4. Descarga de archivo Hashes

Como en Monero no hay un archivo .sig el cual pueda verificar la integridad del software descargado, procedemos a descargar el archivo hashes.txt el cual contiene los hashes SHA256 de cada binario de Monero y el cual ha sido firmado por Fluffypony (Ricardo Spagni).

5. Verificar el archivo Hashes

Una vez descargado, nos ubicamos en el directorio de Descarga y colocamos el siguiente comando:

gpg --verify hashes.txt

si el archivo hashes.txt es autentico deberíamos ver una salida así como esta:

gpg: Signature made Thu 05 Apr 2018 06:07:35 AM MDT
gpg:                using RSA key 94B738DD350132F5ACBEEA1D55432DF31CCD4FCD
gpg: Good signature from "Riccardo Spagni <ric@spagni.net>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: BDA6 BD70 42B7 21C4 67A9  759D 7455 C5E3 C0CD CEB9
     Subkey fingerprint: 94B7 38DD 3501 32F5 ACBE  EA1D 5543 2DF3 1CCD 4FCD

Si la salida muestra Good signature, como en el ejemplo, puedes continuar, de lo contrario no hagas nada y reporta que posiblemente se haya sustituido dicho archivo.

6. Descargar los binarios

Por ultimo descargamos el binario de Monero, es decir el cliente, y como ya tenemos: 1) La llave publica de Ricardo correctamente verificada 2) el archivo hashes.txt (el cual contiene los hashes de los clientes de monero) el cual esta verificado con la firma de Ricardo, simplemente procedemos a verificar los hashes del cliente descargado, para ello nos ubicamos en la carpeta descargas (O donde se haya descargado el cliente).

shasum -a 256 monero-gui-linux-x64-v0.15.0.1.tar.bz2

La salida se verá como esto, pero será diferente para cada archivo binario. Tu hash SHA256 debe coincidir con el hash listado en el archivo hashes.txt para tu archivo binario.

85a6885849d578691a09834c66ed55af4783ea8347b7784de9ea46e90995a57c  monero-gui-linux-x64-v0.15.0.1.tar.bz2

Lo que debes hacer es comparar lo que te pone en el archivo hashes.txt relacionado con tu cliente (Si es para linux, Windows o Mac) y lo que te arroja el resultado anterior… Si todo coincide, tienes un cliente correcto y puedes proceder a instalarlo, si no, no hagas nada y traba de reportar el caso o pedir asesoría.

Como Verificar los Archivos en Bitcoin:

1. Obtener llave pública

Al igual que monero consiste en prácticamente lo mismo:Obtenemos la llave publica de Wladimir J. van der Laan’s y verificamos su huella digital a través de fuentes de confianza.

2. Verificamos la huella digital

Revisar paso 2 de monero, en la pagina de bitcoin.org encontraremos también la huella de las diferentes llaves publicas de Wladimir. Dependiendo de la versión del cliente se ha utilizado una llave distinta, pero no cambia nada.

3. Importar llave pública

Importamos la llave publica descargada, tal cual como en el punto 3 de Monero.

gpg --import laanwj-releases.asc

4. Descargar los binarios

Descargamos el archivo el cual contiene los hashes para cada versión/plataforma de cliente de Bitcoin.

Binarios PGP

Verificamos dicho archivo con la llave publica de Wladimir- para comprobar que el archivo descargado sea legitimo.

Verificacion PGP

5. Verificar el hash sha256

Para verificar la checksum de un archivo binario descargado, debe asegurarse primero de que el archivo que contiene la checksum es seguro descifrando el archivo SHA256SUMS.asc para ello:

$ gpg --decrypt SHA256SUMS.asc

Como puedes observar el archivo SHA256SUMS.asc contiene los hashes de los diferentes clientes/binarios de Bitcoin., estos hashes los vamos a comparar con los hashes generados del cliente que descarguemos.

Por ultimo una vez descargado el cliente de bitcoin para nuestra plataforma (Linux, Mac, WIndowns) verificamos su Hash 256 con el siguiente comando:

$ sha256sum bitcoin-0.19.0.1-i686-pc-linux-gnu.tar.gz

SI todo coincide…. Muy bien tienes todo limpio.

PD: Algunas veces se presenta en lugar de un archivo con los hashes del cliente, un archivo con extensión .sig el cual verifica el binario descargado, en ese caso procedemos de la siguiente manera:

gpg --verify estoesunejemplo-1.19-setup.tar.bz2.sig estoesunejemplo-1.19-setup.tar.bz2

Como ves en el comando anterior tienes 1) el archivo .sig que descargaste y 2) el binario en cuestión, simplemente debes seguir los pasos 1–3 y luego proceder con el comando que te he dejado arriba.

Es importante saber como se publica una versión de Bitcoin:

  • Es etiquetado en github
  • Se crean ejecutables binarios para las plataformas pertinentes (generalmente las tres, Windows, Mac y Linux).
  • Calculan las checksums para los archivos binarios y un desarrollador principal firma un mensaje con esas checksums.
  • Checksum sha256
  • Calculan la checksum de los archivos utilizados para la compilación y se suben al proyecto Gitian.sigs en github.
  • Lo suben a sourceforge
  • Luego se publica un mensaje en el blog de Bitcoin.org
  • Tambien se publica un mensaje en el foro de Bitcointalk.org

RECUERDA, NUNCA TE CONFÍES

DONT TRUST, VERIFY. !!!!