Nasıl Çalışır —Aperture

Kaputun altında

Gerçek kod.
Gerçek güvenlik.

Bir cüzdan oluşturduğunuzda, onu geri yüklediğinizde ve iPhone'unuzda çalışan açık kaynak kodu aracılığıyla adım adım takip edilen fonları taşıdığınızda cihazınızda olan tam olarak budur.

1 / 5

128 bit gerçek rastgelelik

CSPRNG sistemi, tüm cüzdanınızın tek kaynağı olan cihazınızda ham entropi üretir.

// CSPRNG sisteminden 128 bit entropi
var entropi = Veri(sayı: 16)
SecRandomCopyBytes(kSecRandomDefault, 16, &entropi)
// sağlama toplamı = SHA-256'nın ilk bitleri(entropi)
sağlama toplamı = SHA256.hash(veri: entropi).prefix(1) olsun
bitler = entropi + sağlama toplamı olsun
// her 11 bitlik grubu BIP-39 kelime listesine eşleyin
Let anımsatıcı = bits.chunks(of: 11)
.map { kelime listesi[$0] } // 12 kelime
// 512 bitlik bir tohuma kadar uzat (PBKDF2-HMAC-SHA512)
tohum = PBKDF2.sha512(mnemonic.joined(" "),
tuz: "anımsatıcı", tur sayısı: 2048)
//Secure Enclave'i mühürleyin — asla ayrılmaz
Keychain.store'u deneyin(seed, erişim:.thisDeviceOnly,
biyometri:.faceID)
1 / 4

İfadenizi yazıyorsunuz

Yerel olarak girilir ve hiçbir zaman hiçbir yere iletilmez.

// yazdığınız cümleyi okuyun — asla iletilmez
let kelimeler = cümle.lowercased().split(" ")
// BIP-39 listesinde her kelime bulunmalıdır
guard words.allSatisfy(wordlist.contains)
else { WalletError.unknownWord'u atın }
// sağlama toplamını yeniden hesaplayın ve doğrulayın
let (entropi, toplam) = kelimeler.toEntropy()
guard SHA256.hash(veri: entropi).doğrular(toplam)
else { WalletError.badChecksum'u at }
// nesille aynı türetme — tamamen çevrimdışı
tohum = PBKDF2.sha512(words.joined(" "),
tuz: "anımsatıcı", tur sayısı: 2048)
Keychain.store'u deneyin(seed, erişim:.thisDeviceOnly)
1 / 3

Kendi paralarınız seçilir

Girdiler, harcanmamış çıktılarınızdan gelir; hiçbir üçüncü taraf dahil değildir.

// kendi harcanmamış çıktılarınızdan paraları seçin
let girişler = Wallet.selectUTXO'lar(tutar + ücret)
// işlemi tamamen cihaz üzerinde oluştur
let tx = TxBuilder(.bitcoin)
.add(girişler)
.send(miktar, alıcıya)
.change(to: Wallet.changeAddress).build()
// herhangi bir şey hareket etmeden önce her ayrıntıyı gözden geçirirsiniz
mevcut(onayla: tx.summary)
// miktar · ücret · alıcı — henüz gönderilmiş bir şey yok
1 / 4

İmza anahtarı türetildi

Giriş başına bir alt anahtar, BIP-32 yolu aracılığıyla türetilir.

// bu giriş için alt anahtarı türetelim (BIP-32)
let anahtar = masterKey.derive("m/84'/0'/0'/0/\(i)")
// işlem ön görüntüsüne hash işlemi uygulayın (çift SHA-256)
h = SHA256(SHA256(tx.preimage(i))) olsun
//Secure Enclave'in içinde oturum açın (Face ID gerektirir)
let sig = SecureEnclave.sign(h, key: key,'i deneyin)
eğri:.secp256k1)
// yalnızca imzalı baytlar cihazdan çıkar
tx.attach(sig, giriş: i)
network.broadcast(tx.serialized)

Cihazınızdaki gerçek algoritmalar olanAperture'in açık kaynaklı Swift'inden basitleştirilmiştir.

Kaynağın tamamını okuyun

Neyin eksik olduğuna dikkat edin: ağdan geçen sunucu yok, hesap yok, anahtar yok. Özel anahtar tamamen cihazınızınSecure Enclave'inde oluşturulur, saklanır ve kullanılır.