Hoe dit werkAperture

Onder die enjinkap

Regte kode.
Werklike veiligheid.

Dit is presies wat op jou toestel gebeur wanneer jy 'n beursie skep, een herstel en fondse skuif – stap vir stap nagespoor deur die oopbronkode wat op jou iPhone loop.

1 / 5

128 stukkies ware ewekansigheid

Die stelsel CSPRNG produseer rou entropie op jou toestel - die enkele bron van jou hele beursie.

// 128 bisse entropie vanaf die stelsel CSPRNG
var entropie = Data(telling: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropy)
// kontrolesom = eerste stukkies van SHA-256 (entropie)
laat kontrolesom = SHA256.hash(data: entropy).prefix(1)
laat bisse = entropie + kontrolesom
// karteer elke 11-bis-groep na die BIP-39-woordlys
laat mnemonic = bits.chunks(van: 11)
.map { wordlist[$0] } // 12 woorde
// strek tot 'n 512-bis saad (PBKDF2-HMAC-SHA512)
laat saad = PBKDF2.sha512(mnemonic.joined(" "),
sout: "mnemonic", rondtes: 2048)
// seël in dieSecure Enclave — dit gaan nooit weg nie
probeer Keychain.store(seed, toegang:.thisDeviceOnly,
biometrie:.faceID)
1 / 4

Jy tik jou frase

Dit word plaaslik ingevoer en word nooit êrens heen versend nie.

// lees die frase wat jy tik — nooit oorgedra nie
laat woorde = frase.lowercased().split(" ")
// elke woord moet in die BIP-39 lys bestaan
wag words.allSatisfy(woordelys.bevat)
anders { gooi WalletError.unknownWord }
// herbereken en verifieer die kontrolesom
laat (entropie, som) = words.toEntropy()
wag SHA256.hash(data: entropy).verifies(som)
anders { throw WalletError.badChecksum }
// dieselfde afleiding as generasie — ten volle vanlyn
laat saad = PBKDF2.sha512(words.joined(" "),
sout: "mnemonic", rondtes: 2048)
probeer Keychain.store (saad, toegang:.thisDeviceOnly)
1 / 3

Jou eie munte word gekies

Insette kom van jou onbestede uitsette – geen derde party is betrokke nie.

// kies munte uit jou eie onbestede uitsette
laat insette = wallet.selectUTXOs(bedrag + fooi)
// bou die transaksie geheel en al op toestel
laat tx = TxBuilder(.bitcoin)
.add(insette)
.send(bedrag, aan: ontvanger)
.change(to: wallet.changeAddress).build()
// jy hersien elke detail voor enigiets beweeg
present (bevestig: tx.summary)
// bedrag · fooi · ontvanger — nog niks gestuur nie
1 / 4

Die ondertekeningsleutel is afgelei

'n Per-invoer-kindsleutel word via die BIP-32-pad afgelei.

// lei die kindsleutel af vir hierdie invoer (BIP-32)
laat sleutel = masterKey.derive("m/84'/0'/0'/0/\(i)")
// hash die transaksie-voorbeeld (dubbel SHA-256)
laat h = SHA256(SHA256(tx.preimage(i)))
// teken in dieSecure Enclave (benodig Face ID)
let sig = probeer SecureEnclave.sign(h, sleutel: sleutel,
kromme:.secp256k1)
// slegs getekende grepe verlaat die toestel
tx.attach(sig, invoer: i)
network.broadcast(tx.serialized)

Vereenvoudig vanafAperture se oopbron Swift - die regte algoritmes, op jou toestel.

Lees die volledige bron

Let op wat ontbreek: geen bediener, geen rekening, geen sleutel wat ooit die netwerk oorsteek nie. Die private sleutel word geskep, gestoor en heeltemal binne jou toestel seSecure Enclave gebruik.