Kā tas darbojas —Aperture

Zem pārsega

Reāls kods.
Īsta drošība.

Tieši tā notiek jūsu ierīcē, kad izveidojat maku, atjaunojat to un pārvietojat līdzekļus — soli pa solim tiek izsekots, izmantojot atvērtā pirmkoda kodu, kas darbojas jūsu iPhone tālrunī.

1 / 5

128 biti patiesas nejaušības

Sistēma CSPRNG rada neapstrādātu entropiju jūsu ierīcē — tas ir vienīgais visa jūsu maka avots.

// 128 biti entropijas no sistēmas CSPRNG
var entropija = dati (skaits: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropy)
// kontrolsumma = pirmie SHA-256 biti (entropija)
let checksum = SHA256.hash(dati: entropy).prefix(1)
let bits = entropija + kontrolsumma
// kartē katru 11 bitu grupu uz BIP-39 vārdu sarakstu
lai mnemonika = biti.gabali (no: 11)
.map { vārdu saraksts[$0] } // 12 vārdi
// izstiept līdz 512 bitu sēklai (PBKDF2-HMAC-SHA512)
let seed = PBKDF2.sha512(mnemonic.joined(" "),
sāls: "mnemoniska", kārtas: 2048)
// zīmogsSecure Enclave — tas nekad nepamet
izmēģiniet Keychain.store(seed, access:.thisDeviceOnly,
biometrija:.faceID)
1 / 4

Jūs ierakstāt savu frāzi

Tas tiek ievadīts lokāli un nekad nekur netiek pārraidīts.

// izlasiet frāzi, ko ierakstāt — nekad nav pārsūtīta
ļaujiet vārdiem = frāze.lowercased().split(" ")
// katram vārdam ir jābūt BIP-39 sarakstā
aizsargvārdi.vissSatisfy(wordlist.contains)
else { mest WalletError.unknownWord }
// pārrēķiniet un pārbaudiet kontrolsummu
let (entropija, summa) = vārdi.entropija()
aizsargs SHA256.hash(dati: entropija).verifices(sum)
else { mest WalletError.badChecksum }
// tāds pats atvasinājums kā ģenerēšanai — pilnībā bezsaistē
let seed = PBKDF2.sha512(words.joined(" "),
sāls: "mnemoniska", kārtas: 2048)
izmēģiniet Keychain.store(sēkla, piekļuve:.thisDeviceOnly)
1 / 3

Jūsu monētas ir atlasītas

Ievade tiek iegūta no jūsu neizlietotajiem rezultātiem — nav iesaistīta trešā puse.

// izvēlieties monētas no saviem neiztērētajiem rezultātiem
let inputs = wallet.selectUTXOs(summa + maksa)
// pilnībā izveidojiet darījumu ierīcē
let tx = TxBuilder(.bitcoin)
.add(ievades)
.send(summa, to: recipient)
.change(to: wallet.changeAddress).build()
// tu pārskati katru detaļu, pirms kaut kas kustas
klāt (apstiprināt: tx.summary)
// summa · maksa · saņēmējs — vēl nekas nav nosūtīts
1 / 4

Paraksta atslēga ir atvasināta

Katrai ievadei paredzētā bērna atslēga tiek iegūta, izmantojot BIP-32 ceļu.

// atvasina šīs ievades atslēgu (BIP-32)
let key = masterKey.derive("m/84'/0'/0'/0/\(i)")
// jaukt darījuma priekšattēlu (dubultā SHA-256)
lai h = SHA256(SHA256(tx.preimage(i)))
// pierakstietiesSecure Enclave (nepieciešams sejas ID)
let sig = mēģiniet SecureEnclave.sign(h, atslēga: atslēga,
līkne:.secp256k1)
// tikai parakstītie baiti atstāj ierīci
tx.attach(sig, ievade: i)
network.broadcast(tx.serialized)

Vienkāršots noAperture atvērtā koda Swift — reāliem algoritmiem jūsu ierīcē.

Izlasiet pilnu avotu

Ievērojiet, kā trūkst: nav servera, nav konta, neviena atslēga nekad nešķērso tīklu. Privātā atslēga tiek izveidota, saglabāta un pilnībā izmantota jūsu ierīcesSecure Enclave.