Che cos’è uno zk-STARK e come funziona?

Che cos’è uno zk-STARK?
Uno zk-STARK è un modo crittografico per dimostrare che un calcolo è corretto, senza che chi controlla la proof debba rieseguire l’intero calcolo. Grazie alla proprietà zero-knowledge, inoltre, alcuni dati usati nel calcolo possono rimanere nascosti.
L’acronimo sta per Zero-Knowledge Scalable Transparent ARgument of Knowledge. Sembra tecnico, ma le parti si possono spiegare bene:
- Zero-Knowledge: puoi dimostrare che qualcosa è corretto senza rivelare le informazioni segrete sottostanti.
- Scalable: anche con calcoli grandi, la proof può essere verificata in modo relativamente efficiente.
- Transparent: non serve un trusted setup. Quindi non bisogna fare prima una configurazione speciale in cui si crea informazione segreta che poi deve essere distrutta in modo sicuro.
- Argument of Knowledge: una proof valida mostra che chi la crea possiede le informazioni necessarie per eseguire correttamente il calcolo. Per questo è estremamente difficile falsificare una proof valida.
Nel mondo crypto questo è particolarmente utile quando grandi calcoli vengono eseguiti fuori dalla blockchain. Per esempio, un sistema può elaborare molte transazioni off-chain e poi inviare una sola proof alla blockchain. La blockchain non deve allora rieseguire ogni calcolo, ma controlla solo se la proof fornita è valida.
Esempio: immagina che migliaia di transazioni vengano elaborate fuori da Ethereum. Invece di rieseguire tutte quelle transazioni su Ethereum, un sistema può generare uno zk-STARK che dimostra che l’intero batch è stato elaborato secondo le regole. Ethereum deve poi controllare solo quella proof.
La base degli STARK è stata descritta nel 2018 da Eli Ben-Sasson, Iddo Bentov, Yinon Horesh e Michael Riabzev. Il sistema è stato progettato per rendere verificabili in modo efficiente grandi calcoli senza trusted setup.
In breve
- Uno zk-STARK dimostra che un calcolo è stato eseguito correttamente senza rifarlo per intero.
- Lo zero knowledge può mantenere nascosti gli input privati, ma non è presente automaticamente in ogni applicazione STARK.
- Gli STARK non hanno bisogno di un trusted setup con parametri segreti.
- Nei rollup, molte transazioni off-chain possono essere verificate su una blockchain con una sola validity proof.
- La tecnica può essere usata sia per la scalabilità blockchain sia per calcoli verificabili fuori dal mondo crypto.
Come funziona uno zk-STARK?
Uno zk-STARK trasforma un grande calcolo in una forma molto più efficiente da verificare. La parte che esegue il calcolo, il prover, crea poi una proof crittografica. Il verifier controlla quella proof senza rieseguire l’intero calcolo originale.
In parole semplici: il prover fa il lavoro pesante e il verifier controlla, con una serie di verifiche crittografiche e matematiche, se il risultato è corretto.
A grandi linee funziona così:
-
Il calcolo viene trasformato in regole matematiche: Per prima cosa si stabilisce a quali regole deve rispettare ogni passaggio del calcolo. Negli STARK questo avviene spesso tramite una cosiddetta Algebraic Intermediate Representation (AIR). Puoi vederla come una descrizione matematica di ciò che durante il calcolo è consentito e di ciò che non lo è.
-
Il prover registra tutti i passaggi di calcolo: Il prover esegue il calcolo e crea una cosiddetta execution trace. Puoi immaginarla come una grande tabella che tiene traccia dei diversi passaggi del calcolo.
-
I dati vengono fissati crittograficamente: Il prover elabora questi dati in modo matematico e li fissa con commitment crittografici, per esempio con un Merkle tree. In questo modo il prover non può semplicemente modificarli in seguito.
-
Il verifier controlla una selezione dei dati: Poi vengono eseguiti controlli in punti imprevedibili. Il verifier verifica tra le altre cose se i dati corrispondono ai commitment fissati in precedenza e se sono state seguite le regole matematiche del calcolo. Per questo gli STARK usano anche una tecnica chiamata FRI. Con questa si può controllare in modo efficiente se le funzioni matematiche usate hanno la forma corretta, senza verificare tutti i dati uno per uno.
-
La proof viene verificata: Se tutti i controlli hanno successo, il verifier ha una forte certezza crittografica che il calcolo sia stato eseguito correttamente. Per farlo non serve rieseguire l’intero calcolo. Quando viene usato su una blockchain, il prover può inviare la proof finale a uno smart contract. Quel contratto controlla la proof e accetta il nuovo risultato solo se è valido. StarkWare, per esempio, usa verifier on-chain su Ethereum per controllare le proof STARK.
Esempio: immagina che un rollup elabori 1.000 transazioni fuori da Ethereum. Il rollup esegue tutti i calcoli e poi crea una proof che dimostra che le transazioni sono state elaborate secondo le regole. Ethereum non deve quindi rieseguire tutte quelle 1.000 transazioni. Al loro posto, uno smart contract controlla la proof. Se è valida, il nuovo stato del rollup può essere accettato.
Questo rende gli zk-STARK particolarmente interessanti per la scalabilità: molta elaborazione può avvenire fuori dalla blockchain, mentre la blockchain può comunque controllare crittograficamente che il risultato sia corretto.
Cosa sono le zero-knowledge proofs?
Una zero-knowledge proof permette di dimostrare che un’affermazione è vera senza rivelare le informazioni segrete dietro quell’affermazione.
In parole semplici: il prover mostra al verifier che qualcosa è corretto, senza dover condividere tutti i dati sottostanti.
Una zero-knowledge proof ha tre proprietà importanti:
- Completezza: se l’affermazione è vera e il prover esegue tutto correttamente, il verifier può accettare la proof.
- Soundness: chi prova a dimostrare un’affermazione falsa ha solo una probabilità trascurabile di farla franca.
- Zero knowledge: il verifier non apprende informazioni segrete aggiuntive, oltre al fatto che l’affermazione è vera.
Esempio: un sistema può dimostrare che un batch di transazioni è stato elaborato secondo tutte le regole, senza rendere pubblici alcuni dati privati contenuti in quelle transazioni.
In un rollup, per esempio, l’affermazione pubblica può essere che una nuova state root derivi da una sequenza valida di transazioni. Quali dati restano nascosti dipende da come sono progettati il sistema di proof e l’applicazione.
È importante sapere che una validity proof non garantisce automaticamente la privacy. Un sistema può dimostrare crittograficamente che le transazioni sono state elaborate correttamente, mentre i dati delle transazioni restano comunque pubblici. Per la privacy, la proprietà zero-knowledge deve essere costruita apposta nel sistema.
Qual è il ruolo degli STARK?
Gli STARK sono il proof system che permette di dimostrare e verificare in modo efficiente grandi calcoli senza trusted setup.
La proprietà zero-knowledge determina quali informazioni possono restare nascoste. La tecnica STARK fa in modo che il verifier possa controllare in modo efficiente se il calcolo è stato eseguito secondo le regole.
Una caratteristica importante degli STARK è che sono transparent. Non serve un trusted setup in cui vengono creati in anticipo parametri crittografici segreti che poi devono essere distrutti in modo sicuro. Al loro posto, il sistema si basa tra le altre cose su casualità pubblica e funzioni hash crittografiche.
Gli STARK usano anche tecniche come FRI, che permettono di controllare in modo efficiente se la struttura matematica dietro la proof è corretta.
Il termine Argument of Knowledge significa che un prover non può semplicemente creare una proof valida. Sotto le assunzioni di sicurezza del sistema, il prover deve possedere le informazioni necessarie per eseguire correttamente il calcolo.
A cosa servono gli zk-STARK?
Gli zk-STARK vengono usati soprattutto per eseguire grandi calcoli fuori da una blockchain e poi dimostrare con una sola proof crittografica che il risultato è corretto. Una delle applicazioni principali sono i validity rollup.
In un rollup di questo tipo, molte transazioni vengono elaborate fuori dal layer base. Poi viene inviata alla blockchain una proof che dimostra che il nuovo stato è stato ottenuto correttamente dallo stato precedente.
Questo è utile perché il layer base non deve rieseguire tutti i calcoli. In questo modo il costo di una sola proof può essere distribuito su un grande gruppo di transazioni.
Un esempio noto è StarkEx. Questo sistema usa proof STARK per elaborare grandi quantità di transazioni per applicazioni come trading, pagamenti, gaming e NFT. Le transazioni vengono raggruppate, poi viene creata una proof e questa viene controllata da uno smart contract su Ethereum.
La tecnologia STARK può essere usata anche fuori dal mondo crypto. In linea di principio, la tecnica è adatta a situazioni in cui vuoi dimostrare che un grande calcolo è stato eseguito correttamente senza che chi controlla debba rifare tutti i calcoli. Con lo zero knowledge, inoltre, alcuni dati sottostanti possono restare nascosti.
Una proof da sola non risolve tutto. Nei rollup, per esempio, resta importante sapere dove sono disponibili i dati delle transazioni. Una proof valida dimostra che il calcolo è corretto secondo le regole stabilite, ma non garantisce automaticamente la disponibilità di tutti i dati.
Quali blockchain usano gli STARK?
L’esempio più noto di rete blockchain che usa proof STARK è Starknet. Starknet è un Layer 2 sopra Ethereum che elabora molte transazioni fuori da Ethereum e poi invia una proof STARK a Ethereum.
Ethereum controlla questa proof per confermare che il nuovo stato di Starknet sia stato calcolato correttamente. In questo modo Ethereum non deve rieseguire singolarmente tutte le transazioni che avvengono su Starknet.
Anche StarkEx usa proof STARK, ma StarkEx non è una blockchain autonoma. È una soluzione di scaling che permette a diverse applicazioni crypto di elaborare grandi quantità di transazioni fuori da Ethereum e poi dimostrare crittograficamente che i calcoli sono stati eseguiti correttamente.
Ethereum quindi non usa gli STARK come proprio meccanismo di consenso o di transazione. La rete può però controllare proof STARK fornite da applicazioni e reti Layer 2 come Starknet.
È importante sapere che l’uso delle proof STARK non significa automaticamente che le transazioni siano private. Starknet usa proof di validità STARK per dimostrare che i calcoli sono stati eseguiti correttamente, mentre la privacy zero-knowledge è una proprietà separata.
Quali sono i vantaggi degli zk-STARK?
Gli zk-STARK rendono possibile controllare grandi calcoli in modo molto più efficiente rispetto al dover rieseguire tutto da capo per ogni partecipante.
I vantaggi principali sono:
- Nessun trusted setup: gli STARK non richiedono una cerimonia iniziale in cui vengono creati dati crittografici segreti che poi devono essere distrutti in modo sicuro.
- Verifica efficiente: il verifier può controllare un grande calcolo senza rieseguire ogni singolo passaggio.
- Adatti alla scalabilità: una sola proof può dimostrare l’esecuzione corretta di un grande batch di transazioni, permettendo alle blockchain di elaborare più transazioni fuori dal layer base.
- Possibilità di privacy: quando lo zero knowledge è integrato nel sistema, alcuni dati privati possono restare nascosti mentre il calcolo resta verificabile.
- Sicurezza basata su hash: per il proving layer, gli STARK si basano su funzioni hash crittografiche invece che sui pairing su curve ellittiche usati in molti sistemi SNARK classici.
Grazie a questo approccio basato su hash, gli STARK sono spesso considerati anche più pronti per un futuro con potenti computer quantistici. Infatti, i noti algoritmi quantistici rappresentano un problema maggiore per molte costruzioni su curve ellittiche che per funzioni hash crittografiche ben scelte.
Questo non significa però che ogni applicazione con STARK sia automaticamente completamente quantum-safe. Anche le funzioni hash usate, i parametri, l’implementazione e gli altri componenti crittografici del sistema restano importanti.
Quali sono i limiti degli zk-STARK?
Gli zk-STARK hanno anche degli svantaggi. In particolare, creare una proof può richiedere molta potenza di calcolo e memoria. Il lavoro pesante quindi non sparisce, ma viene soprattutto spostato sul prover.
Inoltre, le proof STARK sono in genere più grandi di quelle di molti sistemi zk-SNARK classici. Questo può significare che, quando una proof viene verificata su una blockchain, bisogna elaborare più dati.
Altri limiti sono:
- Complessità tecnica: gli sviluppatori devono trasformare correttamente i calcoli in una forma che il proof system possa verificare.
- Costo della generazione delle proof: creare proof può richiedere molta potenza di calcolo e quindi comportare costi.
- La proof controlla solo le regole fissate: se la logica dell’applicazione contiene un errore, una proof valida dimostra solo che quelle regole sbagliate sono state seguite correttamente.
- La privacy non è automatica: un sistema basato su STARK può usare validity proof senza mantenere segreti i dati delle transazioni.
In breve: una proof STARK può dimostrare in modo molto forte che un certo calcolo è stato eseguito secondo le regole stabilite, ma non può stabilire se quelle regole siano state progettate bene.
Qual è la differenza tra zk-STARK e zk-SNARK?
Gli zk-STARK e i zk-SNARK hanno lo stesso obiettivo generale: dimostrare in modo efficiente che un calcolo è stato eseguito correttamente senza che il verifier debba rieseguire l’intero calcolo.
La differenza principale sta nella tecnica crittografica usata per farlo.
Un vantaggio importante degli zk-SNARK è che, in molti sistemi, le proof possono essere molto piccole. Questo li rende interessanti quando la quantità di dati da verificare on-chain deve restare il più bassa possibile.
Gli zk-STARK hanno di solito proof più grandi, ma non richiedono trusted setup e usano altre assunzioni crittografiche. Per questo sono particolarmente interessanti per grandi calcoli e per applicazioni in cui la trasparenza del setup è importante.
È però importante non mettere tutti gli zk-SNARK nello stesso sacco. zk-SNARK è un termine generico per più sistemi di proof. Non tutti gli SNARK usano la stessa crittografia e non tutte le varianti richiedono lo stesso tipo di trusted setup.
Anche per entrambe le tecniche vale che una validity proof non significa automaticamente privacy. Lo zero knowledge deve far parte del proof system specifico e dell’applicazione.
Conclusione
Uno zk-STARK è una tecnica crittografica che permette di dimostrare che un grande calcolo è stato eseguito correttamente senza che il verifier debba rieseguire l’intero calcolo.
Questo rende gli zk-STARK particolarmente interessanti per la scalabilità blockchain. I rollup possono elaborare grandi quantità di transazioni fuori dal layer base e poi dimostrare con una sola proof che il risultato è corretto.
I vantaggi principali sono la struttura trasparente senza trusted setup e la verifica efficiente di grandi calcoli. A questo si contrappongono proof più grandi, molto lavoro per il prover e complessità tecnica.
Gli zk-STARK sono quindi soprattutto un modo per rendere grandi calcoli efficienti e verificabili crittograficamente. La privacy può farne parte, ma non è automatica.