Kaip tai veikia –Aperture

Po gaubtu

Tikras kodas.
Tikras saugumas.

Būtent taip nutinka jūsų įrenginyje, kai sukuriate piniginę, ją atkuriate ir perkeliate lėšas – žingsnis po žingsnio atsekama naudojant atvirojo kodo kodą, kuris veikia jūsų iPhone.

1 / 5

128 bitai tikrojo atsitiktinumo

The system CSPRNG produces raw entropy on your device — the single source of your entire wallet.

// 128 bitai entropijos iš sistemos CSPRNG
var entropija = duomenys (skaičius: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropy)
// kontrolinė suma = pirmieji SHA-256 bitai (entropija)
tegul kontrolinė suma = SHA256.hash(duomenys: entropija).prefix(1)
tegul bitai = entropija + kontrolinė suma
// susieti kiekvieną 11 bitų grupę į BIP-39 žodžių sąrašą
tegul mnemonika = bitai.gabalai (iš: 11)
.map { žodžių sąrašas[$0] } // 12 žodžių
// išplėsti iki 512 bitų pradinės versijos (PBKDF2-HMAC-SHA512)
tegul sėkla = PBKDF2.sha512(mnemonic.joined(" "),
druska: "mnemoninis", raundų: 2048)
// antspaudasSecure Enclave — jis niekada nepalieka
pabandykite Keychain.store(seed, access:.thisDeviceOnly,
biometrija:.faceID)
1 / 4

Įvedate savo frazę

Jis įvedamas lokaliai ir niekada niekur neperduodamas.

// perskaitykite įvestą frazę – niekada neperduota
tegul žodžiai = frazė.mažosios raidės().split(" ")
// kiekvienas žodis turi būti BIP-39 sąraše
apsaugos žodžiai.visi patenkinti(žodžių sąrašas.yra)
else { mesti WalletError.unknownWord }
// perskaičiuokite ir patikrinkite kontrolinę sumą
tegul (entropija, suma) = žodžiai.entropija()
apsauga SHA256.hash(duomenys: entropija).patvirtina(suma)
else { mesti WalletError.badChecksum }
// toks pat išvedimas kaip generavimas – visiškai neprisijungus
tegul sėkla = PBKDF2.sha512(words.joined(" "),
druska: "mnemoninis", raundų: 2048)
pabandykite Keychain.store(seed, access:.thisDeviceOnly)
1 / 3

Atrenkamos jūsų pačių monetos

Įvesties duomenys gaunami iš jūsų nepanaudotų rezultatų – nedalyvauja jokia trečioji šalis.

// pasirinkite monetas iš savo nepanaudotų rezultatų
let inputs = piniginė.selectUTXOs(suma + mokestis)
// Sukurkite operaciją tik įrenginyje
tegul tx = TxBuilder(.bitcoin)
.add(įvestis)
.send(suma, to: gavėjas)
.change(to: wallet.changeAddress).build()
// peržiūrite kiekvieną detalę, kol kas nors nepajuda
pateikti (patvirtinti: tx.summary)
// suma · mokestis · gavėjas — dar nieko neišsiųsta
1 / 4

Išvestas pasirašymo raktas

Vienos įvesties antrinis raktas gaunamas per BIP-32 kelią.

// išveskite šios įvesties antrinį raktą (BIP-32)
let key = masterKey.derive("m/84'/0'/0'/0/\(i)")
// sumaišyti operacijos pradinį vaizdą (dvigubas SHA-256)
tegul h = SHA256(SHA256(tx.preimage(i)))
// pasirašytiSecure Enclave viduje (reikia veido ID)
tegul sig = pabandykite SecureEnclave.sign(h, raktas: raktas,
kreivė:.secp256k1)
// iš įrenginio išeina tik pasirašyti baitai
tx.attach(sig, įvestis: i)
network.broadcast(tx.serialized)

Supaprastinta išAperture atvirojo kodo Swift – tikrų algoritmų jūsų įrenginyje.

Skaitykite visą šaltinį

Atkreipkite dėmesį, ko trūksta: nei serverio, nei paskyros, nei rakto, kuris niekada nekerta tinklo. Privatus raktas sukuriamas, saugomas ir naudojamas tik jūsų įrenginioSecure Enclave.