Hardware wallet por menos de 15€ - Guía DIY
29-sep-2023 14:20
#1
|
Bueno shures, como ya sabeis en la mayoría de mis hilos intento hacer guias o tutoriales para hacer más asequible el mundo de Bitcoin o las criptomonedas, como guardar tus claves de forma segura, etc... Hoy os pongo una guia sobre como tener un hardware wallet por menos de 15€, totalmente funcional y facil de usar, nada aparatoso ni cutre. El proceso es bastante accesible. Solo necesitarás una placa de desarrollo Arduino fácilmente disponible y, siguiendo las instrucciones paso a paso , podrás crear tu propio dispositivo con éxito. La placa propuesta es una TTGO t-display, el dispositivo cuesta menos de 15€ en aliexpress, pero con ofertas se puede conseguir incluso por menos de 10€ (o 5€ en aliexpress si eres nuevo usuario). Valdría la version de 4MB, yo he usado la CH9102F, pero entiendo que valdrian ambas, la TELEC tambien. Vale, con esta plaquita, y nada más, vamos a flashear el software de la Blockstream JADE, es una cartera BITCOIN ONLY, pero para mi es una de mis favoritas. Habría opcion de ponerle camara y batería, pero para reducir al minimo el coste y complejidad, en esta guia la vamos a usar sin camara ni batería, como si fuera un ledger Nano S. Es importante destacar que el software que impulsa este hardware wallet (el JADE) es de código abierto, lo que te permite instalarlo en cualquier dispositivo que cumpla con los criterios de compatibilidad necesarios. Como recomendación específica, el TTGO T-display se presenta como una excelente elección, ofreciendo un equilibrio óptimo entre rendimiento y practicidad para este propósito. Flasheo y Firma del Software: 1. Configurar el Entorno: Accede a la página de GitHub de Blockstream Jade: https://github.com/Blockstream/Jade. Recomiendo utilizar sistemas basados en Linux, pero también es posible con Windows o macOS. Se recomienda Linux debido a problemas previos con el generador de números aleatorios de Windows. Asegúrate de tener instalados git y python. (si no, corre los siguiente: sudo apt install git python3-pip python3-venv) Ejecuta los siguientes comandos en la terminal mkdir esp (si no tenemos la carpeta creada) Despues: cd ~/esp git clone -b v5.2.2 --recursive https://github.com/espressif/esp-idf.git cd ~/esp/esp-idf ./install.sh esp32 Y finalmente, para las variables de entorno: . $HOME/esp/esp-idf/export.sh 2. Compilar el Firmware: Clona el repositorio de Jade y navega al directorio creado. git clone --recursive https://github.com/Blockstream/Jade.git $HOME/jade Asegúrate de conocer el dispositivo que estás utilizando y configura el archivo sdkconfig.defaults en consecuencia. Para ello, en la carpeta de JADE que se nos ha descargado, en la subcarpeta configs, tenemos que encontrar el archivo de configuracion del TTGO display: Necesitamos este archivo: Lo cogemos y lo copiamos a la carpeta raíz anterior, y borramos el archivo sdkconfig.defaults, y este lo renombramos como sdkconfig.defaults (si prefieres no borrar el anterior, puedes renombrarlo y llamarlo "_old" o algo asi) Conecta tu dispositivo y ejecuta: cd $HOME/jade (vamos al repositorio que acabamos de descargar) sudo apt install cmake (por si hace falta despues, aunque lo normal es tenerlo instalado en linux) Y por ultimo: idf.py flash monitor El firmware se flasheará, y ya tenemos el dispositivo operativo. Podemos conectarlo a Sparrow, Electrum, o Blockstream Green (yo suelo usar sparrow, pero para este proceso mejor hacer todo en Green). Funciona como un ledger nano S, tiene 2 botones, navegas por las opciones con uno u otro, y aceptas con los 2 a la vez. Como veis, no aparece como un JADE normal, sale con la etiqueta en rojo de DEV. En teoría, así se puede usar, lo que pasa es que no tiene Secure Boot, es decir, que cualquiera puede coger y flashear encima otro firmware, o ponerte algun firmware modificado (esto sería partiendo de la base de que te robasen el dispositivo, supieran lo que es, y supieran hacer esto que comento). Aún asi es mejor ponerle el Secure Boot, desconozco si hay formas de hackearlo remotamente sin tenerlo, no soy consciente de ninguna, pero mejor curarse en salud. 3. Usar el Software como un Dispositivo Original, con Secure Boot: Lo primero es modificar el archivo sdkconfig.defaults según las indicaciones para no ser reconocido como un dispositivo de desarrollo. Aqui pongo todos los pasos, pero al final pongo todo entero, asi que os podeis saltar la modificacion 1 a 1, lo pongo para que sea entendible: ---------------------------- Añadimos esta primera linea: CONFIG_LOG_DEFAULT_LEVEL_NONE=y Borramos el Debug Mode: Si queremos quitar el bluetooth (se podria usar, pero al no tener bateria, para mi es un sin sentido), hariamos: Añadimos estas lineas: CONFIG_APP_NO_BLOBS=y CONFIG_MBEDTLS_ECP_RESTARTABLE=y CONFIG_MBEDTLS_CMAC_C=y Y borramos estas: CONFIG_BT_ENABLED=y CONFIG_BT_NIMBLE_ENABLED=y CONFIG_BT_NIMBLE_MEM_ALLOC_MODE_EXTERNAL=y CONFIG_BT_NIMBLE_MAX_CONNECTIONS=1 # CONFIG_BT_NIMBLE_ROLE_CENTRAL is not set # CONFIG_BT_NIMBLE_ROLE_BROADCASTER is not set # CONFIG_BT_NIMBLE_ROLE_OBSERVER is not set CONFIG_BT_NIMBLE_NVS_PERSIST=y # CONFIG_BT_NIMBLE_SM_LEGACY is not set CONFIG_BT_NIMBLE_SVC_GAP_DEVICE_NAME="j" CONFIG_BT_NIMBLE_GAP_DEVICE_NAME_MAX_LEN=11 CONFIG_BT_NIMBLE_ATT_PREFERRED_MTU=517 CONFIG_BTDM_CTRL_BLE_MAX_CONN=1 # CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED is not set Ahora para añadir el Secure Boot. Añadimos estas lineas: CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE=y CONFIG_SECURE_DISABLE_ROM_DL_MODE=y CONFIG_SECURE_BOOT_SIGNING_KEY=<PATH_TO_YOUR_SIGNI NG_KEY> CONFIG_SECURE_BOOT=y CONFIG_SECURE_FLASH_ENC_ENABLED=y CONFIG_SECURE_FLASH_ENCRYPTION_MODE_RELEASE=y CONFIG_ESP32_REV_MIN_3=y Y eliminamos esta: CONFIG_EFUSE_VIRTUAL=y y ojo que puede que de serie venga con esta ya puesta, pero en REV_1, hay que borrarla para poder hacer secureboot v2, sino nos saldrá solo V1. CONFIG_ESP32_REV_MIN_3=y En el PATH_TO_YOUR_SIGNING_KEY, hay que poner la ruta de nuestra firma, que no tenemos aun, va a ser un archivo que vamos a poner en la misma carpeta de jade, en mi caso lo voy a llamar hideyourkeys-v2, segun hagamos secureboot v1 o v2, pero preferiblemente el 2, por lo que pongo: CONFIG_SECURE_BOOT_SIGNING_KEY="hideyourkeys-v2.pem" Guardamos y cerramos el archivo. ----------------------------- Si lo preferis, es mas facil que renombreis todo el sdkconfig.defaults con lo siguiente, y el archivo sdkconfig lo borrais CONFIG_APP_NO_BLOBS=y CONFIG_MBEDTLS_ECP_RESTARTABLE=y CONFIG_MBEDTLS_CMAC_C=y CONFIG_ESP32_DISABLE_BASIC_ROM_CONSOLE=y CONFIG_SECURE_DISABLE_ROM_DL_MODE=y CONFIG_SECURE_BOOT_SIGNING_KEY="hideyourkeys-v2.pem" CONFIG_SECURE_BOOT=y CONFIG_SECURE_FLASH_ENC_ENABLED=y CONFIG_SECURE_FLASH_ENCRYPTION_MODE_RELEASE=y CONFIG_ESP32_REV_MIN_3=y CONFIG_LOG_DEFAULT_LEVEL_NONE=y CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y # CONFIG_BOOTLOADER_WDT_ENABLE is not set CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y CONFIG_BOOTLOADER_APP_ANTI_ROLLBACK=y # CONFIG_APP_COMPILE_TIME_DATE is not set CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y CONFIG_PARTITION_TABLE_CUSTOM=y CONFIG_PARTITION_TABLE_OFFSET=0x9000 CONFIG_BOARD_TYPE_TTGO_TDISPLAY=y CONFIG_COMPILER_OPTIMIZATION_SIZE=y CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT=y CONFIG_COMPILER_STACK_CHECK_MODE_STRONG=y CONFIG_COMPILER_WARN_WRITE_STRINGS=y # CONFIG_ADC_CAL_EFUSE_TP_ENABLE is not set # CONFIG_ADC_CAL_EFUSE_VREF_ENABLE is not set # CONFIG_ADC_CAL_LUT_ENABLE is not set CONFIG_UART_ISR_IN_IRAM=y CONFIG_EFUSE_CODE_SCHEME_COMPAT_NONE=y # CONFIG_ESP_ERR_TO_NAME_LOOKUP is not set # CONFIG_ETH_USE_ESP32_EMAC is not set # CONFIG_ETH_USE_SPI_ETHERNET is not set # CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS is not set # CONFIG_HTTPD_ERR_RESP_NO_DELAY is not set CONFIG_ESP32_UNIVERSAL_MAC_ADDRESSES_TWO=y CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT=y CONFIG_ESP_MAIN_TASK_STACK_SIZE=12288 CONFIG_ESP_CONSOLE_NONE=y # CONFIG_ESP_TASK_WDT_INIT is not set # CONFIG_ESP_DEBUG_OCDAWARE is not set # CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE is not set CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=2 CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=0 CONFIG_ESP32_WIFI_STATIC_TX_BUFFER=y CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM=6 # CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED is not set # CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED is not set # CONFIG_ESP32_WIFI_NVS_ENABLED is not set CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=6 # CONFIG_ESP32_WIFI_IRAM_OPT is not set # CONFIG_ESP32_WIFI_RX_IRAM_OPT is not set # CONFIG_FATFS_PER_FILE_CACHE is not set CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=3 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2560 # CONFIG_FREERTOS_INTERRUPT_BACKTRACE is not set # CONFIG_LOG_COLORS is not set # CONFIG_LWIP_DHCPS is not set # CONFIG_LWIP_IPV6 is not set # CONFIG_LWIP_NETIF_LOOPBACK is not set # CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN is not set # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE is not set # CONFIG_MBEDTLS_HARDWARE_MPI is not set # CONFIG_MBEDTLS_HAVE_TIME is not set # CONFIG_MBEDTLS_SSL_RENEGOTIATION is not set # CONFIG_MBEDTLS_SSL_ALPN is not set # CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS is not set # CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS is not set # CONFIG_MBEDTLS_PEM_PARSE_C is not set # CONFIG_MBEDTLS_PEM_WRITE_C is not set # CONFIG_MBEDTLS_X509_CRL_PARSE_C is not set # CONFIG_MBEDTLS_X509_CSR_PARSE_C is not set # CONFIG_MQTT_PROTOCOL_311 is not set # CONFIG_MQTT_TRANSPORT_SSL is not set CONFIG_NEWLIB_NANO_FORMAT=y CONFIG_SPI_FLASH_VERIFY_WRITE=y CONFIG_SPIFFS_MAX_PARTITIONS=1 # CONFIG_SPIFFS_CACHE is not set # CONFIG_SPIFFS_PAGE_CHECK is not set CONFIG_SPIFFS_GC_MAX_RUNS=1 # CONFIG_SPIFFS_USE_MAGIC is not set # CONFIG_SPIFFS_USE_MTIME is not set # CONFIG_WS_TRANSPORT is not set # CONFIG_UNITY_ENABLE_FLOAT is not set # CONFIG_UNITY_ENABLE_DOUBLE is not set # CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER is not set # CONFIG_VFS_SUPPORT_IO is not set # CONFIG_OV7670_SUPPORT is not set # CONFIG_OV7725_SUPPORT is not set # CONFIG_NT99141_SUPPORT is not set # CONFIG_OV2640_SUPPORT is not set # CONFIG_OV3660_SUPPORT is not set # CONFIG_OV5640_SUPPORT is not set # CONFIG_GC2145_SUPPORT is not set # CONFIG_GC032A_SUPPORT is not set # CONFIG_GC0308_SUPPORT is not set # CONFIG_BF3005_SUPPORT is not set # CONFIG_BF20A6_SUPPORT is not set # CONFIG_SC030IOT_SUPPORT is not set CONFIG_SCCB_CLK_FREQ=200000 -------------- Vuelta al terminal, estando en cd $HOME/jade Ejecutamos lo siguiente (aqui le pones el nombre que tu quieras al archivo .pem, yo he puesto el de antes): espsecure.py generate_signing_key --version 2 ~/jade/hideyourkeys-v2.pem Si lo hacemos con v1, seria: espsecure.py generate_signing_key --version 1 ~/jade/hideyourkeys-v1.pem Y nos creará una clave con ese nombre. Aqui es donde esta el "problema" de usar windows y su generador de numeros aleatorios, que seguramente esta clave sea "malilla", pero mejor eso, que no tener secure boot. Además de que estamos considerando casos de ser el objetivo de un hacker experimentado. DISCLAIMER: Guarda bien este archivo de llave, ya que si lo pierdes, no podrás re-flashear el dispositivo Después si queréis hacerlo paso por paso, podeis hacer los siguientes pasos, los incluyo solo como informacion, realmente si has copiado ya el archivo de sdkconfig.defaults, ya estan todas estas opciones por defecto. Si corres el siguiente comando verás todo marcado. ---------------------------------- Seria correr este comando: idf.py menuconfig Nos saldrá este menu: Para V2 (recomendable): Ponemos en Security Features, las opciones de Secure Boot en Version 2, enable flash encruption on boot, y check flash encruption enabled on app startup Para V1 (por si teneis otra placa que no soporta V2), ponemos lo mismo mientras se pueda. Si has puesto V2, saltate esta parte. Nos vamos a security settings, y le damos a Enable hardware secure boot in bootloader, y tambien al flash encryption on boot: Elegimos la version, aunque para este dispositivo deja la v1, si dejase la v2 mejor, pero ambos son una capa de seguridad: ----------------------------- Ahora ya, habiendo configurado el secure boot V1 o V2, guardamos. Le damos ESC, ESC, y luego Q para guardar. Con el dispositivo conectado, corremos el siguiente comando: idf.py bootloader Se completará, y nos saldrá este mensaje, pero muy importante, hay que correr el comando flash que ha generado: /home/xxx/.espressif/python_env/idf5.1_py3.10_env/bin/python ../esp/esp-idf/components/esptool_py/esptool/esptool.py -p (PORT) -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size 2MB --flash_freq 40m 0x1000 build/bootloader/bootloader.bin IMPORTANTE: Segun el dispositivo que sea, puede no sacarte ese prompt, y que salga directamente en el build, me he encontrado alguna placa ESP32 (no la de lilygo) que tenía el secure boot v1, si pasa esto, no permite el flash y te dice que tienes que usar secure boot v1, cambiando el archivo sdkconfig. NOTA: En algunos casos, si no te sale el prompt para flashear el bootloader, puedes correr el siguiente comando tambien: idf.py bootloader bootloader-flash Lo corremos borrando lo del port y baud rate, marcado en negrita. /home/xxx/.espressif/python_env/idf5.1_py3.10_env/bin/python ../esp/esp-idf/components/esptool_py/esptool/esptool.py -p (PORT) -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size 2MB --flash_freq 40m 0x1000 build/bootloader/bootloader.bin Ahora muy importante no desconectar el dispositivo hasta que finalice el proceso, corremos el siguiente comando. idf.py build Si todo ha ido bien, nos dirá que el build es correcto, y que ejecutemos un comando (pero te sugiere 2, hay que hacer el primero, lo marcado en negrita cambia segun tu pc). /home/xxx/.espressif/python_env/idf5.1_py3.10_env/bin/python ../esp/esp-idf/components/esptool_py/esptool/esptool.py -p (PORT) -b 460800 --before default_reset --after no_reset --chip esp32 write_flash --flash_mode dio --flash_size 4MB --flash_freq 40m 0x9000 build/partition_table/partition-table.bin 0xe000 build/ota_data_initial.bin 0x10000 build/jade.bin or run ‘idf.py -p (PORT) flash Ejecutamos este (lo pongo repetido), hay que borrar lo de port y baud rate, lo marco en negrita. Se podria ejecutar el otro comando también, el corto, si te sabes el puerto: /home/xxx/.espressif/python_env/idf5.1_py3.10_env/bin/python ../esp/esp-idf/components/esptool_py/esptool/esptool.py -p (PORT) -b 460800 --before default_reset --after no_reset --chip esp32 write_flash --flash_mode dio --flash_size 4MB --flash_freq 40m 0x9000 build/partition_table/partition-table.bin 0xe000 build/ota_data_initial.bin 0x10000 build/jade.bin Con esto se flashea el firmware firmado: El dispositivo se quedará en el Bootloader, ejecutamos el siguiente comando para reiniciarlo, MUY IMPORTANTE DEJARLO ACABAR, NO DESCONECTES EL DISPOSITIVO, se puede brickear: idf.py monitor El dispositivo se reiniciará (puede tardar unos minutos), y ya no sale como dispositivo de desarrollo en las diferentes carteras: Y el dispositivo aqui ya FUNCIONA PERFECTAMENTE, y tiene el mismo nivel de seguridad que un Blockstream JADE normal. ------------ ------------------------ Y si quiero actualizar el firmware? Ejecuta lo siguiente cd $HOME/jade git pull (para tener la ultima información) idf.py build python jade_ota.py --noagent Y te saltará una notificación como en un JADE normal. --------------------------- En windows, el proceso es muy similar, pero voy a poner las cosas que son diferentes. Hay que instalarse el framework de ESPRESSIF: https://docs.espressif.com/projects/...ows-setup.html Aqui el link del instalador https://dl.espressif.com/dl/esp-idf/?idf=4.4 Los comandos son practicamente los mismos, pero tenemos que trabajar en la powershell de ESP: Accedemos al directorio: Después podemos copiar el archivo sdkconfig y hacer las modificaciones correspondientes en la carpeta. Para flashear la version de desarrollo, corremos el mismo comando: idf.py flash monitor Si queremos hacer el secure boot directamente, son los mismos pasos. Voy a generar una clave con Secure Boot V2 para este ejemplo. En el caso de que nos salga algun error de python, hay que asegurarse de que la aplicacion de python3 esté en la carpeta de espressif. Se puede duplicar la de python y renombrarla a python3 (luego añado una captura). espsecure.py generate_signing_key --version 2 hideyourkeys-v2.pem Cambiamos el archivo sdkconfig de la misma forma, apuntando a nuestro archivo hideyourkeys-v2, en mi caso. Despues corremos los mismos comandos que antes: idf.py bootloader idf.py build En el caso de que nos salga algun error de python, hay que asegurarse de que la aplicacion de python3 esté en la carpeta de espressif. Se puede duplicar la de python y renombrarla a python3: Despues de darle a build y a bootloader, nos repetirá los comandos que he comentado antes, reescribimos el primero de ellos, flahseamos primero el bootloader y luego el del build borrando el puerto y el baud rate. Finalmente ejecutamos el comando idf.py monitor Para reiniciar el dispositivo. MUY IMPORTANTE DEJARLO TERMINAR, PUEDE TARDAR UNOS MINUTOS. -------------- Factory reset Si queremos resetear el dispositivo, para ponerle otra wallet. Cuando lo conectemos, y salga el logo de blockstream JADE, pulsa ambos botones, y te dará la opcion de hacer un factory reset. --------------------------------------------------- Bueno no está mal toda esta chapa, pero la placa asi suelta es muy cutre no? En efecto, pero hay muchas cajas en aliexpress, entre 4 y 8€ hay muchas opciones: Luego si tienes una impresora 3D, hay modelos por internet, buscando por ttgo t-display case. Finalmente, yo los fabrico también, aunque no es el core de la web ( https://hideyourkeys.io/ ) Para que compareis de tamaño con un Nano S, es más ancho, y con 1 o 2 mm más de grosor. ------------------------------ Dudas o problemas, o correo o MP. Si interesa el tema igual me animo a hacerlo con camara y batería, para la funcion AirGap, pero realmente, en este rango de precios me parece imbatible. Espero vuestro feedback shurs. DESVENTAJAS: Es tedioso, hay que cacharrear, pero parece más de lo que es, siguiendo los pasos en menos de 5 minutos esta todo hecho. No tienes la funcionalidad de camara de la Blockstream Jade original, ni tienes bateria, funciona como un ledger nano S, solo enchufado. Actualizarlo es más tedioso que el original (aunque son 4 comandos). Es cierto que no es algo imprescindible, de hecho con los ledgers a veces se recomienda hasta no actualizarlo no vaya a ser que metan alguna cagada, tipo "guarda tu semilla en la nube". Con la ultima version va bastante bien. La blockstream JADE no tiene secure element, es decir, un chip para evitar hackeos si se tiene el dispositivo fisico. Si bien como ha comentado un shur en un post, trezor tiene este elemento y ha sido hackeado. La solucion de blockstream es la de un pin ciego con sus servidores, no es lo mismo, pero es una solucion muy interesante (ademas de que tenemos el SecureBoot con esta guia): https://help.blockstream.com/hc/en-u...otection-work- VENTAJAS: Es MUY barato, no hay opcion mas barata diria, y muy compacto, y no es nada cutre con su funda o carcasa. Es una muy buena cartera bitcoin only ---------------------------- La gran duda, y el secure element? Bueno, como algunos sabreis, la Blockstream Jade NO tiene un secure element, pero tiene una variante alternativa, que está bastante bien pensada teniendo en cuenta la filosofía del dispositivo. Se explica aqui, la fuente original: https://help.blockstream.com/hc/en-u...otection-work- Aqui tambien hay informacion: https://help.blockstream.com/hc/en-u...15884462476953 Lo resumo en español: Durante el proceso de inicialización de Jade, se te pide hacer generar PIN único. Este PIN se utiliza en combinación con un oráculo ciego gestionado por Blockstream en sus servidores para cifrar las claves del Jade. Por lo tanto, para hackearse, necesitas - El PIN generado por ti - Las claves del JADE - El PIN del oraculo Cada vez que desbloqueas el Jade, se te pide que metas tu PIN. La aplicación de la wallet del PC o movil (por ejemplo, Blockstream Green) establece entonces un canal cifrado con el oráculo ciego, lo que permitirá que el secreto del servidor se envíe a Jade, descifrando así las claves del Jade y permitiéndote gastar bitcoin. El JADE como tal NO se comunica con el servidor del oraculo del PIN ciego. Proceso de Cifrado: Durante la inicialización, Jade solicita al usuario que elija un PIN único. Este PIN se utiliza junto con un oráculo de PIN ciego para cifrar el material clave de Jade. La aplicación compañera que conectas a tu Jade (blockstream green, sparrow, electurm...) luego pasa mensajes entre Jade y el oráculo de PIN, pero es ciega a los datos comunicados ya que están cifrados. Jade en sí no se comunica con el oráculo de PIN ciego. Para evitar ataques físicos en un Jade robado para extraer/robar monedas, la semilla se cifra con claves aleatorias divididas entre el dispositivo Jade y un oráculo de bloqueo. Para describir este proceso con más detalle: una vez que se elige el PIN, ocurre un intercambio efímero de claves Diffie-Hellman de curva elíptica (ECDH) con el oráculo remoto. Un intercambio de claves ECDH permite que dos entidades separadas sin conocimiento previo entre ellas generen un secreto compartido sobre canales públicos inseguros. Utilizando una clave pública conocida del oráculo de PIN ciego, ocurre un intercambio de claves ECDH y el canal de comunicación puede estar completamente cifrado. Una vez que se establece el canal cifrado, Jade y el oráculo remoto trabajan juntos para crear una clave AES256. Al crear una nueva frase de recuperación de billetera, la entropía se recopila del pool (el pool se refiere a los generadores de entropia que tiene la JADE, que puede ser alguno de estos sensores: temperatura, imagenes, estado de la bateria... aqui la info: https://help.blockstream.com/hc/en-u.../9640569620761) y la clave resultante se utiliza para cifrar la frase de recuperación usando la clave AES256. Estos datos solo pueden descifrarse cuando el usuario ingresa el PIN correcto en Jade y establece una conexión con el oráculo remoto, mediada por la wallet que estes usando (por ejemplo, Blockstream Green). Dado que el oráculo solo tiene una parte de la clave AES256, está ciego a cualquiera de las claves de tu billetera y al PIN utilizado en Jade. Todos los datos en reposo están cifrados en el oráculo. Entonces, la clave recién cifrada se almacena en el Jade y está protegida por Secure Boot y el flash encryption (medidas de seguridad del propio dispositivo). Secure Boot es una tecnología que evita que se ejecute en tu Jade firmware de arranque no firmado, como una imagen de firmware comprometida por un atacante. Asegura que solo se utilice el firmware que tienes la intención de ejecutar para arrancar el dispositivo (de ahi que hayamos metido el secure boot en la guia). Tu Blockstream Jade ahora tiene una frase de recuperación fuertemente cifrada. Un atacante necesitaría comprometer tanto el encriptado local en Jade como el oráculo de PIN remoto para acceder a la frase de recuperación. Como veis, según Blockstream, su servidor ciego es verdaderamente ciego, no sabe nada sobre ti ni sobre los datos de tu wallet, y se puede acceder a través de TOR. Ni siquiera conoce tu PIN real. No obstante, si no te fias de blockstream (bien hecho, aunque creo que es de los que tienen las cosas mas claras), puedes hacer que tu Jade apunte a un servidor tuyo (estuve investigando como hacerlo, pero no lo he hecho yo mismo, los servidores que tengo con maquinas virtuales prefiero no tocarlos mucho, que van justitos, pero puede que en algun momento me ponga, los pasos vienen aqui: https://help.blockstream.com/hc/en-u...l-blind-oracle ) Importante: El Jade solo se desbloquea con éxito si se ingresa el PIN correcto. Para evitar ataques de fuerza bruta, el oráculo y Jade eliminarán tus claves si se ingresa el PIN incorrecto tres veces (esto es cierto porque lo he probado esta mañana básicamente, con una de las carteras DIY que tengo). En este punto, si pones el pin mal 3 veces, deberás restaurar el Jade con tu frase de recuperación. Entonces en mi opinion, sobre la cual obviamente puedo equivocarme, si te roban un Blockstream JADE, o un dispositivo DIY como el del tutorial. La persona que vaya a hackearlo debe de tener unas habilidades nada despreciables, debe ser un hacker MUY experimentado. En cualquier caso, para curarme en salud, si me robasen el hardware wallet, o bien si lo tengo en un multisig, lo sustituyo por otro. O si no me creo una cartera con otro dispositivo, meto las claves privadas de la cartera robada, que obviamente las guardo en otro sitio, y envio los fondos a la nueva cartera. Me parecería altamente improbable que con estas capas de seguridad, te lo hackeasen en términos de horas. Salvo que se supieran tu PIN (y passphrase si tienes). |
Editado: 01-sep-2024 16:14 -
29-sep-2023 14:37
#3
|
En este caso sería factible extraer la semilla si es robada???? No tendría chip de seguridad. |
29-sep-2023 15:37
#8
|
Aún así creo que el OP está dando una solución más bien casera, algo entre guardarla en un pendrive (no por favor) y comprar una wallet de +50 euros. A mí me parece mucho lío, prefiero una wallet fácil de usar. |
29-sep-2023 17:00
#10
|
Trezor tiene eso y un tío en Youtube lo hackeo porque el pin se guardaba en una memoria normal y era accesible durante unos milisegundos al encender el trezor.
Aún así creo que el OP está dando una solución más bien casera, algo entre guardarla en un pendrive (no por favor) y comprar una wallet de +50 euros. A mí me parece mucho lío, prefiero una wallet fácil de usar. La blockstream JADE, la de retail, no tiene un chip de seguridad, un secure element como lo llaman en ledger. Esto suele ser software propietario y se elimina la posibilidad de ser open source. Lo que ofrecen en contraposicion, es un sistema de un pin ciego, de serie se puede hacer con los servidores de blockstream, pero en teoría te puedes montar un setup por tu cuenta (es algo que tengo que indagar más aún, eso es si no te fias de blockstream, aunque tampoco tendrían tus claves con este método, ni nada similar). Aqui lo explica: https://blog.blockstream.com/blockst...erview-part-1/ Copio los párrafos relevantes: At first boot, a Jade prompts the user to choose a unique PIN. This PIN is used in combination with a blind PIN server to encrypt your Jade’s key material. The Blockstream Green companion app passes messages between the Jade and the PIN server, but is blind to the data communicated since it is encrypted. The Jade itself does not communicate with the blind PIN server. To prevent physical attacks on a stolen Jade from extracting / stealing coins, the seed is encrypted with random keys split between the Jade device and a lock-out server. This data can only be decrypted when the user inputs the correct PIN on the Jade and establishes a connection with the remote PIN server, mediated by the companion app (e.g. Green). To conclude, the Jade now has a strongly-encrypted recovery phrase. An attacker would need to compromise both the local encrypted flash on the Jade and the remote PIN server in order to access the recovery phrase. No obstante, si yo lo tuviera que hacer personalmente, mi propuesta sería mucho más sencilla. Haces un multisig 2 de 3. Si te roban este dispositivo, coges y lo sustituyes en el multisig, en sparrow es super sencillo. Aun asi, en el hipotetico caso de que te lo robasen, los conocimientos que tiene que tener una persona para extraer alguna información de la wallet con secure boot deben de ser cuanto menos elevados. https://www.espressif.com/en/news/Es...nd_Secure_Boot Aun así, recomiendo familiarizarse con el proceso antes de utilizar esta cartera como tu cartera principal. En cualquier caso, es mejor eso que usar un pendrive o cosas asi, como bien comenta el shur. |
Editado: 29-sep-2023 17:15 -
29-sep-2023 19:04
#11
|
La blockstream JADE, la de retail, no tiene un chip de seguridad, un secure element como lo llaman en ledger. Esto suele ser software propietario y se elimina la posibilidad de ser open source.
Lo que ofrecen en contraposicion, es un sistema de un pin ciego, de serie se puede hacer con los servidores de blockstream, pero en teoría te puedes montar un setup por tu cuenta (es algo que tengo que indagar más aún, eso es si no te fias de blockstream, aunque tampoco tendrían tus claves con este método, ni nada similar). Aqui lo explica: https://blog.blockstream.com/blockst...erview-part-1/ Copio los párrafos relevantes: At first boot, a Jade prompts the user to choose a unique PIN. This PIN is used in combination with a blind PIN server to encrypt your Jade’s key material. The Blockstream Green companion app passes messages between the Jade and the PIN server, but is blind to the data communicated since it is encrypted. The Jade itself does not communicate with the blind PIN server. To prevent physical attacks on a stolen Jade from extracting / stealing coins, the seed is encrypted with random keys split between the Jade device and a lock-out server. This data can only be decrypted when the user inputs the correct PIN on the Jade and establishes a connection with the remote PIN server, mediated by the companion app (e.g. Green). To conclude, the Jade now has a strongly-encrypted recovery phrase. An attacker would need to compromise both the local encrypted flash on the Jade and the remote PIN server in order to access the recovery phrase. No obstante, si yo lo tuviera que hacer personalmente, mi propuesta sería mucho más sencilla. Haces un multisig 2 de 3. Si te roban este dispositivo, coges y lo sustituyes en el multisig, en sparrow es super sencillo. Aun asi, en el hipotetico caso de que te lo robasen, los conocimientos que tiene que tener una persona para extraer alguna información de la wallet con secure boot deben de ser cuanto menos elevados. https://www.espressif.com/en/news/Es...nd_Secure_Boot Aun así, recomiendo familiarizarse con el proceso antes de utilizar esta cartera como tu cartera principal. En cualquier caso, es mejor eso que usar un pendrive o cosas asi, como bien comenta el shur. |
29-sep-2023 22:58
#12
|
Interesante para quien le guste cacharrear.
Pero la mayoría del público busca algo más fácil de usar tipo Ledger. Qué por cierto hasta el día 3 de octubre el Ledger Nano S Plus se puede sacar por 55,30€. Si os interesa MP o pasaros por el hilo que te lo de Ledger en el subforo de referidos. Al autor del post , un 10 por tu hilo muy interesante |
30-sep-2023 00:41
#13
|
Interesante para quien le guste cacharrear.
Pero la mayoría del público busca algo más fácil de usar tipo Ledger. Qué por cierto hasta el día 3 de octubre el Ledger Nano S Plus se puede sacar por 55,30€. Si os interesa MP o pasaros por el hilo que te lo de Ledger en el subforo de referidos. Gracias Op voy a probarlo. Mil gracias por tu manual. |
30-sep-2023 15:43
#14
|
Eso me temo que no se puede decir en un foro de internet shur. Pero tengo un trabajo muy tecnico (de picar) en una empresa muy grande, no nacional. A parte como hobby tengo la web del mismo nombre que mi usuario (esta en el OP, por no hacer mas spam), que poco a poco va arrancando, basicamente ofreciendo soluciones lo mas baratas posibles dentro de lo que hay en el mercado (para temas de bitcoin sobre todo, aunque pueden ser aplicabables a otras crypto). Todos los diseños, renders e imagenes que ves son mios, la fabricacion tambien. Me alegro shur! espero tu feedback si lo montas. |
30-sep-2023 16:04
#15
|
Eso me temo que no se puede decir en un foro de internet shur. Pero tengo un trabajo muy tecnico (de picar) en una empresa muy grande, no nacional.
A parte como hobby tengo la web del mismo nombre que mi usuario (esta en el OP, por no hacer mas spam), que poco a poco va arrancando, basicamente ofreciendo soluciones lo mas baratas posibles dentro de lo que hay en el mercado (para temas de bitcoin sobre todo, aunque pueden ser aplicabables a otras crypto). Todos los diseños, renders e imagenes que ves son mios, la fabricacion tambien. A mi el tema de esconder la seed phrase de formas creativas es algo que me pica mucho la curiosidad, pero ya tema electronica no tengo ni pajolera idea. |
30-sep-2023 17:18
#16
|
Gracias shur a ver como evoluciona...Lo de guardar las frases semilla, ya tuve muchos sustos con apuntarlo todo en un papel guarro (ademas de que se me olvidaba donde lo guardaba). Y pasaba de pagar los más de 100€ de un cryptotag (hasta 350€), asi que fui pensando y diseñando alguna alternativa mejor. A ver que tal sigue el tema. Cualquier duda ya sabes, MP |
30-sep-2023 17:22
#17
| Este hilo es interesante por que es bastante Friki construir tu propia hardware wallet, ahora no es el algo en lo que fuera a ahorrar... |
30-sep-2023 19:54
#19
|
Gracias shur
a ver como evoluciona...Lo de guardar las frases semilla, ya tuve muchos sustos con apuntarlo todo en un papel guarro (ademas de que se me olvidaba donde lo guardaba). Y pasaba de pagar los más de 100€ de un cryptotag (hasta 350€), asi que fui pensando y diseñando alguna alternativa mejor. A ver que tal sigue el tema. Cualquier duda ya sabes, MP Xq lo mismo el día que salgan ardiendo las puedes recoger con un cazo. Entonces no sé, tener ahí algo subiendo de valor, que vale miles y estar de aquella manera por 100$.....que hay gente que dice "no, yo se que este material aguanta". Pues ok, pero no todos sabemos |
30-sep-2023 20:48
#21
|
Lo malo de las soluciones DIY es "como sabes que tus arandelas aguantan 900⁰?".
Xq lo mismo el día que salgan ardiendo las puedes recoger con un cazo. Entonces no sé, tener ahí algo subiendo de valor, que vale miles y estar de aquella manera por 100$.....que hay gente que dice "no, yo se que este material aguanta". Pues ok, pero no todos sabemos El tema de las arandelas no es algo raro, la gente lleva varios años probando métodos, y ha resultado ser una opción bastante válida. La semana pasada descubrí una solución muy parecida a la que tengo, y ahi tienes un test en un horno a 1000ºC. Los aceros funden a 1400-1500ºC, y el titanio a 1600ºC (estoy hablando de memoria, pero es la unica diferencia que tienen los cryptotag, además del precio) https://www.seedor.io/blogs/info/bit...eedor-safe-aus Cada uno es libre de gastarse el dinero que estime, y valorar las opciones que haya. Yo lo que tenia claro es que un post-it o un cuaderno no era una opcion. Tampoco espero que se me queme la casa, pero en dicho caso, es posible que fueran bastante recuperables las claves. |
30-sep-2023 20:49
#22
|
Es algo pensado para trastear, no suele ser una primera opcion de nadie, pero para soluciones de backup no es una tontería, o por aprender. Siendo relativamente facil el proceso. |
30-sep-2023 23:08
#23
|
El tema de las arandelas no es algo raro, la gente lleva varios años probando métodos, y ha resultado ser una opción bastante válida.
La semana pasada descubrí una solución muy parecida a la que tengo, y ahi tienes un test en un horno a 1000ºC. Los aceros funden a 1400-1500ºC, y el titanio a 1600ºC (estoy hablando de memoria, pero es la unica diferencia que tienen los cryptotag, además del precio) https://www.seedor.io/blogs/info/bit...eedor-safe-aus Cada uno es libre de gastarse el dinero que estime, y valorar las opciones que haya. Yo lo que tenia claro es que un post-it o un cuaderno no era una opcion. Tampoco espero que se me queme la casa, pero en dicho caso, es posible que fueran bastante recuperables las claves. Pero aparte ellos te venden un material testado. Ojo que no digo que tú no lo tengas, pero reitero, yo puedo ir y pensar que mi material soporta como Seedor y el día que debe hacer su trabajo, no lo hace. En cualquier caso buena iniciativa y me alegro que tengas las cosas claras y te preocupes por la seguridad. Saludos! |
01-oct-2023 09:13
#24
|
Yo tengo un Seedor. En el caso de Seedor no es sólo el sistema del contenedor sino que te venden todo.
Pero aparte ellos te venden un material testado. Ojo que no digo que tú no lo tengas, pero reitero, yo puedo ir y pensar que mi material soporta como Seedor y el día que debe hacer su trabajo, no lo hace. En cualquier caso buena iniciativa y me alegro que tengas las cosas claras y te preocupes por la seguridad. Saludos! Que tal shur, la verdad que me alegra que tengas un Seedor, eso significa que hay bastante mercado del tema. A ver, yo es que siempre he estado muy metido en este tema, en su día la idea original es de 2020 de james stanley, de hecho si le echas un vistazo, es una solucion clavada al seedor, casi todas son muy parecidas al fin y al cabo, nadie inventa la rueda: https://incoherency.co.uk/blog/stori...l-capsule.html A raiz de aqui, surgio el blockmit, que es de un tipo español de hecho, que si tienes una impresora 3D, era una opcion relativamente comoda (es de 2020 tambien): ![]() Yo en su dia me compre uno, lo probé etc, pero no me convencia, no salía tan bien, era incomodo, de hecho me lo llegue a cargar de un martillazo, y casi me espachurro un dedo, en fin... no esta mal, pero se podía mejorar. Empezaron a salir más diseños 3D de variantes, y yo hice el mio propio, con un elemento que gira y retiene la arandela, con una base en TPU para absorber bien el golpe, con indicaciones grabadas y unos enganches para desatascarlo, en fin, le di muuuchas vueltas y he tenido muchas iteraciones, cogiendo ideas de varios sitios etc... Los empece a vender en ETSY hace un año o asi, pero claro he pasado por rebrandings varios, y ya he decidido dedicarle algo mas de tiempo despues de este verano (tampoco tengo tanto aun asi jaja). Y entonces le he hecho la tienda específica digamos, y ya veremos como acaba, la verdad que es interesante que haya competencia, y mi target era competir en precio con cosas como el blockmit, que a nada que compres todo te pones en 45-50€, pues intentar ofrecer algo mejor, y a ese precio, y que sea una compra facil. Y sobre todo, que sean piezas estandar, que si la lias con unas arandelas puedas comprar en una ferreteria una igual por centimos, o que la gente tenga la opcion de ir a una ferreteria y decir, dame un tornillo y arandelas como estos, y hacerse ellos más copias por un precio irrisorio, sobre todo comparado con yo que se, un cryptotag que si la lias estampando, el recambio son 100€. En general prefiero evitar soluciones propietarias, y que sean cosas más open source, para que si la gente la lía sea algo bastante apañable, y no sea un drama. Al final la competencia es lo mejor para todos, se bajan precios, y gana el consumidor final al tener más opciones y precios donde elegir. Respecto al test, por suerte es una solución que está ya probada, ya que la gente con un blockmit, hay gente muy colgada, que ha hecho los tests pertinentes (aqui un link de ejemplo, pero vamos, gente quemando y metiendo en hornos las arandelas, o en tarros de agua salada... Obviamente al ser un material estandar, y de acero, aguantan lo mismo que otros aceros del mismo tipo. Los fuegos en casas no suelen superar los 850ºC, y estos aceros mas de 1400°C por lo que en ese aspecto estoy bastante tranquilo https://www.econoalchemist.com/post/backup ). ![]() ![]() ![]() ![]() Me refiero, es un tema que tengo muy trillado, podría irme a un horno profesional para meter las arandelas y sacar una foto yo, para ponerla en la web y no reutilizar una de otros sitios (que tampoco lo hago), pero sería un tema ya casi de marketing. Pues eso, gracias por el apoyo shur, en el fondo lo mejor a mi juicio es que haya competencia, y la gente que se interese por la seguridad tenga opciones, en diferentes rangos de precios, más y menos premium, como todo en la vida ------------------------------------------ A todo esto, volviendo del off-topic, voy a ver si le doy una vuelta al post para explicar lo del blind pin de la JADE etc, porque creo que es lo unico que puede estar quedando como cabo suelto, para la curiosidad de la gente |
Editado: 01-oct-2023 10:20 -
01-oct-2023 10:23
#25
|
No habia un hilo oficial ya? Lo he buscado pero no lo encuentro. Podria recortar parte de la guia que tengo y sacar el hilo, pero tampoco quiero pisar otro hilo si lo hubiera |
01-oct-2023 11:47
#26
|
He actualizado el hilo al final, explicando como gestiona blockstream el tema del secure element. Vale tanto para una blockstream JADE original, como para un dispositivo DIY con secure boot. |
03-oct-2023 15:59
#27
| Actualizado el hilo añadiendo la parte de windows, y explicando todo mas en detalle para no cometer errores durante el proceso |
19-ago-2024 10:49
#28
|
https://es.aliexpress.com/item/33050...1-ae38c3a9b479 Salen 4 versiones pero no se que diferencias hay. Parece que tambien sirven para hacerte un nerdminer no? |
19-ago-2024 11:42
#29
|
Shur sabes si esta placa vale para el proyecto? Se me queda en algo menos de 7 euros con cuenta nueva.
https://es.aliexpress.com/item/33050...1-ae38c3a9b479 Salen 4 versiones pero no se que diferencias hay. Parece que tambien sirven para hacerte un nerdminer no? Hola shur! Te confirmo que es esa si. Sirven para nerd-miner tambien, yo confirmo que valen los CH9102F, que son los que he probado yo aqui: https://hideyourkeys.io/cheap-hardwa...low-diy-guide/ (creo que esta en español ese post tambien, pero desde el movil tardo mas en buscar el link). Ojo que tengo que actualizar el tutorial porque creo que ya vamos por la version 5.2.2 del IDF, y no 5.1.1, que estuve la semana pasada flasheando uno de estos, voy a actualizar esta semana este post y el de la web. Si te sale algun fallo, escribeme sin problema
|
19-ago-2024 12:00
#30
|
Hola shur!
Te confirmo que es esa si. Sirven para nerd-miner tambien, yo confirmo que valen los CH9102F, que son los que he probado yo aqui: https://hideyourkeys.io/cheap-hardwa...low-diy-guide/ (creo que esta en español ese post tambien, pero desde el movil tardo mas en buscar el link). Ojo que tengo que actualizar el tutorial porque creo que ya vamos por la version 5.2.2 del IDF, y no 5.1.1, que estuve la semana pasada flasheando uno de estos, voy a actualizar esta semana este post y el de la web. Si te sale algun fallo, escribeme sin problema ![]() Gracias shur |
a ver como evoluciona...



