La Zero Knowledge Proof come la spiegherei a un bambino di 12 anni

Criptovalute e blockchain sono difficili da spiegare. Ed è ancora più complesso farlo in modo semplice e intuitivo a chi non ha basi tecniche in merito. Come spieghereste la Zero Knowledge Proof a un dodicenne? Semplice, usando le caramelle di Halloween.

Il protocollo Zero Knowledge (noto anche come Zero Knowledge Password Proof, o ZKP) fa sì che le password non vengono trasferite tra le parti, il che rende impossibile il loro furto. Si tratta di un’ottima soluzione che protegge e rende sicura la vostra comunicazione, in modo che nessun altro possa vedere di cosa state parlando o quali file state scambiando.

zero knowledge proof
Adobe Stock

In poche parole, la ZKP consente di dimostrare a chi si trova all’altro “capo” della comunicazione che si è a conoscenza di uno o più segreti senza rivelarli realmente.

L’espressione “conoscenza zero” deriva dal fatto che non viene fornita alcuna informazione (“zero”) sul segreto, ma la seconda parte (denominata “Verificatore”) è (correttamente) convinta che la prima persona (denominata “Prover”) conosca il segreto in questione.

Perché si dovrebbe rivelare il segreto per dimostrare di conoscerlo? Quando si deve convincere l’altra persona che si è a conoscenza di qualcosa anche se non ci si fida. Che cosa comporta quindi la procedura?

Barrette di cioccolato e milionari

Prendiamo come esempio Marco e Alice, che hanno ricevuto delle barrette di cioccolato per Halloween:

  • Vogliono sapere se hanno ricevuto la stessa quantità di caramelle, ma non vogliono rivelare quanti cioccolatini hanno ricevuto.
  • Supponiamo che abbiano ricevuto solo 10, 20, 30 o 40 barrette di cioccolato nei loro sacchetti di dolcetto o scherzetto.
  • Marco acquista quattro scatole con chiusura a chiave e mette in ognuna di esse delle etichette con scritto 10, 20, 30 o 40 (tavolette di cioccolato) per consentire loro di confrontare la quantità di tavolette di cioccolato ricevute senza rivelare la quantità reale.
  • Supponendo che Marco abbia 20 tavolette di cioccolato, butta via tutte le chiavi tranne quella che apre la scatola corrispondente a quel numero.
  • Alice scrive “+” su uno dei quattro foglietti e “-” sugli altri.
  • Quindi inserisce il pezzo “+” attraverso una fessura nella scatola contrassegnata dal numero corrispondente alla quantità di caramelle che possiede (in questo caso, 30 barrette), inserisce i pezzi di carta “-” nelle scatole rimanenti e poi se ne va.
  • Tornando, Marco controlla se i “+” o i “-” sono presenti nell’unica scatola di cui ha ancora la chiave, quella che corrisponde alla quantità di caramelle in suo possesso.
  • Alice ha la stessa quantità di barrette di cioccolato nella sua borsa se la risposta è “+”. La parola “-” sul foglietto indica che ha una quantità di caramelle diversa (ma che comunque non vuole condividere) rispetto all’altra persona.
  • Sappiamo che la borsa di Marco ha 20 tavolette di cioccolato e quella di Alice 30. Marco scopre che lui e Alice hanno quantità diverse di caramelle aprendo la scatola e trovando il foglietto con il “meno”. Tuttavia, non è in grado di stabilire se Alice ha più o meno tavolette di cioccolato.
  • Alice torna e si accorge che Marco ha in mano un foglietto con la parola “meno”. Ha quindi una quantità diversa di caramelle. Tuttavia, Marco e Alice non sanno ancora esattamente quante tavolette di cioccolato hanno ciascuno. Sono solo consapevoli che le loro risorse sono diverse.

Fine della spiegazione per bambini, passiamo al succo della Zero Knowledge Proof 🙂

Che cos’è l’autenticazione?

L’autenticazione è il processo per determinare se un certo dato dichiarato come vero da un’entità è effettivamente vero. L’autenticazione è il processo di verifica effettiva dell’identità di una persona o di una cosa, in contrapposizione all’identificazione, che si riferisce all’atto di esprimere o indicare in altro modo un’affermazione che ha lo scopo di attestare apparentemente tale identità.

Nell’autenticazione basata sul segreto, le parti concordano che un segreto (S) riflette l’identità pubblica di un prover (P). P deve solo rivelare S alla seconda persona, il verificatore (V), per dimostrare di essere effettivamente P. Esiste un protocollo generico che si applica indipendentemente dal metodo di autenticazione:

Il prover trasmette la propria identità (P) e un segreto (S(P)), come una coppia di login e password.

Per verificare S(P), il verificatore lo confronta con i record del database delle credenziali.

È fondamentale che le parti dispongano di un segreto pre-condiviso per qualsiasi metodo di autenticazione che si basa su segreti.

Le soluzioni di autenticazione basate su segreti presentano dei rischi importanti:

  • Intercettazione
    L’invio del segreto o di uno dei suoi derivati (di solito si usano gli hash) è l’unico modo per dimostrare alla parte remota che si è a conoscenza di un segreto. Attraverso qualsiasi metodo di intercettazione della comunicazione tra le parti, si può prendere il segreto o i suoi dati derivati. Queste informazioni possono essere utilizzate per spacciarsi per P pur conoscendo il segreto S o un suo derivato.
  • Perdita del database di autenticazione.
    V deve disporre di un database dei segreti dei prover remoti collegato alle loro identità per poter confrontare i segreti. L’aggressore può apparire come P in possesso di S a questa parte e a tutte le altre che hanno lo stesso S ottenendo quel database.

Come risolvere le criticità nell’autenticazione tramite la Zero Knowledge Proof

Alternative a questi problemi? È possibile bloccare le intercettazioni occulte mediante:

  • Public-key based authentication
    Una tecnica sicura di autenticazione basata su chiavi pubbliche è la crittografia asimmetrica, che prevede la gestione delle chiavi (revoca delle chiavi, catena di fiducia, ecc.), lo scambio di chiavi pubbliche tra le parti (che non è facile dettare al telefono o annotare su un post-it sulla scrivania) e altro ancora.
  • Securing transport layer
    La crittografia del traffico richiede un sistema basato sulla chiave pubblica o sulla chiave segreta precondivisa, pertanto si applicano i limiti indicati sopra.
  • Zero-Knowledge Proof
    La Zero-Knowledge Proof non richiede uno scambio di chiavi e non rivela la password. Dopo l’autenticazione stessa, consente la generazione di chiavi temporanee per la crittografia a chiave segreta in transito. Il costo del calcolo della ZKP è l’unico svantaggio.

La divulgazione del segreto può essere fermata da:

  • Protezione dell’autenticazione del database
    La limitazione dell’accesso al database e la crittografia della memoria segreta sono due modi per proteggere un database di autenticazione. In questo modo si può fermare un attaccante impreparato con un accesso inadeguato.
  • Memorizzazione indiretta dei segreti
    Per rendere più difficile il compito di un attaccante, il verificatore potrebbe conservare un derivato del segreto riproducibile una sola volta invece del segreto stesso. Il Prover deve duplicare questo derivato del segreto affinché il Verificatore possa vederlo durante ogni sessione di autenticazione.

Inoltre, per rafforzare l’autenticazione a chiave segreta si utilizzano abitualmente OTP e altre strategie MFA.

Perché la Zero Knowledge Proof è superiore ad altri metodi di autenticazione

Considerate la possibilità che il verificatore sia un aggressore o che un aggressore si sostituisca al verificatore. Potrebbe anche accadere a livello locale, perché è così che agisce di solito il malware che prende di mira le banche.

I metodi tradizionali sono limitati nelle loro possibilità. Una volta che il Prover si è autenticato con un Verifier fraudolento, quest’ultimo può spesso convincere qualsiasi terza parte di essere il Prover, poiché è a conoscenza del segreto.

Il vantaggio maggiore è che nessuna quantità di materiale rilasciato dal Prover nell’ambito del protocollo Zero-Knowledge Proof è sufficiente per riavviare il processo o ricostruire il segreto.

Themis è una libreria crittografica intuitiva che offre un protocollo ZKP interattivo per il confronto e l’autenticazione dei segreti.
Scopri Themis

I protocolli ZKP, o zero-knowledge proof, permettono a due parti di controllare (verificare) se condividono un segreto senza rivelarlo (ad esempio, determinare se condividono la stessa password per i loro account separati). Alcuni protocolli Zero-Knowledge consentono di ottenere segreti condivisi (uno o molti) come risultato della procedura.

Come funziona il protocollo Zero Knowledge Proof

Nel corso del tempo, i crittografi hanno elaborato alcune spiegazioni intelligenti dello ZKP per le “persone comuni”:

Utilizzo del protocollo Zero-Knowledge Proof

Come posso utilizzare lo ZKP nella vita reale per le mie attività? Lo ZKP non è un trucco magico esoterico che può consentire di creare fiducia senza richiedere alle parti di rivelare i propri segreti. ZKP è una forte aggiunta agli attuali modelli di autenticazione:

  • Per poter confermare un segreto, è comunque necessario divulgarlo.
  • Per abbinare l’identificazione pubblica al segreto, è ancora necessario averne uno.
  • L’unica cosa che cambia sono le garanzie di sicurezza del processo.

ZKP, che in realtà è semplicemente un’altra implementazione dell’architettura di autenticazione, viene utilizzato per convalidare i segreti in contesti ostili.

Tuttavia, diverse funzioni di prova di ZKP potrebbero trarre vantaggio da alcune tecniche di sicurezza inventive.

Protocolli Zero-Knowledge Proof: alcune applicazioni pratiche

Verifica di login e password

L’uso più comune è l’autenticazione login/password, in cui si scambiano informazioni di login in un formato aperto (o facilmente decifrabile) e poi si usa ZKP per dimostrare che sia voi che il server siete in possesso della password.

Richiesta tramite ID

Le richieste di dati sensibili possono essere autenticate, e questo è un altro metodo utile. La coppia nome/SSN ne è un esempio lampante. Quando una banca contatta l’agenzia di rating del credito tramite l’SSN per richiedere un punteggio di rating, rivela direttamente che l’SSN appartiene al cliente della banca e consente all’agenzia di rating del credito di costruire un record dal nulla (basato solo sul fatto che il titolare dell’SSN ha contattato la banca). Il nome, invece, è un’identificazione piuttosto generica che non indica specificamente un individuo.

Immaginiamo che l’agenzia di rating del credito sia il Prover e che voi, la banca, siate il Verificatore. Si avvia una ZKP su SSN e si sottopone al verificatore il requisito pubblico (nome). Il verificatore assegna un elenco di SSN che corrispondono a questo nome ed esegue uno ZKP su ciascuno di essi.

Di conseguenza, il protocollo può avere successo solo se l’autorità di rating del credito dispone di alcuni record che corrispondono all’SSN richiesto e la divulgazione dell’SSN all’autorità conferisce valore al verificatore.

Esistono tecniche di memorizzazione più complesse in cui entrambe le parti possiedono i segreti che utilizzano come identificatori di tali segreti e i loro derivati. Queste tattiche funzionano bene quando c’è un solo identificatore e la sua fuga è già problematica.

Autenticazione ricorrente

Abbiamo bisogno di confermare la sincerità di entrambe le parti per imporre un comportamento corretto nei protocolli pericolosi (come la firma delle transazioni nell’online banking), poiché non sappiamo mai dove un attaccante potrebbe colpire.

A tal fine, possiamo autenticare ogni fase del protocollo utilizzando il segreto S e le informazioni private della fase precedente. In questo modo, manteniamo una catena di fiducia fin dall’inizio del protocollo (il valore iniziale può essere qualsiasi chiave derivata) e non ci affidiamo a token di fiducia effimeri come le chiavi di sessione.

Impostazioni privacy