Η ανωνυμία προστατεύει το απόρρητο των ψηφοφόρων και διασφαλίζει την ελεύθερη έκφραση γνώμης, περιορίζοντας τον κίνδυνο εξαναγκασμού ή αντιποίνων. Η αντοχή στη λογοκρισία, από την άλλη, εγγυάται ότι καμία μεμονωμένη οντότητα δεν μπορεί να χειραγωγήσει ή να αρνηθεί εκλογικά δικαιώματα, ενισχύοντας περαιτέρω μια αποκεντρωμένη, δίκαιη και ανοιχτή δημοκρατική διαδικασία.
Στη Vocdoni, βασικός μας στόχος είναι να προσφέρουμε την τεχνολογική στοίβα που επιτρέπει απρόσκοπτες και ασφαλείς διαδικασίες ψηφοφορίας μέσα στο blockchain του Ethereum, ιδίως για το οικοσύστημα των Αποκεντρωμένων Αυτόνομων Οργανισμών (DAO). Σκοπεύουμε να δημιουργήσουμε ένα καινοτόμο σύστημα ανώνυμης ψηφοφορίας off-chain, χωρίς κόστος gas και με δεσμευτική εκτέλεση.
Το έγγραφο αυτό περιγράφει την προσέγγισή μας σε αυτή τη φιλόδοξη αποστολή, οργανωμένη στους ακόλουθους βασικούς άξονες:
- Δημιουργία και επαλήθευση ενός πλήρους καταλόγου ψηφοφόρων
- Αντιμετώπιση του προβλήματος του ντετερμινισμού των nullifiers, εγγενούς στις υπογραφές ECDSA
- Ο μηχανισμός κατάθεσης ψήφων off-chain
- Ο ρόλος και οι λειτουργίες του συναθροιστή ψήφων (vote aggregator)
- Η διαδικασία ανεβάσματος των αποτελεσμάτων ψηφοφορίας στο Ethereum
1. Ο επαληθευμένος κατάλογος ψηφοφόρων¶
Ως θεμελιώδες στοιχείο κάθε συστήματος ψηφοφορίας, ο κατάλογος ψηφοφόρων είναι υπεύθυνος για την απαρίθμηση των εκλογέων με δικαίωμα ψήφου και για την απόδοση βαρών ψήφου. Ωστόσο, η δημιουργία καταλόγου με βάση τα δεδομένα του blockchain του Ethereum παρουσιάζει ιδιαίτερες δυσκολίες. Σε αυτές περιλαμβάνονται:
- Δομή δεδομένων: Τα δεδομένα του blockchain του Ethereum δεν είναι δομημένα σε μορφή κατάλληλη για τη δημιουργία καταλόγου ψηφοφόρων. Για παράδειγμα, για ένα token ERC20 δεν υπάρχει διακριτή δομή δεδομένων που να διατηρεί πλήρη λίστα των κατόχων του.
- Συμβατότητα κρυπτογραφίας: Η κρυπτογραφία του Ethereum δεν είναι εγγενώς συμβατή με τα zkSnarks, γεγονός που καθιστά δυσκολότερη τη δημιουργία και την επαλήθευση αποδείξεων μηδενικής γνώσης.
Η κεντρική πρόκληση, επομένως, έγκειται στη δημιουργία ενός συμβατού με zkSnark καταλόγου ψηφοφόρων βασισμένου σε tokens, με τρόπο που δεν απαιτεί εμπιστοσύνη, ώστε να καθίσταται δυνατή η ψηφοφορία off-chain. Είναι επίσης κρίσιμο να ληφθεί υπόψη ότι οι συναλλαγές ERC20 μπορούν να πραγματοποιηθούν ανά πάσα στιγμή, πράγμα που σημαίνει ότι ο κατάλογος μπορεί να διαφέρει σημαντικά από μπλοκ σε μπλοκ.
Για να αντιμετωπίσουμε αυτές τις προκλήσεις, προτείνουμε την ακόλουθη προσέγγιση:
- Κατάλογος off-chain: Δημιουργία ενός φιλικού προς zkSnark καταλόγου ψηφοφόρων off-chain.
- Παραγωγή απόδειξης: Παραγωγή μιας απόδειξης zkSnark που επαληθεύει την ορθότητα του καταλόγου.
- Επικύρωση on-chain: Επικύρωση της απόδειξης δημιουργίας του καταλόγου on-chain μέσω ενός έξυπνου συμβολαίου (smart contract).
- Διευκόλυνση της ψηφοφορίας: Μετά την επικύρωση, ο κατάλογος μπορεί να χρησιμοποιηθεί για την ψηφοφορία.
Η επικύρωση του καταλόγου στο Ethereum μπορεί να πραγματοποιηθεί με δύο τρόπους:
- Έλεγχος υπολοίπου: Το έξυπνο συμβόλαιο επαληθεύει την εγκυρότητα όλων των κατόχων (ή ενός υποσυνόλου τους) καλώντας τη συνάρτηση balanceOfAt(). Η προσέγγιση αυτή, ωστόσο, μπορεί να συνεπάγεται υψηλό κόστος συναλλαγών για τον αποστολέα.
- Storage Proof: Η zkProof του καταλόγου δημιουργείται με χρήση storage proofs (αποδείξεων αποθήκευσης) και το συμβόλαιο ελέγχει την ορθότητά της σε σχέση με μια προηγούμενη ρίζα κατάστασης (State Root) του Ethereum. Αν και η μέθοδος αυτή μπορεί να είναι υπολογιστικά ακριβή για τον δημιουργό του καταλόγου, προσφέρει μια στιβαρή λύση.
Θεωρούμε ότι η προσέγγιση του ελέγχου υπολοίπου ταιριάζει καλύτερα σε μικρά DAO (100-200 μέλη), ενώ το Storage Proof θα λειτουργούσε καλύτερα για μεγάλους οργανισμούς που μπορούν να καλύψουν το κόστος μιας μεγαλύτερης υπολογιστικής υποδομής.
2. Το ζήτημα του ντετερμινισμού των nullifiers¶
Στα κρυπτογραφικά συστήματα ο ντετερμινισμός είναι κρίσιμος: η ίδια είσοδος πρέπει πάντα να παράγει την ίδια έξοδο. Με τις υπογραφές του Ethereum, όμως, εμφανίζεται ένα εμπόδιο.
Οι υπογραφές ECDSA περιλαμβάνουν ένα αυθαίρετο nonce — έναν αριθμό που χρησιμοποιείται μία φορά ή πολύ σπάνια. Ο υπογράφων μπορεί να αλλάξει αυτό το nonce και να παράγει διαφορετικές υπογραφές από το ίδιο περιεχόμενο. Το αποτέλεσμα; Μη ντετερμινισμός — διαφορετικές έξοδοι από την ίδια είσοδο.
Αυτός ο μη ντετερμινισμός γίνεται εμπόδιο στον υπολογισμό ενός nullifier, ενός απαραίτητου εργαλείου για την αποτροπή της διπλής ψήφου. Ο nullifier είναι ένα μοναδικό αναγνωριστικό για κάθε ψήφο. Όταν κατατίθεται μια ψήφος, ο nullifier καταγράφεται σε μια δημόσια λίστα στο blockchain.
Η παραγωγή ενός ντετερμινιστικού nullifier απαιτεί ένα ντετερμινιστικό σχήμα υπογραφών. Και επειδή οι υπογραφές ECDSA δεν είναι ντετερμινιστικές, δεν συνεργάζονται καλά με την παραγωγή nullifiers. Έτσι, φτάνουμε σε αδιέξοδο όταν προσπαθούμε να αποτρέψουμε τη διπλή ψήφο σε ένα σύστημα ανώνυμης δεσμευτικής ψηφοφορίας στο Ethereum.
Εισάγουμε την έννοια ενός Παγκόσμιου Μητρώου Κλειδιών Δέσμευσης (Global Registry of Commitment Keys). Ένα έξυπνο συμβόλαιο διαχειρίζεται το μητρώο αυτό και λειτουργεί ως εργαλείο αντιστοίχισης μιας διεύθυνσης Ethereum με ένα κλειδί δέσμευσης (commitment key). Η βασική δομή είναι η εξής: Διεύθυνση Ethereum => hash(secret).
Το κλειδί δέσμευσης, που παράγεται από ένα μυστικό του χρήστη, βοηθά να συνδεθεί μια διεύθυνση Ethereum με μια ντετερμινιστική έξοδο, εξασφαλίζοντας έτσι τον ντετερμινισμό που είναι κρίσιμος για την περίπτωση χρήσης μας.
Οι πληροφορίες αυτής της αντιστοίχισης κλειδιού–διεύθυνσης αποθηκεύονται στο blockchain του Ethereum ως ένα φιλικό προς Snark δέντρο Merkle. Τα δέντρα Merkle είναι ιδιαίτερα κατάλληλα για τον σκοπό αυτό, επειδή μας επιτρέπουν να δημιουργήσουμε ένα απαραβίαστο και αποδοτικό σύστημα αποθήκευσης και επαλήθευσης μεγάλου όγκου δεδομένων — βασική απαίτηση στην περίπτωσή μας.
Κατά την κατάθεση ψήφου, ο χρήστης πρέπει να παρέχει μια απόδειξη zkSNARK. Η απόδειξη αυτή καταδεικνύει ότι ο χρήστης γνωρίζει το μυστικό του κλειδιού δέσμευσης, το οποίο αποτελεί μέρος του δέντρου Merkle των κλειδιών δέσμευσης που είναι αποθηκευμένο στο Ethereum. Έτσι μπορούμε να δημιουργήσουμε ένα ασφαλές, ανώνυμο και ανθεκτικό στη διπλή ψήφο σύστημα ψηφοφορίας, χωρίς να απαιτείται ντετερμινισμός στις υπογραφές ECDSA.
3. Κατάθεση ψήφων off-chain¶
Με έναν επαληθευμένο κατάλογο ψηφοφόρων και τη ρίζα Merkle του Παγκόσμιου Μητρώου στη θέση τους, η διαδικασία κατάθεσης ψηφοδελτίων μπορεί να ξεκινήσει.
Για να ψηφίσει, ο χρήστης πρέπει να αποδείξει δύο πράγματα:
- Συμμετοχή στον κατάλογο: Η διεύθυνση και το υπόλοιπο του χρήστη αποτελούν μέρος του καταλόγου ψηφοφόρων.
- Γνώση του μυστικού κλειδιού: Ο χρήστης γνωρίζει το μυστικό κλειδί της δέσμευσης που έχει αντιστοιχιστεί στη διεύθυνσή του στο Παγκόσμιο Μητρώο.
Στη συνέχεια ο χρήστης κατασκευάζει αποδείξεις zkSnark, ανωνυμοποιώντας ουσιαστικά την ταυτότητά του και παράγοντας έναν nullifier. Ο nullifier αυτός υπολογίζεται ντετερμινιστικά με hashing του μυστικού κλειδιού μαζί με ένα μοναδικό αναγνωριστικό της πρότασης.
Σημειώστε ότι με αυτόν τον μηχανισμό, εφόσον το παγκόσμιο μητρώο είναι ένα φιλικό προς zkSnark δέντρο Merkle, δεν χρειάζεται να χρησιμοποιήσουμε την κρυπτογραφία του Ethereum (secp256k1) μέσα στο κύκλωμα, με αποτέλεσμα μια πιο αποδοτική και φιλική προς το πρόγραμμα περιήγησης παραγωγή ψηφοδελτίων.
Το ψηφοδέλτιο και η απόδειξη ενσωματώνονται σε ένα πακέτο και διανέμονται σε ένα δίκτυο ομοτίμων (peer-to-peer, p2p) συναθροιστών. Ένα αποκεντρωμένο δίκτυο p2p είναι θεμελιώδες για την επίτευξη αντοχής στη λογοκρισία, διασφαλίζοντας ότι καμία μεμονωμένη οντότητα δεν μπορεί να ελέγξει ή να χειραγωγήσει τη διαδικασία ψηφοφορίας.
4. Η διαδικασία συνάθροισης των ψήφων¶
Μόλις κατατεθούν οι ψήφοι, πρέπει να συναθροιστούν σε μια συνολική απόδειξη zkSnark. Η συνάθροιση αυτή μπορεί να γίνει μονομιάς ή σε παρτίδες. Η απόδειξη που κατασκευάζεται κατά τη διαδικασία αυτή επαληθεύει τα ακόλουθα:
- Ένα συγκεκριμένο hash ρίζας του καταλόγου ψηφοφόρων
- Ένα μοναδικό hash ρίζας του παγκόσμιου μητρώου
- Μια λίστα έγκυρων nullifiers ψήφων
- Την ορθότητα των αποτελεσμάτων της ψηφοφορίας
Δεδομένου ότι οι αρχικές ψήφοι είναι οι ίδιες αποδείξεις zkSnark, η διαδικασία συνάθροισης απαιτεί ένα επίπεδο αναδρομής, δηλαδή ένα zkSnark που αποδεικνύει την ακρίβεια ενός άλλου zkSnark.
Ωστόσο, με τη σημερινή στάθμη της τεχνολογίας και την περιορισμένη συμβατότητα του Ethereum με τις ελλειπτικές καμπύλες, η εκτέλεση αυτής της αναδρομικής παραγωγής αποδείξεων αποτελεί σημαντική πρόκληση. Η πολυπλοκότητα που εμπεριέχεται σημαίνει ότι ίσως χρειαστεί να περιμένουμε την πρόοδο στα πλαίσια (frameworks) zkSnark και την καλύτερη υποστήριξη της κρυπτογραφίας zkSnark από το Ethereum.
5. Ανέβασμα των αποτελεσμάτων στο Ethereum¶
Μόλις ολοκληρωθεί η συνάθροιση των ψήφων, οποιοσδήποτε χρήστης μπορεί να υποβάλει την τελική απόδειξη σε ένα έξυπνο συμβόλαιο του Ethereum. Ευθύνη του έξυπνου συμβολαίου είναι να επαληθεύσει τα ακόλουθα:
- Απόδειξη αποτελεσμάτων: Η απόδειξη των αποτελεσμάτων είναι ορθή.
- Ρίζα καταλόγου ψηφοφόρων: Η ρίζα του καταλόγου ψηφοφόρων συμπίπτει με εκείνη που είχε επαληθευτεί προηγουμένως.
- Ρίζα παγκόσμιου μητρώου: Η ρίζα του παγκόσμιου μητρώου είναι ακριβής.
- Χρονικό πλαίσιο ψηφοφορίας: Η περίοδος ψηφοφορίας συμφωνεί με το προκαθορισμένο χρονικό πλαίσιο.
Με την επιτυχή επαλήθευση αυτών των στοιχείων, το έξυπνο συμβόλαιο μπορεί να εκτελέσει τις προκαθορισμένες ενέργειες που συνδέονται με τη διαδικασία ψηφοφορίας στο Ethereum. Η διαδικασία αυτή διασφαλίζει την εγκυρότητα και την ακεραιότητα των ψήφων και διευκολύνει την υλοποίησή τους