Slik fungerer det —Aperture

Under panseret

Ekte kode.
Virkelig sikkerhet.

Dette er nøyaktig hva som skjer på enheten din når du oppretter en lommebok, gjenoppretter en og flytter midler – sporet, trinn for trinn, gjennom åpen kildekode som kjører på iPhone.

1 / 5

128 biter av ekte tilfeldighet

Systemet CSPRNG produserer rå entropi på enheten din – den eneste kilden til hele lommeboken din.

// 128 biter med entropi fra systemet CSPRNG
var entropy = Data(antall: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropy)
// kontrollsum = første biter av SHA-256(entropi)
la kontrollsum = SHA256.hash(data: entropi).prefiks(1)
la biter = entropi + kontrollsum
// tilordne hver 11-bits gruppe til BIP-39 ordlisten
la mnemonic = bits.chunks(av: 11)
.map { ordliste[$0] } // 12 ord
// strekk til et 512-bits frø (PBKDF2-HMAC-SHA512)
la frø = PBKDF2.sha512(mnemonic.joined(" "),
salt: "mnemonic", runder: 2048)
// forsegl iSecure Enclave — den går aldri
prøv Keychain.store(seed, access:.thisDeviceOnly,
biometri:.faceID)
1 / 4

Du skriver inn setningen din

Den legges inn lokalt og overføres aldri noe sted.

// les setningen du skriver - aldri overført
la ord = phrase.lowercased().split(" ")
// hvert ord må finnes i BIP-39-listen
guard words.allSatisfy(wordlist.contains)
annet { throw WalletError.unknownWord }
// beregne og verifisere kontrollsummen
la (entropi, sum) = words.toEntropy()
guard SHA256.hash(data: entropy).verifies(sum)
annet { throw WalletError.badChecksum }
// samme avledning som generasjon — helt offline
la frø = PBKDF2.sha512(words.joined(" "),
salt: "mnemonic", runder: 2048)
prøv Keychain.store(seed, access:.thisDeviceOnly)
1 / 3

Dine egne mynter velges

Inndata kommer fra dine ubrukte utdata – ingen tredjepart er involvert.

// velg mynter fra dine egne ubrukte utganger
la innganger = wallet.selectUTXOs(beløp + gebyr)
// bygg transaksjonen helt på enheten
la tx = TxBuilder(.bitcoin)
.add(inndata)
.send(beløp, til: mottaker)
.change(to: wallet.changeAddress).build()
// du gjennomgår hver detalj før noe beveger seg
present(bekreft: tx.summary)
// beløp · gebyr · mottaker — ingenting sendt ennå
1 / 4

Signeringsnøkkelen er utledet

En undernøkkel per inngang utledes via BIP-32-banen.

// utlede den underordnede nøkkelen for denne inngangen (BIP-32)
la nøkkel = masterKey.derive("m/84'/0'/0'/0/\(i)")
// hash transaksjonens forhåndsbilde (dobbel SHA-256)
la h = SHA256(SHA256(tx.preimage(i)))
// skilt inne iSecure Enclave (trenger Face ID)
la sig = prøv SecureEnclave.sign(h, nøkkel: nøkkel,
kurve:.secp256k1)
// bare signerte byte forlater enheten
tx.attach(sig, input: i)
network.broadcast(tx.serialized)

Forenklet fraAperture sin åpne kildekode Swift - de virkelige algoritmene på enheten din.

Les hele kilden

Legg merke til hva som mangler: ingen server, ingen konto, ingen nøkkel som noensinne har krysset nettverket. Den private nøkkelen opprettes, lagres og brukes i sin helhet inne i enhetensSecure Enclave.