Kako to radi —Aperture

Ispod haube

Pravi kod.
Prava sigurnost.

To je upravo ono što se događa na vašem uređaju kada stvorite novčanik, vratite ga u prvobitno stanje i premjestite sredstva — praćena, korak po korak, kroz kod otvorenog koda koji se izvodi na vašem iPhoneu.

1 / 5

128 bita istinske slučajnosti

Sustav CSPRNG proizvodi sirovu entropiju na vašem uređaju — jedini izvor vašeg cijelog novčanika.

// 128 bita entropije iz sustava CSPRNG
promjenljiva entropija = Podaci (broj: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropija)
// kontrolni zbroj = prvi bitovi SHA-256 (entropija)
neka kontrolni zbroj = SHA256.hash(podaci: entropija).prefiks(1)
neka bitovi = entropija + kontrolni zbroj
// mapira svaku 11-bitnu grupu u BIP-39 popis riječi
let mnemonic = bits.chunks(of: 11)
.map { popis riječi[$0] } // 12 riječi
// rastezanje do 512-bitnog početnog (PBKDF2-HMAC-SHA512)
pusti sjeme = PBKDF2.sha512(mnemonic.joined(" "),
sol: "mnemonika", krugovi: 2048)
// pečat uSecure Enclave — nikada ne odlazi
pokušajte Keychain.store(seed, pristup:.thisDeviceOnly,
biometrija:.faceID)
1 / 4

Vi upisujete svoju frazu

Unosi se lokalno i nikada se nigdje ne prenosi.

// pročitajte frazu koju upisujete — nikada se ne prenosi
pusti riječi = izraz.mala slova().split(" ")
// svaka riječ mora postojati na popisu BIP-39
čuvarske riječi.allSatisfy(wordlist.contains)
else { throw WalletError.unknownWord }
// ponovno izračunati i provjeriti kontrolni zbroj
neka (entropija, zbroj) = words.toEntropy()
guard SHA256.hash(podaci: entropija).verifies(sum)
else { throw WalletError.badChecksum }
// ista derivacija kao i generacija — potpuno izvan mreže
neka sjeme = PBKDF2.sha512(words.joined(" "),
sol: "mnemonika", krugovi: 2048)
pokušajte Keychain.store(seed, pristup:.thisDeviceOnly)
1 / 3

Odabiru se vaši vlastiti novčići

Unosi dolaze iz vaših nepotrošenih izlaza — nije uključena treća strana.

// birajte novčiće iz vlastitih nepotrošenih izlaza
neka inputs = wallet.selectUTXOs(iznos + naknada)
// izgraditi transakciju u potpunosti na uređaju
neka tx = TxBuilder(.bitcoin)
.add(unosi)
.send(iznos, to: primatelj)
.change(to: wallet.changeAddress).build()
// pregledavate svaki detalj prije nego što se bilo što pomakne
prisutan (potvrdi: tx.summary)
// iznos · naknada · primatelj — još ništa nije poslano
1 / 4

Ključ za potpisivanje je izveden

Podređeni ključ po ulazu izvodi se putem BIP-32 puta.

// izvođenje ključa djeteta za ovaj unos (BIP-32)
pusti ključ = masterKey.derive("m/84'/0'/0'/0/\(i)")
// raspršiti predsliku transakcije (dvostruki SHA-256)
neka je h = SHA256(SHA256(tx.preimage(i)))
// prijavite se unutarSecure Enclave (potreban je Face ID)
let sig = try SecureEnclave.sign(h, tipka: tipka,
krivulja:.secp256k1)
// samo potpisani bajtovi napuštaju uređaj
tx.attach(sig, unos: i)
network.broadcast(tx.serialized)

Pojednostavljeno iAperture-ovog open-source Swifta — pravi algoritmi, na vašem uređaju.

Pročitajte cijeli izvor

Obratite pažnju na ono što nedostaje: nijedan poslužitelj, nijedan račun, niti jedan ključ nikada ne prelazi mrežu. Privatni ključ se stvara, pohranjuje i koristi u potpunosti unutarSecure Enclave vašeg uređaja.