Μια stealth διεύθυνση σάς επιτρέπει να δημοσιεύετε μία διεύθυνση, ενώ κάθε πληρωμή προς εσάς φτάνει σε νέο σημείο στην αλυσίδα. Αυτός ο οδηγός εξηγεί πώς λειτουργεί, τι κάνει το κλειδί προβολής και τι το κλειδί δαπάνης και πώς ένα πορτοφόλι βρίσκει τις δικές του πληρωμές, με πρακτικό παράδειγμα το Blocknet.
Τι είναι μια stealth διεύθυνση;
Μια stealth διεύθυνση είναι δημόσια διεύθυνση που δεν εμφανίζεται ποτέ στην αλυσίδα. Περιέχει δύο δημόσια κλειδιά, ένα κλειδί δαπάνης και ένα κλειδί προβολής. Για κάθε πληρωμή, το πορτοφόλι του αποστολέα τα συνδυάζει με νέο τυχαίο αριθμό για να δημιουργήσει διεύθυνση μίας χρήσης που μόνο ο παραλήπτης μπορεί να αναγνωρίσει και από την οποία μόνο εκείνος μπορεί να δαπανήσει.
Σε δημόσιο καθολικό, μια συνηθισμένη διεύθυνση εμφανίζεται σε κάθε πληρωμή που δέχεται. Έτσι λειτουργεί μια τυπική διεύθυνση Bitcoin: όποιος τη γνωρίζει μπορεί να αναζητήσει κάθε πληρωμή και να αθροίσει το σύνολο. Γι’ αυτό πολλά πορτοφόλια Bitcoin δίνουν νέα διεύθυνση για κάθε πληρωμή.
Η stealth διεύθυνση το κάνει αυτό για εσάς. Μοιράζεστε μία διεύθυνση, σε ιστοσελίδα, προφίλ ή ως @name, και κάθε αποστολέας παράγει από αυτή διαφορετική διεύθυνση μίας χρήσης. Δέκα πληρωμές προς εσάς γίνονται δέκα έξοδοι χωρίς ορατό κοινό στοιχείο μεταξύ τους ή με τη διεύθυνση που μοιραστήκατε. Δεν χρειάζεται ανταλλαγή μηνυμάτων: ο αποστολέας υπολογίζει μόνος του τη διεύθυνση μίας χρήσης από τη δημόσια διεύθυνσή σας και έναν τυχαίο αριθμό.
Από πού προήλθαν οι stealth διευθύνσεις;
Ο σχεδιασμός διευθύνσεων μίας χρήσης που χρησιμοποιούν το Monero, το Blocknet και άλλα νομίσματα ανάγεται στη λευκή βίβλο CryptoNote v2.0 του Nicolas van Saberhagen, με ημερομηνία 17 Οκτωβρίου 2013. Ονομάζει την ιδέα «μη συνδέσιμες πληρωμές» και περιγράφει αποστολέα που δημιουργεί «δημόσιο κλειδί μίας χρήσης» από τη διεύθυνση του παραλήπτη. Η τεκμηρίωση του Monero περιγράφει τις stealth διευθύνσεις ως τρόπο με τον οποίο οι αποστολείς δημιουργούν «τυχαίες διευθύνσεις μίας χρήσης για κάθε συναλλαγή εκ μέρους του παραλήπτη».
Η ιδέα έχει εξαπλωθεί πέρα από τα νομίσματα απορρήτου. Το BIP 352 «Silent Payments» του Bitcoin επιτρέπει σε σταθερή διεύθυνση Bitcoin να δέχεται πληρωμές που δεν συνδέονται στην αλυσίδα, ενώ το ERC-5564 του Ethereum, που δημιουργήθηκε το 2022, τυποποιεί τις stealth διευθύνσεις για λογαριασμούς Ethereum. Και οι δύο είναι προαιρετικές λειτουργίες σε εκείνες τις αλυσίδες. Στο Blocknet κάθε πληρωμή χρησιμοποιεί διεύθυνση μίας χρήσης.
Πώς λειτουργούν οι stealth διευθύνσεις;
Ο αποστολέας επιλέγει τυχαίο αριθμό r, δημοσιεύει R = r·G στη συναλλαγή και συνδυάζει το r με το δημόσιο κλειδί προβολής του παραλήπτη σε κοινό μυστικό. Προσθέτοντας αυτό το μυστικό στο δημόσιο κλειδί δαπάνης προκύπτει το κλειδί μίας χρήσης. Ο παραλήπτης ανακατασκευάζει το ίδιο μυστικό από το R και το ιδιωτικό κλειδί προβολής του, οπότε μόνο εκείνος βρίσκει την πληρωμή.
Το πορτοφόλι σας περιέχει δύο ζεύγη κλειδιών. Κάθε ιδιωτικό κλειδί είναι μυστικός αριθμός (s για δαπάνη, v για προβολή) και κάθε δημόσιο κλειδί είναι αυτός ο αριθμός επί ένα σταθερό σημείο καμπύλης G. Η διεύθυνσή σας είναι απλώς τα δύο δημόσια κλειδιά, S και V. Ακολουθεί ολόκληρη η ανταλλαγή:
Receiver publishes: S = s·G and V = v·G
Sender picks r: R = r·G (stored in the transaction)
One-time key: P = H(r·V)·G + S
Receiver checks: H(v·R)·G + S == P (true because r·V = v·R)
Key to spend it: x = H(v·R) + s (so P = x·G)
Το τέχνασμα είναι μια ανταλλαγή Diffie-Hellman. Ο αποστολέας υπολογίζει r·V και ο παραλήπτης v·R και καταλήγουν στο ίδιο σημείο, αφού και τα δύο είναι r·v·G. Κανείς άλλος δεν γνωρίζει το r ή το v, οπότε κανείς άλλος δεν μπορεί να το υπολογίσει. Το hash αυτού του σημείου (H) δίνει κοινό μυστικό και το κλειδί μίας χρήσης P είναι αυτό το μυστικό, ως σημείο, συν το δημόσιο κλειδί δαπάνης σας.
Κατά τη σάρωση, επανυπολογίζετε το μυστικό από το R και το ιδιωτικό κλειδί προβολής σας και ελέγχετε αν παράγει το P. Αν ναι, η έξοδος είναι δική σας. Για να τη δαπανήσει, το πορτοφόλι προσθέτει το ίδιο μυστικό στο ιδιωτικό κλειδί δαπάνης, παράγοντας το ιδιωτικό κλειδί x για εκείνη τη συγκεκριμένη έξοδο.
Το Blocknet ακολουθεί αυτόν τον σχεδιασμό στην ομάδα Ristretto πάνω στην Curve25519, υπολογίζοντας hash με SHA-256 υπό ετικέτα τομέα ειδική για το Blocknet. Ενσωματώνει επίσης στο hash τη θέση κάθε εξόδου στη συναλλαγή, ώστε δύο έξοδοι προς το ίδιο άτομο στην ίδια συναλλαγή να έχουν και πάλι ασύνδετα κλειδιά. Το ίδιο κοινό μυστικό παράγει επίσης τον παράγοντα απόκρυψης του ποσού της εξόδου και το κλειδί κρυπτογράφησης του memo, με τα οποία ο παραλήπτης διαβάζει και τα δύο.
Τι κάνουν το κλειδί προβολής και το κλειδί δαπάνης;
Ο διαχωρισμός κλειδιών δίνει δύο επίπεδα πρόσβασης:
- Το ιδιωτικό κλειδί προβολής βρίσκει πληρωμές. Με το v και το δημόσιο κλειδί δαπάνης σας, ένα πορτοφόλι αναγνωρίζει κάθε έξοδο προς εσάς, αποκρυπτογραφεί το ποσό και διαβάζει το memo της.
- Το ιδιωτικό κλειδί δαπάνης τις δαπανά. Μόνο το s μετατρέπει μια εντοπισμένη έξοδο σε ιδιωτικό κλειδί x που υπογράφει δαπάνη.
Αυτός ο διαχωρισμός επιτρέπει πορτοφόλια μόνο προβολής. Στο πορτοφόλι γραμμής εντολών Blocknet, το viewkeys δημιουργεί ξεχωριστό αρχείο πορτοφολιού από τα κλειδιά προβολής σας. Η βοήθεια το περιγράφει ως αρχείο που «μπορεί να παρακολουθεί αλλά δεν μπορεί να δαπανήσει», χρήσιμο όταν «θέλετε πρόσβαση μόνο προβολής σε άλλο μηχάνημα». Όταν το εκτελείτε, το πορτοφόλι εξηγεί τι δημιουργεί:
# View Keys
This will create a view-only wallet that can monitor incoming
funds but CANNOT spend. Anyone with this file can see your
balance and transaction history.
Δώστε πορτοφόλι μόνο προβολής μόνο σε κάποιον στον οποίο θα δείχνατε το ιστορικό σας, όπως ο λογιστής σας, ή κρατήστε το σε δεύτερο δικό σας υπολογιστή. Και στις δύο περιπτώσεις, μπορεί να παρακολουθεί τα εισερχόμενα κεφάλαια ενώ το κλειδί δαπάνης μένει στο μηχάνημα που εμπιστεύεστε.
Πώς βρίσκει ένα πορτοφόλι τις πληρωμές του;
Επειδή τα κλειδιά μίας χρήσης φαίνονται ασύνδετα με τη διεύθυνσή σας, τίποτα στην αλυσίδα δεν επισημαίνει ποιες έξοδοι είναι δικές σας. Το πορτοφόλι ελέγχει μόνο του. Για κάθε συναλλαγή σε κάθε νέο μπλοκ, παίρνει το R, υπολογίζει το κοινό μυστικό με το ιδιωτικό κλειδί προβολής και δοκιμάζει κάθε έξοδο με τον παραπάνω τύπο. Αυτό κάνει ένα πορτοφόλι όταν συγχρονίζεται.
Ο σαρωτής του Blocknet διατηρεί τη διαδικασία γρήγορη. Το ακριβό βήμα, ο πολλαπλασιασμός του R με το κλειδί προβολής, εκτελείται μία φορά ανά συναλλαγή και στη συνέχεια κάθε έξοδος της συναλλαγής ελέγχεται με βάση το αποτέλεσμα. Όταν μια έξοδος ταιριάζει, το πορτοφόλι αποκρυπτογραφεί το ποσό και το επιβεβαιώνει σε σχέση με τη δέσμευση Pedersen της εξόδου πριν το προσθέσει στο υπόλοιπο.
Η σάρωση κάνει και την ανάκτηση απλή. Και τα δύο ζεύγη κλειδιών Blocknet προκύπτουν από το seed ανάκτησης των 12 λέξεων, οπότε η επαναφορά του seed σε νέο υπολογιστή επαναφέρει τα κλειδιά και το πορτοφόλι σαρώνει ξανά την αλυσίδα για κάθε έξοδο που σας ανήκει. Ο οδηγός πορτοφολιού Blocknet δείχνει πώς να κρατήσετε αντίγραφο του seed και να το επαναφέρετε.
Stealth διευθύνσεις στο Blocknet
Στο Blocknet, η stealth διεύθυνση είναι απλώς η διεύθυνσή σας. Είναι η κωδικοποίηση base58 του δημόσιου κλειδιού δαπάνης, του δημόσιου κλειδιού προβολής και ενός αθροίσματος ελέγχου 4 bytes, συνολικά 92 ή 93 χαρακτήρες. Κάθε πληρωμή προς εσάς τη χρησιμοποιεί, επειδή η μορφή συναλλαγής δεν έχει διαφανή λειτουργία. Οι ανταμοιβές μπλοκ πηγαίνουν επίσης σε κλειδιά μίας χρήσης, οπότε η έξοδος coinbase ενός solo miner εντοπίζεται με την ίδια σάρωση.
Οι stealth διευθύνσεις συνδυάζονται με τα υπόλοιπα επίπεδα απορρήτου του Blocknet: ένας δακτύλιος 16 κρύβει από ποια έξοδο προέρχεται μια δαπάνη, οι δεσμεύσεις κρύβουν ποσά και το Dandelion++ κρύβει από πού μπήκε μια συναλλαγή στο δίκτυο. Ο οδηγός απορρήτου Blocknet παρουσιάζει κάθε επίπεδο.
Λειτουργούν και με ονόματα. Ένα σύντομο όνομα Blocknet ID όπως το @yourname αντιστοιχεί δημόσια στη διεύθυνσή σας, ώστε οι αποστολείς να το αναζητούν στο blocknet.id. Οι ίδιες οι πληρωμές συνεχίζουν να πηγαίνουν σε νέα κλειδιά μίας χρήσης, οπότε το όνομά σας δεν δείχνει τίποτα για όσα λάβατε.
Έτσι ένα σύντομο όνομα γίνεται εύχρηστη διεύθυνση πληρωμής για εξόρυξη. Ξεκινήστε το seine, εισαγάγετε τη διεύθυνση ή το @yourname σας όταν ζητηθεί και αποδεχτείτε το προεπιλεγμένο pool, το bntpool.com. Ο οδηγός εξόρυξης καλύπτει τα υπόλοιπα και το πορτοφόλι σας βρίσκει τα BNT που κερδίζετε με την ίδια σάρωση κλειδιού προβολής που περιγράφηκε παραπάνω.
Συχνές ερωτήσεις
Είναι μια stealth διεύθυνση το ίδιο με μια διεύθυνση μίας χρήσης;
Είναι τα δύο μέρη ενός συστήματος. Η stealth διεύθυνση είναι αυτή που δημοσιεύετε και αποτελείται από δημόσιο κλειδί δαπάνης και δημόσιο κλειδί προβολής. Η διεύθυνση μίας χρήσης είναι το νέο κλειδί που παράγει ο αποστολέας από αυτή για μία πληρωμή. Μόνο οι διευθύνσεις μίας χρήσης εμφανίζονται στην αλυσίδα, ποτέ η δημοσιευμένη διεύθυνσή σας.
Μπορεί κάποιος να δει το υπόλοιπό μου αν γνωρίζει τη stealth διεύθυνσή μου;
Όχι. Η γνώση της δημοσιευμένης διεύθυνσης δεν επιτρέπει την εύρεση των πληρωμών σας, επειδή καθεμία φτάνει σε κλειδί μίας χρήσης που φαίνεται ασύνδετο με αυτή. Η εύρεσή τους απαιτεί το ιδιωτικό κλειδί προβολής σας, οπότε μόνο το πορτοφόλι σας μπορεί να απαριθμήσει όσα λάβατε. Στο Blocknet τα ποσά είναι επίσης κρυφά, οπότε ούτε οι ίδιες οι έξοδοι εμφανίζουν αξία.
Τι μπορεί να κάνει κάποιος με το ιδιωτικό κλειδί προβολής μου;
Το ιδιωτικό κλειδί προβολής επιτρέπει στον κάτοχό του να βρει πληρωμές προς εσάς και να διαβάσει ποσά και memos. Δεν μπορεί να δαπανήσει τίποτα, επειδή η δαπάνη απαιτεί το ιδιωτικό κλειδί δαπάνης. Στο Blocknet η εντολή viewkeys μετατρέπει το κλειδί προβολής σε πορτοφόλι μόνο προβολής, χρήσιμο για παρακολούθηση κεφαλαίων σε δεύτερο υπολογιστή. Μοιραστείτε το μόνο με ανθρώπους που εμπιστεύεστε.
Πρέπει να ενεργοποιήσω τις stealth διευθύνσεις στο Blocknet;
Όχι. Κάθε πληρωμή Blocknet πηγαίνει αυτόματα σε stealth διεύθυνση μίας χρήσης, επειδή η μορφή συναλλαγής δεν έχει διαφανή λειτουργία. Το πορτοφόλι δημιουργεί το κλειδί μίας χρήσης όταν στέλνετε και βρίσκει εισερχόμενες πληρωμές με το κλειδί προβολής κατά τον συγχρονισμό. Δεν χρειάζεται καμία ρύθμιση, είτε πληρώνετε διεύθυνση είτε @name.