Η προδιαγραφή BIP-39 περιγράφει κυρίως τον αλγόριθμο και τη διαδικασία για τη δημιουργία ντετερμινιστικών πορτοφολιών με βάση τη μνημονική (ένα σύνολο λέξεων που είναι εύκολο να θυμάστε).
Η προδιαγραφή αποτελείται από δύο κύρια μέρη:
Πώς να δημιουργήσετε το μνημονικό.
Πώς να μετατρέψετε το παραγόμενο μνημονικό σε δυαδικό σπόρο.
Ακολουθεί μια ματιά στον τρόπο δημιουργίας ντετερμινιστικών πορτοφολιών περιγράφοντας πρώτα καθένα από αυτά τα δύο μέρη.
Δημιουργία μνημονικού
Η αλγοριθμική διαδικασία για τη δημιουργία ενός μνημονικού είναι η εξής:
Η διαδικασία είναι η εξής:
Δημιουργήστε μια τυχαία ακολουθία (εντροπία) από 128 έως 256 bit (μέγεθος βήματος 32 bit)
Εκτελέστε SHA256 στην τυχαία ακολουθία που δημιουργήθηκε στο προηγούμενο βήμα για να δημιουργήσετε μια τιμή Hash και λάβετε τα πρώτα N bit της τιμής Hash (μήκος εντροπίας / 32, π.χ. 128 bit, μετά N = 4) ως άθροισμα ελέγχου της τυχαίας ακολουθίας.
Προσθέστε το Checksum στο τέλος της τυχαίας ακολουθίας που δημιουργήθηκε στο πρώτο βήμα, έτσι ώστε για το παράδειγμα στο σχήμα η τυχαία ακολουθία με το Checksum να είναι 128 + 4 = 132 bit.
Διαχωρίστε την τυχαία ακολουθία από το προηγούμενο βήμα με τμήματα 11 bit (διαχωρισμός), έτσι ώστε για μια ακολουθία μήκους εντροπίας 128 bit, να δημιουργηθούν 12 τμήματα (132 / 11 = 12).
Σε αυτό το σημείο αντιστοιχίστε κάθε τιμή που περιέχει ένα τμήμα 11 bit σε ένα προκαθορισμένο λεξικό 2048 λέξεων.
Η τελική ομάδα λέξεων που δημιουργείται με τη σειρά της αποκοπής είναι η μνημονική.
Γενιά σπόρων από μνημονικά
Μετά τη μνημονική δημιουργία, μπορούμε να δημιουργήσουμε τον σπόρο χρησιμοποιώντας τον αλγόριθμο της συνάρτησης παραγωγής κλειδιού PBKDF2.
Το PBKDF2 απαιτεί δύο παραμέτρους: ένα μνημονικό και ένα αλάτι. Ο σκοπός του αλατιού είναι να κάνει το ράγισμα πιο δύσκολο και στο BIP-39 μπορούμε να εισαγάγουμε τη φράση πρόσβασης ως πρόσθετο παράγοντα ασφαλείας για την προστασία των σπόρων.
«Το PBKDF2 είναι μέρος της σειράς Προτύπων Κρυπτογραφίας Δημόσιου Κλειδιού (PKCS) της RSA Laboratories, Συγκεκριμένα το PKCS #5 v2.0, που δημοσιεύτηκε επίσης ως RFC 2898 της Ομάδας Εργασίας Μηχανικών Διαδικτύου.
Ακολουθώντας την παραπάνω μνημονική δημιουργία, το παρακάτω διάγραμμα δείχνει τον αλγόριθμο για τη δημιουργία σπόρων.
Η πρώτη παράμετρος του PBKDF2 είναι η μνημονική που δημιουργήθηκε παραπάνω.
Η δεύτερη παράμετρος του PBKDF2 είναι το salt, το οποίο γενικά αποτελείται από μια συμβολοσειρά και μια προαιρετική συνένωση συμβολοσειρών κρυπτογράφησης που παρέχονται από τον χρήστη.
Το PBKDF2 χρησιμοποιεί τον αλγόριθμο HMAC-SHA512, ο οποίος χρησιμοποιεί 2048 κατακερματισμούς για να παράγει μια τιμή 512 bit ως αρχή.
Δημιουργία πορτοφολιού HD από seed
Το seed που δημιουργήθηκε παραπάνω θα χρησιμοποιηθεί ως το Root Seed του πορτοφολιού HD και το Root Seed οποιουδήποτε πορτοφολιού HD μπορεί να αναδημιουργήσει ολόκληρο το πορτοφόλι HD.
Η εισαγωγή του Root Seed στον αλγόριθμο HMAC-SHA512 δίδει έναν κατακερματισμό 512 bit, τα αριστερά 256 bit του οποίου χρησιμοποιούνται ως το κύριο ιδιωτικό κλειδί και τα δεξιά 256 bit ως ο κύριος κώδικας αλυσίδας. Μετά από αυτό, το κύριο δημόσιο κλειδί (264 bit) μπορεί να δημιουργηθεί από το κύριο ιδιωτικό κλειδί m.
Όπως μπορείτε να δείτε από το παραπάνω σχήμα, το κλειδί HD δημιουργείται με τις ακόλουθες παραμέτρους.
Ιδιωτικό κλειδί γονέα ή γονικό δημόσιο κλειδί. (και τα δύο είναι ασυμπίεστα κλειδιά ECDSA 256 bit).
Κωδικός γονικής αλυσίδας 256 bit.
Ένας ακέραιος αριθμός ευρετηρίου 32 bit.
Επιπλέον, η παραπάνω διαδικασία είναι αναδρομική και το Παιδικό Ιδιωτικό Κλειδί στο διάγραμμα μπορεί να χρησιμοποιηθεί ως Γονικό Ιδιωτικό Κλειδί στο επόμενο επίπεδο.
Εισάγοντας (Parent Publick Key, Parent Chain Code, Index Number) στον αλγόριθμο HMAC-SHA512, μπορούμε να δημιουργήσουμε τα δευτερεύοντα κλειδιά του και μπορούμε να προσαρμόσουμε τον αριθμό ευρετηρίου για να δημιουργήσουμε πολλά δευτερεύοντα κλειδιά στο ίδιο επίπεδο.
Σχετικά με το εκτεταμένο κλειδί
Επειδή αυτή η συνάρτηση παραγωγής κλειδιού είναι μονής κατεύθυνσης, όλα τα δευτερεύοντα κλειδιά δεν μπορούν να χρησιμοποιηθούν για την εξαγωγή των γονικών κλειδιών ή των αδελφών κλειδιών τους στο ίδιο επίπεδο, μόνο το γονικό κλειδί και ο κωδικός γονικής αλυσίδας (που δημιουργούνται από το γονικό κλειδί επιπέδου και τον κωδικό αλυσίδας του γονέα) μπορούν να χρησιμοποιηθούν για την παραγωγή όλων των δευτερευόντων κλειδιών και των κωδικών υποαλυσίδας και οι αντίστοιχες διευθύνσεις και οι αντίστοιχες διευθύνσεις για το υπογράψιμο του κλειδιού.
Ο συνδυασμός Κλειδιού και Κωδικού Αλυσίδας ονομάζεται εκτεταμένο κλειδί και το εκτεταμένο κλειδί μπορεί να χρησιμοποιηθεί για τη δημιουργία όλων των διακλαδώσεων από εκεί και κάτω.
Το κλειδί που παρέχεται στο εκτεταμένο κλειδί μπορεί να είναι είτε ιδιωτικό είτε δημόσιο κλειδί, σε συνδυασμό με τον κωδικό αλυσίδας που ονομάζεται Εκτεταμένο ιδιωτικό κλειδί και Εκτεταμένο δημόσιο κλειδί, αντίστοιχα, και σημειώνεται ως (k, c) και (K, c), αντίστοιχα, όπου το δημόσιο κλειδί K = σημείο(k).
Μπορούμε να αντλήσουμε το εκτεταμένο δημόσιο κλειδί από το εκτεταμένο ιδιωτικό κλειδί και όχι το αντίστροφο, επομένως για ορισμένα σενάρια συναλλαγών (π.χ. ηλεκτρονικό εμπόριο), ένα νέο δημόσιο κλειδί και διεύθυνση μπορεί να δημιουργηθεί για κάθε συναλλαγή για λήψη πληρωμής, ενώ το εκτεταμένο ιδιωτικό κλειδί μπορεί να αποθηκευτεί σε ένα χάρτινο πορτοφόλι ή σε ένα πορτοφόλι υλικού για ασφαλή υπογραφή συναλλαγών εκτός σύνδεσης. Όπως μπορούμε να δούμε, η ασφάλεια του εκτεταμένου δημόσιου κλειδιού είναι σχετικά υψηλή και το ακόλουθο διάγραμμα δείχνει τον μηχανισμό μετάδοσης του εκτεταμένου γονικού δημόσιου κλειδιού για την παραγωγή του θυγατρικού ιδιωτικού κλειδιού και τη δημιουργία του θυγατρικού δημόσιου κλειδιού:




