Basis pengetahuan Di bawah tenda
Memverifikasi build
Open source hanya membantu jika kode yang Anda jalankan adalah kode yang tadinya diterbitkan. Nymchat dibuat secara deterministik sehingga Anda dapat memeriksanya sendiri, dari dalam aplikasi atau dari terminal.
Halaman ini diterjemahkan dengan mesin untuk kenyamanan. Versi asli bahasa Inggris adalah versi yang berlaku.
Bangunan yang dapat direproduksi
Membangun aplikasi menghasilkan a build-manifest.json berisi komit sumber, a
Hash SHA-256 dari setiap aset HTML, JavaScript, dan CSS yang disajikan, dan satu
bundleHash atas seluruh kumpulan aset itu.
Outputnya hanya bergantung pada konten sumber — bahkan waktu pembuatan yang tercatat pun demikian
stempel waktu komit, bukan saat pembangunan dijalankan - jadi siapa pun yang membangunnya kembali akan melakukan hal yang sama
commit mendapat file yang identik dengan byte dan hal yang sama bundleHash.
Tindakan GitHub kemudian membangun kembali setiap komitmen secara independen dan menandatangani asal pembangunan
pengesahan untuk hash dan manifes, sehingga ada catatan bertanda tangan yang mengikat a
bundleHash ke komit di repositori, dihasilkan oleh sesuatu selain
penyebaran.
Apa yang diperiksa oleh dialog Tentang
Tentang di header jalankan pemeriksaan langsung, di browser Anda.
Ini mengambil ulang setiap aset yang sebenarnya dijalankan halaman tersebut, melakukan hash dengan Web Crypto API, dan
dibandingkan dengan manifes. Lalu - dan inilah bagian yang penting - itu
menghitung ulang bundleHash dari hash dia hanya dihitung, bukan dari
apa pun yang diklaim oleh manifes, dan mencarinya di pengesahan yang ditandatangani repositori
melalui API GitHub.
Hal inilah yang menghentikan penerapan untuk menjamin dirinya sendiri: menyajikan file yang dimodifikasi bersama-sama manifes yang cocok masih gagal, karena hash yang dihitung ulang tidak memiliki pengesahan.
| Status | Cara |
|---|---|
| &memeriksa; Aplikasi resmi terverifikasi (n/n) | Setiap aset cocok, hash bundel yang dihitung ulang dibuktikan oleh repositori, Dan halaman disajikan dari domain resmi. |
| ⚠ Versi terverifikasi · bukan aplikasi resmi | Kode ini asli dan dibuktikan, tetapi ini adalah cerminan di domain lain. Mirror tidak dapat menghapus peringatan ini tanpa gagal dalam verifikasi. |
| ✗ Ketidakcocokan | Aset tidak sesuai dengan apa yang dinyatakan dalam manifes. |
| ✗ Bangunan tidak resmi | Hash bundel yang dihitung ulang tidak memiliki pengesahan dari repositori — manifes yang dibuat sendiri. |
| ⚠ Asalnya tidak terjangkau | GitHub API tidak dapat dijangkau, sehingga pengesahan tidak dapat diperiksa. |
Memverifikasinya sendiri
Bangun kembali komit nama dialog Tentang dan bandingkan:
git clone https://github.com/Spl0itable/NYM
cd NYM
git checkout <commit shown in the About dialog>
npm ci
npm run build # prints "Build hash: <bundleHash>"
Hash yang dicetak harus cocok dengan yang ada di dialog Tentang dan yang ada di komit itu ringkasan proses build-asalnya. Anda juga dapat memeriksa tanda tangan secara langsung dengan GitHub CLI:
gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM
Aplikasi Android dan iOS
Pemeriksaan di atas adalah pemeriksaan aplikasi web, dan alasannya patut disebutkan dengan jelas: aplikasi asli tidak dapat melakukan hal yang sama pada dirinya sendiri. Apa yang berjalan di ponsel Anda adalah kode mesin yang dikompilasi, bukan sumber dalam repositori, dan tidak ada yang dapat dihitung oleh aplikasi pada perangkat yang berhubungan dengan sumber tersebut lainnya.
Android dapat melakukan hal terbaik berikutnya. Yang terinstal .apk adalah file yang dapat dibaca aplikasi
dan hash, dan hash dari setiap rilis yang diterbitkan sudah bersifat publik: dipublikasikan ke
Zapstore
menandatangani acara Nostr yang membawa SHA-256 APK dan sertifikat penandatanganannya SHA-256. Jadi
Android Tentang dialog melakukan hash pada APK yang menjalankannya, mengambil APK yang ditandatangani
acara, hanya menyimpan acara yang ditandatangani oleh kunci pengembang, dan membandingkan. Ini menunjukkan keduanya
hash juga, sehingga Anda dapat mengulangi pemeriksaan pada perangkat: unduh APK yang diterbitkan, jalankan
sha256sum di atasnya, dan lihat sendiri acara yang sama.
Aplikasi yang dipasang dari Google Play tidak dapat diperiksa dengan cara iniGoogle menandatangani ulang setiap upload dengan kunci sendiri dan membangun APK terpisah untuk masing-masing perangkat, sehingga apa yang mendarat di ponsel Anda bukanlah file yang diproduksi oleh pengembang dan hashnya tidak cocok dengan apa pun yang bisa dipublikasikan. Aplikasi ini mengenali instalasi Play dan mengatakan demikian alih-alih melaporkan kegagalan.
iOS tidak bisa dicek sama sekali. Apple mengenkripsi dan menandatangani ulang setiap unduhan satu per satu, jadi hash yang dihitung di iPhone Anda bersifat unik untuk iPhone Anda dan tidak cocok dengan apa pun diterbitkan dimana saja. Dialog Tentang mengatakan hal ini secara langsung daripada menunjukkan hal yang meyakinkan status itu tidak berarti apa-apa. Jika Anda menginginkan Nymchat, Anda dapat memverifikasi di perangkat keras Apple, gunakan web aplikasi, yang memeriksa setiap file yang sedang dijalankan.
Pemeriksaan yang dijalankan sendiri oleh suatu aplikasi tidak dapat membuktikan bahwa aplikasi tersebut jujur — siapa pun yang memodifikasinya bisa menghapus cek juga. Hal ini membuktikan hal yang biasa terjadi: bahwa Anda meniru diinstal adalah salinan yang diterbitkan. Itu berharga karena menghargainya perbandingan bersifat publik, jadi orang lain selain Anda dapat memeriksanya, dan tidak menyetujuinya.
Burung kenari waran
Warrant canary adalah pernyataan, yang diterbitkan pada jadwal tetap, yang dimiliki oleh pengembang bukan menerima perintah rahasia pemerintah yang dilarang untuk diungkapkan — a Surat Keamanan Nasional, perintah FISA. Pengembang mungkin terpaksa tetap bungkam perintah seperti itu, namun tidak bisa dipaksa untuk berbohong, sehingga burung kenari menjadi basi atau hilang itu sendiri sinyalnya.
Ia tinggal di canary.json di root repositori dan diambil secara langsung
dari GitHub, sehingga riwayatnya dapat diaudit secara independen, apa pun yang dikatakan situs yang diterapkan.
Dialog Tentang memberi kode warna pada itu:
| Warna | Cara |
|---|---|
| Hijau — semuanya jelas | Ditandatangani, terkini, dan tanda tangan cocok dengan kunci pengembang. Tidak ada perintah rahasia yang diterima. |
| Kuning — terlambat, atau tidak semuanya jelas | Itu tidak disegarkan pada tanggal yang disebutkan, atau tanggalnya allClear bendera salah. Perintah yang dibungkam tidak dapat dikesampingkan. |
| Merah — tanda tangan tidak sah, atau hilang | Tanda tangan tidak cocok dengan kunci pengembang, atau file telah dihapus seluruhnya. Perlakukan ini sebagai peringatan serius. |
Jangkar kesegaran
Canary yang ditandatangani menyematkan tinggi blok dan hash Bitcoin terbaru pada saat penandatanganan. Hash itu tidak mungkin diketahui sebelum blok itu ada, yang membuktikan bahwa kenari itu ada ditandatangani setelah pada titik waktu tertentu, bukannya ditandatangani sebelumnya dalam jumlah besar beberapa bulan sebelumnya. Dialog Tentang menghubungkan jangkar ke penjelajah blok sehingga Anda dapat memeriksanya.