Under hætten
Ægte kode.
Rigtig sikkerhed.
Det er præcis, hvad der sker på din enhed, når du opretter en tegnebog, gendanner en og flytter penge - spores trin for trin gennem open source-koden, der kører på din iPhone.
1 / 5
128 bits ægte tilfældighed
Systemet CSPRNG producerer rå entropi på din enhed - den eneste kilde til hele din tegnebog.
// 128 bits entropi fra systemet CSPRNG
var entropy = Data(antal: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropy)
// kontrolsum = første bit af SHA-256(entropi)
lad checksum = SHA256.hash(data: entropy).prefix(1)
lad bits = entropi + kontrolsum
// map hver 11-bit gruppe til BIP-39 ordlisten
lad mnemonic = bits.chunks(af: 11)
.map { ordliste[$0] } // 12 ord
// stræk til et 512-bit frø (PBKDF2-HMAC-SHA512)
lad frø = PBKDF2.sha512(mnemonic.joined(" "),
salt: "mnemonic", runder: 2048)
// segl iSecure Enclave — den går aldrig
prøv Keychain.store(seed, adgang:.thisDeviceOnly,
biometri:.faceID)
1 / 4
Du skriver din sætning
Den indtastes lokalt og sendes aldrig nogen steder.
// læs den sætning, du skriver — aldrig overført
lad words = phrase.lowercased().split(" ")
// hvert ord skal eksistere i BIP-39-listen
guard words.allSatisfy(wordlist.contains)
andet { throw WalletError.unknownWord }
// genberegne og kontrollere kontrolsummen
lad (entropi, sum) = words.toEntropy()
guard SHA256.hash(data: entropy).verifies(sum)
andet { throw WalletError.badChecksum }
// samme afledning som generation — helt offline
lad frø = PBKDF2.sha512(words.joined(" "),
salt: "mnemonic", runder: 2048)
prøv Keychain.store(seed, adgang:.thisDeviceOnly)
1 / 3
Dine egne mønter udvælges
Input kommer fra dine ubrugte output - ingen tredjepart er involveret.
// vælg mønter fra dine egne ubrugte output
lad input = wallet.selectUTXOs(beløb + gebyr)
// byg transaktionen helt på enheden
lad tx = TxBuilder(.bitcoin)
.add(input)
.send(beløb, til: modtager)
.change(to: wallet.changeAddress).build()
// du gennemgår alle detaljer, før noget bevæger sig
præsentere (bekræft: tx.summary)
// beløb · gebyr · modtager — intet sendt endnu
1 / 4
Signeringsnøglen er afledt
En underordnet nøgle pr. input udledes via BIP-32-stien.
// udled den underordnede nøgle for dette input (BIP-32)
lad nøgle = masterKey.derive("m/84'/0'/0'/0/\(i)")
// hash transaktionens præbillede (dobbelt SHA-256)
lad h = SHA256(SHA256(tx.preimage(i)))
// skilt inde iSecure Enclave (kræver Face ID)
lad sig = prøv SecureEnclave.sign(h, nøgle: nøgle,
kurve:.secp256k1)
// kun signerede bytes forlader enheden
tx.attach(sig, input: i)
network.broadcast(tx.serialized)
Forenklet fraAperture's open source Swift - de rigtige algoritmer på din enhed.
Læs hele kildenBemærk, hvad der mangler: ingen server, ingen konto, ingen nøgle nogensinde krydser netværket. Den private nøgle oprettes, gemmes og bruges udelukkende inde i din enhedsSecure Enclave.