Jak to funguje —Aperture

Pod kapotou

Skutečný kód.
Skutečná bezpečnost.

To je přesně to, co se stane na vašem zařízení, když vytvoříte peněženku, obnovíte peněženku a přesunete finanční prostředky – vysledované, krok za krokem, prostřednictvím open source kódu, který běží na vašem iPhone.

1 / 5

128 bitů skutečné náhodnosti

Systém CSPRNG vytváří surovou entropii na vašem zařízení – jediný zdroj celé vaší peněženky.

// 128 bitů entropie ze systému CSPRNG
var entropie = Data (počet: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropie)
// kontrolní součet = první bity SHA-256(entropie)
nech kontrolní součet = SHA256.hash(data: entropie).prefix(1)
nech bity = entropie + kontrolní součet
// mapuje každou 11bitovou skupinu na seznam slov BIP-39
nech mnemotechnická pomůcka = bits.chunks(of: 11)
.map { seznam slov[$0] } // 12 slov
// roztáhnout na 512bitový zdroj (PBKDF2-HMAC-SHA512)
let seed = PBKDF2.sha512(mnemonic.joined(" "),
sůl: "mnemotechnická pomůcka", kola: 2048)
// těsnění vSecure Enclave — nikdy neopustí
zkuste Keychain.store(seed, access:.thisDeviceOnly,
biometrie:.faceID)
1 / 4

Napište svou frázi

Zadává se lokálně a nikdy se nikam nepřenáší.

// přečtěte si frázi, kterou napíšete – nikdy se neodesílalo
nech slova = fráze.lowercased().split(" ")
// každé slovo musí existovat v seznamu BIP-39
ochranná slova.allSatisfy(seznam slov.obsahuje)
else { throw WalletError.unknownWord }
// přepočítat a ověřit kontrolní součet
let (entropie, součet) = words.toEntropy()
strážce SHA256.hash(data: entropie).ověřuje(součet)
else { throw WalletError.badChecksum }
// stejné odvození jako generování — plně offline
let seed = PBKDF2.sha512(words.joined(" "),
sůl: "mnemotechnická pomůcka", kola: 2048)
zkuste Keychain.store(seed, access:.thisDeviceOnly)
1 / 3

Vyberou se vaše vlastní mince

Vstupy pocházejí z vašich nevyčerpaných výstupů – není zapojena žádná třetí strana.

// vyberte si coiny z vlastních neutracených výstupů
nechat vstupy = wallet.select UTXOs(částka + poplatek)
// sestavení transakce zcela na zařízení
nechť tx = TxBuilder(.bitcoin)
.add(vstupy)
.poslat(částka, příjemci)
.change(to: wallet.changeAddress).build()
// kontrolujete každý detail, než se něco pohne
přítomen (potvrdit: tx.summary)
// částka · poplatek · příjemce — zatím nic odesláno
1 / 4

Podpisový klíč je odvozen

Podřízený klíč pro každý vstup je odvozen prostřednictvím cesty BIP-32.

// odvodí podřízený klíč pro tento vstup (BIP-32)
let klíč = masterKey.derive("m/84'/0'/0'/0/\(i)")
// hašujte předobraz transakce (dvojitý SHA-256)
nechť h = SHA256(SHA256(tx.preimage(i)))
// přihlášení uvnitřSecure Enclave (potřebuje Face ID)
let sig = zkuste SecureEnclave.sign(h, klíč: klíč,
křivka:.secp256k1)
// zařízení opouštějí pouze podepsané bajty
tx.attach(sig, vstup: i)
network.broadcast(tx.serialized)

Zjednodušeno pomocí open-source Swift odAperture – skutečných algoritmů na vašem zařízení.

Přečtěte si celý zdroj

Všimněte si, co chybí: žádný server, žádný účet, žádný klíč, který by nikdy neprošel sítí. Soukromý klíč je vytvořen, uložen a používán výhradně uvnitřSecure Enclave vašeho zařízení.