Billeteras de hardware
Una billetera de hardware es un pequeño dispositivo que guarda una clave privada y firma en su propia pantalla, de modo que la clave nunca toca un ordenador. ZooBC ha redactado una especificación de firma para los fabricantes de estos dispositivos. Establece lo que un dispositivo debe comprobar, mostrar y calcular antes de firmar una transacción de ZooBC.
La idea: el dispositivo decide lo que firma
Un ordenador puede estar comprometido; el dispositivo es la parte en la que confía el usuario. Por eso la especificación deja al dispositivo al mando. El ordenador solo propone una transacción. El dispositivo la lee campo a campo, muestra al usuario lo que significa y solo firma lo que el usuario aprobó, calculando él mismo el resumen.
Claves
El dispositivo deriva sus claves de la frase de recuperación según m/44'/883'/account', con SLIP-0010 para Ed25519, donde 883 es el tipo de moneda de ZooBC (claves y tipos de cuenta). Por tanto, la firma es Ed25519, como en cualquier cuenta nativa de ZooBC, y no la firma secp256k1 que hace un dispositivo de Bitcoin. La clave nunca sale del dispositivo.
Lo que debe hacer el dispositivo
- Recibir del ordenador los bytes de la transacción sin firmar y el hash del génesis de la cadena.
- Analizar él mismo cada campo, y rechazar cualquier transacción cuyos campos de longitud no cuadren exactamente.
- Comprobar el remitente: rechazar salvo que el remitente sea la propia cuenta derivada del dispositivo.
- Mostrar la red, el tipo de transacción, el importe, el destinatario completo, la comisión, cualquier pago de supervivencia (pagar por conservar datos (longevidad)), el mensaje y cualquier escrow (escrow).
- Esperar la aprobación del usuario.
- Calcular él mismo el resumen vinculado a la cadena, SHA3-256("ZBC-TX" ‖ hash del génesis ‖ bytes), y firmarlo con Ed25519 (firmas vinculadas a la cadena).
- Devolver al ordenador solo la firma.
Por qué estas reglas
- Nunca firmar un resumen ya hecho. Un resumen de 32 bytes enviado por el ordenador podría ser el hash de una transacción que el usuario nunca vio. El dispositivo debe construir el resumen a partir de bytes que ha analizado y mostrado. Por el mismo motivo, una orden para firmar mensajes en bruto rechaza las entradas de exactamente 32 bytes, para que no pueda colarse un resumen de transacción como si fuera un mensaje.
- Mostrar el destinatario completo, nunca abreviado. Puede fabricarse una dirección parecida que coincida con el principio y el final de una abreviada.
- Mostrar la red. El hash del génesis decide en qué cadena es válida una firma, así que el usuario ve para qué red es la transacción (devnet, testnet y mainnet).
Por dónde empezar
La especificación recomienda que los dispositivos admitan primero tres tipos de transacción: SendZBC (un pago), TransferToken (una transferencia de tokens, véase emitir un token) y ApprovalEscrow (aprobar un pago en escrow).