Πώς λειτουργεί —Aperture

Κάτω από την κουκούλα

Πραγματικός κωδικός.
Πραγματική ασφάλεια.

Αυτό ακριβώς συμβαίνει στη συσκευή σας όταν δημιουργείτε ένα πορτοφόλι, το επαναφέρετε και μετακινείτε χρήματα — ανιχνεύεται, βήμα προς βήμα, μέσω του κώδικα ανοιχτού κώδικα που εκτελείται στο iPhone σας.

1 / 5

128 bit αληθινής τυχαίας

Το σύστημα CSPRNG παράγει ακατέργαστη εντροπία στη συσκευή σας — τη μοναδική πηγή ολόκληρου του πορτοφολιού σας.

// 128 bit εντροπίας από το σύστημα CSPRNG
var εντροπία = Δεδομένα (πλήθος: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &εντροπία)
// άθροισμα ελέγχου = πρώτα bit του SHA-256 (εντροπία)
έστω checksum = SHA256.hash(data: entropy).prefix(1)
έστω bits = εντροπία + άθροισμα ελέγχου
// αντιστοιχίστε κάθε ομάδα 11-bit στη λίστα λέξεων BIP-39
ας μνημονικό = bits.chunks(από: 11)
.map { wordlist[$0] } // 12 λέξεις
// επεκτείνεται σε έναν σπόρο 512 bit (PBKDF2-HMAC-SHA512)
let seed = PBKDF2.sha512(mnemonic.joined(" "),
αλάτι: "μνημονικό", γύροι: 2048)
// σφραγίδα στοSecure Enclave — δεν φεύγει ποτέ
δοκιμάστε το Keychain.store(seed, πρόσβαση:.thisDeviceOnly,
βιομετρία:.faceID)
1 / 4

Πληκτρολογείς τη φράση σου

Εισάγεται τοπικά και δεν μεταδίδεται ποτέ πουθενά.

// διαβάστε τη φράση που πληκτρολογείτε — δεν μεταδόθηκε ποτέ
ας λέξεις = φράση.πεζά().split(" ")
// Κάθε λέξη πρέπει να υπάρχει στη λίστα BIP-39
guard words.allSatisfy(wordlist.contains)
else { throw WalletError.unknownWord }
// υπολογίστε ξανά και επαληθεύστε το άθροισμα ελέγχου
έστω (εντροπία, άθροισμα) = λέξεις.toEntropy()
guard SHA256.hash(data: entropy).verifies(sum)
else { ρίχνω WalletError.badChecksum }
// ίδια παραγωγή με τη δημιουργία — πλήρως εκτός σύνδεσης
let seed = PBKDF2.sha512(words.joined(" "),
αλάτι: "μνημονικό", γύροι: 2048)
δοκιμάστε το Keychain.store(seed, πρόσβαση:.thisDeviceOnly)
1 / 3

Επιλέγονται τα δικά σας νομίσματα

Οι εισροές προέρχονται από τις μη δαπανηθείσες εκροές σας — δεν εμπλέκεται κανένα τρίτο μέρος.

// επιλέξτε νομίσματα από τα δικά σας αδιάθετα αποτελέσματα
let inputs = wallet.selectUTXOs(ποσό + χρέωση)
// δημιουργία της συναλλαγής εξ ολοκλήρου στη συσκευή
ας tx = TxBuilder (.bitcoin)
.add(εισόδους)
.send(ποσό, σε: παραλήπτη)
.change(to: wallet.changeAddress).build()
// εξετάζετε κάθε λεπτομέρεια πριν κινηθεί οτιδήποτε
παρόν (επιβεβαίωση: tx.summary)
// ποσό · χρέωση · παραλήπτης — τίποτα δεν έχει σταλεί ακόμα
1 / 4

Το κλειδί υπογραφής προέρχεται

Ένα θυγατρικό κλειδί ανά είσοδο προκύπτει μέσω της διαδρομής BIP-32.

// εξαγωγή του θυγατρικού κλειδιού για αυτήν την είσοδο (BIP-32)
let key = masterKey.derive("m/84'/0'/0'/0/\(i)")
// κατακερματίστε την προεικόνα συναλλαγής (διπλό SHA-256)
έστω h = SHA256(SHA256(tx.preimage(i)))
// σημάδι μέσα στοSecure Enclave (χρειάζεται αναγνωριστικό προσώπου)
ας sig = δοκιμάστε το SecureEnclave.sign(h, κλειδί: κλειδί,
καμπύλη:.secp256k1)
// Μόνο υπογεγραμμένα byte φεύγουν από τη συσκευή
tx.attach(sig, είσοδος: i)
network.broadcast(tx.serialized)

Απλοποιημένο από το Swift ανοιχτού κώδικα τηςAperture — οι πραγματικοί αλγόριθμοι, στη συσκευή σας.

Διαβάστε την πλήρη πηγή

Παρατηρήστε τι λείπει: κανένας διακομιστής, κανένας λογαριασμός, κανένα κλειδί δεν διασχίζει ποτέ το δίκτυο. Το ιδιωτικό κλειδί δημιουργείται, αποθηκεύεται και χρησιμοποιείται εξ ολοκλήρου μέσα στοSecure Enclave της συσκευής σας.