Firmar transacciones offline con Electrum

Imagen de título para la guía de firmar transacciones offline en electrum

Un paso sensible a la hora de realizar transacciones con bitcoin, es el de exponer nuestra clave privada a un entorno con conexión a Internet. Las billeteras tipo Trezor o Ledger necesitan estar conectadas a un equipo, no para exponer la clave privada, sino para firmar la transacción que realicemos en el ordenador.

Al formular la transacción en el cliente del ordenador y pulsar en enviar, este se comunica con la billetera y le pasa la información de la transacción. Nosotros en la pantalla de estas billeteras vemos la dirección de envio y la cantidad. Cuando las confirmamos, se envia esa transacción firmada por la clave privada, hasta el ordenador para así transmitirse por la red bitcoin.

Si usamos billeteras tipo Electrum o Bluewallet, tenemos la clave privada en el equipo conectado a internet y esto realmente es un peligro ante posibles hackeos o robos, a pesar de que se cifren bien estos datos y se usen contraseñas de acceso.

Firmar transacciones de manera offline

Pero existen otras billeteras como coldcard que no tienen la necesidad de esta conexión como Ledger o Trezor, y esto es debido a que utiliza un método algo más tedioso, pero mucho más seguro como es el de firmar la transacción de manera totalmente offline.

En esta guía realizaremos una tarea similar a la de coldcard pero ahorrandonos los 100$ que tiene como coste y con la misma seguridad.


Transacciones offline con Electrum

Para realizar la tarea será necesario disponer de dos Electrum en dos equipos o sistemas operativos diferentes. Un Electrum tendrá conexión a Internet y otro no la tendrá.

Electrum 1 con internet

En este Electrum irá la llave publica donde se verán las transacciones y donde haremos el simulacro de transacción para guardarlo en un fichero y que servirá para firmarlo en el Electrum 2.

Electrum 2 sin internet

En este Electrum irá la llave privada, cargada mediante las semillas de nuestra billetera. Lo usaremos únicamente para firmar las transacciones del Electrum 1 y nunca tendrá conexión a Internet.

Necesario para empezar

  • Pendrive 1: Para el Live USB de Linux (en esta guía utilizaré Xubuntu 20.04)
  • Pendrive 2: Para guardar el cliente de Electrum APP para Linux.
  • Cliente Electrum Linux: https://electrum.org/#download
  • Cliente Electrum para el equipo con internet: https://electrum.org/#download
  • Aconsejable dos ordenadores, pero con uno es suficiente.
  • Semillas de nuestra billetera para el Electrum 2 – offline.

Si no se conoce como generar un USB Live con LINUX, aquí hay una guía: ENLACE


Preparando equipo offline para Electrum

Actualmente tenemos la versión Electrum 4.0.2 y es aconsejable revisar la página oficial para tener siempre la versión actualizada, en este caso el archivo necesario es electrum-4.0.2-x86_64.AppImage y lo guardamos en el Pendrive 2.

NO CONECTAR UN CABLE ETHERNET NI WIFI PARA ESTA PARTE

Con el Pendrive 1 con Linux Live instalado, toca reiniciar el ordenador donde conectaremos este USB para así cargar el sistema que hay dentro.

Una vez iniciado Xubuntu o la versión de Linux que se ha querido escoger, al conectar el Pendrive 2 con electrum-4.0.2-x86_64.AppImage se verá algo similar a esto al abrir la unidad.

firmar-transacciones-electrum-offline - electrum-offiline-001

Para poder utilizar electrum en el Linux Live es necesario copiarlo a una carpeta del sistema, esto es debido a que no es posible darle permisos de ejecucción si esta en un USB formateado en un sistema de windows. Yo lo he movido directamente al escritorio.

firmar-transacciones-electrum-offline - electrum-offiline-002

Una vez copiado en el escritorio, toca trabajar con el desde la línea de comandos. Botón derecho encima del archivo y seleccionar «abrir terminal aquí«

firmar-transacciones-electrum-offline - electrum-offiline-003

Una vez en la línea de comandos, debemos darle permisos al archivo de electrum para poder ejecutarse. Esto se hace con el comando chmod:

chmod +x electrum-4.0.2-X86_64.AppImage
firmar-transacciones-electrum-offline - electrum-offiline-004

Una vez aplicado los permisos, toca ejecutar electrum mediante el icono del escritorio. En mi caso, he restaurado una cartera con una semilla para pruebas. Para firmar transacciones de verdad es necesario cargar las semillas de aquello que vayamos a mover.

firmar-transacciones-electrum-offline - electrum-offiline-006

El icono inferior de la derecha en rojo indica que no hay conectividad con los servidores y el histórico de movimientos lo tendremos vacío al no poder cargarse desde Internet.

firmar-transacciones-electrum-offline - electrum-offiline-007

Creando la llave pública maestra

La llave pública maestra solo se puede obtener si en electrum se ha cargado la clave privada. Esta permite ver todas las transacciones en nuestra cartera en modo SOLO-LECTURA. De tal manera que no es posible interactuar con nuestros fondos, pero si realizar simulacros de movimiento para ser firmados posteriormente y validarlos, que es nuestro objetivo.

Esta llave pública se encuentra en: Cartera > Información

firmar-transacciones-electrum-offline - electrum-offiline-008
firmar-transacciones-electrum-offline - electrum-offiline-009

Guardamos este texto en un archivo del pendrive 2 para así cargarlo en el siguiente paso.

Preparando el Electrum online

Una vez finalizado el paso anterior y ya con el archivo de texto con la llave pública maestra que tenemos en el pendrive 2, toca cargarlo en el electrum con conexión a internet.

Ejecutamos Electrum para generar una nueva cartera estándar siguiente estos pasos:

Crear nueva cartera > Utilizar una llave maestra

Y en este punto toca pegar la llave pública que hemos generado en el equipo offline, tal como se ve en la imágen.

firmar-transacciones-electrum-offline - electrum-offiline-03

Con esto ya tendremos un electrum en modo lectura, sin peligro a perder nuestros fondos por posibles aplicaciones espía o de hackeo.

firmar-transacciones-electrum-offline - electrum-offiline-04

Generando una transacción sin firmar

Todos los ejemplos que utilizo son reales, pero mediante la red de test de bitcoin (testnet). Desde una faucet he recibido 0.01btc y ahora se lo devuelvo. Si ya se sabe utilizar electrum para enviar y recibir, este proceso es sencillo. Necesitamos rellenar:

  • Pagar a: Dirección del destinatario
  • Descripción: Información sobre la transferencia.
  • Cantidad: cantidad de fondos a mover.

La imagen inferior es un ejemplo de transacción.

firmar-transacciones-electrum-offline - electrum-offiline-05

Una vez pulsado «Pagar«, saltará una ventana con las comisiones para el envio. Seleccionamos y le damos a «Enviar».

firmar-transacciones-electrum-offline - electrum-offiline-06

En una ventana nueva aparecerán los datos involucrados en la transacción. Pero si vemos bien, en Estado pone : No firmado. Al no firmar con la llave privada, no es posible lanzar esta transacción a la red bitcoin.

firmar-transacciones-electrum-offline - electrum-offiline-07

Para guardar esta transacción en un fichero y firmarlo en el electrum offline, debemos ir a la opción Exportar, abajo a la izquierda. Ahí seleccionamos «Exportar a archivo«.

firmar-transacciones-electrum-offline - electrum-offiline-08

Una vez hecho lo anterior, toca guardar el fichero de la transacción sin firmar. Yo lo he guardado directamente en el pendrive 2, ya que una vez guardado toca ir al Electrum offline que tiene las claves privadas.

firmar-transacciones-electrum-offline - electrum-offiline-09

Firmar una transacción

De nuevo a electrum offiline, toca firmar esta transacción para poder lanzarla al blockchain y así hacerse efectiva. En Electrum debemos ir a Herramientas > Cargar transacción > Desde archivo

firmar-transacciones-electrum-offline - electrum-offiline-010

Buscamos el archivo, en este caso en el pendrive 2.

firmar-transacciones-electrum-offline - electrum-offiline-011

En este momento nos aparecerá una ventana con los datos de la transacción. Antes de firmarla, es recomendable revisar que esta todo correcto. La dirección y la cuantía del envío. Hecho esto, toca hacer lo siguiente:

  1. Pulsar el botón firmar
  2. Exportar a un archivo de transacción firmado.
firmar-transacciones-electrum-offline - electrum-offiline-012

En Exportar seleccionamos Exportar a archivo.

firmar-transacciones-electrum-offline - electrum-offiline-013

Lo vuelvo a guardar en pendrive 2 para cargarlo en el Electrum con la llave pública y así hacer efectiva la transacción en la cadena de Bitcoin. El archivo generado será algo similar a lo que se ve abajo.

firmar-transacciones-electrum-offline - electrum-offiline-014

Lanzando la transacción firmada a la red

En electrum online debemos cargar la transacción firmada por medio de : Herramientas > Cargar transacción > Desde archivo

firmar-transacciones-electrum-offline - electrum-offiline-10

Al cargar el archivo aparecerá una ventana con la transacción a transmitir y como vemos, ahora el estado es Firmada. Solo queda pulsar sobre el botón Transmitir para hacer efectiva la transacción.

firmar-transacciones-electrum-offline - electrum-offiline-11

Una ventana emergente nos confirmará la transacción realizada.

firmar-transacciones-electrum-offline - electrum-offiline-12

En Historial se puede ver como se ha realizado la transacción de manera correcta.

firmar-transacciones-electrum-offline - electrum-offiline-13

Finalizando

Como podemos ver en esta guía, es posible realizar transacciones de bitcoin de manera muy segura y evitando el exponer nuestras claves privadas a Internet. Esta manera debería ser la más utilizada por todos, pero si se hacen transacciones cada poco, es bastante molesto tener que hacer todo el proceso una y otra vez.

Coldcard reduce esto, firmando las transacciones en su dispositivo por medio de una memoria micro-SD y eliminando la necesidad de un equipo con tu llave privada.