跳至內容
返回 Nymchat

知識庫 在引擎蓋下

驗證建置

只有當您正在運行的程式碼是先前的程式碼時,開源才有幫助 發表。 Nymchat 是確定性構建的,因此您可以從內部自行檢查 應用程式或從終端。

可重複的構建

建立應用程式會發出 build-manifest.json 包含來源提交,a 每個服務的 HTML、JavaScript 和 CSS 資產的 SHA-256 雜湊值以及單一 bundleHash 整個資產集。

輸出僅取決於來源內容 - 甚至記錄的建置時間也是 提交的時間戳而不是建置運行的時刻——因此任何人都可以重建相同的時間戳 commit 得到字節相同的檔案並且相同 bundleHash.

然後,GitHub Action 獨立重建每個提交並簽署建置來源 哈希和清單的證明,因此有一個簽名記錄綁定 bundleHash 到儲存庫中的提交,由除 部署。

關於對話框檢查的內容

關於 在標題中,在瀏覽器中即時執行檢查。

Nymchat 關於對話框,顯示版本、建立完整性和授權金絲雀狀態。
「關於」對話方塊:版本、建置完整性、授權金絲雀和與開發人員的直接聯繫。

它重新取得頁面實際運行的每個資產,使用 Web Crypto API 對其進行雜湊處理,然後 與清單進行比較。然後——這是重要的部分—— 重新計算 bundleHash 從哈希值 只是計算出來的,不是從 清單聲明的任何內容,並在存儲庫的簽名證明中查找 透過 GitHub API。

這就是阻止部署為其自身提供擔保的原因:將修改後的文件與 匹配清單仍然失敗,因為重新計算的哈希沒有證明。

地位方法
&查看;已驗證的官方應用程式 (n/n)每個資產都匹配,重新計算的捆綁散列由存儲庫證明, 該頁面由官方網域提供。
⚠ 已驗證版本·不是官方應用程序該程式碼是真實的且經過驗證的,但這是另一個網域上的鏡像。如果驗證失敗,鏡像將無法刪除此警告。
✗ 不匹配資產不會根據清單內容進行哈希處理。
✗ 非官方構建重新計算的捆綁雜湊沒有來自儲存庫的證明——一個自製的清單。
⚠ 無法取得出處無法存取 GitHub API,因此無法以任何方式檢查證明。

自己驗證一下

重建提交“關於”對話框名稱並進行比較:

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>"

列印的哈希值應與「關於」對話方塊中的哈希值和該提交的哈希值相符 建置來源運行摘要。您也可以直接使用 GitHub CLI 檢查簽名:

gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM

Android 和 iOS 應用程式

上面的檢查是一個網頁應用程式檢查,原因值得明確說明:一個本機應用程式 不能對自己做同樣的事情。你手機上運行的是編譯後的機器碼,而不是 來源在儲存庫中,並且應用程式可以在裝置上計算的任何內容都與 其他。

Android 可以退而求其次。已安裝的 .apk 是應用程式可以讀取的文件 和哈希值,並且每個已發布版本的哈希值已經是公開的:發佈到 Zapstore 簽署攜帶 APK 的 SHA-256 及其簽署憑證的 SHA-256 的 Nostr 事件。所以 安卓 關於 對話框對運行它的 APK 進行哈希處理,獲取已簽署的 APK 事件,僅保留由開發人員金鑰簽署的事件並進行比較。它顯示了兩個 哈希值也是如此,因此您可以在設備上重複檢查:下載已發布的 APK,運行 sha256sum 並親自觀察同一事件。

無法透過這種方式檢查從 Google Play 安裝的應用程式,而這並不代表有任何問題。Google 會使用自己的金鑰重新簽署每一次的上傳,並為每台裝置建置獨立的 APK,因此安裝到你手機上的並非開發者製作的原始檔案,其雜湊值也與任何已發佈的內容不符。該應用程式能識別出是透過 Play 安裝的並據此說明,而不是回報失敗。若要自行檢查版本,請直接安裝發佈的 APK。

iOS根本無法檢查。 Apple 會對每次下載進行加密和重新簽名 單獨的,因此在您的 iPhone 上計算的哈希對於您的 iPhone 來說是唯一的,並且不會匹配任何內容 在任何地方發布。 「關於」對話方塊直接說明了這一點,而不是顯示出令人放心的內容 毫無意義的狀態。如果您想要可以在 Apple 硬體上驗證的 Nymchat,請使用網絡 應用程序,它會檢查它正在運行的每個文件。

這些都沒有證明什麼

對應用程式本身運行的檢查無法證明該應用程式是誠實的——無論是誰修改了它 也可以刪除支票。它證明的是普通情況:您的副本 安裝的是已發布的副本。這是值得擁有的,因為它很有價值 比較是公開的,因此除了您之外的其他人可以檢查它們並提出不同意見。

權證金絲雀

權證金絲雀是一種按固定時間表發布的聲明,表明開發商已 不是 收到一項禁止透露的政府秘密命令—— 國家安全信函,FISA 命令。開發商可能被迫保持沉默 這樣的命令,但不能強迫說謊,所以金絲雀變質或消失是 本身就是訊號。

它住在 canary.json 位於儲存庫的根目錄並直接獲取 來自 GitHub,因此其歷史記錄是可審計的,與部署的網站所說的無關。 關於對話框對其進行顏色編碼:

顏色方法
綠色的 — 全部清除已簽署、目前且簽署與開發人員的金鑰相符。尚未收到任何秘密命令。
黃色的 — 逾期或未全部清除它沒有在規定的日期或它的 allClear 標誌是假的。不能排除沉默令。
紅色的 — 簽名無效或消失簽章與開發人員的金鑰不匹配,或檔案已完全刪除。將此視為嚴重警告。

新鮮度錨

簽名的金絲雀嵌入了簽名時最新的比特幣區塊高度和哈希值。 在區塊存在之前,不可能知道該哈希值,這證明金絲雀是 簽署 一個特定的時間點,而不是幾個月前批量預先簽署。 「關於」對話方塊將錨點連結到區塊資源管理器,以便您可以檢查它。