Hogyan működikAperture

A motorháztető alatt

Valódi kód.
Valódi biztonság.

Pontosan ez történik az eszközén, amikor létrehoz egy pénztárcát, visszaállít egyet, és áthelyezi az összeget – lépésről lépésre követve az iPhone-ján futó nyílt forráskódon keresztül.

1 / 5

128 bit valódi véletlenszerűség

A CSPRNG rendszer nyers entrópiát állít elő az eszközön – ez a teljes pénztárca egyetlen forrása.

// 128 bit entrópia a CSPRNG rendszerből
var entrópia = adatok (szám: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entrópia)
// ellenőrző összeg = SHA-256 (entrópia) első bitjei
legyen ellenőrző összeg = SHA256.hash(adatok: entrópia).prefix(1)
legyen bitek = entrópia + ellenőrző összeg
// minden 11 bites csoportot leképez a BIP-39 szólistára
legyen mnemonikus = bits.chunks(of: 11)
.map { szólista[$0] } // 12 szó
// nyújtás 512 bites magra (PBKDF2-HMAC-SHA512)
let seed = PBKDF2.sha512(mnemonic.joined(" "),
só: "mnemonikus", körök: 2048)
// pecsét aSecure Enclave-ben – soha nem hagyja el
try Keychain.store(seed, access:.thisDeviceOnly,
biometria:.faceID)
1 / 4

Beírod a kifejezésedet

Helyben írják be, és soha nem továbbítják sehova.

// olvassa el a beírt kifejezést – soha nem továbbítva
legyen szavak = kifejezés.kisbetűs().split(" ")
// minden szónak szerepelnie kell a BIP-39 listában
őrszavak.allSatisfy(wordlist.contains)
else { dobja WalletError.unknownWord }
// újraszámolja és ellenőrizze az ellenőrző összeget
legyen (entrópia, összeg) = szavak.entrópia()
őr SHA256.hash(adatok: entrópia).verifies(sum)
else { dobja WalletError.badChecksum }
// ugyanaz a származtatás, mint a generálás – teljesen offline
let seed = PBKDF2.sha512(words.joined(" "),
só: "mnemonikus", körök: 2048)
próbáld ki a Keychain.store-t(mag, hozzáférés:.thisDeviceOnly)
1 / 3

Saját érméi vannak kiválasztva

A bemenetek a fel nem használt kimeneteiből származnak – harmadik fél nincs bevonva.

// válasszon érméket a saját el nem költött kimenetei közül
let inputs = wallet.selectUTXOs(összeg + díj)
// a tranzakció teljes egészében az eszközön épül fel
legyen tx = TxBuilder(.bitcoin)
.add(bemenetek)
.send(összeg, címzett: címzett)
.change(to: wallet.changeAddress).build()
// minden részletet átnézel, mielőtt bármi megmozdulna
jelen(megerősítés: tx.összegzés)
// összeg · díj · címzett — még nincs elküldve
1 / 4

Az aláíró kulcs származtatott

A per-input child key is derived via the BIP-32 path.

// a gyermekkulcs származtatása ehhez a bemenethez (BIP-32)
let key = masterKey.derive("m/84'/0'/0'/0/\(i)")
// kivonatolja a tranzakció előképét (dupla SHA-256)
legyen h = SHA256(SHA256(tx.preimage(i)))
// jelentkezzen be aSecure Enclave-en belül (arcazonosító szükséges)
let sig = try SecureEnclave.sign(h, kulcs: kulcs,
görbe:.secp256k1)
// csak aláírt bájtok hagyják el az eszközt
tx.attach(sig, bemenet: i)
network.broadcast(tx.serialized)

Leegyszerűsítve aAperture nyílt forráskódú Swift-jével – a valódi algoritmusokkal az eszközön.

Olvassa el a teljes forrást

Figyelje meg, mi hiányzik: nincs kiszolgáló, nincs fiók, nincs kulcs, amely soha nem keresztezi a hálózatot. A privát kulcs létrehozása, tárolása és felhasználása teljes egészében az eszköSecure Enclave-jében történik.