Hardware wallet
Un hardware wallet è un piccolo dispositivo che conserva una chiave privata e firma sul proprio schermo, così la chiave non tocca mai un computer. ZooBC ha scritto una specifica di firma per i produttori di questi dispositivi. Stabilisce che cosa un dispositivo deve verificare, mostrare e calcolare prima di firmare una transazione ZooBC.
L'idea: è il dispositivo a decidere che cosa firma
Un computer può essere compromesso; il dispositivo è la parte di cui l'utente si fida. La specifica lascia quindi il controllo al dispositivo. Il computer si limita a proporre una transazione. Il dispositivo la legge campo per campo, mostra all'utente che cosa significa e firma solo ciò che l'utente ha approvato, calcolando da sé il digest.
Chiavi
Il dispositivo deriva le sue chiavi dalla frase di recupero lungo m/44'/883'/account', usando SLIP-0010 per Ed25519, dove 883 è il coin type di ZooBC (chiavi e tipi di account). La firma è quindi Ed25519, come per qualsiasi account nativo ZooBC, non la firma secp256k1 che fa un dispositivo per Bitcoin. La chiave non lascia mai il dispositivo.
Che cosa deve fare il dispositivo
- Ricevere dal computer i byte della transazione non firmata e l'hash genesi della catena.
- Interpretare da sé ogni campo, e rifiutare qualsiasi transazione i cui campi di lunghezza non tornino esattamente.
- Verificare il mittente: rifiutare se il mittente non è l'account derivato dal dispositivo stesso.
- Mostrare la rete, il tipo di transazione, l'importo, il destinatario per intero, la commissione, l'eventuale pagamento di sopravvivenza (pagare per conservare i dati (longevità)), il messaggio e l'eventuale escrow (escrow).
- Attendere l'approvazione dell'utente.
- Calcolare da sé il digest legato alla catena, SHA3-256("ZBC-TX" ‖ hash genesi ‖ byte), e firmarlo con Ed25519 (firme legate alla catena).
- Restituire al computer solo la firma.
Perché queste regole
- Non firmare mai un digest già pronto. Un digest di 32 byte inviato dal computer potrebbe essere l'hash di una transazione che l'utente non ha mai visto. Il dispositivo deve costruire il digest a partire da byte che ha interpretato e mostrato. Per lo stesso motivo, un comando per firmare messaggi grezzi rifiuta input di esattamente 32 byte, così che il digest di una transazione non possa essere fatto passare per un messaggio.
- Mostrare il destinatario per intero, mai abbreviato. Si può creare un indirizzo somigliante che coincida con l'inizio e la fine di uno abbreviato.
- Mostrare la rete. L'hash genesi decide su quale catena una firma è valida, quindi l'utente vede per quale rete è la transazione (devnet, testnet e mainnet).
Da dove cominciare
La specifica raccomanda ai dispositivi di supportare per primi tre tipi di transazione: SendZBC (un pagamento), TransferToken (un trasferimento di token, vedi emettere un token) e ApprovalEscrow (l'approvazione di un pagamento in escrow).