Yeniden üretilebilir derlemeler, yayımlanan kaynak kodu ile sürüm ikili dosyası arasında doğrulanabilir bir bağlantı sağlar. Mevcut yeniden üretilebilir derleme kapsamımız, Android F-Droid sürümü için geçerlidir. Bu kapsamı diğer Android ve iOS dağıtım kanallarına da genişletmeyi amaçlıyoruz.
Android
F-Droid
Gem Wallet, F-Droid APK’sını yeniden derlemek ve yayımlanmadan önce doğrulamak için bağımsız F-Droid derleme altyapısını kullanır.
Doğrulama modeli
Gem Wallet, her sürüm için imzalı bir F-Droid APK’sı yayımlar. Bundan ayrı olarak, F-Droid derleme sunucuları herkese açık derleme tarifini temiz bir ortamda çalıştırır:
- F-Droid meta verisi, belirli bir Git commit’i ve belirli bir Android NDK sürümü seçer.
- F-Droid, söz konusu commit’i herkese açık Gem Wallet deposundan çeker.
- Herkese açık yeniden üretilebilir derleme betikleri, sabitlenmiş native araç zincirini kurar ve
:app:assembleFdroidReleasekomutunu çalıştırır. - Derleme, imzasız bir APK üretir. F-Droid, buna karşılık gelen geliştirici imzalı APK’yı indirir ve bu APK’nın
AllowedAPKSigningKeysiçinde bildirilen sertifika parmak iziyle imzalandığını doğrular. - F-Droid, APK imzasını yeniden derlenen çıktıya kopyalar ve imzayı doğrular. Android APK Signature Scheme v2/v3 imzaları, imzalama bloğu dışında kalan APK’nın tamamını kapsar; bu nedenle doğrulamanın başarılı olabilmesi için yeniden derlenen APK içeriğinin Gem Wallet sürümüyle baytı baytına eşleşmesi gerekir.
- F-Droid, geliştirici imzalı APK’yı yalnızca doğrulama başarılı olduğunda yayımlar. Yeniden üretilemeyen bir sürüm yayımlanmaz.
Deterministik derleme kontrolleri
Gem Wallet, Rust ile yazılmış native kitaplıklar içerir; bu da çıktıyı derleyici, bağlayıcı, NDK, ana makine platformu ve optimize edici farklılıklarına duyarlı hâle getirir. F-Droid derlemesi bu girdileri şu şekilde kontrol eder:
- Rust araç zinciri ile
cargo-ndksürümleriniandroid/reproducible/versions.shiçinde sabitler; cargo-ndk‘yı--lockedile kurar; uygulamanın Rust bağımlılıkları ise depoya işlenmişCargo.locküzerinden çözümlenir;- Android NDK revizyonunu hem Android projesinde hem de F-Droid meta verisinde tam olarak sabitler;
- derlemeyi, NDK bağlayıcı ve arşivleyici yolları açıkça belirtilmiş bir Linux
x86_64ana makinesinde gerçekleştirir; - native APK hedeflerini,
x86_64derleme ana makinesinden bağımsız olarakarmeabi-v7avearm64-v8aile sınırlar; - Google push ve inceleme modüllerini içermeyen özel
fdroidürün kanalını kullanır; - deterministik olmayan DEX çıktısını ve eşleme tanımlayıcılarını önlemek için R8 optimizasyonunu
-dontoptimizeile devre dışı bırakır; - Gradle’ı daemon veya yapılandırma önbelleği olmadan çalıştırır ve sürüm derlemesinden önce dönüşüm önbelleklerini temizler.
Tam kaynak commit’i, derleme komutları, çıktı yolu, NDK revizyonu, upstream APK URL’si ve izin verilen imzalama sertifikası, F-Droid meta verisinde herkese açıktır. Rust, Cargo, NDK araç zinciri ve Gradle’ı yapılandıran betikler, uygulama kaynağıyla birlikte android/reproducible altında tutulur.
Güvenlik özellikleri ve sınırlamalar
Başarılı bir F-Droid doğrulaması, Gem Wallet tarafından yayımlanan imzalı APK’nın, beyan edilen kaynak commit’inden ve derleme tarifinden yeniden üretilebildiğini gösterir. Yeniden derleme, Gem Wallet altyapısının dışında gerçekleştirilir; bu da sürüm hattımıza tek güven noktası olarak duyulan bağımlılığı azaltır.
Yeniden üretilebilirlik; kaynak kodun güvenlik açığı içermediğini, her bağımlılığın güvenilir olduğunu veya seçilen derleyici araç zincirinin ele geçirilmediğini kanıtlamaz. Bu riskler, yeniden üretilebilir derlemelere ek olarak kaynak kodu incelemesi, bağımlılık kontrolleri ve araç zinciri güvenliği gerektirir.
Derleme durumu ve doğrulanmış sürümler, Gem Wallet F-Droid sayfasında yer alır.
Universal APK ve Google Play
Gem Wallet universal APK’sı ve Google Play sürümü, şu anda yukarıda açıklanan F-Droid doğrulaması kapsamında değildir. Bu Android dağıtım kanalları için yeniden üretilebilir derleme desteği, gelecekteki çalışmalar kapsamında planlanmaktadır.
iOS
App Store sürümü şu anda yeniden üretilebilir değildir. iOS için yeniden üretilebilir derleme desteği ve App Store ikili dosyasının bağımsız olarak doğrulanması, gelecekteki çalışmalar kapsamında planlanmaktadır.