Hvernig það virkarAperture

Undir húddinu

Raunverulegur kóða.
Raunverulegt öryggi.

Þetta er nákvæmlega það sem gerist í tækinu þínu þegar þú býrð til veski, endurheimtir það og færir fjármuni - rakið skref fyrir skref í gegnum opna kóðann sem keyrir á iPhone þínum.

1 / 5

128 bita af sönnu handahófi

Kerfið CSPRNG framleiðir hráa óreiðu í tækinu þínu - eina uppspretta alls vesksins þíns.

// 128 bita óreiðu úr kerfinu CSPRNG
var entropy = Gögn (tala: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropy)
// checksum = fyrstu bitar af SHA-256(entropy)
láta checksum = SHA256.hash(gögn: entropy).prefix(1)
láta bita = óreiðu + checksumma
// kortaðu hvern 11 bita hóp á BIP-39 orðalistann
láta mnemonic = bits.chunks(af: 11)
.kort { orðalisti[$0] } // 12 orð
// teygja í 512 bita fræ (PBKDF2-HMAC-SHA512)
láta fræ = PBKDF2.sha512(mnemonic.joined(" "),
salt: "mnemonic", umferðir: 2048)
// innsigli íSecure Enclave — það fer aldrei
prófaðu Keychain.store(fræ, aðgangur:.thisDeviceOnly,
líffræði:.faceID)
1 / 4

Þú skrifar setninguna þína

Það er slegið inn á staðnum og aldrei sent neitt.

// lestu setninguna sem þú skrifar — aldrei send
láta orð = phrase.lowercased().split(" ")
// hvert orð verður að vera til í BIP-39 listanum
vörðu orð.allSatisfy(orðalisti.inniheldur)
annað { throw WalletError.unknownWord }
// endurreiknaðu og staðfestu eftirlitssumman
láta (entropy, summa) = words.toEntropy()
vörður SHA256.hash(gögn: entropy).verifies(sum)
annað { throw WalletError.badChecksum }
// sama afleiðslu og kynslóð — algjörlega offline
láta fræ = PBKDF2.sha512(words.joined(" "),
salt: "mnemonic", umferðir: 2048)
prófaðu Keychain.store (fræ, aðgangur:.thisDeviceOnly)
1 / 3

Þínir eigin myntir eru valdir

Inntak kemur frá ónýttu úttakinu þínu - enginn þriðji aðili kemur við sögu.

// veldu mynt úr eigin ónotuðu útlagi
láta inntak = wallet.selectUTXOs(upphæð + gjald)
// byggðu viðskiptin algjörlega á tækinu
láta tx = TxBuilder(.bitcoin)
.add(inntak)
.send(upphæð, til: viðtakanda)
.change(to: wallet.changeAddress).build()
// þú skoðar öll smáatriði áður en eitthvað hreyfist
kynna (staðfesta: tx.summary)
// upphæð · gjald · viðtakandi — ekkert sent enn
1 / 4

Undirritunarlykillinn er fenginn

Barnlykill fyrir hvert inntak er fenginn í gegnum BIP-32 slóðina.

// leiddu barnalykilinn fyrir þetta inntak (BIP-32)
let key = masterKey.derive("m/84'/0'/0'/0/\(i)")
// hash formynd viðskiptanna (tvöfalt SHA-256)
láttu h = SHA256(SHA256(tx.preimage(i)))
// skilti inni íSecure Enclave (þarf Face ID)
láta sig = reyndu SecureEnclave.sign(h, lykill: lykill,
ferill:.secp256k1)
// aðeins undirrituð bæti fara úr tækinu
tx.attach(sig, inntak: i)
network.broadcast(tx.serialized)

Einfaldað fráAperture Swift með opnum uppspretta - raunverulegu reikniritunum í tækinu þínu.

Lestu heimildina í heild sinni

Taktu eftir því sem vantar: enginn netþjónn, enginn reikningur, enginn lykill fer yfir netið. Einkalykillinn er búinn til, geymdur og notaður að öllu leyti inni íSecure Enclave tækisins þíns.