Cách thức hoạt động —Aperture

Dưới mui xe

Mã thật.
An toàn thực sự.

Đây chính xác là những gì xảy ra trên thiết bị của bạn khi bạn tạo ví, khôi phục ví và chuyển tiền — được theo dõi từng bước thông qua mã nguồn mở chạy trên iPhone của bạn.

1 / 5

128 bit ngẫu nhiên thực sự

Hệ thống CSPRNG tạo ra entropy thô trên thiết bị của bạn — nguồn duy nhất cho toàn bộ ví của bạn.

// 128 bit entropy từ hệ thống CSPRNG
var entropy = Dữ liệu (đếm: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropy)
// tổng kiểm tra = bit đầu tiên của SHA-256(entropy)
hãy kiểm tra tổng = SHA256.hash(data: entropy).prefix(1)
đặt bit = entropy + tổng kiểm tra
// ánh xạ từng nhóm 11 bit vào danh sách từ BIP-39
hãy ghi nhớ = bit.chunks(of: 11)
.map { danh sách từ[$0] } // 12 từ
// kéo dài đến hạt giống 512 bit (PBKDF2-HMAC-SHA512)
hãy để hạt giống = PBKDF2.sha512(mnemonic.joined(" "),
muối: "ghi nhớ", số vòng: 2048)
// niêm phong trongSecure Enclave - nó không bao giờ rời đi
hãy thử Móc khóa.store(seed, access:.thisDeviceOnly,
sinh trắc học:.faceID)
1 / 4

Bạn gõ cụm từ của bạn

Nó được nhập cục bộ và không bao giờ được truyền đi bất cứ đâu.

// đọc cụm từ bạn gõ - không bao giờ được truyền
hãy để từ = cụm từ.lowcased().split(" ")
// mọi từ phải tồn tại trong danh sách BIP-39
bảo vệ từ.allSatisfy(wordlist.contains)
khác { ném WalletError.unknownWord }
// tính toán lại và xác minh tổng kiểm tra
let (entropy, sum) =words.toEntropy()
bảo vệ SHA256.hash(dữ liệu: entropy).verify(sum)
khác { ném WalletError.badChecksum }
// cùng nguồn gốc với thế hệ - hoàn toàn ngoại tuyến
hãy gieo hạt = PBKDF2.sha512(words.joined(" "),
muối: "ghi nhớ", số vòng: 2048)
hãy thử Móc khóa.store(seed, access:.thisDeviceOnly)
1 / 3

Tiền của riêng bạn được chọn

Đầu vào đến từ đầu ra chưa sử dụng của bạn - không có bên thứ ba nào tham gia.

// chọn tiền từ đầu ra chưa tiêu của riêng bạn
hãy để đầu vào = wallet.selectUTXOs(số tiền + phí)
// xây dựng giao dịch hoàn toàn trên thiết bị
hãy để tx = TxBuilder(.bitcoin)
.add(đầu vào)
.send(số tiền, tới: người nhận)
.change(thành: wallet.changeAddress).build()
// bạn xem lại từng chi tiết trước khi di chuyển
hiện tại(xác nhận: tx.summary)
// số tiền · phí · người nhận — chưa gửi gì
1 / 4

Khóa ký có nguồn gốc

Khóa con cho mỗi đầu vào được lấy thông qua đường dẫn BIP-32.

// lấy khóa con cho đầu vào này (BIP-32)
let key = masterKey.derive("m/84'/0'/0'/0/\(i)")
// băm tiền hình ảnh giao dịch (kép SHA-256)
đặt h = SHA256(SHA256(tx.preimage(i)))
// đăng nhập vàoSecure Enclave (cần Face ID)
hãy sig = thử SecureEnclave.sign(h, key: key,
đường cong:.secp256k1)
// chỉ các byte đã ký mới rời khỏi thiết bị
tx.attach(sig, input: i)
network.broadcast(tx.serialized)

Đơn giản hóa từ Swift mã nguồn mở củaAperture — các thuật toán thực sự trên thiết bị của bạn.

Đọc toàn bộ nguồn

Hãy chú ý những gì còn thiếu: không có máy chủ, không có tài khoản, không có khóa nào qua mạng. Khóa riêng được tạo, lưu trữ và sử dụng hoàn toàn bên trongSecure Enclave của thiết bị của bạn.