Cum funcționează —Aperture

Sub capotă

Cod real.
Siguranță reală.

Este exact ceea ce se întâmplă pe dispozitivul dvs. când creați un portofel, restaurați unul și mutați fonduri - urmărit, pas cu pas, prin codul open-source care rulează pe iPhone.

1 / 5

128 de biți de aleatorie adevărată

Sistemul CSPRNG produce entropie brută pe dispozitivul dvs. - sursa unică a întregului dvs. portofel.

// 128 de biți de entropie din sistemul CSPRNG
var entropy = Date(număr: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropie)
// suma de control = primii biți ai SHA-256 (entropie)
lasă suma de control = SHA256.hash(date: entropy).prefix(1)
lasă biți = entropie + sumă de control
// mapează fiecare grup de 11 biți la lista de cuvinte BIP-39
let mnemonic = bits.chunks(of: 11)
.map { lista de cuvinte[$0] } // 12 cuvinte
// se întinde la o semințe de 512 biți (PBKDF2-HMAC-SHA512)
let seed = PBKDF2.sha512(mnemonic.joined(" "),
sare: "mnemonic", runde: 2048)
// pecetea înSecure Enclave — nu pleacă niciodată
încercați Keychain.store(seed, access:.thisDeviceOnly,
biometrie:.faceID)
1 / 4

Tastați fraza dvs

Este introdus local și nu este transmis niciodată nicăieri.

// citiți expresia pe care o introduceți — niciodată transmisă
let words = phrase.lowercase().split(" ")
// fiecare cuvânt trebuie să existe în lista BIP-39
cuvinte de gardă.allSatisfy(lista de cuvinte.conține)
else { aruncă WalletError.unknownWord }
// recalculează și verifică suma de control
lasă (entropie, sumă) = cuvinte.toEntropie()
gardă SHA256.hash(date: entropie).verifică(suma)
else { aruncă WalletError.badChecksum }
// aceeași derivație ca generația — complet offline
let seed = PBKDF2.sha512(words.joined(" "),
sare: "mnemonic", runde: 2048)
încercați Keychain.store (seed, access:.thisDeviceOnly)
1 / 3

Sunt selectate propriile monede

Intrările provin din rezultatele dvs. necheltuite - nu este implicată nicio terță parte.

// alege monede din propriile rezultate necheltuite
let inputs = wallet.selectUTXOs (sumă + taxă)
// construiți tranzacția în întregime pe dispozitiv
let tx = TxBuilder(.bitcoin)
.add(intrari)
.send(suma, către: destinatar)
.change(la: wallet.changeAddress).build()
// revizuiți fiecare detaliu înainte ca ceva să se miște
prezent(confirma: tx.summary)
// sumă · taxă · destinatar — nimic nu a fost încă trimis
1 / 4

Cheia de semnare este derivată

O cheie copil pentru fiecare intrare este derivată prin calea BIP-32.

// derivă cheia copil pentru această intrare (BIP-32)
let key = masterKey.derive("m/84'/0'/0'/0/\(i)")
// hash preimaginea tranzacției (dublu SHA-256)
fie h = SHA256(SHA256(tx.preimage(i)))
// semnează în interiorulSecure Enclave (necesită Face ID)
let sig = încercați SecureEnclave.sign(h, cheie: cheie,
curbă:.secp256k1)
// numai octeții semnati părăsesc dispozitivul
tx.attach(sig, input: i)
network.broadcast(tx.serialized)

Simplificat din programul open-source Swift de laAperture — algoritmii reali, pe dispozitivul dvs.

Citiți sursa completă

Observați ce lipsește: niciun server, niciun cont, nicio cheie care nu traversează vreodată rețeaua. Cheia privată este creată, stocată și utilizată în întregime în interiorulSecure Enclave al dispozitivului dvs.