Saltar al contenido

¿Confías en tu semilla? No confíes, hazla tú mismo

Tiempo de lectura aprox: 15 minutos, 38 segundos

Recientemente me he obsesionado en la seguridad de las semillas o private keys que protegen mis Bitcoins. Escuchando a gente como Arkad o Michael Flaxman me he dado cuenta que confiamos en las semillas que nos proporcionan software y hardware wallets, pero ¿y si te están facilitando una semilla ‘trucada’ siguiendo una serie concreta para luego ellos, en un futuro, vaciar tu wallet y la del resto de sus clientes? o ¿y si sencillamente su generador de entropía o aleatoriedad no funciona como debería y me proporciona una semilla pobre e insegura?

En el último mes, me he dejado caer por la madriguera de la creación de semillas y he aprendido mucho: he creado mi primer programa, he hecho mi primer issue en github y he conseguido un sistema 100% soberano, seguro y offline.

En este artículo te voy a explicar toda esta experiencia y cómo puedes hacer tu lo mismo con una hoja de papel, una moneda, un boli y -de momento- una SpecterDIY.

Si deseas saltarte la teoría e ir directamente a empezar tu semilla a mano, te recomiendo que sigas por ‘Semilla-Moneda’.

Introducción a la entropía

El concepto entropía es usado en termodinámica, mecánica estadística y teoría de la información. En todos los casos la entropía se concibe como una «medida del desorden» o la «peculiaridad de ciertas combinaciones». La entropía puede ser considerada como una medida de la incertidumbre y de la información necesaria para, en cualquier proceso, poder acotar, reducir o eliminar la incertidumbre. Wikipedia

Una buena entropía es un buen desorden. Una mala entropía es un mal desorden. Algo que es aleatorio de verdad seguramente siga un buen desorden y viceversa.

Aunque en muchas de las cosas que hacemos buscamos el orden como fin último, el desorden también tiene mucha utilidad. En el caso que nos ocupa — Bitcoin — el desorden, la entropía o los números aleatorios son muy importantes para el momento más inicial (y crítico) de nuestra aventura con la invención de Satoshi.

Una dirección de Bitcoin no es más que la simplificación de una clave pública. Ésta, a su vez, es el resultado de operar una clave privada en una curva elíptica. Y más arriba de la clave privada ya no hay nada. Cuán segura sea tu clave privada marcará qué tan seguros están tus Bitcoin.

La clave privada, ese dígito raro o conjunto de 24 palabras que hemos de proteger, realmente no es más que un número escogido al azar de entre el 1 y el 2²⁵⁶ (valor desarrollado abajo en negrita). Este número normalmente lo selecciona por ti tu software o hardware wallet.

2²⁵⁶ en decimal

Escoger al azar, o de forma aleatoria, son sinónimos de buena entropía y es muy importante que la clave privada que asegura tus bitcoins haya sido escogida con una buena entropía. Una clave privada realmente aleatoria será una buena clave privada. Una clave privada escogida siguiendo cierto patrón será una pobre clave privada y la seguridad de tus bitcoins estará comprometida.

La mayoría de las claves privadas que utilizamos para nuestros Bitcoins las generan un software o hardware wallet.

¿Debemos estar tranquilos con que sean estos los que calculen nuestra clave privada con buena entropía?

Por qué no confiar en nada: PRNG & TRNG

Imagen de hackaday.com

En software y hardware tener una fuente de números aleatorios es algo necesario y por ello se ha trabajado para conseguir fuentes fiables de entropía. No soy experto sobre el tema pero si que me gustaría destacar dos términos que he encontrado durante mi investigación: PRNG (Pseudo Random Number Generator) y TRNG o HRNG (True/Hardware Random Number Generator).

  • Un PRNG es «un algoritmo que produce una sucesión de números que es una muy buena aproximación a un conjunto aleatorio de números.» (fuente wikipedia)
  • Un TRNG es «un dispositivo que genera numeros aleatorios a partir de un proceso físico, en vez de un algoritmo. Tales dispositivos se basan a menudo en fenómenos microscópicos que generan señales de ‘ruido’ estadísticamente aleatorias, como el ruido térmico … y otros fenómenos cuánticos.» (fuente wikipedia)

Sobre el primero, los PRNG, destaco la parte de la definición que dice ‘es una muy buena aproximación’, con lo que intuyo que realmente no gozará de una buena entropía.

Un artículo sobre entropía recomendado por Sergi Delgado (y que recomiendo yo también al 100%) habla sobre los PRNG y dice lo siguiente:

«… la parte de ‘pseudo’ en ‘Pseudorandom number generator’ (PRNG) es realmente sinónimo de ‘en absoluto’ o ‘nada’ aleatorio. Claro que si entras a mitad de un proceso de una buena secuencia de PRNG, intentar adivinar cuál será el siguiente número es casi imposible. Pero si sabes, o puedes imaginar, cual es la semilla que empezó ese PRNG, sabrás todos los valores pasados y futuros casi al instante. Es una función matemática púramente determinista. «

Entonces, ¿Debemos confiar en un PRNG como fuente de aleatoriedad de nuestra private key?

  • Nah

Los TRNG son otra cosa. Aquí ya sí que encontramos una mejor entropía, pero como en todo, también hay grados y si querías encontrar otra razón por la que utilizar una Hardware wallet en lugar de una Software wallet, esta puede ser una buena razón. Las HWW son dispositivos físicos minimalistas diseñados con el único fin de almacenar Bitcoin y por tanto con un buen TRNG en el interior (en teoría) .

Una buena hardware wallet no solo ha de ser segura frente a ataques físicos y online pero también ha de proveer de una buena fuente de entropía, pero ¿y si como explica Michael Flaxman en su último pod con Stephan Livera el fabricante de tu hardware wallet es malicioso y ha instalado un TRNG trucado para así conocer qué semillas están generando sus clientes y en un futuro vaciarlas de fondos?

¿Debemos confiar?

  • No

Pero entonces sin la entropía de software wallets ni hardware wallets. ¿Cómo lo hacemos?

  • A mano!

Semilla moneda

¿Qué necesitas para generar tu semilla con buena entropía?

En este artículo, vamos a seguir la máxima de Don’t trust, verify, y te voy a enseñar a cómo generar tú mismo, sin ayuda de nadie y sin conocimientos técnicos, tu propia semilla de 12, 15, 18, 21 o 24 palabras. Para hacerlo vas a necesitar:

  • una moneda (cualquiera con la que puedas jugar a cara o cruz)
  • una hoja impresa con el PDF de Semilla Moneda, aunque también valdría una hoja en blanco
  • un bolígrafo
  • La lista de palabras del bip39 impresa (o como las ha preparado seedpicker en 4 hojas)
  • imprimir este artículo o guardarlo offline en tu ordenador
  • Una Specter DIY o un ordenador offline (Solo recomiendo la Specter o un ordenador 100% offline)
  • Opcional: una calculadora de las de toda la vida (no móvil, no pc, no dispositivo conectado online. Una Casio o similar.)

Procedimiento semilla-moneda

Una semilla es la representación en lenguaje legible humano, de ese número tan grande que es tu clave privada. Normalment se codifica tu clave privada en 12 o 24 palabras inglesas*.

La entropía de una semilla de Bitcoin que siga el BIP39 ha de tener una longitud de entre 128 y 256bits, pudiendose escoger un valor intermedio múltiple de 32. Esto nos deja con que podemos trabajar con entropías de 128, 160, 192, 224 y 256 bits, que darán como resultado 12, 15, 18, 21 o 24 palabras de semilla.

Pero ¿Qué significa ‘entropía de xxx bits’?

Para representar la entropía en bitcoin utilizamos el lenguaje nativo de los ordenadores: los bits o números binarios. Cuando decimos que una semilla tiene una entropía de 128bits, estamos diciendo que para empezar a generarla necesitamos una cadena de unos y ceros, (que es como se representa el binario 1010101111000110) de 128 valores.

Así que manos a la obra. Empecemos!

*Existen otros idiomas disponibles para tu semilla, pero el estándar de facto es el inglés.

Generando tu entropía con una moneda

Para continuar puedes imprimir la pauta semilla-moneda que he preparado, o puedes copiar su estructura a mano en tu hoja de papel.

Para empezar a generar nuestra semilla de buena entropía, vamos tomar una moneda y le asociaremos un valor 0 a una cara y un valor 1 a la otra. Yo, por ejemplo, he utilizado una moneda de 50ct de euro y he asociado el número 1 a la cara con la cífra de 50ct, y el valor de 0 a la cara con el rostro de cervantes.

Ahora, vamos a lanzar la moneda tantas veces como entropía queramos para nuestra semilla. Yo, para este ejemplo he buscado una semilla de 256bits de entropía con lo que he lanzado 256 veces la moneda al aire.

Antes de comenzar, por favor, ten en cuenta las siguientes consideraciones:

  • Este proces ha de ser 100% manual con lo que no queremos nada de tecnología a nuestro alrededor.
Imagen de primer test a mano que hice
  • En la foto de arriba puedes ver como mi primer intento fue sin pauta y 100% aleatorio. En el ejemplo rellenado en la pauta no he realizado el proceso realmente y me he inventado las cifras a modo de ejemplo. Se puede observar que la entropía no es buena. NO lo hagas así.
  • Si vas a tener el móvil cerca, tapa las camaras. Nunca sabes qué te puede estar observando y si no las tapas cuando menos te lo esperes tu subconciente te hará coger el móvil y pasará por delante de tus preciadas palabras con él (estás vendido).
  • Mientras lanzas la moneda y vas apuntando los resultados, es normal que entres en bucle y que vayas diciendo los resultados en voz alta. No lo hagas. La gente (familia, pareja o vecinos) te escuchan y por tanto alexa, ok google, y otros dispositivos también.
  • Mientras lanzas la moneda, el bucle en el que vas a entrar va a hacer que perfecciones tu lanzamiento. Eso puede llevar a resultados parecidos. Haz cambios. Muévete, déja caer a veces la moneda a la mesa, suelo etc, lánzala más o menos fuerte o cambia de mano. Queremos buena entropía!
  • Mientras vas lanzando puedes hacer 3 o 4 lanzamientos consecutivos y luego parar a escribirlos. Así no estás parando después de cade lanzamiento.

Teniéndo esto en cuenta, ponte cómodo, algo de buena música y a lanzar la moneda!

Para encontrar los valores de este ejemplo me he sentado en una alfombra. Así, si la moneda caía al suelo, no hacía mucho escándalo. Todo el proceso de 256bits me ha llevado 17 minutos.

He empezado rellenando los primeros resultados en la fila 1, casilla A, luego la B y así hasta la K. Después he seguido por la 2 hasta llegar al tercer bit de la fila 24 que es donde consigues los 256 bits.

Si como yo has rellenado 256 bits verás que de la última palabra, la fila 24, te quedan 8 bits por rellenar. Está bien. Más adelante te contaré cómo encontramos esos bits que faltan.

Si has rellenado 128, 160, 192 o 224 bits, verás que en la pauta en pdf están marcados en gris claro esos valores.

Cuando hayas rellenado de buena entropía los bits deseados, puedes escoger tu camino 🔀

  • A. O seguir leyendo el ‘Conversión a decimal’ para calcular manualmente las palabras y acabar utilizando el método que más recomiendo (SpecterDIY)
  • B. O saltar directamente al sistema de Ian Coleman o Semilla-Moneda.

Conversión a decimal

A. Ahora vamos a convertir los 11 dígitos binarios de cada fila en decimal. Este proceso se puede hacer 100% manual o utilizando una calculadora de las de toda la vida (Casio, texas instrument etc).

A continuación, voy a desarrollar el cálculo manual con lo que si ya sabes convertir de binario a decimal, puedes saltar a ‘consideraciones de la conversión decimal’.

Convertir un número binario a decimal es muy sencillo. Solo necesitas saber que el binario es posicional y que cada posición equivale a un valor decimal.

El valor de la cifra binaria de más a la derecha (del bit 1) equivaldrá a 2^0 (1) multiplicado por el valor binario que tenga (1 o 0). El siguiente a 2^1 * 1 o 0. El siguiente a 2^2 * 1 o 0 , etc.

En el caso del binario de 11 cifras 11111111111:

  • 1*2^0=1
  • 1*2^1=2
  • 1*2^2=4
  • etc

Cuando tenemos todos los resultados decimales, los sumamos. y obtenemos el valor decimal de una cifra de 11bits. En el caso de este ejemplo, vemos cuál será el valor máximo en decimal de un binario de 11 bits = 2047. Esto significa que un binario de 11 bits puede tener 2048 valores: del 0 al 2047.

Si te das cuenta, la lista de palabras que te he pedido que imprimas – la del bip39 – tiene exactamente 2048 palabras. Cada una de nuestras filas de 11 bits, equivaldrá a una palabra del bip39. Todas menos la de la última fila de la entropía que hayas seleccionado (en el caso del ejemplo la fila 24), pero de ello hablaremos más abajo.

Vamos a poner otro ejemplo de valor de 11 bits: 10000110111

La suma de la conversión, bit a bit, de binario a decimal da como resultado 1079

Si buscamos a qué palabra de la lista del BIP39 equivale tendremos que revisar en qué numero empieza la lista:

  • si la lista empieza con ‘abandon’ siendo el 0, la palabra que estamos buscando será la 1079
  • si la lista empieza con ‘abandon’ siendo el 1, la palabra que estamos buscando será la 1079+1 = 1080
  • La palabra en cuestión es 👉 ‘manage

Ahora ya sabes cómo traducir los resultados de lanzar una moneda al aire en palabras del BIP39. En la hoja que he diseñado, tacha con una raya los números de color gris de debajo de cada casilla de bit que contenga un 0. No hagas nada donde haya un 1.

En la línea de cálculo correspondiente ve anotando los valores que hayan que hayan quedado sin tachar. Mientras los anotas puedes ir sumándolos de dos en dos ayudándote de la ‘chuleta’ de cálculos rápidos.

Suma los valores y anota el resultado en la casilla ‘Suma’. Si tu lista de palabras tiene la palabra ‘abandon’ en la posición 1 (y no la 0) añádele una unidad a los resultados y anótalos en la casilla ‘¿+1?’.

Teniendo esto claro, puedes tomar tu lista de palabras del Bip39 (o la que tiene seedpicker) e ir buscando las palabras de tu semilla con entropía 🔝 calculada a mano.

En el ejemplo que he hecho yo me ha salido la siguiente semilla a falta de la palabra 24:

«title citizen snow place inner zoo exact element churn isolate tissue tonight prepare present admit sign since next siege certain reflect record XXXX»

Contrastando estos resultados calculados a mano con la entropía (tb calculada a mano) me he dado cuenta que había cometido 2 errores:

  • En la fila 14 me había dejado de sumar el +1 del bit 1
  • En la filla 22 me había dejado de tachar el 0 del bit 3

Aunque podría seguir con el proceso de ‘En busca de la última palabra de tu semilla’ con estas palabras ‘equivocadas’, he decidido corregir el error y utilizar pretty y rebuild.

Así entonces, la semilla resultante es:

«title citizen snow place inner zoo exact element churn isolate tissue tonight prepare pretty admit sign since next siege certain reflect rebuild XXXX»

Consideraciones de la conversión a decimal:

  • 🚫 Es un proceso totalmente offline así que a modo paranoico 100% no vamos a utilizar ningún ordenador (aunque bien que con una calculadora de windows 10 podríamos convertir rápidamente estos valores en modo programador)
  • Si tienes un ordenador 100% offline que nunca se conecta a internet, podrías utilizarlo.
  • Si sabes como funciona TailsOs y confías en tu dispositivo, podrías iniciar en modo avión y calcularlo allí también.
  • 🚫 No utilices la calculadora de tu teléfono móvil, está conectada a internet!
  • Hay calculadoras Casio o similar, con las que puedes calcular los valores binarios más rápidamente

En busca de la última palabra de tu semilla

Si has lanzado la moneda 256 veces, verás que de la palabra 24 solo tienes 3 dígitos binarios. Está bien, es correcto. Si rellenases toda la fila 24 en verdad tendrías 264 bits (11bits * 24 palabras).

Ok, pero con solo 3 bits, ¡la palabra 24 está incompleta! ¿De dónde obtenemos los 8 bits que nos faltan?

Para conseguir los 8 bits que nos faltan necesitamos hacer un hash de los 256 bits de la entropía que hemos encontrado con nuestra moneda.

Un hash es una función determinista, unidireccional e imprevisible ( función que siempre da el mismo resultado, aunque no puedes preveerlo ni ir hacia atrás para conocer su origen).

El resultado de hashear nuestra entropía con la función sha256 será una cadena distinta de 256bits. Los primeros 8 bits de esta nueva cadena son los 8 bits que nos faltan para completar la palabra 24.

Si hubieramos utilizado una entropía de 128 bits nos faltarían 4 bits y serían también los 4 primeros del hash : sha256 (entropía 128bits)

Esto que acabamos de hacer, es un checksum. Un checksum o ‘suma de verificación, es una función de redundancia que tiene como propósito principal detectar cambios accidentales en una secuencia de datos para proteger la integridad de estos, verificando que no haya discrepancias entre los valores obtenidos al hacer una comprobación inicial y otra final tras la transmisión.’ (fuente wikipedia)

En otras palabras, este checksum sirve para asegurarnos de que introducimos nuestra semilla correctamente. La wallet que reciba nuestra semilla verificará que la última palabra es el resultado de hashear su entropía. Si no coincidiera, no daría error y nos diría que la seed no es correcta.

Entonces pongamonos manos a la obra y ¡hasheemos la entropía!

Hashear a mano ya no es tan fácil

Convertir de binario a decimal es fácil como hemos visto. Según Sergi Delgado, incluso hacer operaciones de curva elíptica a mano es posible porque como él dice ‘son mates fáciles’ (😅), pero hashear a mano es tarea practicamente imposible, así que aquí, sí que necesitamos de nuestros queridos dispositivos de hardware.

Para continuar, tenemos 2 opciones:

  • Hacerlo de forma segura en una hardware wallet offline
  • Hacerlo de forma segura en un ordenador que siempre está offline (publicaré este sitema en un segundo artículo)

A 20/10/20, la única forma segura de completar tu semilla, sin necesidad de un ordenador siempre offline, es hacerlo con SpecterDIY. ¡Y hasta ayer esto no era ni posible!

Intrahistoria de la única forma segura:

Cuando empecé a plantearme hacer mi propia semilla a mano con buena entropía no veía una solución que me gustase 100% . Siempre acababas utilizando un ordenador y éstos tienen muchos vectores de ataque. Rara vez sería la que alguien pudiera utilizar un ordenador siempre offline y solo me venía a la cabeza la opción de hacer todo el proceso en una sesión Live desde USB de Ubuntu o TailsOS. Incluso me animé a programar en python mi primer programa y con ayuda de Sergi Delgado hice mi primer proyecto en Github. Pero tenía el mismo problema de correr sobre un ordenador conectado a internet en algún momento.

Pero me vino una idea a la cabeza ¿Y si una de las nuevas hardware wallets que son 100% offline implementase el cálculo del checksum? Y dije, ¿por qué no? Me animé y escribí un Issue en el github de SpecterDIY donde comenté con Stepan la idea.

Ayer 19/10/20 Stepan publicó la v1.4.0-pre1 incluyendo la feature de Mnemonic fix!

Viendo la recepción en twitter de la noticia de la implementación en SpecterDIY, veo que no era el único esperando esta funcionalidad.

Otros productores de hardware wallets ya han dicho que implementarán esta funcionalidad en breve y creo que es algo exigible para todos. Una hardware wallet debe ser una herramienta de soberanía.

Cobo Vault ¿el siguiente?

Si nunca imaginas algo que desearías ver en una HWW, Software o lo que sea, no dudes y anímate a escribirles por el medio que sea.

El método más recomendable: SpecterDIY

Si has hecho como yo, acabas de calcular las primeras 23 palabras de tu semilla de 256 bits. Éste método que voy a explicar a continuación también sirve para entropías de 128 y 192 bits.

Para continuar vas a necesitar una SpecterDIY por encima de la versión de firmware v1.4.0. Si deseas tener más info sobre como montar tu Specter haz click aquí y busca la shopping list.

Inicializamos la SpecterDIY e introducimos nuestro PIN. Una vez dentro le damos a Enter recovery phrase.

Una vez dentro veremos las 24 casillas vacias y el teclado listo para que las rellenemos. Lo hacemos y vamos poniendo las 23 palabras que hemos calculado a mano con buena entropía.

Cuando lleguemos a la palabra 24 te tendrás que inventar una. Y algo mágico pasará. Al lado de tu palabra inventada, te aparecerá un botón de ‘fix’ (o arreglar). Si lo pulsamos, Specter DIY nos arreglará esta última palabra inventada y nos dará una válida para nuestro checksum. También te ofrecerá la posibilidad de ‘arreglar’ tu checksum en la palabra 12 y en la 18.

Esto es lo que ha pasado cuando lo he hecho con la semilla que estoy calculando a mano.

De izquierda a derecha, la posibilidad de conseguir la última palabra en 128, 192 y 256 bits

Y voilá! tu palabra 24 es ‘awake’ !

En este momento ya le puedes dar a ✔Done y guardar la semilla en SpecterDIY. Acto seguido, apunta la palabra 24 en la pauta de Semilla-Moneda y guarda tu semilla de buena entropía con seguridad.

  • Con la última versión de SpecterDIY también puedes guardar la semilla en una microSD, encriptada con el ID del dispositivo.
  • Seguramente sea buen momento para que la almacenes en metal.

Los métodos con ordenador offline: Información importante

IMPORTANTE

  • Necesitamos un ordenador seguro o siempre offline. Si tu ordenador esta comprometido y tiene algún malware, ten en cuenta que todo este proceso será inutil y tu semilla que tanto has trabajado en crear quedará expuesta.
  • Se recomienda hacer este proceso en una sesión live de Ubuntu o TailsOs (desde un USBStick).
  • Se recomienda también tapar todas las cámaras del pc y el móvil mientras realices este proceso.
  • Si tu ordenador no está siempre offline, no recomendaría este sistema

Ordenador offline: Seedpicker

Este sistema solo funciona si has calculado una entropía de 256bits y has calculado a mano las 23 primeras palabras. Si has escogido otra entropía (128, 160, 192 o 224) utiliza alguno de los 2 siguientes métodos.

En un ordenador con internet vamos a navegar hasta seedpicker.net

Una vez dentro de la web, haremos click al botón derecho en algún espacio en blanco y ‘guardaremos como’ la web para descargarla y tenerla offline. También haremos lo mismo con la de https://iancoleman.io/bip39/ para verificar que hemos hecho bien las cosas.

Copiaremos los .html de estas webs en un USB o tarjeta SD y lo pasaremos al ordenador offline que hará el calculo.

Estando ya en el PC offline, doble click a el archivo .html de la web seedpicker que nos hemos descargado e introducimos con espacios entre ellas nuestras 23 palabras calculadas a mano y le damos a Calculate!

Entonces, seedpicker nos calculará internamente el hash y el checksum y nos dará la palabra número 24 de nuestra semilla.

Et voilá! Ya tienes la pieza que te faltaba. La palabra 24 es ‘awake’

Para verificar que realmente es una semilla correcta, abre ahora el html de Ian Coleman e introduce tu semilla completa en el recuadro BIP39 seed.

Si todo está bien, te hará diversos cálculos debajo. Si algo está mal, te mostrará la señal en naranja ‘Invalid Mnemonic’

Si todo está correcto, apunta la palabra 24 en la hoja de ‘Semilla Moneda’ y reinicia el ordenador para eliminar todo rastro. Ahora ya la puedes utilizar e introducir en tu wallet de preferencia. Aunque con tanto esfuerzo al calcular tu semilla, no vayas a ponerla en una software wallet dentro de un pc online!

Si estás seguro que tu ordenador no está comprometido y que has realizado todo el proceso sin exponer tu semilla a una cámara o a internet, acabas de crear tu propia semilla a mano con una muy buena entropía y seguramente has aprendido Bitcoin por el camino.

Felicidades!

Ordenador offline: Ian Colemann

Este sistema funciona para cualquier entropía válida (128, 160, 192 , 224 o 256) y sin necesidad de hacer a mano el cálculo para encontrar las palabras del bip39 desde el binario. Para este método solo necesitas lanzar la moneda y conocer tu secuéncia binaria de buena entropía.

En un ordenador con internet vamos a navegar hasta https://iancoleman.io/bip39/

Una vez dentro de la web, haremos click al botón derecho en algún espacio en blanco y ‘guardaremos como’ la web para descargarla y tenerla offline.

Copiaremos el .html de esta web en un USB o tarjeta SD y lo pasaremos al ordenador offline que hará el calculo.

Estando ya en el PC offline, doble click a el archivo .html de la web de Ian Coleman que nos hemos descargado y hacemos click en ⬜ Show entropy details

Se abrirá un desplegable de ‘Entropy’ y aquí introduciremos uno a uno los valores binarios de nuestra entropía. Si has utilizado la pauta de ‘Semilla Moneda’, se ha de rellenar fila a fila, de izquierda a derecha.

Importante: Marca en la columna de la derecha la casilla ⚪Binary [0-1] (en la imagen no está marcada)

Una vez introducida la entropía, la web de Ian Coleman nos calculará todas las palabras de nuestra semilla, checksum incluido. En mi caso la entropía ha sido:

1110001011100101001010110011011001010010111001110100011111111111110100111001001000111101001010001100111011010011100010110111001001001010100111110101010001000000111011100100001011001001001100101010101100100000000100101101101101000011011001101001100111111001

Y el resultado:

NOTA:

Si has leído también el método anterior con seedpicker estarás viendo que Ian Coleman ha calculado como palabra 24 ‘city’, mientras que seedpicker calculó ‘awake’. No ha habido ningún error. Todo se debe a los últimos 3 bits para la entropía de 256.

¿Recuerdas que calculaste unos bits de la palabra 24 con la moneda?

Pues bien, dadas unas mismas ’23 primeras palabras’ una semilla tendrá 2² (8) semillas válidas. A seedpicker solo le introduces 23 palabras y por lo tanto 256-3 bits (253 bits). Seedpicker calcula el checksum con unos últimos 3 bits ‘000’. Ian Coleman calcula la semilla con toda la entropía y por eso existe esa diferencia. Si modificas mi entropía y cambias el último 1 por 0, Ian Coleman te dará el mismo resultado de Seedpicker.

Si todo está correcto, apunta la palabra 24 en la hoja de ‘Semilla Moneda’ y reinicia el ordenador para eliminar todo rastro. Ahora ya la puedes utilizar e introducir en tu wallet de preferencia. Aunque con tanto esfuerzo al calcular tu semilla, no vayas a ponerla en una software wallet dentro de un pc online!

Si estás seguro que tu ordenador no está comprometido y que has realizado todo el proceso sin exponer tu semilla a una cámara o a internet, acabas de crear tu propia semilla a mano con una muy buena entropía y seguramente has aprendido Bitcoin por el camino.

Felicidades!

Ordenador offline: Semilla-Moneda by me myself

Me quedé con la espinita de no poder proveer de un sistema off-computer (a falta de Specter) así que intenté programar yo el proceso de conseguir el checksum y la última palabra para todas las entropías disponibles. Así que lo programé y con la ayuda de Sergi (sin él esto no se ejecuta ni luce tan bien) cree mi primer script: semilla-moneda: https://github.com/lunaticoin/semilla_moneda

Funciona en Linux y también Windows! 😱
Para hacerlo funcionar necesitas Python y Pip instalados
Desde una entropía válida te calcula toda tu semilla (checksum incluido)

Todavía he de poner mucha información en github (este artículo bien podría ser su README) pero en general este programa que he escrito es por donde quiero seguir investigando.

Ahora, para seguir investigando y mejorando el sistema, la idea es no tener que ejecutar el script en un ordenador offline ni depender de tener una SpecterDIY. Con Arkad estamos pensando cómo correr este script en un microcontrolador tipo Raspberry pi 1 o 2, de los que no tienen internet, y por apenas 15-20 euros poder tener tu calculador de cheksums offline.

Si tienes conocimiento y puedes ayudarnos te agradeceré que te unas a hacer todavía más fácil el cálculo con buena entropía de nuestra propia semilla.

Conclusión

¿Qué más puedes pedir? Acabas de calcular tú solo tu propia semilla, con una buena entropía, sin tener que confiar en el TRNG de ningún hardware o software wallet y has calculado el checksum – y tu última palabra – con un dispositivo 100% offline.

Esto es la redefinición de Soberanía:

  • Un papel con la pauta de semilla-moneda
  • una moneda
  • una SpecterDIY
  • y el sistema de arandelas de Blockmit para almacenarlas en metal para siempre.

Todo sin ceder tu nombre en ningún e-commerce relacionado con Bitcoin. Todo sin que puedan conectar tu nombre al de ningún producto Bitcoin, ni cripto. Sin supply chain attack. 100% offline.

AVANCEMOS JUNTOS!

Gracias Satoshi

pd: No me digas que Bitcoin no es elegante.

Sobre el autor de este post