Navigare tra le sfide delle prove a conoscenza zero
Esplorando le vulnerabilità nelle prove a conoscenza zero nella crittografia.
― 6 leggere min
Indice
- Cosa sono le Prove a Conoscenza Zero?
- Proprietà Chiave delle Prove a Conoscenza Zero
- Applicazioni delle Prove a Conoscenza Zero
- Tipi Comuni di Prove a Conoscenza Zero
- SNARKs e STARKs
- Vulnerabilità di Sicurezza nelle Prove a Conoscenza Zero
- Tipi di Vulnerabilità
- Esame Approfondito delle Vulnerabilità
- Bug di Implementazione
- Configurazione Errata
- Riutilizzo Non Sicuro del Codice
- Librerie Obsolete
- L'Impatto delle Vulnerabilità
- Casi di Studio di Vulnerabilità nelle Prove a Conoscenza Zero
- Raccomandazioni per gli Sviluppatori
- Effettuare Test Approfonditi
- Garantire Documentazione Adeguata
- Limitare il Riutilizzo del Codice
- Tenere Aggiornate le Librerie
- Conclusione
- Fonte originale
- Link di riferimento
Le prove a conoscenza zero sono un’area affascinante nella crittografia, che permette a una parte di dimostrare a un’altra che un’affermazione è vera senza rivelare ulteriori informazioni su di essa. Queste prove hanno guadagnato importanza in diverse applicazioni, specialmente nel campo della tecnologia blockchain. Tuttavia, come con qualsiasi tecnologia, presentano problemi unici, in particolare riguardo alle vulnerabilità di sicurezza.
Cosa sono le Prove a Conoscenza Zero?
Le prove a conoscenza zero consentono a una parte, nota come provatore, di convincere un’altra parte, chiamata verificatore, che conosce un segreto (o testimone) che soddisfa una specifica affermazione senza rivelare il segreto stesso. Per esempio, un provatore potrebbe dimostrare di conoscere una password senza mai rivelarla.
Proprietà Chiave delle Prove a Conoscenza Zero
- Completezza: Se l’affermazione è vera, un provatore onesto può convincere il verificatore di questo fatto.
- Solidità: Se l’affermazione è falsa, nessun provatore disonesto può convincere il verificatore della sua verità, tranne con probabilità trascurabile.
- Zero-Conoscenza: Il verificatore non impara nulla oltre al fatto che l’affermazione è vera.
Applicazioni delle Prove a Conoscenza Zero
Le prove a conoscenza zero trovano applicazioni in diverse aree, tra cui:
- Transazioni a Protezione della Privacy: Consentono transazioni private nelle criptovalute, assicurando che i dettagli delle transazioni rimangano riservati.
- Autenticazione: Permettono agli utenti di dimostrare la propria identità senza esporre informazioni sensibili.
- Sistemi di Voto Sicuri: Assicurano che i voti siano conteggiati correttamente senza rivelare voti individuali.
Tipi Comuni di Prove a Conoscenza Zero
Le prove a conoscenza zero possono essere divise in due tipi principali:
Prove Interattive: Queste coinvolgono un’interazione reciproca tra provatore e verificatore. Il verificatore sfida il provatore con domande casuali.
Prove Non Interattive: Queste consentono al provatore di generare una singola prova che può essere verificata indipendentemente senza interazione.
SNARKs e STARKs
Nel campo delle prove a conoscenza zero, due tipi popolari sono SNARKs (Succinct Non-Interactive Arguments of Knowledge) e STARKs (Scalable Transparent Arguments of Knowledge). Entrambi forniscono modi efficienti per verificare le prove, ma differiscono nei loro approcci alla sicurezza e all’efficienza.
Vulnerabilità di Sicurezza nelle Prove a Conoscenza Zero
Nonostante i loro vantaggi, le prove a conoscenza zero non sono prive di vulnerabilità. Comprendere queste vulnerabilità è cruciale per sviluppare sistemi sicuri che le utilizzano.
Tipi di Vulnerabilità
Bug di Implementazione: Errori di codifica possono portare a problemi di sicurezza significativi. Difetti nel modo in cui i circuiti sono progettati possono consentire ad attori malintenzionati di sfruttare le debolezze.
Configurazione Errata: Il modo in cui i sistemi sono impostati può introdurre vulnerabilità. Se un sistema non impone controlli necessari, potrebbe essere vulnerabile agli attacchi.
Riutilizzo Non Sicuro del Codice: Gli sviluppatori a volte riutilizzano parti di codice che non erano progettate per il contesto attuale, portando a potenziali difetti di sicurezza.
Librerie Obsolete: Usare librerie o componenti che presentano vulnerabilità note può creare rischi nei sistemi a conoscenza zero.
Esame Approfondito delle Vulnerabilità
Bug di Implementazione
I bug di implementazione sono le vulnerabilità più comuni trovate nei sistemi di prova a conoscenza zero. Gli sviluppatori potrebbero trascurare vincoli essenziali durante la progettazione del circuito. Per esempio, quando le variabili vengono assegnate valori, devono essere anche vincolate per evitare di accettare input non validi.
Esempio di Bug di Implementazione
In un caso, un sistema di prova a conoscenza zero consentiva l’accettazione di valori arbitrari senza vincoli appropriati. Un utente malintenzionato avrebbe potuto sfruttare questo e generare falsi prove accettati dal verificatore.
Configurazione Errata
La configurazione errata può verificarsi quando gli sviluppatori non definiscono adeguatamente l’ambiente in cui operano le prove a conoscenza zero. Per esempio, non imponendo vincoli necessari sugli input, possono sorgere vulnerabilità.
Esempio di Configurazione Errata
Un sistema progettato per controllare se un valore rientra in un intervallo specifico potrebbe trascurare questo controllo, permettendo a input non validi di passare. Questo può portare a seri problemi di sicurezza in cui un attaccante può manipolare i dati senza essere rilevato.
Riutilizzo Non Sicuro del Codice
Gli sviluppatori potrebbero essere tentati di riutilizzare codice esistente senza comprendere appieno le sue implicazioni, portando a vulnerabilità. Se un circuito riutilizzato era progettato per un altro scopo, potrebbe mancare di vincoli essenziali per il nuovo contesto.
Esempio di Riutilizzo Non Sicuro
In uno scenario, un sviluppatore ha riutilizzato una funzione da un altro progetto, dimenticando di implementare controlli critici. Questa svista ha permesso agli utenti di sfruttare il sistema ed eseguire azioni non autorizzate.
Librerie Obsolete
Il panorama della sicurezza evolve continuamente e le librerie possono diventare obsolete. Usare librerie con vulnerabilità note può compromettere l'integrità di un sistema a conoscenza zero.
Esempio di Utilizzo di Librerie Obsolete
Se un progetto dipende da una libreria crittografica identificata come insicura, potrebbe esporre l'intera applicazione a nuovi vettori di attacco, consentendo agli avversari di eludere le misure di sicurezza.
L'Impatto delle Vulnerabilità
Le implicazioni di queste vulnerabilità possono essere gravi. Possono portare a accessi non autorizzati, perdita di informazioni sensibili e danni alla fiducia degli utenti nel sistema.
Casi di Studio di Vulnerabilità nelle Prove a Conoscenza Zero
Incidente Tornado Cash: Un difetto nella progettazione di un circuito ha permesso a un utente malintenzionato di svuotare i fondi dal sistema. La vulnerabilità è emersa dalla mancanza di vincoli su una variabile di output, consentendo accessi non autorizzati.
Vulnerabilità di Zcash: Una svista nel processo di configurazione di un sistema di prova a conoscenza zero ha portato alla creazione di monete contraffatte. Questo incidente ha messo in evidenza l'importanza di una configurazione accurata e di test rigorosi nei sistemi a conoscenza zero.
Raccomandazioni per gli Sviluppatori
Per mitigare i rischi associati alle vulnerabilità nelle prove a conoscenza zero, gli sviluppatori dovrebbero considerare le seguenti buone pratiche:
Effettuare Test Approfonditi
Implementare protocolli di test completi per identificare vulnerabilità precocemente nel processo di sviluppo. Usare strumenti automatizzati dove possibile per eseguire audit di sicurezza.
Garantire Documentazione Adeguata
Mantenere una documentazione dettagliata del codice, compresi progetti di circuiti e configurazioni. Questo aiuta gli sviluppatori attuali e i futuri manutentori a comprendere le complessità del sistema.
Limitare il Riutilizzo del Codice
Essere cauti nel riutilizzare il codice. Comprendere il contesto in cui è stato scritto il codice originale e assicurarsi che sia adatto per l'applicazione attuale.
Tenere Aggiornate le Librerie
Rivedere e aggiornare regolarmente le librerie per assicurarsi che non contengano vulnerabilità note. Monitorare le notizie del settore per eventuali avvisi di sicurezza riguardanti le librerie in uso.
Conclusione
Le prove a conoscenza zero sono uno strumento potente nel campo della crittografia, offrendo significativi vantaggi in termini di privacy e sicurezza. Tuttavia, la loro complessità introduce anche vulnerabilità uniche che gli sviluppatori devono affrontare. Essere consapevoli dei potenziali pericoli e seguire le migliori pratiche consente di creare sistemi più sicuri che sfruttano i vantaggi delle prove a conoscenza zero, riducendo al minimo i rischi per la sicurezza. Con l'evoluzione della tecnologia, la ricerca e lo sviluppo continui saranno cruciali per migliorare la sicurezza dei sistemi a conoscenza zero, garantendo che rimangano robusti e affidabili nella protezione delle informazioni sensibili.
Titolo: SoK: What don't we know? Understanding Security Vulnerabilities in SNARKs
Estratto: Zero-knowledge proofs (ZKPs) have evolved from being a theoretical concept providing privacy and verifiability to having practical, real-world implementations, with SNARKs (Succinct Non-Interactive Argument of Knowledge) emerging as one of the most significant innovations. Prior work has mainly focused on designing more efficient SNARK systems and providing security proofs for them. Many think of SNARKs as "just math," implying that what is proven to be correct and secure is correct in practice. In contrast, this paper focuses on assessing end-to-end security properties of real-life SNARK implementations. We start by building foundations with a system model and by establishing threat models and defining adversarial roles for systems that use SNARKs. Our study encompasses an extensive analysis of 141 actual vulnerabilities in SNARK implementations, providing a detailed taxonomy to aid developers and security researchers in understanding the security threats in systems employing SNARKs. Finally, we evaluate existing defense mechanisms and offer recommendations for enhancing the security of SNARK-based systems, paving the way for more robust and reliable implementations in the future.
Autori: Stefanos Chaliasos, Jens Ernstberger, David Theodore, David Wong, Mohammad Jahanara, Benjamin Livshits
Ultimo aggiornamento: 2024-07-11 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2402.15293
Fonte PDF: https://arxiv.org/pdf/2402.15293
Licenza: https://creativecommons.org/licenses/by/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.
Link di riferimento
- https://cryptologie.net/article/600/a-journey-into-zero-knowledge-proofs/
- https://www.zksecurity.xyz/blog/posts/circomscribe/
- https://www.circomscribe.dev/
- https://geometry.xyz/notebook/groth16-malleability
- https://l2beat.com/scaling/summary
- https://docs.google.com/spreadsheets/d/1E97ulMufitGSKo_Dy09KYGv-aBcLPXtlN5QUpwyv66A
- https://github.com/iden3/circomlib/blob/master/circuits/sign.circom
- https://docs.tornadoeth.cash/generals/how-does-tornado-cash-work
- https://scroll.io/blog/scaling-security
- https://electriccoin.co/blog/turnstile-enforcement-against-counterfeiting/
- https://github.com/0xPARC/zk-bug-tracker
- https://tornado-cash.medium.com/tornado-cash-got-hacked-by-us-b1e012a3c9a8
- https://github.com/iden3/circomlib/pull/22/files
- https://github.com/Zellic/publications/blob/master/Scroll%20zkEVM%20-%20Part%201%20-%20Audit%20Report.pdf
- https://github.com/scroll-tech/zkevm-circuits/commit/d0e7a07e8af25220623564ef1c3ed101ce63220e
- https://medium.com/veridise/circom-pairing-a-million-dollar-zk-bug-
- https://github.com/yi-sun/circom-pairing/pull/21/commits/c686f0011f8d18e0c11bd87e0a109e9478eb9e61
- https://penumbra.zone/pdfs/zksecurity_penumbra_2023.pdf
- https://github.com/penumbra-zone/penumbra/commit/e019839939968012ed2d24cf65bdd86d239b50e9
- https://github.com/Zellic/publications/blob/master/Scroll%20zkEVM%20-%20Part%202%20-%20Audit%20Report.pdf
- https://github.com/scroll-tech/poseidon-circuit/commit/912f5ed2c6cacd64a0006e868e3cb4b624acc019
- https://github.com/a16z/zkdrops/pull/2
- https://github.com/a16z/zkdrops/pull/2/files
- https://www.zksecurity.xyz/blog/2023-aleo-synthesizer.pdf