Jinsi Inavyofanya KaziAperture

Chini ya kofia

Msimbo halisi.
Usalama wa kweli.

Hiki ndicho hasa kinachotokea kwenye kifaa chako unapounda pochi, kurejesha moja, na kuhamisha fedha - kufuatiliwa, hatua kwa hatua, kupitia msimbo wa chanzo huria unaotumika kwenye iPhone yako.

1 / 5

Biti 128 za bahati nasibu ya kweli

Mfumo wa CSPRNG hutoa entropy ghafi kwenye kifaa chako - chanzo kimoja cha pochi yako yote.

// Biti 128 za entropy kutoka kwa mfumo wa CSPRNG
var entropy = Data(hesabu: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropy)
// checksum = bits za kwanza za SHA-256 (entropy)
acha checksum = SHA256.hash(data: entropy).kiambishi awali(1)
let bits = entropy + checksum
// ramani kila kikundi cha 11-bit kwa orodha ya maneno ya BIP-39
acha mnemonic = bits.chunks(ya: 11)
.ramani { neno orodha[$0] } // maneno 12
// nyoosha hadi mbegu ya 512-bit (PBKDF2-HMAC-SHA512)
acha mbegu = PBKDF2.sha512(mnemonic.joined(" "),
chumvi: "mnemonic", raundi: 2048)
// muhuri katikaSecure Enclave - haitoki kamwe
jaribu Keychain.store(mbegu, fikia:.thisDeviceOnly,
biometri:.faceID)
1 / 4

Unaandika maneno yako

Inaingizwa ndani ya nchi na haisambazwi popote.

// soma kifungu unachoandika - hakijatumwa
acha maneno = phrase. lowercad(). mgawanyiko(" ")
// kila neno lazima liwepo kwenye orodha ya BIP-39
linda maneno.yoteRidhisha(orodha ya maneno.inayo)
kingine {rusha WalletError.unknownWord }
// rudisha na uhakikishe hundi
let (entropy, sum) = words.toEntropy()
walinzi SHA256.hash(data: entropy).inathibitisha(jumla)
vinginevyo { tupa WalletError.badChecksum }
// chimbuko sawa na kizazi - nje ya mtandao kikamilifu
let seed = PBKDF2.sha512(words.joined(" "),
chumvi: "mnemonic", raundi: 2048)
jaribu Keychain.store(mbegu, fikia:.thisDeviceOnly)
1 / 3

Sarafu zako mwenyewe zimechaguliwa

Ingizo hutoka kwa matokeo yako ambayo hayajatumika - hakuna mtu wa tatu anayehusika.

// chagua sarafu kutoka kwa matokeo yako mwenyewe ambayo hayajatumika
acha pembejeo = wallet.selectUTXOs(kiasi + ada)
// jenga muamala kabisa kwenye kifaa
let tx = TxBuilder(.bitcoin)
.ongeza(viingizo)
.tuma (kiasi, kwa: mpokeaji)
.badilisha(kwa: wallet.changeAddress).build()
// unakagua kila undani kabla ya kitu chochote kusonga
sasa (thibitisha: tx.summary)
// kiasi · ada · mpokeaji — hakuna kilichotumwa bado
1 / 4

Ufunguo wa kusaini umetolewa

Kitufe cha mtoto kwa kila ingizo hutolewa kupitia njia ya BIP-32.

// pata kitufe cha mtoto kwa ingizo hili (BIP-32)
let key = masterKey.derive("m/84'/0'/0'/0/\(i)")
// hashi taswira ya muamala (mara mbili SHA-256)
acha h = SHA256(SHA256(tx.preimage(i)))
// saini ndani yaSecure Enclave (inahitaji Kitambulisho cha Uso)
let sig = jaribu SecureEnclave.sign(h, ufunguo: ufunguo,
curve:.secp256k1)
// baiti zilizosainiwa pekee huondoka kwenye kifaa
tx.ambatisha(sig, ingizo: i)
network.broadcast(tx.serialized)

Imerahisishwa kutoka kwa chanzo huria chaAperture Swift - algoriti halisi, kwenye kifaa chako.

Soma chanzo kamili

Angalia kinachokosekana: hakuna seva, hakuna akaunti, hakuna ufunguo unaowahi kuvuka mtandao. Ufunguo wa faragha huundwa, kuhifadhiwa na kutumika ndani yaSecure Enclave ya kifaa chako.