Build yang dapat direproduksi untuk aplikasi VPN: apa yang dibuktikan oleh kecocokan
Pembangunan ulang yang cocok menghubungkan biner yang didistribusikan ke kode sumber dan perkakas yang dideklarasikan. Itu tidak mengatakan apa pun tentang layanan VPN di balik biner tersebut atau catatannya.
Keterulangan adalah sifat rantai pasok: masukan terdeklarasi yang sama harus menghasilkan artefak yang sama. Bagi klien VPN, pernyataan itu mengikat pemasang yang Anda unduh ke kode sumber dan rantai perkakas yang dapat dibangun ulang siapa pun. Itu tidak mengatakan apa pun tentang layanan yang dihubungi klien.
Pertanyaan yang berguna karena itu sempit dan bisa dijawab. Apakah proyek menerbitkan prosedur, dan apakah artefak spesifik Anda cocok dengannya?
Di mana build berhenti menjadi deterministik
Kompilator menyematkan stempel waktu, jalur absolut, dan nama host build kecuali diperintahkan sebaliknya. Arsip mencatat urutan berkas dan waktu modifikasi, penaut memvariasikan keluarannya menurut versi rantai perkakas, dan kompresi paralel dapat menyusun ulang blok. Salah satu dari itu membuat dua build dari sumber yang sama berbeda dalam bita tanpa ada hal buruk terjadi. Determinisme direkayasa ke dalam build, tidak pernah diwarisi secara bawaan.
Proyek yang mengklaim keterulangan harus menyebutkan normalisasi yang diterapkannya: stempel waktu tetap, jalur yang dipetakan, entri arsip terurut, versi kompilator dan dependensi yang dipatok. Tanpa daftar itu, ketidakcocokan tidak dapat ditafsirkan, karena ruang variasi yang sah tidak terdefinisi.
Masukan terdeklarasi juga harus lengkap. URL repositori tanpa tag bukan revisi, berkas kunci tanpa hash bukan himpunan dependensi, dan skrip build yang mengunduh perkakas saat berjalan memiliki masukan yang tidak dapat dipatok siapa pun. Setiap celah kemudian menjadi perbedaan. Lengkapi daftar sebelum membandingkan apa pun, karena daftar yang tidak lengkap tidak dapat gagal dengan cara yang berarti.
| Input | How it drifts | What pins it |
|---|---|---|
| Source | Branch moves after release | Commit hash in the build metadata |
| Toolchain | Compiler patch level differs | Container image digest |
| Packaging | Archive order and mtimes vary | Normalised archive settings |
Apa yang sebenarnya diperiksa oleh perbandingan
Pihak independen membangun ulang di lingkungan terdeklarasi dan membandingkan keluaran dengan artefak yang diterbitkan. Identik-bit adalah bentuk kuat; langkah normalisasi terdokumentasi, di mana perbedaan tercatat dibalik dan hasilnya kemudian cocok, adalah bentuk yang lebih lemah tetapi tetap berguna.
Perbandingan menyangkut biner. Tanda tangan menjawab pertanyaan lain: ia mengaitkan rilis dengan kunci dan kunci dengan identitas, dan proyek dapat memiliki tanda tangan sah atas artefak yang belum dibangun ulang siapa pun. Kedua pemeriksaan bertumpuk alih-alih saling menggantikan.
sha256sum wireguard-installer.msi gpg --verify wireguard-installer.msi.sig wireguard-installer.msi
Jalankan keduanya sebelum memasang, dan bandingkan hash dengan yang diterbitkan untuk rilis dan platform yang sama. Hash yang cocok dengan halaman vendor membuktikan unduhan tiba utuh; biner yang dibangun ulang dan cocok dengan hash terbitan vendor membuktikan sesuatu yang lebih kuat tentang cara pembuatannya.
Mengapa ketidakcocokan bukan bukti pemalsuan
Sebagian besar ketidakcocokan berasal dari masukan yang tidak dikendalikan siapa pun. Rilis tambalan kompilator yang berbeda, jalur build yang bocor ke simbol debug, lokal yang mengubah urutan pengurutan, atau langkah pengemasan yang diterapkan setelah perbandingan semuanya menghasilkan hash berbeda dari pekerjaan jujur.
Karena itu ketidakcocokan harus dibaca terhadap prosedur terdokumentasi sebelum menjadi cerita. Jika prosedur mematok semuanya dan perbedaan tetap tidak dijelaskan, itu temuan nyata yang layak disampaikan ke proyek. Jika prosedur bungkam soal pengemasan, perbedaannya mungkin sepenuhnya diperkirakan.
Simetri juga penting di sini: kecocokan tidak membuktikan bahwa kode sumber bebas dari cacat, hanya bahwa biner sesuai dengannya. Kode yang diaudit dengan baik dan kode yang dapat direproduksi adalah sifat berbeda, dan proyek dapat memiliki yang satu tanpa yang lain.
Apa yang dikatakan klaim tentang layanan di balik aplikasi
Klien adalah program di perangkat Anda; layanan adalah server, sistem akun, dan kebijakan retensi di tempat lain. Keterulangan membatasi yang pertama dan tidak mengatakan apa pun tentang yang kedua, seberapa pun telitinya pemasang diverifikasi.
Konfigurasi titik akhir juga dapat berubah setelah pemasangan, melalui pengaturan jarak jauh atau profil yang dikendalikan penyedia. Perubahan itu datang melalui jaringan dan tidak tercakup oleh hash apa pun yang Anda hitung sebelum terhubung.
Baca klaim itu pada cakupan sebenarnya, lalu periksa pertanyaan di sebelahnya secara terpisah: apa yang dicatat penyedia, dan di bawah yurisdiksi mana ia menjawab permintaan. Biner yang terverifikasi dan layanan yang belum terverifikasi dapat hidup berdampingan, dan itulah tepatnya kasus yang dirancang untuk ditampilkan oleh pemeriksaan rantai pasok, bukan untuk diperbaiki.