仕組み —Aperture

ボンネットの下で

実際のコード。
本当の安全性。

これはまさに、ウォレットを作成し、復元し、資金を移動するときにデバイス上で起こっていることです。これは、iPhone 上で実行されるオープンソース コードを通じて段階的に追跡されます。

1 / 5

128 ビットの真のランダム性

システム CSPRNG は、ウォレット全体の単一ソースである生のエントロピーをデバイス上に生成します。

// システム CSPRNG からの 128 ビットのエントロピー
var entropy = データ(カウント: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropy)
// チェックサム = SHA-256 (エントロピー) の最初のビット
let checksum = SHA256.hash(data: entropy).prefix(1)
let ビ—ト = エントロピー + チェックサム
// 各 11 ビット グループを BIP-39 ワードリストにマップします
let ニーモニック = 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 リストに存在する必要があります
ガードワード.allSatisfy(wordlist.contains)
else { throw WalletError.unknownWord }
// チェックサムを再計算して検証します
let (エントロピー, 合計) = Words.toEntropy()
ガード SHA256.hash(データ: エントロピー).verify(sum)
else { throw WalletError.badChecksum }
// 生成と同じ導出 — 完全にオフライン
let seed = PBKDF2.sha512(words.joined(" "),
ソルト: 「ニーモニック」、ラウンド: 2048)
Keychain.store(シード、アクセス:.thisDeviceOnly) を試してください
1 / 3

自分のコインが選択されます

入力は未使用の出力から得られます。第三者は関与しません。

// 自分の未使用の出力からコインを選択します
let inputs = Wallet.selectUTXOs(金額 + 手数料)
// トランザクション全体をデバイス上で構築します
let tx = TxBuilder(.bitcoin)
.add(入力)
.send(金額、宛先: 受信者)
.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 内に署名します (Face ID が必要)
let sig = SecureEnclave.sign(h, key: key,
曲線:.secp256k1)
// 署名されたバイトのみがデバイスから送信されます
tx.attach(sig, 入力: i)
network.broadcast(tx.serialized)

Aperture のオープンソース Swift から簡略化された、実際のアルゴリズムがデバイス上にあります。

完全なソースを読む

何が欠けているかに注目してください。サーバー、アカウント、キーがネットワークを通過することはありません。秘密キーは、デバイスのSecure Enclave 内で完全に作成、保存、使用されます。