| हे कसे कार्य करते —Aperture

| हुड अंतर्गत

| वास्तविक कोड.
| वास्तविक सुरक्षितता.

जेव्हा तुम्ही वॉलेट तयार करता, ते पुनर्संचयित करता आणि निधी हलवता तेव्हा तुमच्या डिव्हाइसवर हेच घडते — तुमच्या iPhone वर चालणाऱ्या ओपन-सोर्स कोडद्वारे चरण-दर-चरण ट्रेस केले जाते.

1 / 5

| खरे यादृच्छिकतेचे 128 बिट

| CSPRNG ही प्रणाली तुमच्या डिव्हाइसवर रॉ एन्ट्रॉपी तयार करते — तुमच्या संपूर्ण वॉलेटचा एकमेव स्रोत.

| // CSPRNG सिस्टीममधून 128 बिट एन्ट्रॉपी
| var एंट्रोपी = डेटा(गणना: 16)
| SecRandomCopyBytes(kSecRandomDefault, 16, &एंट्रोपी)
| // चेकसम = SHA-256 (एंट्रॉपी) चे पहिले बिट
| let checksum = SHA256.hash(डेटा: एन्ट्रॉपी).उपसर्ग(1)
| लेट बिट्स = एन्ट्रॉपी + चेकसम
| // BIP-39 शब्दसूचीवर प्रत्येक 11-बिट गटाचा नकाशा तयार करा
| let mnemonic = bits.chunks(of: 11)
|.map { wordlist[$0] } // १२ शब्द
| // 512-बिट सीडपर्यंत पसरवा (PBKDF2-HMAC-SHA512)
| let seed = PBKDF2.sha512(mnemonic.joined(" "),
| मीठ: "स्मृतीविज्ञान", राउंड्स: 2048)
//Secure Enclave मध्ये सील - ते कधीही सोडत नाही
| Keychain.store वापरून पहा(बियाणे, प्रवेश:.thisDeviceOnly,
| बायोमेट्री:.faceID)
1 / 4

| तुम्ही तुमचा वाक्यांश टाइप करा

| हे स्थानिकरित्या प्रविष्ट केले जाते आणि कधीही कुठेही प्रसारित केले जात नाही.

| // तुम्ही टाइप केलेला वाक्यांश वाचा — कधीही प्रसारित केला नाही
| शब्द द्या = phrase.lowercased().split(" ")
| // BIP-39 सूचीमध्ये प्रत्येक शब्द अस्तित्वात असणे आवश्यक आहे
| guard words.allSatisfy(wordlist.contains)
| अन्यथा { WalletError.unknownWord टाका }
| // चेकसमची पुनर्गणना आणि पडताळणी करा
| let (एंट्रोपी, बेरीज) = शब्द.तोएंट्रोपी()
| गार्ड SHA256.hash(डेटा: एंट्रॉपी). पडताळते(सम)
| अन्यथा { WalletError.badChecksum टाका }
| // पिढी प्रमाणेच व्युत्पन्न — पूर्णपणे ऑफलाइन
| let seed = PBKDF2.sha512(words.joined(" "),
| मीठ: "स्मृतीविज्ञान", राउंड्स: 2048)
| Keychain.store वापरून पहा (बियाणे, प्रवेश:.thisDeviceOnly)
1 / 3

तुमची स्वतःची नाणी निवडली आहेत

| तुमच्या न खर्च केलेल्या आउटपुटमधून इनपुट येतात — कोणताही तृतीय पक्ष गुंतलेला नाही.

| // तुमच्या स्वतः—्या न खर्च केलेल्या आउटपुटमधून नाणी निवडा
इनपुट द्या = wallet.selectUTXOs(रक्कम + फी)
| // व्यवहार पूर्णपणे डिव्हाइसवर तयार करा
| let tx = TxBuilder(.bitcoin)
|.add(इनपुट)
| पाठवा(रक्कम, यांना: प्राप्तकर्ता)
|.change(to: wallet.changeAddress).build()
| // तुम्ही काहीही हालचाल करण्यापूर्वी प—रत्येक तपशीलाचे पुनरावलोकन करा
| उपस्थित (पुष्टी करा: tx.summary)
| // रक्कम · फी · प्राप्तकर्ता — अद्याप काहीही पाठवले नाही
1 / 4

| स्वाक्षरी की व्युत्पन्न आहे

| प्रति-इनपुट चाइल्ड की BIP-32 मार्गाद्वारे प्राप्त केली जाते.

| // या इनपुटसाठी चाइल्ड की मिळवा (BIP-32)
| let key = masterKey.derive("m/84'/0'/0'/0/\(i)")
| // व्यवहार प्रीइमेज हॅश करा (दुहेरी SHA-256)
| चला h = SHA256(SHA256(tx.preimage(i)))
| //Secure Enclave च्या आत सही करा (फेस आयडी आवश्यक आहे)
| sig = SecureEnclave.sign(h, key: key, वापरून पहा)
| वक्र:.secp256k1)
| // फक्त साइन केलेले बाइट्स डिव्हाइस सोडतात
| tx.attach(sig, इनपुट: i)
network.broadcast(tx.serialized)

|Aperture च्या ओपन-सोर्स स्विफ्ट वरून सरलीकृत — वास्तविक अल्गोरिदम, तुमच्या डिव्हाइसवर.

| संपूर्ण स्त्रोत वाचा

| काय गहाळ आहे याकडे लक्ष द्या: कोणतेही सर्व्हर नाही, खाते नाही, कोणतीही की कधीही नेटवर्क ओलांडत नाही. खाजगी की तयार के—ी जाते, संग्रहित केली जाते आणि पूर्णपणे तुमच्या डिव्हाइसच्याSecure Enclave मध्ये वापरली जाते.