跳至內容
返回 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

權證金絲雀

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

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

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

新鮮度錨

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