Πώς να υπογράψετε μηνύματα χρησιμοποιώντας το Metamask

0
Πώς να υπογράψετε μηνύματα χρησιμοποιώντας το Metamask

Έλεγχος ταυτότητας για web3;

Εάν έχετε αλληλεπιδράσει ποτέ με ένα Ethereum Dapp, πιθανότατα σας έχει ζητηθεί να «υπογράψετε» ένα μήνυμα ή ένα κομμάτι δεδομένων για να επαληθεύσετε τον εαυτό σας (καλά η διεύθυνσή σου). Υποθέτω ότι όπως κι εγώ θέλετε να αναπτυχθείτε για το web3 και έτσι σε αυτήν την ανάρτηση θα εξετάσουμε τα βασικά δεδομένα υπογραφής, φροντίζετε να συμμετάσχετε ;

Πώς λειτουργεί (εννοιολογικά)

Στο υψηλότερο επίπεδο, η υπογραφή ενός μηνύματος είναι ένας τρόπος για να επαληθεύσετε ότι είστε κάτοχος συγκεκριμένης διεύθυνσης πορτοφολιού στο Ethereum Blockchain ή μάλλον ελέγχετε τα ιδιωτικά κλειδιά σας.

Υπάρχουν 5 βασικά στοιχεία για την υπογραφή ενός μηνύματος:

  • Διεύθυνση Πορτοφολιού Χρηστών ( επίσης γνωστή ως διεύθυνση λογαριασμού)
  • Ιδιωτικά κλειδιά (Αυτά είναι γνωστά μόνο ή μπορούν να δημιουργηθούν από τον κάτοχο του πορτοφολιού συνήθως πίσω από μια διεπαφή χρήστη και έναν κωδικό πρόσβασης όπως με το πορτοφόλι της MetaMask)
  • Δημόσια κλειδιά (Μπορούν να προέρχονται από τον λογαριασμό, αλλά μόνο κατά την υπογραφή ενός μηνύματος ή μιας συναλλαγής)
  • Ενα μήνυμα
  • Μαθηματικά

Ας δούμε λοιπόν πώς συνεργάζονται τα στοιχεία, ας υποθέσουμε ότι έχετε έναν ιστότοπο Dapp ή web3 και θέλετε να επαληθεύσετε ότι ο χρήστης κατέχει συγκεκριμένη διεύθυνση ( θήκες χρήσης σε ένα λεπτό ), σε αυτό το σημείο το μόνο που γνωρίζετε είναι ο λογαριασμός του χρήστη. Έτσι παρέχετε ένα μήνυμα και ο χρήστης „σημάδια“ αυτό (συνήθως κάνοντας κλικ σε ένα κουμπί από το πορτοφόλι τους), πίσω από τα παρασκήνια το „υπογραφή” χρησιμοποιεί το μήνυμα , το ιδιωτικό κλειδί και το δημόσιο κλειδί μαζί με μερικά μαθηματικά.

Για να επικυρώσετε την υπογραφή, χρησιμοποιείτε μερικά μαθηματικά μαζί με το μήνυμα και θα πρέπει να λάβετε το δημόσιο κλειδί που με τη σειρά του σας δίνει τη διεύθυνση ( φευ ! ), ίσως σκέφτεστε πώς στο καλό είναι τόσο ασφαλές και η απάντηση είναι ότι κρυπτογραφικά /μαθηματικά δεν μπορείτε να λάβετε την επικύρωση από το μήνυμα ότι είναι ίσο με το δημόσιο κλειδί χωρίς το ιδιωτικό κλειδί να αποδεικνύει την ιδιοκτησία.

⚠️ Για περαιτέρω επέκταση της σχέσης μεταξύ λογαριασμού, ιδιωτικού και δημόσιου κλειδιού: Το δημόσιο κλειδί δημιουργείται από το ιδιωτικό κλειδί χρησιμοποιώντας το Αλγόριθμος ψηφιακής υπογραφής ελλειπτικής καμπύληςμπορείτε στη συνέχεια να λάβετε μια δημόσια διεύθυνση για τον λογαριασμό σας παίρνοντας τα τελευταία 20 byte του κατακερματισμού Keccak-256 (έναν αλγόριθμο ) του δημόσιου κλειδιού και προσθέτοντας 0x στην αρχή, αλλά πιθανότατα όπως θα δούμε μπορείτε να χρησιμοποιήσετε ένα βοηθητικό πρόγραμμα βιβλιοθήκη ή λειτουργία που το κάνει αυτό στο πίσω μέρος.

Ας προχωρήσουμε λοιπόν άλλη μια φορά στη διαδικασία ( γραφικά ) πριν αναφερθείτε στις λεπτομέρειες του τρόπου εφαρμογής του.

Η άποψή μου για τα σεμινάρια κωδικοποίησης είναι όσο περισσότερο τόσο το καλύτερο γιατί μερικές φορές τα πράγματα δεν είναι „Κάντε κλικ” μέχρι να συνδέσετε έννοιες από διάφορες πηγές ή στυλ διδασκαλίας, οι υπογραφές και η κρυπτογραφία δημόσιου κλειδιού στο Ethereum είναι ένα περίπλοκο θέμα, επομένως εδώ είναι μερικά εναλλακτικά σεμινάρια και επεξηγήσεις:Υπογραφή και επικύρωση Ethereum
Η μαγεία των ψηφιακών υπογραφών στο ethereum

Ποια είναι η περίπτωση χρήσης για την υπογραφή δεδομένων;

Ενώ μπορείτε να συνδεθείτε σε ένα Dapp ξεκλειδώνοντας το πορτοφόλι σας, η υπογραφή ενός μηνύματος στο Ethereum είναι μια καταφατική συναινετική ενέργεια, σκεφτείτε οτιδήποτε χρειάζεται την άδεια των χρηστών σας αλλά δεν απαιτεί άμεση αλληλεπίδραση με το EVM του Ethereum ή συναλλαγές με ETH, επομένως δεν υπάρχει κόστος αερίου ( τουλάχιστον για απλά μηνύματα ) και φυσικά μπορεί να χρησιμεύσει ως αυστηρότερη επικύρωση ότι όποιος είναι συνδεδεμένος με πορτοφόλι έχει στην πραγματικότητα το πορτοφόλι/τη διεύθυνση.

Μερικές συγκεκριμένες περιπτώσεις ( σίγουρα θα προκύψουν περισσότερα με τον καιρό):

  • Συναλλαγές χωρίς φυσικό αέριο: Εάν θέλετε να ξεκινήσετε μια μεταφορά ή μια λειτουργία για λογαριασμό των χρηστών σας, (δεν μπορείτε να αγγίξετε τα κεφάλαια των χρηστών, για αυτό θα χρειαστείτε μια κανονική συναλλαγή, αλλά θα μπορούσατε να μεταφέρετε την ιδιοκτησία από έναν λογαριασμό που κατέχετε στους χρήστες ) .
  • Εκτός αλυσίδας ροή λογαριασμού: Εάν έχετε κάποια δεδομένα εκτός αλυσίδας ή ιστότοπου που πρέπει να εμφανίσετε μόνο για έναν συγκεκριμένο χρήστη, μπορείτε να προσδιορίσετε από το πορτοφόλι του, μπορείτε να χρησιμοποιήσετε ένα μήνυμα.
  • Έλεγχος ταυτότητας για DAO και άλλες ενέργειες : Μια παραλλαγή της πρώτης περίπτωσης χρήσης, θέλετε οι χρήστες σας να ψηφίζουν ή να συνεισφέρουν με κάποιο τρόπο στον ιστότοπο/Dapp/έργο σας.

Πώς να το εφαρμόσετε;

Υπάρχουν μερικοί τρόποι για να εφαρμόσετε υπογραφές μηνυμάτων στο Ethereum, θα χρησιμοποιήσω το Metamask καθώς είναι το de facto πορτοφόλι για χρήση αυτές τις μέρες και αν χρειάζεστε μια εισαγωγή, έγραψα ένα τις προάλλες:

Εισαγωγή στο Metamask για Dapps

Ξεκινήστε να αναπτύσσεστε για το κυρίαρχο πορτοφόλι web3.

μέσο.com

⚠️ Το Metamask παρέχει ένα πλήρες αποθετήριο Test Dapp για να παίξετε: https://github.com/MetaMask/test-dapp Αυτή η δοκιμή Dapp χρησιμοποιεί κόμβο και webpack και συνοδεύεται από πολλές κλήσεις, μου αρέσει τα παραδείγματά μου να είναι ελάχιστα, εστιασμένα και φορητά, γι‘ αυτό έπρεπε να αντικαταστήσω μονάδες κόμβων (bops για Buffer) και να προσθέσω μια βιβλιοθήκη βοηθητικών προγραμμάτων (web3) που περιλαμβάνονται μέσω CDN (δεν συνιστάται για παραγωγή). Η ιδέα είναι να μάθετε και να πειραματιστείτε smol εδώ πριν προχωρήσετε στα παραδείγματα και την κατασκευή τους.

Εδώ είναι ο κωδικός:

Αυτό το απόσπασμα θα πρέπει να δημιουργήσει μια μικρή διεπαφή χρήστη που χρησιμεύει ως οθόνη εντοπισμού σφαλμάτων και παρέχει έναν τρόπο υπογραφής ενός απλού μηνύματος εκτός αλυσίδας.

⚠️ Το Metamasks παρέχει 6 διαφορετικές μεθόδους υπογραφής, που χρησιμοποιώ personal_sign καθώς είναι κατά κάποιο τρόπο εύκολο στη χρήση και ασφαλές, αλλά αν κάνετε πιο περίπλοκα πράγματα μπορεί να χρειαστείτε signTypedData_v3 ή v4, ελέγξτε τα έγγραφα για περισσότερα:https://docs.metamask.io/guide/signing-data.html#a-brief-history

Schreibe einen Kommentar