| ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ —Aperture

| ਹੁੱਡ ਦੇ ਤਹਿਤ

| ਅਸਲੀ ਕੋਡ।
| ਅਸਲ ਸੁਰੱਖਿਆ.

ਇਹ ਬਿਲਕੁਲ ਉਹੀ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਵਾਲਿਟ ਬਣਾਉਂਦੇ ਹੋ, ਇੱਕ ਨੂੰ ਰੀਸਟੋਰ ਕਰਦੇ ਹੋ, ਅਤੇ ਫੰਡ ਭੇਜਦੇ ਹੋ — ਤੁਹਾਡੇ iPhone 'ਤੇ ਚੱਲਣ ਵਾਲੇ ਓਪਨ-ਸੋਰਸ ਕੋਡ ਦੁਆਰਾ, ਕਦਮ ਦਰ ਕਦਮ ਦਾ ਪਤਾ ਲਗਾਇਆ ਜਾਂਦਾ ਹੈ।

1 / 5

| ਸੱਚੀ ਬੇਤਰਤੀਬੀ ਦੇ 128 ਬਿੱਟ

| ਸਿਸਟਮ CSPRNG ਤੁਹਾਡੀ ਡਿਵਾਈਸ 'ਤੇ ਕੱਚੀ ਐਂਟਰੌਪੀ ਪੈਦਾ ਕਰਦਾ ਹੈ - ਤੁਹਾਡੇ ਪੂਰੇ ਵਾਲਿਟ ਦਾ ਇੱਕਲਾ ਸਰੋਤ।

| // ਸਿਸਟਮ CSPRNG ਤੋਂ ਐਂਟਰੌਪੀ ਦੇ 128 ਬਿੱਟ
| var ਐਂਟ੍ਰੋਪੀ = ਡੇਟਾ (ਗਿਣਤੀ: 16)
| SecRandomCopyBytes(kSecRandomDefault, 16, &entropy)
| // ਚੈੱਕਸਮ = SHA-256 (ਐਂਟ੍ਰੋਪੀ) ਦੇ ਪਹਿਲੇ ਬਿੱਟ
| let checksum = SHA256.hash(data: entropy).prefix(1)
| let bits = entropy + checksum
| // ਹਰੇਕ 11-ਬਿੱਟ ਸਮੂਹ ਨੂੰ BIP-39 ਸ਼ਬਦ ਸੂਚੀ ਵਿੱਚ ਮੈਪ ਕਰੋ
| let mnemonic = bits.chunks (of: 11)
|.map { wordlist[$0] } // 12 ਸ਼ਬਦ
| // ਇੱਕ 512-ਬਿੱਟ ਬੀਜ (PBKDF2-HMAC-SHA512) ਤੱਕ ਫੈਲਾਓ
| let seed = PBKDF2.sha512(mnemonic.joined(""),
| ਲੂਣ: "ਮੈਮੋਨਿਕ", ਦੌਰ: 2048)
//Secure Enclave ਵਿੱਚ ਸੀਲ - ਇਹ ਕਦੇ ਨਹੀਂ ਛੱਡਦਾ
| Keychain.store (ਬੀਜ, ਪਹੁੰਚ:.thisDeviceOnly,) ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ
| ਬਾਇਓਮੈਟਰੀ:.faceID)
1 / 4

| ਤੁਸੀਂ ਆਪਣਾ ਵਾਕੰਸ਼ ਟਾਈਪ ਕਰੋ

| ਇਹ ਸਥਾਨਕ ਤੌਰ 'ਤੇ ਦਾਖਲ ਹੁੰਦਾ ਹੈ ਅਤੇ ਕਿਤੇ ਵੀ ਪ੍ਰਸਾਰਿਤ ਨਹੀਂ ਹੁੰਦਾ.

| // ਤੁਹਾਡੇ ਦੁਆਰਾ ਟਾਈਪ ਕੀਤੇ ਵਾਕਾਂਸ਼ ਨੂੰ ਪੜ੍ਹੋ — ਕਦੇ ਪ੍ਰਸਾਰਿਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ
| let words = phrase.lowercased().split("")
| // BIP-39 ਸੂਚੀ ਵਿੱਚ ਹਰੇਕ ਸ਼ਬਦ ਮੌਜੂਦ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ
| guard words.allSatisfy(wordlist.contains)
| else { WalletError.unknownWord ਸੁੱਟੋ }
| // ਦੁਬਾਰਾ ਗਣਨਾ ਕਰੋ ਅਤੇ ਚੈੱਕਸਮ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ
| let (entropy, sum) = words.toEntropy()
| ਗਾਰਡ SHA256.hash(ਡਾਟਾ: ਐਂਟਰੌਪੀ)।(ਜੋੜ) ਦੀ ਪੁਸ਼ਟੀ ਕਰਦਾ ਹੈ
| else { WalletError.badChecksum ਸੁੱਟੋ }
| // ਪੀੜ੍ਹੀ ਦੇ ਤੌਰ 'ਤੇ ਉਹੀ ਡੈਰੀਵੇਸ਼ਨ — ਪੂਰੀ ਤਰ੍ਹਾਂ ਔਫਲਾਈਨ
| let seed = PBKDF2.sha512(words.joined(""),
| ਲੂਣ: "ਮੈਮੋਨਿਕ", ਦੌਰ: 2048)
| Keychain.store (ਬੀਜ, ਪਹੁੰਚ:.thisDeviceOnly) ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ
1 / 3

ਤੁਹਾਡੇ ਆਪਣੇ ਸਿੱਕੇ ਚੁਣੇ ਗਏ ਹਨ

| ਇਨਪੁਟਸ ਤੁਹਾਡੇ ਖਰਚ ਨਾ ਕੀਤੇ ਆਉਟਪੁੱਟ ਤੋਂ ਆਉਂਦੇ ਹਨ - ਕੋਈ ਤੀਜੀ ਧਿਰ ਸ਼ਾਮਲ ਨਹੀਂ ਹੈ।

| // ਆਪਣੇ ਖੁਦ ਦੇ ਖਰਚ ਨਾ ਕੀਤੇ ਆਉਟਪੁ—ਟ ਤੋਂ ਸਿੱਕੇ ਚੁਣੋ
let inputs = 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)
| let h = SHA256(SHA256(tx.preimage(i)))
| //Secure Enclave ਦੇ ਅੰਦਰ ਸਾਈਨ ਕਰੋ (ਫੇਸ ਆਈਡੀ ਦੀ ਲੋੜ ਹੈ)
| let sig = ਕੋਸ਼ਿਸ਼ ਕਰੋ SecureEnclave.sign(h, key: key,
| ਵਕਰ:.secp256k1)
| // ਸਿਰਫ਼ ਹਸਤਾਖਰਿਤ ਬਾਈਟਸ ਡਿਵਾਈਸ ਨੂੰ ਛੱਡਦੇ ਹਨ
| tx.attach(sig, ਇੰਪੁੱਟ: i)
network.broadcast(tx.serialized)

|Aperture ਦੇ ਓਪਨ-ਸੋਰਸ ਸਵਿਫਟ ਤੋਂ ਸਰਲੀਕ੍ਰਿਤ — ਅਸਲ ਐਲਗੋਰਿਦਮ, ਤੁਹਾਡੀ ਡਿਵਾਈਸ 'ਤੇ।

| ਪੂਰਾ ਸਰੋਤ ਪੜ੍ਹੋ

| ਧਿਆਨ ਦਿਓ ਕਿ ਕੀ ਗੁੰਮ ਹੈ: ਕੋਈ ਸਰਵਰ, ਕੋਈ ਖਾਤਾ, ਕੋਈ ਕੁੰਜੀ ਕਦੇ ਵੀ ਨੈੱਟਵਰਕ ਨੂੰ ਪਾਰ ਨਹੀਂ ਕਰਦੀ। ਨਿੱਜੀ ਕੁੰਜੀ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਦੇSecure Enclave ਦੇ ਅੰਦਰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਬਣਾਈ, ਸਟੋਰ ਕੀ—ੀ ਅਤੇ ਵਰਤੀ ਜਾਂਦੀ ਹੈ।