ഇത് എങ്ങനെ പ്രവർത്തിക്കുന്നു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) ശ്രമിക്കുക
ബയോമെട്രി:.ഫേസ് ഐഡി)
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)
.ചേർക്കുക(ഇൻപുട്ടുകൾ)
.അയയ്ക്കുക(തുക, ഇവർക്ക്: സ്വീകർത്താവ്)
.മാറ്റുക(ഇതിലേക്ക്: 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-നുള്ളിൽ സൈൻ ചെയ്യുക (ഫേസ് ഐഡി ആവശ്യമാണ്)
അനുവദിക്കുക സിഗ് = SecureEnclave.sign(h, കീ: കീ, ശ്രമിക്കുക
വക്രം:.secp256k1)
// സൈൻ ചെയ്ത ബൈറ്റുകൾ മാത്രം ഉപകരണം വിടുക
tx.attach(sig, input: i)
network.broadcast(tx.serialized)

Aperture-ൻ്റെ ഓപ്പൺ സോഴ്‌സ് സ്വിഫ്റ്റിൽ നിന്ന് ലളിതമാക്കിയത് — നിങ്ങളുടെ ഉപകരണത്തിലെ യഥാർത്ഥ അൽഗോരിതങ്ങൾ.

മുഴുവൻ ഉറവിടവും വായിക്കുക

നഷ്‌ടമായത് ശ്രദ്ധിക്കുക: സെർവറില്ല, അക്കൗണ്ടില്ല, ഒരു കീയും നെറ്റ്‌വർക്ക് കടക്കുന്നില്ല. സ്വകാര്യ കീ സൃഷ്‌ടിക്കുകയും സംഭരിക്കുകയും പൂർണ്ണമായും നിങ്ങളുടെ ഉപകരണത്തിൻ്റെSecure Enclave-ൽ ഉപയോഗിക്കുകയും ചെയ്യുന്നു.