Under huven
Riktig kod.
Verklig säkerhet.
Det här är exakt vad som händer på din enhet när du skapar en plånbok, återställer en och flyttar pengar – spåras, steg för steg, genom öppen källkod som körs på din iPhone.
1 / 5
128 bitar av sann slumpmässighet
Systemet CSPRNG producerar rå entropi på din enhet - den enda källan till hela din plånbok.
// 128 bitar av entropi från systemet CSPRNG
var entropy = Data(antal: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropy)
// kontrollsumma = första bitarna av SHA-256(entropi)
låt checksumma = SHA256.hash(data: entropy).prefix(1)
låt bitar = entropi + kontrollsumma
// mappa varje 11-bitars grupp till BIP-39 ordlistan
låt mnemonic = bits.chunks(av: 11)
.map { ordlista[$0] } // 12 ord
// sträck till ett 512-bitars frö (PBKDF2-HMAC-SHA512)
låt seed = PBKDF2.sha512(mnemonic.joined(" "),
salt: "mnemonic", omgångar: 2048)
// försegla iSecure Enclave — den lämnar aldrig
prova Keychain.store(seed, access:.thisDeviceOnly,
biometri:.faceID)
1 / 4
Du skriver din fras
Den läggs in lokalt och sänds aldrig någonstans.
// läs frasen du skriver — sänds aldrig
låt ord = phrase.lowercased().split(" ")
// varje ord måste finnas i BIP-39-listan
skydda words.allSatisfy(wordlist.contains)
annat { throw WalletError.unknownWord }
// beräkna och verifiera kontrollsumman
låt (entropi, summa) = words.toEntropy()
guard SHA256.hash(data: entropy).verifies(sum)
annat { throw WalletError.badChecksum }
// samma härledning som generation — helt offline
låt seed = PBKDF2.sha512(words.joined(" "),
salt: "mnemonic", omgångar: 2048)
prova Keychain.store(seed, access:.thisDeviceOnly)
1 / 3
Dina egna mynt väljs ut
Indata kommer från dina outnyttjade utdata – ingen tredje part är inblandad.
// välj mynt från dina egna outnyttjade utgångar
låt ingångar = wallet.selectUTXOs(belopp + avgift)
// bygg transaktionen helt på enheten
låt tx = TxBuilder(.bitcoin)
.add(ingångar)
.send(belopp, till: mottagare)
.change(to: wallet.changeAddress).build()
// du granskar varje detalj innan något rör sig
present(bekräfta: tx.summary)
// belopp · avgift · mottagare — inget skickat ännu
1 / 4
Signeringsnyckeln härleds
En underordnad nyckel per ingång härleds via BIP-32-vägen.
// härleda den underordnade nyckeln för denna ingång (BIP-32)
let key = masterKey.derive("m/84'/0'/0'/0/\(i)")
// hasha transaktionens förbild (dubbel SHA-256)
låt h = SHA256(SHA256(tx.preimage(i)))
// tecken inutiSecure Enclave (behöver Face ID)
let sig = prova SecureEnclave.sign(h, nyckel: nyckel,
kurva:.secp256k1)
// endast signerade byte lämnar enheten
tx.attach(sig, input: i)
network.broadcast(tx.serialized)
Förenklat frånAperture:s Swift med öppen källkod — de riktiga algoritmerna, på din enhet.
Läs hela källanLägg märke till vad som saknas: ingen server, inget konto, ingen nyckel som någonsin korsar nätverket. Den privata nyckeln skapas, lagras och används helt och hållet i din enhetsSecure Enclave.