Accedi con Zcash
Intermedio - 7 min
TL;DR
- Accedi dimostrando di controllare un indirizzo Zcash, invece di usare una password
- Sono in uso due modelli: firmare una challenge, oppure inviare un pagamento schermato con un codice nel memo
- Poiché gli indirizzi schermati nascondono saldo e cronologia, dimostrare il controllo non espone le tue finanze
- Questo modello è ancora agli inizi. Non esiste ancora uno standard ratificato e le implementazioni non sono interoperabili
Per chi è?
- Sviluppatori che vogliono un accesso senza password senza raccogliere dati personali
- Utenti che preferiscono non consegnare il proprio indirizzo email a ogni sito
- Chiunque voglia accedere senza collegare la propria cronologia finanziaria a un account
Il problema
La maggior parte delle opzioni di accesso rivela qualcosa:
- Password ed email creano un account legato alla tua identità, ed entrambe finiscono nei dump delle violazioni dei dati
- Accesso social comunica al provider di identità ogni posto in cui accedi e quando
- Accesso con portafoglio su chain trasparenti è peggio di quanto sembri. Collegare un portafoglio può consegnare al sito il tuo intero saldo e la cronologia delle transazioni, in modo permanente
Di solito stai scegliendo tra comodità e divulgazione di dati.
Perché Zcash?
Zcash separa il dimostrare il controllo dal rivelare le finanze:
- Gli indirizzi schermati mantengono privati saldi e cronologia delle transazioni, quindi dimostrare di possederne uno non dice nulla su ciò che possiedi
- I memo cifrati possono trasportare privatamente un codice di accesso monouso all'interno di una transazione
- Le chiavi di visualizzazione consentono la divulgazione selettiva, così un'app può ricevere accesso in lettura esattamente a ciò di cui ha bisogno e niente di più
Come funziona
Sono emersi due approcci. Entrambi terminano con l'app che possiede un identificatore stabile per te e nessuna password.
Approccio 1: firmare una challenge
- L'app genera una challenge casuale monouso
- Il tuo portafoglio firma quella challenge con la chiave dietro il tuo indirizzo
- L'app verifica la firma e ti fa accedere
Non viene trasmesso nulla, quindi non ci sono commissioni né attesa di un blocco. La specifica rilevante è ZIP 304, Firme degli indirizzi Sapling, che è ancora una bozza, quindi il supporto dei portafogli per la firma dei messaggi varia.
Approccio 2: dimostrarlo con un pagamento schermato
- L'app genera un codice monouso e mostra una richiesta di pagamento
- Invi una piccola transazione schermata con quel codice nel memo
- L'app osserva il memo, abbina il codice e ti fa accedere
Questo funziona con i portafogli che già oggi supportano i memo, cioè la maggior parte. Il compromesso è che costa una commissione di rete e devi attendere la conferma.
Mantenere privato l'indirizzo
Un'app non deve necessariamente memorizzare il tuo indirizzo per riconoscerti. Alcune implementazioni lo sottopongono ad hash insieme a un valore specifico dell'applicazione, così ogni sito vede un identificatore diverso ma stabile per lo stesso utente. Questo impedisce ai siti di confrontare le informazioni per collegare i tuoi account.
Compromessi
Vale la pena capirli prima di costruirci sopra o di farci affidamento.
| Challenge firmata | Pagamento schermato |
|---|
| Costo | Gratis | Commissione di rete per ogni accesso |
| Velocità | Istantaneo | Attende la conferma |
| Supporto dei portafogli | Limitato, ZIP 304 è una bozza | Ampio, servono solo i memo |
| Lascia una traccia sulla chain | No | Sì, esiste una transazione |
Limitazioni condivise:
- Nessun recupero account per impostazione predefinita. Perdere la chiave significa perdere l'account, a meno che l'app non progetti un percorso di recupero
- Il riutilizzo dell'indirizzo può collegarti. Usare lo stesso indirizzo su molti siti ricrea il problema del tracciamento, ed è per questo che gli identificatori specifici dell'app sono importanti
- Nessuno standard ratificato. Ogni progetto ha il proprio schema, quindi un accesso costruito per uno non funziona con un altro
- Non è anonimato da solo. Nasconde le tue finanze all'app, ma l'app può comunque profilare ciò che fai una volta entrato
Errori comuni da evitare
- Riutilizzare un codice challenge. Ogni codice dovrebbe essere monouso e scadere rapidamente, altrimenti uno intercettato può essere riutilizzato
- Chiedere agli utenti di inviare un importo significativo per accedere. Il pagamento è una prova, quindi l'importo dovrebbe essere trascurabile
- Memorizzare l'indirizzo grezzo quando un identificatore specifico dell'applicazione farebbe lo stesso lavoro
- Presumere che la firma dei messaggi funzioni ovunque. Controlla quali portafogli hanno davvero i tuoi utenti
- Trattare un memo come segreto dopo il fatto. Dimostra che il mittente ha agito, non è una password
Progetti che stanno esplorando questa idea
Questi sono stati creati per la traccia Zcash Login dello ZecHub Hackathon 3.0. Sono esperimenti più che prodotti finiti, e mostrano quanto diversamente si possa costruire la stessa idea.
- ZecAuth - un protocollo di connessione del portafoglio per Zcash, nello spirito di ciò che WalletConnect fa altrove. L'app mostra un codice QR o un link
zecauth:// che contiene una challenge insieme alle capacità che sta richiedendo, come accesso, richieste di pagamento o accesso in lettura. Nessuna transazione, nessuna commissione, nessuna interazione con la chain. Include una specifica scritta del protocollo insieme al codice
- ZShield - trasforma un indirizzo schermato in un DID W3C e in un'identità OpenID Connect. Il browser genera una coppia di chiavi, il server emette un nonce tramite un'interfaccia in stile ZIP 304, il portafoglio lo firma e il server restituisce un JWT. Poiché il risultato è compatibile con OIDC, le app esistenti possono utilizzarlo senza integrazioni su misura
- ZecPass - dimostra il possesso tramite un memo firmato, ed è costruito in modo che l'app non apprenda affatto l'indirizzo dell'utente. Deriva un hash con ambito applicativo da usare come identificatore stabile, mantiene le challenge monouso e con limite di tempo, e include un pulsante React pronto all'uso con una libreria di verifica per Node
- Portal - accesso inviando una transazione schermata con un codice monouso nel memo, in esecuzione su mainnet. Lo stesso flusso viene riutilizzato per sbloccare contenuti a pagamento e per inviare o ricevere denaro da un link
- ZcashMe - usa un pagamento schermato come prova di identità, e si concentra sul divario tra desktop e mobile in modo che l'accesso da laptop non richieda un'estensione del browser
- ZBooks - uno strumento per la contabilità e i pagamenti che tratta l'accesso con Zcash come un primitivo di autenticazione riutilizzabile anziché come il prodotto stesso e legge i dati della tesoreria tramite una Unified Full Viewing Key
Pagine correlate