diff --git a/README.md b/README.md index d2125ea..721e9fc 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ Tres cosas que conviene tener claras antes de montar una: > **Cuatro palabras que van a salir mucho.** El **firmware** es el programa que corre dentro del aparato: no es una app que instalas encima, es su software propio y se actualiza aparte. **Air-gapped** significa sin ninguna conexión posible con otro ordenador — ni cable, ni WiFi, ni Bluetooth. El **xpub** (o **zpub**, el mismo dato escrito de otra forma) es tu clave pública extendida: sirve para generar tus direcciones y ver tu saldo, pero **no para gastar**. Y **GPG** es la herramienta con la que compruebas que un fichero descargado lo firmó quien dice y nadie lo ha manipulado por el camino. > -> El **fingerprint** (o **XFP**) aparece a partir de la sección 9: son ocho caracteres que identifican tu wallet sin revelar nada de ella, y con los que compruebas que estás donde crees que estás. +> El **fingerprint** (o **XFP**) aparece a partir de la sección 10: son ocho caracteres que identifican tu wallet sin revelar nada de ella, y con los que compruebas que estás donde crees que estás. **Estado de la información:** agosto de 2026, versión **0.8.7** ("The Summer of SeedSigner", 8 de julio de 2026). Contrasta siempre con el [repositorio oficial](https://github.com/SeedSigner/seedsigner) antes de seguir cualquier paso técnico. Si algo aquí lo contradice, gana el repositorio. @@ -33,7 +33,7 @@ Esto no se hace en una tarde, y saberlo de antemano evita el chasco de sentarte | Cuándo | Qué haces | Rato | |---|---|---| | **Día 1** | Decidir el modelo, pedir las piezas (Sección 1) | 30 min | -| **Mientras esperas** | Descargar y **verificar** el software (Sección 4), grabar la MicroSD (5), y trastear el [simulador](#12-pruébalo-antes-de-comprar-el-simulador) para llegar con el menú aprendido | 1 h, sin prisa | +| **Mientras esperas** | Descargar y **verificar** el software (Sección 5), grabar la MicroSD (6), y trastear el [simulador](#13-pruébalo-antes-de-comprar-el-simulador) para llegar con el menú aprendido | 1 h, sin prisa | | **El día que llega** | Montar (3), arrancar y hacer el test de I/O (6), pasar el vector de prueba (9.1) | 1 h | | **Cuando tengas la tarde** | Generar la seed real (9.2), passphrase (Sección 5 de la guía del método), wallet en Sparrow (11), backup y su verificación | 2-3 h **sin prisa** | | **Unos días después** | Volver a verificar el backup en frío, y ensayar el ciclo de firma en red de pruebas | 1 h | @@ -52,19 +52,20 @@ Dos cosas de ese reparto no son negociables: 1. [Materiales](#1-materiales) 2. [La decisión que hay que tomar antes de comprar: soldar o no](#2-la-decisión-que-hay-que-tomar-antes-de-comprar-soldar-o-no) -3. [Montaje](#3-montaje) -4. [Descargar y verificar el software](#4-descargar-y-verificar-el-software) -5. [Grabar la MicroSD](#5-grabar-la-microsd) -6. [Primer arranque y test de entrada/salida](#6-primer-arranque-y-test-de-entradasalida) -7. [Recorrido por la interfaz](#7-recorrido-por-la-interfaz) -8. [Configuración recomendada](#8-configuración-recomendada) -9. [Generar tu seed con dados](#9-generar-tu-seed-con-dados) -10. [SeedQR: cargar la seed en segundos](#10-seedqr-cargar-la-seed-en-segundos) -11. [Crear la wallet en Sparrow y firmar una transacción](#11-crear-la-wallet-en-sparrow-y-firmar-una-transacción) -12. [Pruébalo antes de comprar: el simulador](#12-pruébalo-antes-de-comprar-el-simulador) -13. [Resolución de problemas](#13-resolución-de-problemas) -14. [Limitaciones y qué NO hace](#14-limitaciones-y-qué-no-hace) -15. [Fuentes](#15-fuentes) +3. [Si tu placa lleva radio: desactivarla](#3-si-tu-placa-lleva-radio-desactivarla) +4. [Montaje](#4-montaje) +5. [Descargar y verificar el software](#5-descargar-y-verificar-el-software) +6. [Grabar la MicroSD](#6-grabar-la-microsd) +7. [Primer arranque y test de entrada/salida](#7-primer-arranque-y-test-de-entradasalida) +8. [Recorrido por la interfaz](#8-recorrido-por-la-interfaz) +9. [Configuración recomendada](#9-configuración-recomendada) +10. [Generar tu seed con dados](#10-generar-tu-seed-con-dados) +11. [SeedQR: cargar la seed en segundos](#11-seedqr-cargar-la-seed-en-segundos) +12. [Crear la wallet en Sparrow y firmar una transacción](#12-crear-la-wallet-en-sparrow-y-firmar-una-transacción) +13. [Pruébalo antes de comprar: el simulador](#13-pruébalo-antes-de-comprar-el-simulador) +14. [Resolución de problemas](#14-resolución-de-problemas) +15. [Limitaciones y qué NO hace](#15-limitaciones-y-qué-no-hace) +16. [Fuentes](#16-fuentes) --- @@ -94,7 +95,7 @@ Dos cosas de ese reparto no son negociables: Las "W" y "2W" son más fáciles de encontrar y funcionan, pero llevan radio. Si acabas con una: - Sigue siendo utilizable — el software de SeedSigner no usa la radio. -- Puedes **desactivar el WiFi/BT por hardware**. Hay un procedimiento documentado por [DesobedienteTecnologico](https://github.com/DesobedienteTecnologico/rpi_disable_wifi_and_bt_by_hardware) (proyecto en español, por cierto). +- Puedes **desactivar la radio por hardware**, quitando físicamente un componente. Cómo, con qué riesgo y cómo comprobar que funcionó: **Sección 3**. - **Importante:** cada modelo usa una imagen distinta y **no son intercambiables**. Ver la tabla del punto 4. **3. La alimentación.** Es la causa nº 1 de "no me funciona la cámara" y "se reinicia solo". **Una pila de 9V no da suficiente corriente.** Usa un cargador de red decente o una batería externa (power bank) de las normales. Y usa un cable USB de datos-y-carga en buen estado: los cables de carga baratos tienen conductores finos y provocan caídas de tensión que se manifiestan como fallos aleatorios. @@ -130,11 +131,56 @@ La Pi Zero viene, por defecto, **sin los pines GPIO soldados**. La pantalla se c --- -## 3. Montaje +## 3. Si tu placa lleva radio: desactivarla + +*Sáltate esta sección si tienes una **Pi Zero 1.3**: no lleva WiFi ni Bluetooth y no hay nada que desactivar. Ese es el motivo de que sea la recomendada.* + +Si acabaste con una **Zero W** o una **Zero 2 W** —son más fáciles de encontrar, y la WH con los pines puestos también lleva radio—, tienes un chip inalámbrico en la placa. Conviene entender qué significa antes de decidir si tocarlo. + +### 3.1 Las tres capas, y cuál puedes comprobar + +| | Qué es | ¿Puedes verificarlo tú? | +|---|---|---| +| **El sistema no carga la radio** | SeedSigner OS no incluye controladores ni firmware inalámbrico | **No.** Es una propiedad del sistema que tendrías que creerte | +| **Desactivarla por software** | Una línea de configuración que la apaga al arrancar | **No.** Depende de que el arranque la respete | +| **Quitar el componente** | Un trozo de metal deja de estar en la placa | **Sí. Mirándola.** | + +Esa tabla es toda la sección. Las dos primeras probablemente funcionan; el problema es que **son promesas que no puedes comprobar**, y este documento va justamente de reducir eso. La tercera la verificas con los ojos. + +Dicho lo cual: **la opción realmente buena es no tener el problema.** Si aún no has comprado, la Pi Zero 1.3 lo resuelve sin tocar nada. + +### 3.2 Cómo se quita + +El proyecto [rpi_disable_wifi_and_bt_by_hardware](https://github.com/DesobedienteTecnologico/rpi_disable_wifi_and_bt_by_hardware) de Desobediente Tecnológico lo documenta con radiografías del chip y fotos de qué quitar exactamente. Hay [traducción al castellano](https://estudiobitcoin.com/deshabilitar-wifi-y-bluetooth-de-raspberry-pi/) alojada en Estudio Bitcoin, y está bajo **CC BY 4.0**. + +En resumen, para que sepas a qué te enfrentas antes de abrir nada: + +- Se retira **una bobina SMD** —un componente diminuto— que alimenta al chip inalámbrico. Sin ella el chip no puede funcionar: sigue soldado y alimentado, pero es inalcanzable. El símil que usan es bueno: un coche con un cable del ABS cortado arranca igual, pero al ABS no hay forma de llegar. +- **Está en la misma posición en la Zero W y en la Zero 2 W.** +- En la **Zero 2 W** hay antes un **blindaje metálico** que retirar con calor (pistola o secador) o abrir con una herramienta rotativa. +- Se quita **con alicates finos, cortando por el medio**, o con un soldador caliente empujando por cada extremo. Hay vídeo en el repositorio. +- Si solo quieres quitar el WiFi y conservar el Bluetooth, es otro componente distinto. + +> ⚠️ **Es irreversible y puedes cargarte la placa.** Estás cortando un componente de milímetro y medio sobre una placa multicapa: un resbalón se lleva una pista por delante y el aparato no vuelve a arrancar. Si nunca has hecho nada parecido, **sale más barato comprar una Pi Zero 1.3** que estropear una placa aprendiendo. + +### 3.3 Cómo comprobar que funcionó, y cuándo + +Un detalle práctico que no cuenta nadie: **SeedSigner OS no tiene terminal**, así que no puedes comprobarlo con él ya instalado. Hay que hacerlo antes. + +1. Graba una **Raspberry Pi OS normal** en una MicroSD cualquiera y arranca la placa ya modificada. +2. En el terminal escribe `ip addr`. **Si no aparece `wlan0`, el WiFi está desactivado por hardware.** +3. Escribe `bluetoothctl`. Si no abre o se queda colgado, buena señal. +4. Solo entonces graba SeedSigner OS en la tarjeta buena. + +Ese orden importa: si lo dejas para después, te quedas sin forma de saber si salió bien. + +--- + +## 4. Montaje **Regla de oro: prueba antes de meterlo en la carcasa.** Desmontar un conjunto ya encajado para arreglar un problema es la forma más habitual de romper la pantalla o la carcasa. El orden correcto es: montar sin carcasa → grabar la SD → arrancar → test de I/O → *entonces* encajarlo todo. -### 3.1 La cámara +### 4.1 La cámara Es la pieza más delicada del montaje y donde más gente se equivoca. @@ -151,7 +197,7 @@ Es la pieza más delicada del montaje y donde más gente se equivoca. > El cable de la Pi Zero es **más estrecho** que el de las Raspberry Pi grandes. Si compraste una cámara "para Raspberry Pi" genérica, puede venir con el cable ancho y necesitarás un adaptador. **Compruébalo el día que llegue el paquete**, no cuando te sientes a montarlo: si falta el adaptador, es otra semana de espera. -### 3.2 La pantalla +### 4.2 La pantalla @@ -163,7 +209,7 @@ Encaja el HAT de Waveshare sobre los 40 pines GPIO. Va en una única orientació > > Si algo de eso no cuadra, arréglalo ahora. Después de este punto, cada problema cuesta el triple de encontrar. -### 3.3 La carcasa (después de probar) +### 4.3 La carcasa (después de probar) Una vez que hayas confirmado que arranca, la pantalla pinta, los botones responden y la cámara ve, ya puedes encajarlo en la Open Pill o atornillar la Orange Pill. @@ -173,11 +219,11 @@ Una vez que hayas confirmado que arranca, la pantalla pinta, los botones respond --- -## 4. Descargar y verificar el software +## 5. Descargar y verificar el software ⚠️ **Ejecuta la verificación antes de abrir o montar el archivo `.img`.** Algunos sistemas operativos modifican el archivo al montarlo y la verificación fallaría. -### 4.1 Descarga la imagen de TU modelo +### 5.1 Descarga la imagen de TU modelo Desde las [releases oficiales](https://github.com/SeedSigner/seedsigner/releases). Versión actual: **0.8.7**. Comprueba en esa página que no ha salido una más nueva. @@ -204,7 +250,7 @@ La imagen ocupa **menos de 42 MB** desde la v0.6.0. Si te parece que ha descarga Los tres archivos, en la misma carpeta. -### 4.2 Verificar la firma +### 5.2 Verificar la firma *(El porqué de cada paso está en la Sección 4 / Paso 0b de la guía de autocustodia. Aquí van los comandos concretos.)* @@ -256,13 +302,13 @@ y compara manualmente con el valor del `.sha256.txt`. Debe salir **`OK`** para tu archivo `.img`. Si sale `FAILED`, **para aquí**. -### 4.3 Alternativa sin terminal +### 5.3 Alternativa sin terminal Sparrow Wallet incluye `Tools` → `Verify Download`, con interfaz gráfica. Le das la firma, el manifiesto y el `.img`. ⚠️ **Pero Sparrow te mostrará el nombre y correo de la clave, y eso no verifica nada.** El paso 3 (contrastar la huella) sigue siendo imprescindible hagas la comprobación como la hagas. -### 4.4 Si quieres eliminar incluso esa confianza +### 5.4 Si quieres eliminar incluso esa confianza Desde la v0.7.0, las imágenes son **reproducibles**: puedes compilarlas desde el código fuente y comprobar que el resultado es byte a byte idéntico al publicado. Eso elimina la confianza en quien firma las releases. Instrucciones en el [repo de seedsigner-os](https://github.com/SeedSigner/seedsigner-os/blob/main/docs/building.md). @@ -278,7 +324,7 @@ Es también una forma útil de contribuir al proyecto: compilar y publicar el ha --- -## 5. Grabar la MicroSD +## 6. Grabar la MicroSD Tres opciones: **Raspberry Pi Imager**, **balenaEtcher** o `dd`. Las dos primeras son las recomendadas; ambas verifican la escritura por defecto, y **conviene esperar a que esa verificación termine** — te ahorra horas de depuración si luego el aparato no arranca. @@ -294,7 +340,7 @@ Si una de las dos aplicaciones te falla, prueba la otra: hay máquinas donde una --- -## 6. Primer arranque y test de entrada/salida +## 7. Primer arranque y test de entrada/salida 1. Inserta la MicroSD. 2. Conecta la alimentación **por el puerto USB correcto** — la Pi Zero tiene dos micro-USB y solo uno es de alimentación (viene marcado `PWR`). @@ -323,7 +369,7 @@ Este test tarda dos minutos y es el que decide si puedes montar la carcasa o tie --- -## 7. Recorrido por la interfaz +## 8. Recorrido por la interfaz **Los controles:** un joystick de 5 posiciones (arriba, abajo, izquierda, derecha, pulsar) y tres botones (KEY1, KEY2, KEY3) cuya función cambia según la pantalla y se indica en el margen. @@ -340,7 +386,7 @@ Este test tarda dos minutos y es el que decide si puedes montar la carcasa o tie --- -## 8. Configuración recomendada +## 9. Configuración recomendada `Settings`: @@ -367,11 +413,11 @@ La guía de autocustodia recomienda **signet** para practicar, porque testnet3 l --- -## 9. Generar tu seed con dados +## 10. Generar tu seed con dados > **Lee antes las secciones 2, 3 y 5 de la [guía de autocustodia](https://git.bitcointxoko.org/pikaro/autocustodia-verificable)**: por qué la entropía propia importa, por qué 99 tiradas, cómo diseñar la passphrase y por qué no debes inventártela. Aquí solo va el manejo del aparato. -### 9.1 El vector de prueba (hazlo primero, siempre) +### 10.1 El vector de prueba (hazlo primero, siempre) `Tools` → `New Seed` → dados → 24 palabras. Introduce: @@ -410,7 +456,7 @@ Si coincide: tu aparato convierte la entropía correctamente. Si no coincide: pa > > Si las palabras **no** coinciden: no sigas. Revisa que la imagen que grabaste corresponde a tu modelo de Pi, y que el vector que estás usando es el de tu versión. -### 9.2 Generar la tuya +### 10.2 Generar la tuya 1. `Tools` → `New Seed` → dados → **24 palabras (99 tiradas)**. 2. Tira el dado 99 veces, introduciendo cada resultado. @@ -420,7 +466,7 @@ Si coincide: tu aparato convierte la entropía correctamente. Si no coincide: pa ⚠️ La secuencia de tiradas **es material de clave**. Nunca la fotografíes ni la guardes en digital. -### 9.3 Verificación cruzada [avanzado] +### 10.3 Verificación cruzada [avanzado] El repositorio incluye `tools/mnemonic.py`, que ejecuta exactamente el mismo código de conversión que corre en el dispositivo: @@ -445,7 +491,7 @@ Contrasta el resultado con [iancoleman.io/bip39](https://iancoleman.io/bip39) y > > **La seed que vayas a usar no se teclea en un ordenador nunca.** Ni air-gapped, ni en una sesión efímera que destruyas después. La documentación de SeedSigner sugiere esa vía para verificar seeds reales; aquí somos más estrictos a propósito, y la Sección 3.2 de la [guía de autocustodia](https://git.bitcointxoko.org/pikaro/autocustodia-verificable) explica por qué. -### 9.4 La opción de la cámara: qué es y cuándo vale +### 10.4 La opción de la cámara: qué es y cuándo vale En `Tools` vas a ver, junto a los dados, la opción de generar la seed **con una foto**. La vas a ver, alguien va a preguntar, y merece una respuesta mejor que "no la uses". @@ -490,7 +536,7 @@ SeedSigner también deja **elegir tú las palabras** de la lista BIP-39 y calcul --- -## 10. SeedQR: cargar la seed en segundos +## 11. SeedQR: cargar la seed en segundos Escribir 24 palabras a mano en un joystick cada vez que quieras firmar es tedioso, y el tedio hace que la gente deje de verificar cosas. La respuesta del proyecto es la **SeedQR**: transcribes tu seed a un código QR **a mano**, en papel, y luego la SeedSigner la lee en un segundo con su cámara. @@ -504,9 +550,9 @@ Muy práctica. Y es donde más gente confunde "difícil de leer para un humano" --- -## 11. Crear la wallet en Sparrow y firmar una transacción +## 12. Crear la wallet en Sparrow y firmar una transacción -### 11.1 Crear la wallet +### 12.1 Crear la wallet 1. Sparrow → `File` → `New Wallet`. Ponle nombre. 2. `Airgapped Hardware Wallet` → en la fila de SeedSigner, pulsa **`Scan`**. Se abre la cámara del ordenador. @@ -517,7 +563,7 @@ Muy práctica. Y es donde más gente confunde "difícil de leer para un humano" Si el QR animado no se lee: baja la densidad de QR en los ajustes de la SeedSigner, o ajusta el brillo con el joystick (arriba/abajo). -### 11.2 Firmar una transacción (PSBT) +### 12.2 Firmar una transacción (PSBT) Este es el ciclo de trabajo normal, y la parte que la guía de autocustodia no cubre porque es específica del modelo air-gapped: @@ -529,13 +575,13 @@ Este es el ciclo de trabajo normal, y la parte que la guía de autocustodia no c **En ningún momento se conectan.** Todo pasa por códigos QR y tus ojos. -### 11.3 Verificar direcciones de recepción +### 12.3 Verificar direcciones de recepción `Scan` sobre la dirección que te muestra tu wallet de software: la SeedSigner confirma si esa dirección pertenece de verdad a tu wallet. Es la defensa contra malware que sustituye direcciones al copiar y pegar. **Hazlo siempre antes de recibir una cantidad significativa.** --- -## 12. Pruébalo antes de comprar: el simulador +## 13. Pruébalo antes de comprar: el simulador Existe un **simulador que corre el firmware real de SeedSigner en una pestaña del navegador**: [bitsaga.be/seedsigner-simulator](https://bitsaga.be/seedsigner-simulator/) ([código](https://github.com/bitsagarob/seedsigner-simulator), MIT). @@ -555,7 +601,7 @@ Vale la pena mirarlo aunque no lo uses, como ejemplo de qué aspecto tiene un pr **2. Mainnet funciona de verdad.** Arranca en testnet a propósito, pero mainnet está disponible en los ajustes y **deriva claves reales y firma transacciones reales**. Una clave derivada en una pestaña del navegador es una clave real. -> ⚠️ **No metas ahí ninguna seed tuya. Ninguna. Nunca.** Ni "solo para ver". Una pestaña del navegador no es un air gap y el sistema de ficheros de Pyodide no es un elemento seguro — lo dicen ellos mismos. Usa una seed de prueba pública, como la del vector de la Sección 9.1, que existe justo para esto. +> ⚠️ **No metas ahí ninguna seed tuya. Ninguna. Nunca.** Ni "solo para ver". Una pestaña del navegador no es un air gap y el sistema de ficheros de Pyodide no es un elemento seguro — lo dicen ellos mismos. Usa una seed de prueba pública, como la del vector de la Sección 10.1, que existe justo para esto. **3. Si lo quieres alojar tú** —para tenerlo offline, o por no depender de una web ajena— necesita dos cabeceras (`Cross-Origin-Opener-Policy` y `Cross-Origin-Embedder-Policy`) o no arranca, y la cámara exige `https` o `localhost`: por `http` en una IP de la red local no hay API de cámara que valer. Lo tienen documentado en `docs/SELF-HOSTING.md`. Una vez cargada, la página funciona sin conexión. @@ -565,7 +611,7 @@ Sin microSD, sin nada que dependa de hilos, sin comportamientos por tiempo. Y so --- -## 13. Resolución de problemas +## 14. Resolución de problemas | Síntoma | Causas, en orden de probabilidad | |---|---| @@ -582,7 +628,7 @@ Sin microSD, sin nada que dependa de hilos, sin comportamientos por tiempo. Y so --- -## 14. Limitaciones y qué NO hace +## 15. Limitaciones y qué NO hace Ser honesto sobre esto es parte de la guía: @@ -596,18 +642,18 @@ Ser honesto sobre esto es parte de la guía: --- -## 15. Fuentes +## 16. Fuentes - [Repositorio oficial de SeedSigner](https://github.com/SeedSigner/seedsigner) — README (lista de materiales, versión 0.8.7, tabla de imágenes por modelo, procedimiento de verificación). -- [`docs/dice_verification.md`](https://github.com/SeedSigner/seedsigner/blob/dev/docs/dice_verification.md) — vectores de prueba de la sección 9.1, verificados carácter a carácter. +- [`docs/dice_verification.md`](https://github.com/SeedSigner/seedsigner/blob/dev/docs/dice_verification.md) — vectores de prueba de la sección 10.1, verificados carácter a carácter. - [`docs/legacy_hardware.md`](https://github.com/SeedSigner/seedsigner/blob/dev/docs/legacy_hardware.md) — modificaciones para Raspberry Pi 1. -- [FAQ oficial](https://seedsigner.com/faqs/) — tabla de resolución de problemas de la sección 12. +- [FAQ oficial](https://seedsigner.com/faqs/) — tabla de resolución de problemas de la sección 14. - [Página de hardware](https://seedsigner.com/hardware/). - [Generador de SettingsQR](https://github.com/SeedSigner/seedsigner-settings-generator). - [seedsigner-os](https://github.com/SeedSigner/seedsigner-os/blob/main/docs/building.md) — compilación reproducible. - [Desactivar WiFi/BT por hardware](https://github.com/DesobedienteTecnologico/rpi_disable_wifi_and_bt_by_hardware) — DesobedienteTecnologico. - [Release 0.8.7 "The Summer of SeedSigner"](https://github.com/SeedSigner/seedsigner/releases/tag/0.8.7) (8 jul 2026) — notas de versión, idiomas y cambios. -- [seedsigner-simulator](https://github.com/bitsagarob/seedsigner-simulator) de bitsaga (MIT) — el firmware real en el navegador, con builds reproducibles y atestación. Sección 12. +- [seedsigner-simulator](https://github.com/bitsagarob/seedsigner-simulator) de bitsaga (MIT) — el firmware real en el navegador, con builds reproducibles y atestación. Sección 13. - Grupo de [Telegram](https://t.me/joinchat/GHNuc_nhNQjLPWsS) del proyecto, para dudas concretas. **Vídeos oficiales de montaje**, enlazados en su sitio a lo largo de la guía: [técnica de soldadura en Pi Zero](https://www.youtube.com/watch?v=9cS17JiohjY) · [montaje Open Pill](https://www.youtube.com/watch?v=gXPFJygZobE) · [montaje Orange Pill](https://www.youtube.com/watch?v=aIIc2DiZYcI), con el conector de la cámara en el [minuto 3:43](https://youtu.be/aIIc2DiZYcI?t=223).