Build yang dapat direproduksi menyediakan hubungan yang dapat diverifikasi antara kode sumber yang dipublikasikan dan berkas biner rilis. Saat ini, cakupan build yang dapat direproduksi kami berlaku untuk rilis F-Droid di Android. Kami bermaksud memperluas cakupan ini ke saluran distribusi Android dan iOS lainnya.

Android

F-Droid

Gem Wallet menggunakan infrastruktur build F-Droid yang independen untuk membangun ulang APK F-Droid dan memverifikasinya sebelum publikasi.

Model verifikasi

Gem Wallet menerbitkan APK F-Droid yang telah ditandatangani untuk setiap rilis. Secara terpisah, server build F-Droid menjalankan resep build publik dari lingkungan yang bersih:

  1. Metadata F-Droid menetapkan secara tepat commit Git dan versi Android NDK.
  2. F-Droid melakukan checkout commit tersebut dari repositori publik Gem Wallet.
  3. Skrip build yang dapat direproduksi yang bersifat publik memasang toolchain native dengan versi yang telah dikunci dan menjalankan :app:assembleFdroidRelease.
  4. Proses build menghasilkan APK yang belum ditandatangani. F-Droid mengunduh APK terkait yang ditandatangani pengembang dan mengonfirmasi bahwa APK tersebut ditandatangani oleh sertifikat dengan sidik jari yang dideklarasikan dalam AllowedAPKSigningKeys.
  5. F-Droid menyalin tanda tangan APK ke artefak hasil build ulang dan memverifikasinya. Tanda tangan APK Signature Scheme v2/v3 Android mencakup keseluruhan APK di luar blok penandatanganan, sehingga verifikasi yang berhasil mensyaratkan muatan APK hasil build ulang cocok byte demi byte dengan rilis Gem Wallet.
  6. F-Droid menerbitkan APK yang ditandatangani pengembang hanya jika verifikasi berhasil. Rilis yang tidak dapat direproduksi tidak akan diterbitkan.

Kontrol build deterministik

Gem Wallet menyertakan pustaka native Rust, sehingga keluarannya sensitif terhadap perbedaan compiler, linker, NDK, platform host, dan optimizer. Build F-Droid mengontrol masukan-masukan ini dengan cara:

  • mengunci versi toolchain Rust dan cargo-ndk di android/reproducible/versions.sh;
  • memasang cargo-ndk dengan --locked, sementara dependensi Rust aplikasi ditentukan oleh Cargo.lock yang telah di-commit;
  • mengunci revisi Android NDK yang tepat, baik di proyek Android maupun di metadata F-Droid;
  • melakukan build di host Linux x86_64 dengan jalur linker dan archiver NDK yang ditentukan secara eksplisit;
  • membatasi target native APK ke armeabi-v7a dan arm64-v8a, terlepas dari host build x86_64;
  • menggunakan saluran produk fdroid yang khusus, tanpa modul push dan ulasan dari Google;
  • menonaktifkan optimasi R8 dengan -dontoptimize untuk mencegah keluaran DEX dan pengidentifikasi pemetaan yang non-deterministik;
  • menjalankan Gradle tanpa daemon maupun cache konfigurasi, serta membersihkan cache transformasi sebelum build rilis.

Commit sumber yang tepat, perintah build, jalur keluaran, revisi NDK, URL APK upstream, dan sertifikat penandatanganan yang diizinkan tersedia untuk publik di metadata F-Droid. Skrip yang mengonfigurasi Rust, Cargo, toolchain NDK, dan Gradle dipelihara bersama kode sumber aplikasi di android/reproducible.

Properti keamanan dan keterbatasan

Verifikasi F-Droid yang berhasil menunjukkan bahwa APK bertanda tangan yang diterbitkan Gem Wallet dapat direproduksi dari commit sumber dan resep build yang dideklarasikan. Proses build ulang dilakukan di luar infrastruktur Gem Wallet, sehingga mengurangi ketergantungan pada pipeline rilis kami sebagai titik kepercayaan tunggal.

Kemampuan untuk direproduksi tidak membuktikan bahwa kode sumber bebas dari kerentanan, bahwa setiap dependensi dapat dipercaya, atau bahwa toolchain compiler yang dipilih tidak disusupi. Risiko-risiko tersebut memerlukan tinjauan kode sumber, kontrol dependensi, dan keamanan toolchain, di samping build yang dapat direproduksi.

Status build dan rilis yang telah diverifikasi tersedia di halaman F-Droid Gem Wallet.

Universal APK dan Google Play

APK universal Gem Wallet dan rilis Google Play saat ini belum tercakup dalam verifikasi F-Droid yang dijelaskan di atas. Dukungan build yang dapat direproduksi untuk saluran distribusi Android ini direncanakan untuk pengerjaan di masa mendatang.

iOS

Rilis App Store saat ini belum dapat direproduksi. Dukungan build yang dapat direproduksi untuk iOS serta verifikasi independen terhadap berkas biner App Store direncanakan untuk pengerjaan di masa mendatang.

Frequently Asked Questions

Build yang dapat direproduksi memungkinkan siapa pun membangun Gem Wallet dari kode sumber publik dan memverifikasi bahwa aplikasi yang dihasilkan cocok dengan rilis resmi. Ini memberikan transparansi tambahan dan membantu memastikan bahwa aplikasi yang dipublikasikan dibangun dari kode sumber yang sama dengan yang tersedia di GitHub.
Open source berarti kode sumber Gem Wallet tersedia untuk publik dan dapat ditinjau oleh siapa pun. Build yang dapat direproduksi melangkah lebih jauh dengan memungkinkan pengembang independen dan layanan seperti F-Droid membangun aplikasi dari kode sumber yang dideklarasikan dan memverifikasi bahwa APK Android yang dihasilkan cocok byte demi byte dengan rilis resmi Gem Wallet.
Ya. Anda dapat membangun aplikasi Android maupun iOS dari kode sumber publik Gem Wallet. Aplikasi Android mendukung build yang dapat direproduksi menggunakan skrip build publik dan pengaturan toolchain dengan versi yang telah dikunci. Anda juga dapat membangun dan menjalankan aplikasi iOS secara lokal.
Skrip build yang dapat direproduksi dan pengaturan toolchain dengan versi yang telah dikunci bersifat publik. Metadata F-Droid mendeklarasikan commit sumber yang tepat, revisi Android NDK, perintah build, dan keluaran APK yang diharapkan untuk setiap rilis. F-Droid membangun ulang aplikasi Android secara independen dan menerbitkannya hanya jika muatan APK cocok byte demi byte dengan rilis Gem Wallet.
Jika Anda memiliki pertanyaan, mengalami masalah build, atau menemukan ketidaksesuaian, silakan ajukan issue di repositori GitHub Gem Wallet. Sertakan informasi tentang lingkungan Anda, langkah-langkah build, dan pesan kesalahan yang relevan untuk membantu kami menyelidiki masalah tersebut.