ఇది ఎలా పనిచేస్తుందిAperture

హుడ్ కింద

నిజమైన కోడ్.
నిజమైన భద్రత.

మీరు వాలెట్‌ని సృష్టించినప్పుడు, దాన్ని పునరుద్ధరించినప్పుడు మరియు నిధులను తరలించినప్పుడు మీ పరికరంలో సరిగ్గా ఇదే జరుగుతుంది — మీ iPhoneలో అమలు అయ్యే ఓపెన్ సోర్స్ కోడ్ ద్వారా దశలవారీగా గుర్తించబడుతుంది.

1 / 5

నిజమైన యాదృచ్ఛికత యొక్క 128 బిట్స్

సిస్టమ్ CSPRNG మీ పరికరంలో ముడి ఎంట్రోపీని ఉత్పత్తి చేస్తుంది - మీ మొత్తం వాలెట్‌కు ఒకే మూలం.

// సిస్టమ్ CSPRNG నుండి 128 బిట్స్ ఎంట్రోపీ
var ఎంట్రోపీ = డేటా(గణన: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &ఎంట్రోపీ)
// చెక్‌సమ్ = SHA-256 (ఎంట్రోపీ) యొక్క మొదటి బిట్‌లు
చెక్‌సమ్ = SHA256.hash(డేటా: ఎంట్రోపీ) ఉపసర్గ(1)
బిట్స్ = ఎంట్రోపీ + చెక్‌సమ్‌ని తెలియజేయండి
// ప్రతి 11-బిట్ సమూహాన్ని BIP-39 వర్డ్‌లిస్ట్‌కు మ్యాప్ చేయండి
జ్ఞాపిక = bits.chunks(లో: 11)
.మ్యాప్ {wordlist[$0]} // 12 పదాలు
// 512-బిట్ సీడ్ (PBKDF2-HMAC-SHA512) వరకు విస్తరించండి
లెట్ సీడ్ = PBKDF2.sha512(mnemonic.joined(" "),
ఉప్పు: "జ్ఞాపకశక్తి", రౌండ్లు: 2048)
//Secure Enclaveలో ముద్ర — ఇది ఎప్పటికీ వదిలివేయదు
Keychain.storeని ప్రయత్నించండి(విత్తనం, యాక్సెస్:.thisDeviceOnly,
బయోమెట్రీ:.faceID)
1 / 4

మీరు మీ పదబంధాన్ని టైప్ చేయండి

ఇది స్థానికంగా నమోదు చేయబడుతుంది మరియు ఎక్కడికీ ప్రసారం చేయబడదు.

// మీరు టైప్ చేసిన పదబంధాన్ని చదవండి — ఎప్పుడూ ప్రసారం చేయబడలేదు
పదాలు = పదబంధం.లోవర్కేస్డ్().స్ప్లిట్(" ")
// ప్రతి పదం తప్పనిసరిగా BIP-39 జాబితాలో ఉండాలి
గార్డ్ పదాలు.అన్ని సంతృప్తి (wordlist.contains)
లేదంటే {త్రో WalletError.unknownWord}
// చెక్‌సమ్‌ని రీకంప్యూట్ చేయండి మరియు ధృవీకరించండి
వీలు (ఎంట్రోపీ, సమ్) = words.toEntropy()
గార్డ్ SHA256.hash(డేటా: ఎంట్రోపీ) ధృవీకరిస్తుంది(మొత్తం)
లేకపోతే {WalletError.badChecksum }ని విసిరేయండి
// జనరేషన్ వలె అదే ఉత్పన్నం — పూర్తిగా ఆఫ్‌లైన్
లెట్ సీడ్ = PBKDF2.sha512(words.joined(" "),
ఉప్పు: "జ్ఞాపకశక్తి", రౌండ్లు: 2048)
Keychain.storeని ప్రయత్నించండి(విత్తనం, యాక్సెస్:.thisDeviceOnly)
1 / 3

మీ స్వంత నాణేలు ఎంపిక చేయబడ్డాయి

మీ ఖర్చు చేయని అవుట్‌పుట్‌ల నుండి ఇన్‌పుట్‌లు వస్తాయి - మూడవ పక్షం ప్రమేయం లేదు.

// మీ స్వంత ఖర్చు చేయని అవుట్‌పుట్‌ల నుండి నాణేలను ఎంచుకోండి
లెట్ ఇన్‌పుట్‌లు = wallet.selectUTXOs(మొత్తం + రుసుము)
// లావాదేవీని పూర్తిగా పరికరంలో నిర్మించండి
వీలు tx = TxBuilder(.bitcoin)
.జోడించు(ఇన్‌పుట్‌లు)
.పంపు (మొత్తం, వీరికి: గ్రహీత)
.change(to: wallet.changeAddress).build()
// ఏదైనా కదిలే ముందు మీరు ప్రతి వివరాలను సమీక్షించండి
ప్రస్తుతం (ధృవీకరించండి: tx.summary)
// మొత్తం · రుసుము · గ్రహీత — ఇంకా ఏమీ పంపబడలేదు
1 / 4

సంతకం కీ ఉద్భవించింది

ప్రతి ఇన్‌పుట్ చైల్డ్ కీ BIP-32 మార్గం ద్వారా తీసుకోబడింది.

// ఈ ఇన్‌పుట్ కోసం చైల్డ్ కీని పొందండి (BIP-32)
లెట్ కీ = masterKey.derive("m/84'/0'/0'/0/\(i)")
// లావాదేవీ ప్రీఇమేజ్‌ని హ్యాష్ చేయండి (డబుల్ SHA-256)
h = SHA256(SHA256(tx.preimage(i)))
//Secure Enclave లోపల సైన్ చేయండి (ఫేస్ ID అవసరం)
లెట్ సిగ్ = SecureEnclave.sign(h, కీ: కీ, ప్రయత్నించండి
కర్వ్:.secp256k1)
// సంతకం చేసిన బైట్‌లు మాత్రమే పరికరం నుండి నిష్క్రమించబడతాయి
tx.attach(sig, input: i)
network.broadcast(tx.serialized)

Aperture యొక్క ఓపెన్ సోర్స్ స్విఫ్ట్ నుండి సరళీకృతం చేయబడింది — మీ పరికరంలో నిజమైన అల్గారిథమ్‌లు.

పూర్తి మూలాన్ని చదవండి

తప్పిపోయిన వాటిని గమనించండి: సర్వర్ లేదు, ఖాతా లేదు, నెట్‌వర్క్‌ను ఎప్పుడూ దాటలేదు. ప్రైవేట్ కీ మీ పరికరం యొక్కSecure Enclaveలో పూర్తిగా సృష్టించబడుతుంది, నిల్వ చేయబడుతుంది మరియు ఉపయోగించబడుతుంది.