
Σειρά: Zcash από τις πρώτες αρχές . Άρθρο 6 . Το θωρακισμένο πρωτόκολλο (φινάλε) Κοινό: Νέοι χρήστες που έχουν διαβάσει τα άρθρα 0 έως 5. Εδώ συνδέονται όλα. Τι θα αποκομίσεις: Ένα πλήρες, σωστό νοητικό μοντέλο μιας θωρακισμένης συναλλαγής Zcash, με κάθε έννοια της σειράς στη σωστή της θέση και κάθε κύκλο από το Άρθρο 0 κλεισμένο.
Ξεκινήσαμε, στο Άρθρο 0, με ένα παράδοξο και μια ιστορία για σφραγισμένους φακέλους σε έναν δημόσιο πίνακα. Έπειτα περάσαμε πέντε άρθρα χτίζοντας τα μέρη: πεπερασμένα πεδία, ελλειπτικές καμπύλες, commitments, δέντρα Merkle και αποδείξεις μηδενικής γνώσης. Τώρα τα συνδυάζουμε και παρακολουθούμε μια πραγματική ιδιωτική πληρωμή να λειτουργεί, από την αρχή έως το τέλος.
Μεμονωμένα, κάθε κομμάτι που έμαθες είναι έξυπνο. Όμως η μαγεία του Zcash βρίσκεται στον τρόπο με τον οποίο αλληλοσυνδέονται. Ένα nullifier από μόνο του δεν προσφέρει ιδιωτικότητα. Ένα commitment από μόνο του δεν αποτρέπει την πλαστογράφηση. Μια απόδειξη από μόνη της δεν αποδεικνύει κάτι χρήσιμο. Είναι η συναρμολόγηση που μετατρέπει πέντε στοιχεία σε χρήματα ταυτόχρονα ιδιωτικά και αξιόπιστα.
Αυτό το άρθρο είναι η συναρμολόγηση. Στο τέλος, η πρόταση «το δίκτυο επαληθεύει μια συναλλαγή που δεν μπορεί να δει» θα μοιάζει όχι με παράδοξο αλλά με προφανή συνέπεια μερών που ήδη κατανοείς.
Εδώ είναι ολόκληρη η σειρά σε μία σελίδα, αντιστοιχισμένη από την ιστορία του Άρθρου 0 στον πραγματικό μηχανισμό.
| Στοιχείο της ιστορίας του Άρθρου 0 | Πραγματικό στοιχείο | Χτισμένο από |
|---|---|---|
| Τα χρήματα μέσα σε έναν φάκελο | Note (αξία, παραλήπτης, τυχαιότητα) | κωδικοποιημένο ως στοιχεία πεδίου (Άρθρο 1) |
| Ο σφραγισμένος αδιαφανής φάκελος | Note commitment | Pedersen / Sinsemilla commitment (Άρθρο 2, 3) |
| Ο δημόσιος πίνακας | Δέντρο note commitments (anchor = η ρίζα του) | αυξανόμενο δέντρο Merkle (Άρθρο 4) |
| Το token του κενού | Nullifier | ένα hash φιλικό προς ZK του note + μυστικού κλειδιού (Άρθρο 2, 3) |
| «Τα χρήματα που εισέρχονται ισούνται με τα χρήματα που εξέρχονται» | Value commitments + έλεγχος ισοζυγίου | ομομορφικά Pedersen commitments (Άρθρο 2, 3) |
| Η μαγεία πίσω από την κουρτίνα | Απόδειξη μηδενικής γνώσης | zk-SNARK πάνω σε ένα αριθμητικό κύκλωμα (Άρθρο 5) |
| «Μόνο εσύ μπορείς να διαβάσεις τον φάκελό σου» | Κρυπτογραφημένο note + viewing keys | κρυπτογράφηση + ιεραρχία κλειδιών (αυτό το άρθρο) |
Όλα όσα μπορεί να κάνει ένας χρήστης προέρχονται από ένα μόνο μυστικό, το spending key, μέσω μιας μονόδρομης ιεραρχίας (κάθε βέλος είναι μια μη αναστρέψιμη παραγωγή, χάρη στις καταπακτές των Άρθρων 2 και 3):

Δύο πράγματα που αξίζει να παρατηρήσεις, και τα δύο συνέπειες προηγούμενων άρθρων:
Για να δαπανήσεις ένα note ιδιωτικά, πρέπει να πείσεις το δίκτυο για τέσσερα πράγματα ταυτόχρονα χωρίς να αποκαλύψεις το note, την αξία του, τη θέση του ή την ταυτότητά σου. Κάθε ισχυρισμός ικανοποιείται από ένα στοιχείο που ήδη γνωρίζεις.

Η απόδειξη αποκαλύπτει κανένα από τα υποκείμενα γεγονότα (ποιο note, τίνος κλειδί, ποια αξία). Αποκαλύπτει μόνο ότι ισχύουν και οι τέσσερις ισχυρισμοί. Αυτό είναι όλο το τέχνασμα των θωρακισμένων συναλλαγών Zcash, διατυπωμένο σε ένα διάγραμμα.
Στα Άρθρα 2 και 3 σημειώσαμε ότι τα Pedersen commitments προστίθενται: το commitment για το v_1 συν το commitment για το v_2 είναι ένα commitment για το v_1 + v_2. Εδώ αποδίδει αυτό.
Κάθε note εισόδου και εξόδου φέρει ένα value commitment: ένα Pedersen commitment v.G + r.H που αποκρύπτει το ποσό του v. Επειδή αυτά προστίθενται, το δίκτυο μπορεί να υπολογίσει:
(sum of input value commitments) − (sum of output value commitments)
Αν η συναλλαγή είναι ισοσκελισμένη (δεν δημιουργούνται ούτε καταστρέφονται χρήματα), τα μέρη v ακυρώνονται ακριβώς, αφήνοντας μόνο ένα commitment για μηδενική αξία, καλυμμένο από την εναπομένουσα τυχαιότητα. Ο αποστολέας αποδεικνύει ότι γνωρίζει αυτή την εναπομένουσα τυχαιότητα παράγοντας μια μικρή υπογραφή που ονομάζεται δεσμευτική υπογραφή. Μια έγκυρη δεσμευτική υπογραφή είναι δυνατή μόνο όταν οι αξίες πράγματι ισοσκελίζονται, κι όμως δεν αποκαλύπτεται ούτε ένα ποσό.
Αυτή είναι η καθαρότερη απεικόνιση σε ολόκληρη τη σειρά του γιατί χρειαζόμασταν ομομορφικά commitments βασισμένα σε καμπύλες. Ο κανόνας «τα χρήματα που εισέρχονται ισούνται με τα χρήματα που εξέρχονται» επιβάλλεται προσθέτοντας σφραγισμένους φακέλους μεταξύ τους και ελέγχοντας ότι το αποτέλεσμα σφραγίζεται στο μηδέν.
Ας συναρμολογήσουμε την πληρωμή της Alice προς τον Bob. Θα χρησιμοποιήσουμε τη σαφή δομή «πλευρά δαπάνης / πλευρά εξόδου» του Sapling ως μοντέλο διδασκαλίας.
Μια θωρακισμένη συναλλαγή περιλαμβάνει δύο είδη περιγραφών:
| Περιγραφή δαπάνης (καταναλώνει ένα note) | Περιγραφή εξόδου (δημιουργεί ένα note) |
|---|---|
| value commitment της εισόδου | value commitment της εξόδου |
| το anchor ως προς το οποίο αποδεικνύεται (μια ρίζα δέντρου) | το νέο note commitment (ένα νέο φύλλο) |
| το nullifier του δαπανημένου note | ένα ephemeral key για κρυπτογράφηση |
| ένα επανατυχαιοποιημένο δημόσιο κλειδί + υπογραφή εξουσιοδότησης δαπάνης | το κρυπτογραφημένο note (κρυπτογράφημα για τον παραλήπτη) |
| η zk-SNARK που αποδεικνύει τους τέσσερις ισχυρισμούς | μια zk-SNARK που αποδεικνύει ότι η έξοδος είναι σωστά διαμορφωμένη |
Συν μία δεσμευτική υπογραφή πάνω σε ολόκληρο το πακέτο, η οποία επιβάλλει το ισοζύγιο αξίας (Ενότητα 5).

Παρακολούθησε την ιδιωτικότητα: το δίκτυο έλεγξε το anchor, έλεγξε ότι το nullifier ήταν νέο, επαλήθευσε την απόδειξη και επαλήθευσε το ισοζύγιο. Αποδέχθηκε μια έγκυρη πληρωμή χωρίς να έχει μάθει κανένα ποσό, καμία διεύθυνση και ούτε ποιο note δαπανήθηκε. Εν τω μεταξύ, το nullifier του δαπανημένου note (ο θάνατός του) και το νέο commitment του Bob (η γέννηση του note του) βρίσκονται σε δύο διαφορετικές δημόσιες δομές χωρίς ορατή σύνδεση μεταξύ τους, ο αποκομμένος σύνδεσμος από το Άρθρο 0.
Το Άρθρο 0 άνοιξε σκόπιμα ερωτήματα. Εδώ είναι όλα, κλεισμένα.
| Κύκλος που άνοιξε στο Άρθρο 0 | Κλείνει από |
|---|---|
| Πώς είναι δυνατόν να υπάρχει ένας σφραγισμένος αλλά μη πλαστογραφήσιμος φάκελος; | Commitments: απόκρυψη από την τυχαιότητα, δέσμευση από την ανθεκτικότητα στις συγκρούσεις / την καταπακτή της καμπύλης (Άρθρο 3) |
| Από πού προέρχονται τα κλειδιά και οι μυστικές συνταγές; | Αριθμητική πεδίων και βαθμωτός πολλαπλασιασμός ελλειπτικής καμπύλης (Άρθρο 1, 2) |
| Τι ακριβώς είναι «ο πίνακας»; | Ένα αυξανόμενο δέντρο Merkle από note commitments· η ρίζα του είναι το anchor (Άρθρο 4) |
| Γιατί δεν μπορεί το token του κενού να συνδεθεί με τον φάκελό του; | Το nullifier είναι ένα keyed hash που διατηρείται σε ξεχωριστό σύνολο από τα commitments (Άρθρο 2, 3, 4) |
| Πώς αποδεικνύεις εγκυρότητα χωρίς να αποκαλύπτεις τίποτα; | Μια zk-SNARK πάνω σε ένα αριθμητικό κύκλωμα που κωδικοποιεί και τους τέσσερις ισχυρισμούς (Άρθρο 5) |
| Πώς μαθαίνει ο παραλήπτης ότι πληρώθηκε; | Το note κρυπτογραφείται στη διεύθυνσή του· επιχειρεί αποκρυπτογράφηση με ένα viewing key (αυτό το άρθρο) |
| Πώς επιβάλλεται ιδιωτικά το «χρήματα που εισέρχονται = χρήματα που εξέρχονται»; | Ομομορφικά value commitments + η δεσμευτική υπογραφή (Ενότητα 5) |
Το παράδοξο από την πρώτη σελίδα, επαλήθευσε αυτό που δεν μπορείς να δεις, έχει τώρα διαλυθεί πλήρως. Το δίκτυο επαληθεύει ισχυρισμούς για κρυμμένα δεδομένα, ποτέ τα ίδια τα δεδομένα.
Διδάξαμε με τη δομή του Sapling επειδή ο διαχωρισμός του είναι σαφέστερος. Η τρέχουσα σχεδίαση, Orchard, βελτιώνει αντί να αντικαθιστά αυτές τις ιδέες:
| Sapling | Orchard | |
|---|---|---|
| Μονάδα συναλλαγής | ξεχωριστές περιγραφές Spend και Output | ενοποιημένα Actions (το καθένα εκτελεί μία δαπάνη + μία έξοδο) |
| Σύστημα αποδείξεων | Groth16 (trusted setup) | Halo 2 (χωρίς trusted setup) |
| Καμπύλες | BLS12-381 + Jubjub | Pallas / Vesta (Pasta) |
| Hash commitment | Pedersen | Sinsemilla |
Κάθε έννοια σε αυτό το άρθρο μεταφέρεται απευθείας· το Orchard κυρίως συνδυάζει δαπάνη και έξοδο και αντικαθιστά το σύστημα αποδείξεων με ένα χωρίς τελετή. Οι πέντε πυλώνες παραμένουν αμετάβλητοι.
Αυτή είναι η πληρέστερη εικόνα της σειράς, αλλά εξακολουθεί να είναι ένα μοντέλο. Συμπυκνώσαμε τις ακριβείς κωδικοποιήσεις πεδίου ενός note, τους ακριβείς τύπους παραγωγής κλειδιών, την επανατυχαιοποίηση των spend keys, τις διαφοροποιημένες διευθύνσεις, τα πεδία σημειώματος, τη διαχείριση τελών, τη διαφορά μεταξύ value commitments και note commitments με πλήρη λεπτομέρεια, καθώς και τον ακριβή ρόλο κάθε υπογραφής. Παρουσιάσαμε επίσης μία κανονική ροή· οι πραγματικές συναλλαγές μπορούν να περιέχουν πολλές δαπάνες και εξόδους ταυτόχρονα και μπορεί να συνδυάζουν διαφανή και θωρακισμένα μέρη. Η έγκυρη πηγή είναι η Προδιαγραφή Πρωτοκόλλου Zcash. Αυτό που έχεις τώρα είναι το σωστό σχήμα· η προδιαγραφή συμπληρώνει κάθε μέτρηση.
| Όρος | Απλή σημασία |
|---|---|
| Spending key | Το μοναδικό ριζικό μυστικό από το οποίο παράγονται όλα τα κλειδιά ενός χρήστη |
| Viewing Key | Αποκαλύπτει τις συναλλαγές σου σε έναν κάτοχο χωρίς να του επιτρέπει να τις δαπανήσει |
| Spend description | Το μέρος μιας tx που καταναλώνει ένα note (nullifier, anchor, απόδειξη) |
| Output description | Το μέρος μιας tx που δημιουργεί ένα note (commitment, κρυπτογράφημα, απόδειξη) |
| Action (Orchard) | Μια ενοποιημένη μονάδα που εκτελεί μία δαπάνη και μία έξοδο μαζί |
| Value commitment | Ένα ομομορφικό Pedersen commitment για ένα ποσό |
| Binding signature | Η υπογραφή που αποδεικνύει ότι οι αξίες ισοσκελίζονται χωρίς να τις αποκαλύπτει |
| Anchor | Η ρίζα δέντρου ως προς την οποία μια δαπάνη αποδεικνύει συμμετοχή |
| Trial decryption | Ο έλεγχος νέων commitments από έναν παραλήπτη για να βρει notes που προορίζονται για αυτόν |
Βλέπει ποτέ το δίκτυο το ποσό ή ποιος πλήρωσε ποιον; Όχι. Επαληθεύει την απόδειξη, τη φρεσκάδα του nullifier, το anchor και τη δεσμευτική υπογραφή. Όλες οι ιδιωτικές αξίες παραμένουν κρυμμένες.
Τι με εμποδίζει να δαπανήσω ένα note δύο φορές; Το nullifier. Η δαπάνη το δημοσιεύει· το δίκτυο απορρίπτει κάθε nullifier που βρίσκεται ήδη στο σύνολο nullifiers. Το ίδιο note παράγει πάντα το ίδιο nullifier.
Πώς μπορεί να ελεγχθεί το ισοζύγιο αν τα ποσά είναι κρυμμένα; Τα value commitments προστίθενται ομομορφικά· τα commitments μιας ισοσκελισμένης συναλλαγής ακυρώνονται σε ένα commitment μηδενός, κάτι που αποδεικνύει η δεσμευτική υπογραφή.
Μπορώ να αποδείξω τις συναλλαγές μου σε έναν ελεγκτή χωρίς να παραδώσω τον έλεγχο; Ναι. Παράδωσε ένα viewing key. Αποκαλύπτει τη θωρακισμένη δραστηριότητά σου αλλά δεν μπορεί να εξουσιοδοτήσει δαπάνες, χάρη στη μονόδρομη ιεραρχία κλειδιών.
Είναι το Sapling παρωχημένο τώρα που υπάρχει το Orchard; Και τα δύο έχουν υπάρξει στο δίκτυο· το Orchard είναι η τρέχουσα σχεδίαση. Οι έννοιες είναι κοινές, επομένως κατανοώντας το ένα κατανοείς και το άλλο.
Ένας φίλος λέει: «Αφού η απόδειξη κρύβει το ποσό, ένας κλέφτης θα μπορούσε απλώς να ισχυριστεί ότι οι έξοδοί του αξίζουν περισσότερο από τις εισόδους του και να τυπώσει δωρεάν χρήμα». Χρησιμοποιώντας την Ενότητα 5, εξήγησε σε δύο προτάσεις γιατί αυτό αποτυγχάνει. (Η απάντηση βρίσκεται παρακάτω.)
Τα ποσά είναι κρυμμένα, αλλά το καθένα περιβάλλεται από ένα ομομορφικό value commitment και το δίκτυο προσθέτει όλα τα commitments εισόδου και αφαιρεί όλα τα commitments εξόδου· αν οι κρυμμένες αξίες δεν ισοσκελίζονταν, το αποτέλεσμα δεν θα σφραγιζόταν στο μηδέν και δεν θα μπορούσε να παραχθεί έγκυρη δεσμευτική υπογραφή. Ο κλέφτης μπορεί να κρύψει πόσο, αλλά δεν μπορεί να κάνει μη ισοσκελισμένες αξίες να περάσουν τον έλεγχο ισοζυγίου, επομένως η εκτύπωση δωρεάν χρήματος είναι αδύνατη χωρίς να αποκαλύπτεται τίποτα και παρ’ όλα αυτά να εντοπίζεται από την αριθμητική.
Τώρα έχεις ταξιδέψει από ένα μόνο παράδοξο σε μια πλήρη ιδιωτική πληρωμή:

Από εδώ, το φυσικό επόμενο τόξο εμβαθύνει: στην εσωτερική λειτουργία των Groth16 και Halo 2, στις τελετές trusted setup, στα κυκλώματα Sapling και Orchard αναλυτικά, στην παραγωγή κλειδιών και στις διαφοροποιημένες διευθύνσεις, καθώς και στην εξέλιξη του πρωτοκόλλου μέσα από αναβαθμίσεις δικτύου. Όμως το θεμέλιο είναι τώρα στη θέση του και κάθε ένα από αυτά τα θέματα έχει μια βάση στην οποία να συνδεθεί.
Μέρος της σειράς Zcash από τις πρώτες αρχές για ZecHub. Με άδεια CC BY-SA 4.0.