TAPSIGNER: Análisis en profundidad

En 2022, Coinkite , la empresa canadiense fabricante de dispositivos que te ayudan a custodiar tus bitcoin de forma segura, nos sorprendió con una nueva funcionalidad que compartían varios de sus novedades de ese año: la conectividad NFC.

Tanto la actualización de su buque insignia — la COLDCARD mk4 — como los nuevos lanzamientos de SATSCARD y TAPSIGNER adoptaban esta vía de comunicación (estas dos últimas de forma exclusiva).

COLDCARD la conocía bien en su versión mk3 y SATSCARD venía a ser una reformulación del Opendime, con la que regalar bitcoin a amigos y familiares en un formato más convencional. Lo que más desubicado me tenía era la TAPSIGNER, una tarjeta inteligente con NFC que custodia tu clave privada de Bitcoin:

  • ¿qué tan útil podía ser?,
  • sin teclado ni pantalla ¿cómo generas claves privadas de forma segura?,
  • ¿para qué público objetivo están pensadas?,
  • ¿cómo es su operativa?

Para salir de dudas, Coinkite me ha facilitado una TAPSIGNER de muestra y en este artículo (que no pretende ser corto) la analizo en detalle.

Si estás aquí solo para la versión resumida, en la siguiente sección tienes el tl;dr (too lazy, didn’t read).

NOTA: Coinkite es patrocinador de mi podcast desde enero de 2023. Coinkite me facilitó dispositivos de test en otoño de 2022, antes de tener ningún tipo de relación comercial. El patrocinio vino a consecuencia de las impresiones que me habían causado sus diferentes productos. Este análisis no forma parte de dicho acuerdo y lo realizo para exponer lo que me parece interesante de su funcionamiento. Si no me gustase, no trabajaría con ellos.

Contenido del análisis

TL;DR: Resumen

TAPSIGNER es la mínima expresión de una wallet fría y por lo tanto es más segura que la gran mayoría de wallets calientes con las que empieza el bitcoiner principiante.

Operar con TAPSIGNER es también muy cómodo y hace que sea una candidata ideal a «primera wallet fría» que recomendaría a alguien que empieza y que quiere subir el nivel de seguridad de sus bitcoins sin apenas complicaciones; ese tipo de personas que quizá todavía no están preparadas para una hardware wallet convencional (personas 0 técnicas, padres, abuelos) pero que no quieren renunciar a la seguridad de tener sus claves privadas en un dispositivo sin internet.

Prácticamente todo el mundo está familiarizado ya con el uso de smartphones y de tarjetas de crédito y de eso se aprovecha TAPSIGNER, de hablar un lenguaje que la gente entiende y desde el sofá, sin necesidad de ordenador ni cables.

✅ Si tuviera que destacar sus mayores ventajas diría que son:

  • practicidad
  • portabilidad
  • facilidad

❌ y sus desventajas:

  • poca flexibilidad: son de 1 solo uso (una vez has configurado una clave privada extendida, no se puede generar de nuevas)
  • la dependencia de una wallet-interfaz (Nunchuk, Sparrow, etc) para verificar cambios e introducir datos sensibles como la entropía,
  • y la dificultad de verificar lo que firmas al no tener pantalla (pero no es imposible y en el análisis te cuento cómo)

Igualmente, creo que las desventajas de este dispositivo forman parte de su esencia y que no conseguiríamos sus ventajas sin por ejemplo la dependencia de una wallet-interfaz móvil.

Por ello, y también por su precio de 40$ con el que se sitúa un 38% por debajo de las hardware wallets más económicas del mercado, me parece una elección perfecta para los primeros satoshis de un bitcoiner que busca una mejor seguridad sin complicaciones.

Puedes conseguir tu TAPSIGNER en este link con mi referido, o en este otro sin él. Además creo que utilizando el código LUNATICOIN o lunaticoin (ahora dudo de cuál es el bueno) tendrás un 5% de descuento en tu compra.

Introducción a TAPSIGNER

Tipos de wallet Bitcoin

💡 Si eres un usuario medio-avanzado, quizá quieras ir al siguiente punto.

Cuando empiezas a estudiar Bitcoin y te planteas conseguir tus primeros satoshis (1 BTC = 100.000.000 sats) todos los caminos te llevan a un mismo punto: necesitas una wallet o billetera de Bitcoin con la que:

  • generar y gestionar claves privadas,
  • y poder recibir y enviar monedas.

Wallets hay de varios tipos pero una primera clasificación de la que escoger sería entre wallets calientes y frías:

  • las wallets hot o calientes generan, guardan y operan con tu clave privada en un dispositivo conectado a internet como podría ser un ordenador o un móvil.
  • y las wallets cold o frías operan con tu clave privada en un dispositivo que está desconectado de internet.

Esta distinción busca separar wallets cuyas claves privadas tienen más riesgo de ataque online/remoto de las que no.

Además, la arquitectura de Bitcoin permite separar las funciones de clave privada de las de gestión de monedas en distintos dispositivos, para favorecer así, la seguridad de nuestros fondos. De esta forma podemos:

  • operar con wallets conectadas a internet 🌐 que solo gestionan información pública y con la que no se puede acceder a nuestros fondos (hacen solo de interfaz),
  • y guardamos las claves privadas en dispositivos físicos de hardware sin connectividad a internet.

Separando las funciones, cuando queremos enviar bitcoin a alguien:

  • generamos una transacción en la wallet conectada que tiene acceso a los balances y pasamos esta transacción al dispositivo frío para que la firme.
  • una vez en el dispositivo offline, éste realiza la operación y solo devuelve la firma a la wallet conectada
  • la clave privada nunca abandona el dispositivo frío.
  • con la firma en su poder, la wallet online la retransmite junto a la transacción a la red de bitcoin y la transferencia se realiza sin haber puesto en riesgo la clave privada en ningún momento.

💡 La separación de funciones ha hecho que se abra el debate en la comunidad sobre si deberíamos cambiar el nombre a las wallets frías (o hardware wallets) y empezarlas a llamarlas «dispositivos firmantes» para reflejar mejor su función principal de firmar transacciones con claves privadas offline. Más info aquí: https://bitcoinstack.info/

Esta especialización en las funciones hace que en la práctica tengamos 4 tipos de wallets:

  • las calientes (de ordenador o móvil) conectadas a internet y que no permiten operar sin tener en su posesión la clave privada. No necesita interactuar con ningún otro tipo de wallet para operar. Ejemplos: Muun, Samourai
  • las interfaces (de ordenador o móvil) conectadas a internet y que permiten operar sin tener en su posesión la clave privada. Ejemplos: Sparrow, Specter, Nunchuk o Blue Wallet
  • las watch-only (de ordenador o móvil) conectadas a internet y que permiten solo ver la información pública (como el balance o las direcciones) de una wallet sin poder operar de ninguna forma. Solo ver. Ejemplos: Sentinel, OBW
  • las frías (normalmente en dispositivos específicamente diseñados para tal fin) sin conexión a internet y que únicamente realizan operaciones relacionadas con la clave privada.

Las wallets frías en dispositivos específicamente diseñados para tal fin aparecieron en 2013 con el lanzamiento de la Trezor Model One. A partir de ahí nació una industria y ahora, incluso dentro de la tipología de wallets frías, también hay categorías según funcionalidad y distintas premisas de seguridad.

¿Qué tipo wallet es TAPSIGNER?

TAPSIGNER es la mínima expresión de una wallet fría:

  • permite generar una única clave privada con aleatoriedad introducida por el usuario
  • custodia una clave privada que nunca abandona la tarjeta
  • interactua con una wallet-interfaz firmando transacciones y comunicando dicha firma
  • permite hacer copias de seguridad
  • y protege su accesibilidad con un PIN de cifrado

La particularidad de TAPSIGNER es que por un lado es comodísima porque

  • la puedes llevar junto a tus tarjetas
  • e interactuar con ella vía NFC (es mucho más cómodo que los códigos QR).

por contra:

  • no tiene pantalla como sí la tiene la ColdCard y no te permite verificar lo que estás firmando,
  • tampoco tiene teclado para introducir frases mnemónica BIP39, aleatoriedad, ni passphrases.

Este mix de condicionantes situan a la TAPSIGNER en un lugar especial entre el control total de las hardware wallets más completas (con pantalla y teclado), y la comodidad de las Hot Wallets con una seguridad mejorada. Y por si fuera poco, gracias a lo bien que conjuga con la wallet móvil de Nunchuk, permite a gente poco experta participar en sus primeros multifirma.

Primeros pasos

¿Qué recibes?

Si te consigues una TAPSIGNER en la tienda de Coinkite (link con referido, link sin referido) hay un detalle en el envoltorio en el que la recibes que merece un poco de explicación.

Parece una simple cartulina blanca plastificada — como las de las cajas de cartón de las pastelerías — para protegerla de arañazos, pero en verdad es una funda protectora de radio frecuencia (RF) que sirve para de prevenir accesos no deseados de lectores con malas intenciones (como la tarjeta no tiene toda la lógica de una Hardware Wallet y no puedes activar o desactivar el NFC como si lo harías en una ColdCard). La tarjeta reacciona a todo lector que se le acerque y por ello es importante guardarla siempre dentro de la funda.

Si la perdemos o se nos rompe con el uso, podemos conseguir otras en Coinkite o buscando en Amazon por RFID Block y encontraréis varias opciones.

¿Cómo es?

Una TapSigner tiene el mismo factor de forma que una tarjeta de crédito pero sin chip visible (está cubierto), ni banda magnética.

A primera vista parece un simple plástico, con un diseño bonito en una cara (cara A) y poco más. Pero no. Se trata de una Java Card con microprocesador, memoria y una interfaz de comunicación «contactless» por NFC (Near Field Communication).

💳 Las Java Card fueron creadas en 1996 y son un tipo de tarjetas inteligentes (como las que usamos para débito o crédito), en las que en el proceso de fabricación incorporan un sistema operativo y una máquina virtual Java, específica para ese entorno. Por esta razón, permiten ejecutar pequeñas aplicaciones Java de forma segura, desarrolladas después de la fabricación de la tarjeta. La tecnología de las Java Card fue originalmente creada con el propósito de asegurar la información sensible almacenada en las tarjetas inteligentes y también incorporan lógica criptográfica para algoritmos como AES, RSA y familias de SHA, incluyendo el uso de criptografía de curva elíptica. Se utilizan en SIMs de teléfono, tarjetas de crédito y débito, documentos de ID o monederos prepago para parquímetros o billetes de tren, firma digital, etc.

En cara B tenemos varios datos necesarios para inicializar y recuperar la copia de seguridad de nuestra tarjeta firmante, como son:

En la cara B encontramos varios campos informativos como son:

  • la web de https://tapsigner.com/start en la que empezar tu aventura con ella a través de su F.A.Q (preguntas habituales) (1)
  • Card Identifier / Identificador de la tarjeta (2)
  • el número de versión de la tarjeta y el bloque + fecha en el que fue creada (3)

Y también, varios datos necesarios para inicializar (4) y recuperar la copia de seguridad de nuestra tarjeta firmante (5), como son:

  • Starting PIN Code / Código Pin Inicial (4)
  • Backup Key / Clave de Respaldo (5) – repetida en 3 de sus 4 lados.*

*En futuras TAPSIGNERS se llamará Backup Password y no Key

¿Qué hay dentro de una TAPSIGNER sin estrenar?

Dos cosas:

  1. Un certificado firmado por la clave de fabricación de Coinkite, con el que la wallet puede verificar que la tarjeta sea original (y nadie ha sustituido información o ha creado su propia versión).
  2. La lógica de las aplicaciones que coinkite ha configurado en la JavaCard y que sin facilitarle el PIN, lo único que devuelven es el identificador de la tarjeta (en el caso de ejemplo 4HKSJ etc)

Que NO hay:

  • Ninguna clave privada. Esto es importante porque ni Coinkite ni nadie crea la clave privada por ti. La creas tú durante el proceso de inicialización.

Inicialización paso a paso

Para empezar a utilizar una TAPSIGNER, primero hay que inicializarla. Así es como llamaremos al proceso de creación de nuestra clave privada en TAPSIGNER.

Para llevar a cabo este proceso vas a necesitar una aplicación que dialogue con ella por NFC. Lo más cómodo es hacerlo con el móvil (la gran mayoría ya tiene un chip NFC), aunque también puedes hacerlo con un ordenador si tienes un lector de NFC (30-40€).

Las aplicaciones móviles con las que podrás hacerlo son:

Aplicaciones ordenador

Aquí te voy a mostrar cómo se realiza la inicialización en Nunchuk Wallet:

  1. En una Nunchuk Wallet recién instalada, vamos a la pestaña de Wallets y le damos al símbolo ‘+’ de la derecha de Keys.
  2. En el siguiente menú le damos a Add NFC Key
  3. En el siguiente menú le damos a Add TAPSIGNER. (Si te fijas en este menú también podremos recuperar una copia de seguridad de TAPSIGNER)
  4. La siguiente pantalla símplemente nos indica cómo colocar la tarjeta en relación al móvil para que el chip NFC se lea bien. Es posible que tu móvil no tenga el chip NFC arriba como muestra la imagen. En mi caso (Google Pixel 6) está en el centro del teléfono. Puedes buscarlo en google si te da problemas detectando la tarjeta. Cuando estés listo le das a continue.
  1. En esta pantalla es cuando acercamos la tarjeta y esperamos que la detecte.
  2. Una vez detectada te indica que esta TAPSIGNER no ha estado inicializada y si quieres hacerlo. Es importante destacar que una vez creada una clave privada en TAPSIGNER, no podremos volver a inicializarla otra vez. Esa será ya la clave privada de esa tarjeta. Para siempre.

💡 Más sobre el «chain code» y la generación de la Master Key (xprv) en comparación con el uso de palabras BIP39 (12-24 palabras de frase mnemónica) en la siguiente sección opcional.

7. Por regla general te diría que es interesante darle a Advanced y probar de darle al botón «Generate new string» un par de veces para que veas cómo va cambiando el chain code.

  • La clave privada maestra que protegerá a las fracciones de bitcoin que custodias con tu TAPSIGNER, estará formada en un 50% por el «Chain Code» que ahora eliges y en otro 50% por una clave que escoge la tarjeta desde dentro.
  • Si vas a querer comprobar que efectivamente la clave privada maestra está formada por el 50% que tu has escogido, te va a interesar apuntarla (te lo explico más abajo en la sección opcional Verificar Chain Code). Quizá lo más seguro sea que lo hagas en un papel y que una vez verificada de forma segura destruyas el papel.
  • Cuando esté todo listo le damos a continuar.

9. Con el chain code seleccionado, nos toca ahora establecer un nuevo PIN. El PIN es el que protege nuestra clave privada del acceso de terceras personas. Si alguien accede a tu tarjeta sin conocer el PIN, no podrá operar con ella. Si tiene el pin, tendrá acceso a tu clave privada maestra.

  • La tarjeta trae un PIN por defecto (indicado en el punto (4) de la cara B de la tarjeta) que aquí deberíamos cambiar. De esta forma, aunque alguien tenga la tarjeta y vea el PIN que hay grabado en la cara B, no podrá hacer nada porque ya ha cambiado.

10. Creamos un nuevo PIN y nos lo apuntamos a modo de copia de seguridad (si nos olvidamos no hay forma de recuperarlo).

11. Con el Chain Code y el PIN definido, la wallet de Nunchuk lo tiene todo para configurar nuestra TAPSIGNER.

12. Acercamos la tarjeta y empieza el proceso que dura 5-10 segundos. En ese proceso debemos mantener la tarjeta quieta en la parte trasera del teléfono.

13. Al terminar el proceso, nos aparece directamente un archivo en pantalla y nos pide dónde queremos guardarlo. Este archivo es la copia de seguridad de nuestra clave privada maestra (o xprv) cifrada con el algoritmo AES-128-CTR (Advance Encryption Stand Counter Mode (1) de 128 bits)

  • Como tu clave privada maestra se acaba de formar dentro de la tarjeta y nunca sale de ella, la única forma de hacer una copia de seguridad por si perdemos o se rompte nuestra TAPSIGNER, es a través de este archivo cifrado que sí puedes extraer.
  • Solo podemos exportar este archivo cifrado si conocemos el PIN de la tarjeta.

⚠ IMPORTANTE: debemos guardar este archivo bien si queremos volver a acceder a nuestros fondos cuando perdamos o se nos rompa nuestra TAPSIGNER. Es recomendable crear varias copias en unidades de memoria USB o similares. Si se va a usar como llave simple (no en una Multifirma), evitar la nube.

⚠ IMPORTANTE: debemos anotar de alguna forma offline (en un papel o similar) la BACKUP KEY de nuestra tarjeta. Si la perdemos no tendremos acceso a ella para saber cómo descifrar el archivo cifrado que hemos exportado.

14. En la siguiente ventana nos informan de la importancia de este archivo y nos indican que lo podremos descifrar con la BACKUP KEY (indicada en el punto (5) de la cara B de la tarjeta). En la sección Verificar Chain Code y recuperar copia de seguridad te cuento cómo hacerlo.

15. En esta pantalla le añadimos un nombre a la Tarjeta para acordarnos e identificarla

16. Y aquí terminamos con la inicialización de nuestra TAPSIGNER que ahora ya tiene una clave privada guardada en su interior, protegida con PIN y podemos recuperarla en caso de pérdida o rotura gracias a la copia de seguridad digital cifrada que hemos guardado.

¿Qué hay dentro de una TAPSIGNER inicializada?

Tres cosas:

  1. El certificado firmado por la clave de fabricación de Coinkite
  2. La lógica de las aplicaciones que Coinkite ha configurado en la JavaCard y que sin facilitarle el PIN, lo único que devuelve ahora es el identificador de la tarjeta (el punto (2) de la cara B), y la última ruta de derivación del usuario (más de esto después).
  3. la Master Private Key o xpriv protegida con el PIN que el usuario ha establecido. Sin él, no se puede acceder a esta información, ni extraer el backup, ni firmar ninguna transacción.

Operar con TAPSINGER: paso a paso

Operar en una wallet simple de firma única

Una vez tenemos la TAPSIGNER inicializada y con su xpriv en el interior, ya podemos operar con ella.

Como te he contado antes, TAPSIGNER es la mínima expresión de una Wallet Fría. Con Nunchuk de momento solo hemos operado para inicializarla, pero ahora vamos a operar con ella como Wallet Interfaz de nuestra Wallet Fría TAPSIGNER.

Durante la inicialización, Nunchuk ya ha añadido una versión pública de nuestra clave privada extendida y la puedes ver en el apartado Keys. Con esta clave pública NO se pueden mover fondos (para ello necesitas la privada y ésta nunca abandona la TAPSGINER). Lo que sí puedes hacer con la clave pública es generar wallets que generarán direcciones de recepción, mantendrán un balance al día y te permitirán preparar transacciones para que las firmes con TAPSIGNER.

Si te fijas, el apartado Wallets sigue vacío. Vamos a crear una wallet dándole al ‘+’ que aparece a su derecha.

17. En la pestaña inferior de Wallets le damos al botón ‘+’ que hay arriba a la derecha.

18. En la siguiente pantalla nos informan que utilicemos wallets multifirma (o Multisig en inglés, donde participa más de una llave), pero ese no es el foco de este análisis así que de momento haremos una wallet de firma única (o single sig en inglés). De esta forma, solo haciendo interactuar nuestra TAPSIGNER con el móvil podremos mover fondos. Le damos a Create new wallet.

19. Aquí le damos un nombre a nuestra wallet y avanzamos.

20. Y en la última ventana solo nos indica un resumen de lo que estamos creando desde nuestra clave pública importada desde TAPSIGNER. Continue y finalizamos.

21. Antes de salir al menu principal de ‘Wallets’, Nunchuk nos pide que guardemos el archivo BSMS (Bitcoin Secure Multisig Setup).

  • El archivo es un formato interoperable de configuración de multifirmas que permite tener una copia de seguridad de la información pública «como Dios manda»: almacenando de forma correcta toda la información de los participantes, rutas de derivación y demás.
  • La estructura del archivo está especificada en el BIP129 creado en colaboración por los equipos de Coinkite, Shiftcrypto, Keystone y Nunchuk.
  • Está específicamente diseñado para Multifirmas y no es tan necesario para wallets de firma única. Igualmente no está mal guardarlo incluso para semillas simples y la única vulnerabilidad que presentan es de privacidad.
  • No se guarda de forma cifrada y si lo abrimos vemos algo que se parece a unos Output Descriptors pero que se diferencian de ellos al representar listas multi dimensionales. Más sobre esto aquí.

22. Después de guardar volvemos al menu de la pestaña inferior de ‘Wallets, y ahora sí que tenemos una wallet creada: ‘SingleSig’

23. Si entramos a Single Sig (en este caso ya tenía fondos pero si es la primera vez no veremos ningún movimiento) podremos enviar-Send o recibir-Receive.

24. Si le damos a Recibir no hay mayor secreto. Nos muestra la siguiente dirección libre y la podemos compartir por QR o copiando el texto.

25. El uso de TAPSIGNER lo vemos al enviar fondos en el botón de Send.

26. En la siguiente ventana definimos qué importe queremos enviar en Sats o USD

27. Luego, indicamos la dirección a la que queremos enviarlo, nos añadimos una nota y si queremos, definimos la comisión minera que queremos pagar.

28. Y así nos plantamos en la pantalla donde sucede empieza la magia de TAPSIGNER.

  • Hasta ahora solo hemos configurado una especie de «cheque virtual» añadiendo cantidad a enviar, destinatario, comisión y apunte para recordar la operación, pero todavía NO la hemos firmado. (Por eso vemos el estado arriba en Rosa que dice «Pending Signatures» o «A la espera de la firma»)
  • Las firmas son las que realiza nuestra clave privada, y en este caso la tenemos dentro de TAPSIGNER. Por ello, la retiraremos de nuestro billetera de tarjetas de crédito, o del lugar donde hayamos decidido guardarla, y le daremos al botón de Sign.

29. En este paso:

  • A. nuestra Wallet Interfaz (Nunchuk) va a hashear la transacción y se la va a enviar a nuestra Wallet Fría para que firme (TAPSIGNER)
  • B. Nuestra tarjeta NFC va a firmar el hash y va a devolver la firma al móvil en cuestión de segundos (~4-5 segundos)
  • C. La Wallet Interfaz va a recibir la firma, a completar la transacción y a pedirnos si la queremos retransmitir a la red.

Pero para que todo esto suceda primero le hemos de introducir el PIN necesario para operar con nuestra Wallet Fría. Lo hacemos y confirmamos.

30. Escaneamos la tarjeta NFC para que se realicen las operaciones A y B

31. En esta pantalla nuestra Wallet Interfaz nos indica que ya ha recibido la firma, que la transacción está completa y que esta «Ready to broadcast» (punto C). Y si estamos conformes con los detalles le damos a Boardcast Transaction.

32. Y así, volvemos al menu de nuestra wallet «SingleSig» que nos indica ahora que hay una transacción pendiente de confirmarse. Esto significa que se ha enviado pero que todavía no se ha introducido en un bloque.

Y todo esto lo hemos hecho sin que nuestra clave privada entre en ningún momento en contacto con internet:

  • -> lo que ha viajado desde el móvil (online) a la tarjeta vía NFC ha sido un hash de la transacción (en verdad se envía un Hash por cada Input).
  • <- lo que ha vuelto al móvil via NFC ha sido solo la firma.

Lo mejor de todo esto es que el usuario poco dado a la tecnología ni a los gadgets tecnológicos, solo se ha relacionado con cosas que ya conoce:

  • su teléfono móvil
  • una tarjeta que parece de crédito
  • un pago contactless como los que hace en los TPV de las tiendas.

Y sus fondos han gozado de una seguridad muy superior que los de una Wallet Caliente.

Backup: Cómo hacer una copia de seguridad

En el punto 13 de la Inicialización hemos visto en qué momento nos relacionamos con dos de las piezas de respaldo que son importantes guardar. En esta sección las repasamos y añadimos todos los elementos necesarios para poder recuperar los fondos de una TAPSIGNER con éxito.

Información de claves privadas

Para recuperar la clave privada extendida que tenemos dentro de nuestra TAPSIGNER deberemos tener copia de seguridad de dos cosas:

  • El archivo .AES de la Clave Privada Extendida (xprv) cifrada que podemos exportar cuando introducimos el PIN desde una aplicación como Nunchuk o Keeper.
  • La clave BACKUP KEY (5) que encontramos detrás de la tarjeta y que sirve para descifrar el archivo .AES.

Como la combinación de ambos elementos desbloquean el acceso a la clave privada extendida, no debemos almacenarlos juntos.

  • El archivo .AES debe guardarse digitalmente. Quizá quieras guardarlo en varias memoria USB, en un LiveUSB con TailsOS o en algo más avanzado como una unidad de memoria cifrada DATASHUR.
  • la BACKUP KEY la puedes guardar tanto en digital como en físico escrita en un papel.

Si lo que queremos es no perder el acceso a nuestra propia TAPSIGNER, es importante también mantener a buen recaudo alguna copia de nuestro PIN.

NOTA: Cabe destacar que para recuperar una TAPSIGNER descifrando el archivo cifrado .AES, será necesario trabajar en un entorno seguro.

Información de claves públicas

La información de clave públicas es toda aquella que ayuda a la wallet a encontrar fondos que guarda una clave privada extendida. Si estás utilizando wallets de firma única con rutas de derivación y scripts «estándar», guardar la información pública puede no ser necesaria.

Para recuperar wallets multi-firma creadas con TAPSIGNER, deberemos guardar su información pública (archivo BSMS en Nunchuk o Output Descriptors en otras como Sparrow).

Ante la duda sobre si debemos o no guardar una copia de esa información, mejor hacerlo.

Se puede guardar en digital y también imprimirse. Si alguien encuentra esa información, solo se compromete la privacidad pero no los fondos (pueden saber lo que tienes pero no moverlo).

Recuperar copia de seguridad

La forma más sencilla de recuperar los fondos de una TAPSIGNER desde el archivo cifrado, es utilizando la interfaz móvil de Nunchuk.

Hay que tener en cuenta que utilizando este método nuestra clave privada fría pasa a ser caliente y será muy importante que el dispositivo donde lo hagamos sea seguro (no contenga malware). A quien le interese una solución más segura, utilizando TailsOS en un ordenador sin conexión a internet, que revise el apartado opcional 2 del final de la guía.

Para todos los públicos: Nunchuk móvil

  1. Para recuperar un TAPSIGNER desde su archivo cifrado .AES le damos al botón ‘+’ de la derecha de Keys y en la siguiente pantalla le damos a «Add NFC Key»
  2. Ahora, en el desplegable que se nos abre desde abajo le hemos de dar a «Recover TAPSIGNER key from backup»
  3. En la siguiente ventana nos informan de los pasos a seguir (buscar el archivo cifrado dentro del terminal móvil e introducir la BACKUP KEY (5) para descifrarlo) y también nos advierte de que la clave privada extendida pasará a ser «de software» (en nuestra categorización esto significa que será caliente o hot). Le damos a Continue.
  4. y aquí es donde debemos introducir la BACKUP KEY que encontrábamos en el punto (5) de la cara B de la tarjeta.

Después de este proceso nos aparecerá una Key que será nuestra TAPSIGNER Key en formato Wallet Caliente y con la que habremos recuperado nuestra clave privada.

Si se estaba utilizando TAPSIGNER para guardar más de 1-2 salarios mínimo de tu país, recomiendo pasar todos los fondos custodiados por la ahora «clave caliente» a otra nueva «clave fría».

Vectores de ataque

TAPSIGNER tiene varios vectores de ataque y es importante conocerlos para podernos proteger.

Ataque en la cadena de suministro

  • 🟢 Al inicializar una TAPSIGNER, el protocolo de comunicación NFC que ha diseñado Coinkite (el cktap) y que utilizan aplicaciones como Nunchuk y Sparrow, verifica el certificado de producción para ver que esa TAPSIGNER no haya sido sustituida por una no producida por Coinkite. Además, cada vez que haces ‘tap’ con tu TAPSIGNER, se genera una llamada de verificación al servidor de Coinkite junto a un ‘nonce’ (number once) que firma la tarjeta y que sirve para verificar la autenticidad de la tarjeta.
  • 🟡 Coinkite no relaciona números de tarjeta con datos personales de los pedidos (que además se borran a los 120 días). Como ya sucede en Bitcoin Park en Nashville, espero ver cada vez más puntos de venta físicos de TAPSIGNERs para imposibilitar esas conexiones. Lo que sí podrían llegar a saber es el IP de tu terminal. Si eso te preocupa, una VPN es la solución.

Ataques desde fuera: ataques Remotos

  • Sin tener acceso físico a tu tarjeta, un atacante podría intentar acceder a su información de forma remota. Al tener conectividad NFC hemos de prever dos tipos de ataque:
    • Ataques de largo alcance por NFC
    • y acceso no autorizado a tu backup cifrado con AES
  • 🟢 El primer ataque se soluciona con la funda anti RF que recibes cuando compras una TAPSIGNER o con alguna bolsa Faraday de bloque RFID.
  • 🟡 Si eres objetivo de un ataque de este estilo cuando has desbloqueado la tarjeta con su PIN seguramente tu esquema de seguridad requiera el uso de otro tipo de dispositivos sin conectividad NFC. Pero si te preocupan este tipo de ataques y quieres usar esta tarjeta inteligente, una buena forma de remediarlo sería usando TAPSIGNER en esquemas multifirmas donde dividas riesgo.
  • 🟢 En el segundo tipo de ataque, si alguien consigue la copia de tu backup cifrada estarás a expensas de la seguridad del algoritmo AES de 128 bits. A fecha de escritura de este artículo puedes estar tranquilo con este tipo de ataques pero si todavía tienes dudas, te dejo este artículo para que sigas leyendo.

Ataques con acceso físico a la tarjeta:

  • Evil Maid Attack:
    • 🟡Si alguien tiene acceso a tu TAPSIGNER (p.ej. la pierdes por la calle) pero desconoce el PIN, conocerá el ID de la tarjeta (2) y el código de descifrado del backup (5), pero sin el PIN no podrá acceder a la xprv ni a poder extraer el backup cifrado.
    • 🟡Sí que hay un pequeño leak de información y es que podrá saber la última ruta de derivación utilizada.
  • Acceso a la tarjeta física + PIN:
    • Esquema de firma única:
      • 🔴 Estás vendido. Si alguien consigue acceder a tu tarjeta física y localiza el PIN (quizá lo tienes apuntado cerca y es fácil de relacionar), entonces no tienes nada que hacer. Esa persona con acceso no autorizado puede crear una Wallet de firma única en Nunchuk o Keeper y ver lo que tienes.
    • Esquema Multifirma:
      • 🟡 Si solo has utilizado tu TAPSIGNER como cofirmante de una Wallet Multifirma, entonces no podrán hacer nada. Si no han tenido acceso al móvil o ordenador donde tenías la wallet Multifirma configurada (en una wallet tipo interfaz), entonces ni sabrán que tienes un Multifirma.

Conclusiones

Público Objetivo

Operar con TAPSIGNER es muy cómodo y hace que para mi sea la primera wallet fría que recomendaría a alguien que empieza y que quiere subir el nivel de seguridad de sus bitcoin sin apenas complicaciones. Ese tipo de persona que quizá todavía no está preparado para una hardware wallet convencional pero que no quiere renunciar a la seguridad de tener su clave privada un dispositivo sin internet.

Prácticamente todo el mundo está familiarizado ya con el uso de smartphones y de tarjetas de crédito y de eso se aprovecha TAPSIGNER, de hablar un lenguaje que la gente ya entiende.

Además, si el usuario quiere seguir aprendiendo, lo bonito de la combinación TAPSIGNER + Nunchuk es la posibilidad de hacer multifirmas con un familiar que entienda más de Bitcoin a través de su chat cifrado. Cada uno desde el sofá de su casa.

Otros perfiles candidatos:

  • Publico principiante que ya se ha animado a probar alguna wallet tipo Blue Wallet y que empieza a custodiar algo más de un 1 salario mínimo en su país.
  • Usuarios avanzados que les interese tener una clave privada, segura y de fácil acceso para participar en multifirmas.

Ventajas y desventajas – Tradeoffs

Como he explicado en la sección «Qué tipo de wallet es TAPSIGNER», esta tarjeta NFC de Coinkite encuentra un hueco muy interesante en el reino de la custodia de tus satoshis:

  • está dentro de la categoría de wallets frías al estar su clave desconectada de internet
  • pero no presenta todas las características, posibilidades, ni premisas de seguridad de las conocidas hardware wallets como ColdCard.
  • Aunque no es la mejor wallet fría que podrías conseguir,
  • sí que es mucho más segura que una wallet caliente de móvil y terriblemente más cómoda de utilizar y llevar que una hardware wallet.

✅ Si tuviera que destacar sus mayores ventajas diría que son:

  • practicidad
  • portabilidad
  • facilidad

❌ y sus desventajas:

  • poca flexibilidad: son de 1 solo uso (una vez has configurado una clave privada extendida, no se puede generar de nuevas)
  • la dependencia de una wallet interfaz (Nunchuk, Sparrow, etc) para verificar cambios e introducir datos sensibles como la entropía
  • la dificultad de verificar que la xprv, xpub y direcciones son las que deberían ser en base a la entropía que le has introducido. (más sobre esto en el Wishlist y el apartado Opcional 2).

Creo que las desventajas de este dispositivo forman parte de su esencia (aunque como te contaré en el Wishlist creo que alguna es solucionable) y que no conseguiríamos sus ventajas sin por ejemplo la dependencia de una wallet interfaz móvil.

Por ello, y también por su precio de 40$ con el que se sitúa un 38% por debajo de las hardware wallets más económicas del mercado, me parece una elección perfecta para los primeros satoshis de un bitcoiner que busca practicidad seguridad sin complicaciones.

Posibles casos de uso

Después de haber estado jugando largo y tendido con TAPSIGNER creo que los siguientes casos de uso es donde la tarjeta NFC de Coinkite brilla:

1. La primera wallet fría de tu padre, madre o persona con poca paciencia para los nuevos gadgets:

Con dos elementos que ya conoce todo el mundo (smartphones y tarjetas contactless), tu familiar o amigo poco técnico puede empezar a custodiar cantidades superiores al salario mínimo, sin sufrir por su seguridad.

Siguiendo los sencillos pasos explicados en los apartados de «Inicialización» y «Operar con TAPSIGNER», cualquier persona puede hacer su primera incursión en el mundo de las wallets frías + wallets interfaz y empezar a custodiar con seguridad y comodidad.

Y no solo para un principiante. El bitcoiner experimentado puede usar TAPSIGNER para tener fondos en el teléfono con una mayor seguridad. Yo la vengo usando estas últimas semanas y la fricción ha sido prácticamente inexistente (salvo los momentos en que no tenía la tarjeta cerca claro).

2. Multifirmas de uso cotidiano cómodos gracias a Nunchuk:

Las wallet multifirma de Bitcoin son interesantes tanto para

  • custodiar tus propios fondos reduciendo el punto único de fallo mientras te facilitas su seguridad con soluciones de custodia compartida privada o comercial,
  • y para recibir fondos entre socios, moverlos con un consenso mínimo y poder llevar una contabilidad transparente a ojos de todos.

Participo en varias multifirmas creadas con hardware wallets convencionales y siempre hay fricción a la hora de firmar operaciones entre varios miembros. No siempre se tiene la hardware wallet cerca o el ordenador y a veces las operaciones demoran 1 o más días hasta coordinar la realización y envío de firmas.

TAPSIGNER abre la posibilidad a que por ejemplo 3 socios lleven su clave cofirmante de un multifirma siempre encima y que gracias a Nunchuk móvil, la tengan creada y sincronizada desde un grupo de mensajes interno de la aplicación. Cuando han de mover fondos, se llaman o lo comentan por el chat y construyen la transacción desde ahí mismo. Entonces, firman la operación con su TAPSIGNER mientras toman un café en Starbucks y listo. Tres personas que pueden estar en puntos distintos del globo, firmando una operación multifirma consensuada de la forma más cómoda.

También me imagino un esquema similar con un padre o madre que quieren subir el nivel de seguridad de sus bitcoin y que con la ayuda de su hijo bitcoiner establecen un Multifirma con:

  • 1 TAPSIGNER gestionado y custodiado por el familiar menos experimentado
  • 1 HWW custodiado por el padre fuera de la vivienda habitual y operado por el hijo en la creación
  • 1 TAPSIGNER gestionado y custodiado por el hijo

De esta forma, el familiar puede ir recibiendo fondos en un esquema de seguridad superior a la firma única y operar cuando lo necesite con una llamada a su hijo o familiar bitcoiner.

En este esquema se pierde privacidad (el hijo ve todos los fondos y movimientos), pero se asume que solo es apto en círculos de mucha confianza. También se ha de evitar que los dos TAPSIGNER acaben juntándose en un mismo lugar (cenas de Navidad, etc).

Wishlist

Dejo dos deseos que me gustaría ver en un futuro cercano para que la experiencia con TAPSIGNER fuera todavía mejor:

  • 🤞 Poder importar el backup cifrado en AES directamente a la ColdCard mk4 o Q1 sin tener que descifrarlo antes ni usar wallets interfaz como Nunchuk que suelen estar en dispositivos hot.
    • La versión 5.1.1 del nuevo firmware para la mk4 incluye esta funcionalidad ✅
  • 🤞 Poder verificar el Chain Code en un dispositivo airgapped independiente de forma fácil como podría ser en una ColdCard mk4 o Q1

Op1 – Master Private Key: Private keys + Chain Code

En Bitcoin hay varias formas de guardar la copia de seguridad de tu clave privada para que puedas volver a acceder a tus bitcoin en otra wallet y momento futuro.

Estamos acostumbrados a utilizar Frases Mnemónicas (las famosas 12-24 palabras que apuntamos al crear una nueva wallet) pero no son la única forma que existe. En la historia del almacenaje y respaldo de claves privadas de Bitcoin se han utilizado diversos tipos, siendo los más conocidas en orden cronológico de aparición:

  • el archivo wallet.dat
  • el código WIF
  • el xprv o Master Private Key
  • y las Frases Mnemónicas

La Master Private Key nació en 2012 con el BIP32 sobre HD Wallets (Billeteras jerárquicamente deterministas) de Pieter Wuille. En Bitcoin se buscaba una forma de poder generar muchas claves públicas (que acaban siendo direcciones de Bitcoin), sin necesidad de generar (y guardar) una clave privada a cada vez. El BIP32 fue una forma de «estandarizar» la generación de un número casi infinito de direcciones desde una única clave privada, y por lo tanto, desde una única copia de seguridad.

Esta «única» clave privada (Master Node en la imagen) de la que se deriva todo el árbol de subclaves privadas y públicas. A esta «única» clave también la llamamos:

La anatomía de una Master Private Key del BIP32 es simple:

  • 5f15a94a8c3e71ebc8a28012149a3a11e4c2150a1eafa7fda5ac1063b1ac8beaef1558f3eaf586a936c9ae788ba678b13890d1db292d7385fa085796ead367bc

Esto son 64 bytes de números aleatorios (aquí expresados en hexadecimal) que se componen de 2 partes:

  • Private key (no extended porque extended es cuando añadimos el chain code)
    • 5f15a94a8c3e71ebc8a28012149a3a11e4c2150a1eafa7fda5ac1063b1ac8bea
  • y el Chain Code
    • ef1558f3eaf586a936c9ae788ba678b13890d1db292d7385fa085796ead367bc

Estos números son aleatorios y la única condición que han de cumplir es que la Private key no sea 0 y que quede dentro del orden ‘n’ de la curva secp256k1 (no es importante entender ahora, pero sí vale la pena saber que hay un número máximo y que a partir de ahí ya no son válidos).

El chain code puede ser totalmente aleatorio.

A partir de ahí, esta información se serializa con otros parámetros informativos como el tipo de red para el que será esta clave (mainnet, testnet, etc), un checksum y su posición relativa en el árbol de derivadas y se codifica en Base58 lo que acaba dando la característica forma empezando en xprv:

  • xprv9s21ZrQH143K4SR59eXpYc3DdqMv6CD7WwXjFB7Zzi5YpbpMcFX1vuF1KDcBSquukRyFU5rvZUg7RyQJH16XUn4HUbGRxGbdBqEsejyyce1

TAPSIGNER nos permite escoger a nosotros los 32 bytes del Chain Code y le deja al generador de aleatoriedad de la Java Card generar una Private Key válida. Ya dentro de la tarjeta, estos dos datos se concatenan, se protegen bajo PIN y se genera la xprv que solo podemos extraer como archivo cifrado en AES a modo de backup.

De esta forma ingeniosa no confías al 100% la generación de tus Master Extended Keys ni a la tarjeta ni a la wallet.

  • Si confiaramos el 100% de la generación a la tarjeta estariamos la posibilidad de que estas vinieran hechas «de fábrica», escogidas por un actor malicioso que qusiera recibir nuestros bitcoin.
  • Si confiaramos el 100% de la generación a la wallet (en este caso a Nunchuk), TAPSIGNER dejaría de estar en el reino de wallets frías al haber tenido la clave un momento de permanencia en un dispositivo conectado.

¿Y cómo sé yo que la xprv que se almacena en la tarjeta tiene realmente el Chain Code que yo le he aportado? Veríficándolo en el backup.

Te cuento cómo hacerlo en la siguiente sección apta para los que saben operar con dispositivos 100% offline usando TailsOS.

Op2 – Verificar Chain Code

En esta explicación te voy a detallar cómo he verificado de forma segura el Backup cifrado en AES que puedes extraer de TAPSIGNER y su chain code (el código escogido manualmente en la inicialización).

Así, he aplicado el «don’t trust, verify» para comprobar que la tarjeta realmente nos permite introducirle aleatoriedad y que no trae su propia clave privada de serie (sería un gran No No).

Este proceso es un poco más laborioso y requiere algo de conocimientos técnicos. Si solo te interesa saber cómo recuperar un backup de forma fácil, revisa la sección anterior «Recuperar copia de seguridad».

Qué vamos a hacer

Vamos a descifrar el archivo AES del backup y decodificarlo para encontrar el chain code.

Qué vas a necesitar

Para realizar este proceso vamos a necesitar:

  • Un ordenador airgapped seguro (idealmente uno que exlusivamente utilices para este tipo de tareas, sin tarjeta wifi etc.) — buen momento para revisar los Thinkpads que vende Chavo
  • Un liveUSB con TailsOS – Más sobre Tails en el canal de Alberto, Laboratorio Virtual de Bitcoin
  • La BACKUPKEY de nuestra TAPSIGNER (punto 5 de la Cara B)
  • un USB o microSD con
    • el archivo backup.aes
    • la built distribution de base58 para python: base58-2.1.1-py3-none-any.whl
    • OPCIONAL: archivo de texto con algunos comandos para hacerlo más fácil
    • OPCIONAL: archivo Python con pequeño script para descodificar el xprv
    • OPCIONAL: Sparrow Wallet .deb para ubuntu ya verificado.
  • Más abajo te cuento el porqué de estos archivos.

Paso a paso

Iniciamos TailsOS en nuestro ordenador airgapped. En la configuración antes de iniciar sesión le ponemos una contraseña de administrador. Necesitaremos hacer sudo en un punto.

Ya en Tails, conectaremos el USB con los archivos. Es posible que no los detecte y que tengamos que abrir la Herramienta de Discos para montar la unidad en cuestión.

Con la carpeta de nuestros archivos abierta, haremos botón derecho y le daremos a abrir terminal en esa ruta.

1. Descifrado de Backup

Ahora procederemos a descifrar nuestro backup. Para ello podemos revisar antes en nuestra terminal qué archivos hay:

  • ls -la

Acto seguido, ya podemos completar el siguiente comando sustituyendo los campos ‘PASSWORD’ y ‘FILE’ por su correspondiente valor:

  • openssl aes-128-ctr -iv 0 -K PASSWORD -in FILE

NOTA: para facilitarme la operativa, este comando lo he guardado en el archivo how to aes.txt que he incluido en el USB o microSD

Y así es como veremos aparecer en pantalla nuestra clave privada extendida o xprv.

También veremos su ruta de derivación. En este caso m/84’/0’/0′ (h=’).

Con este xprv ahora podemos hacer 2 cosas:

  • Descodificarlo para verificar que se haya construido con el chaincode que nosotros le indicamos en la inicialización de Nunchuk
  • Introducirlo en Sparrow wallet (si la has traido en el USB o microSD) para comprobar que efectivamente genera las direcciones de firma única que está generando Nunchuk. (Se podría hacer con Electrum pero tendrías que encontrar una forma de codificar la xprv a ypub o zpub en función de tus necesidades. Sparrow lo hace mucho más fácil)

Decodificar xprv

La clave privada extendida viene codificada en base58. Para ver el chaincode con nuestros propios ojos debemos decodificarla. Quizá haya una forma más sencilla de hacerlo, pero esta es la que se me ha ocurrido a mi: utilizando el módulo de base58 de python

Como no estamos conectados a internet, hemos traído una copia del módulo en nuestro USB o microSD descargada de aquí https://pypi.org/project/base58/#files

Así que primero, toca instalarla.

Para ello, abrimos otro terminal en la carpeta del USB con el archivo .whl y revisamos que tengamos python3 instalada con python3 --version

También podemos verificar si ya tiene instalada esa librería con python3 -m base58 --version pero lo más seguro es que nos diga que no: No module named base 58

Así que lo instalamos con:

  • sudo python3 -m pip install ./base58-2.1.1-py3-none-any.whl

Aquí es el momento donde es importante que hayamos puesto una contraseña de administrador porque nos la pedirá.

La ponemos e instalación completa.

Si ahora volvemos a verificar la instalación de base58 con python3 -m base58 --version, ya no nos sale lo de No module

Llegados a este punto tenemos todas las herramientas para poder decodificar el xprv. Lo que nos falta es hacer un pequeño script en Python para calcularlo.

En ese mismo terminal crearemos nuestro script:

  • sudo nano xprv.py

Y dentro podemos copiar y pegar (control+shift+v) las siguientes dos líneas:

  • import base58
  • print(base58.b58decode("").hex())

NOTA: para facilitarme la operativa, este comando lo he guardado en el archivo how to aes.txt que he incluido en el USB o microSD

Volvemos a la ventana de terminal donde tenemos nuestra xprv en pantalla. La copiamos (control+shit+c) y la pegamos (control+shift+v) entre las dobles comillas, tal que quede como en la imagen.

Salimos de nano con control+X y le damos a la ‘Y’ para guardar los cambios.

Ahora ya solo nos queda correr el comando python3 ./xprv.py y nos aparecerá en pantalla la clave privada extendida decodificada en hexadecimal.

El chain code empieza después de

  • los 4 bytes de versión (0488ade4)
  • el byte de la profundiad (00)
  • los 4 bytes de la huella (00000000)
  • y los 4 bytes del número de hijo (00000000)

A partir de ahí, los siguientes 64 caracteres hexadecimales son la clave de cadena que incluimos (o aceptamos) en la inicialización de la TAPSIGNER en Nunchuk.

NOTA: En estas capturas de pantalla he utilizado una xprv distinta a la de TAPSIGNER con la que hago pruebas y por eso no encajan con los pantallazos mostrados desde Nunchuk, pero sí que puertas para dentro he verificado que el chain code que seleccioné fuera el mismo y encajan.

De esta forma es como conseguimos descifrar y decodificar el backup de nuestra TAPSIGNER para verificar su chain code y poder importar el xprv en Sparrow Wallet en un segundo paso no cubierto en esta guía para verificar las direcciones de recepción y/o recuperar los fondos de tu backup.

Publicaciones Similares