如何在執行錢包前驗證二進位檔
修改過的錢包二進位檔,是針對自我託管使用者能跑的最危險攻擊——只要換掉一次下載,錢包此後產生的每把金鑰都被偷走。緩解辦法是簽章驗證,幾乎每個 Monero 錢包都附了工具。下面是實用流程。
為什麼這件事重要
錢包二進位檔是靜態分發的(GitHub Releases、官方網站、鏡像)。每一個分發點都是目標:CDN 被入侵、DNS 被劫持、在某些司法轄區下被迫簽章——這些都已經發生過。防禦方法是把你下到的檔案,跟一個你獨立信任的簽章核對——通常是由維護者控制的 GPG 金鑰。
最低限度的核對(每個錢包都該做)
- 下載二進位檔,連同專案併發布的
SHA256SUMS或hashes.txt。 - 本機算雜湊:
sha256sum monero-wallet-cli(Linux/macOS)或Get-FileHash(PowerShell)。 - 比對本機雜湊與發布檔裡的那一行。一致 = 你拿到的就是專案發出來的逐位元相同檔案。
這能擋下 CDN 篡改與傳輸壞檔。擋不下專案金鑰被偷——那要走第二步。
GPG 簽章驗證(真正的防禦)
- 從另一個來源匯入維護者的 GPG 金鑰——金鑰伺服器、維護者個人站、或某條多年前提交的指紋。不要從發出二進位檔的同一個網域去匯入。
- 驗證 SHA256SUMS 簽章:
gpg --verify SHA256SUMS.sig SHA256SUMS。看到「Good signature from <maintainer>」與你預期的指紋。 - 檢查信任鏈:確認你過去幾個版本都用過同一個指紋。你真實認識的人在 web of trust 上簽過會更強。
- 到這一步再做第一步的雜湊比對。
可複現建置 —— 黃金標準
有些 Monero 生態的專案(Monero CLI 本身、Feather Wallet)會發布可複現建置說明。你在自己機器上編譯出來的二進位檔,與專案發布的逐位元相同。如果不一致,要嘛你的建置環境有錯,要嘛專案的發布版被動過手腳。這是最嚴格的防禦——背景見 reproducible-builds.org。
各類錢包的失敗模式
- 行動錢包:App Store 簽章取代 GPG 驗證。你是在信任 Apple/Google + 發布者開發者帳號。較不嚴格但仍有意義。請對比發布者帳號名稱是否與專案文件一致。
- 網頁錢包:無法驗證——程式碼在每次載入時動態送來。任何你不想損失的金額都不要放網頁錢包。
- 透過 Telegram / Discord 連結的「便攜」下載:絕對不要。請從專案的正式網域取得二進位檔,不是聊天連結。
- 放在「便利」repo 裡的預編譯版本:除非該 repo 擁有者自己也發布簽章,否則一律視為未驗證,重新從正式來源抓。
我們推薦的錢包目前狀況
- Monero GUI / CLI:SHA256SUMS + 由 binaryFate 用長期指紋做 GPG 簽章。有可複現建置文件。
- Feather Wallet:SHA256SUMS + 由 tobtoht 做 GPG 簽章。有可複現建置文件。
- Cake Wallet:行動版依賴 App Store 簽章。桌面版有 checksum。
- Monerujo:Android,F-Droid + Play Store,兩邊都簽。APK SHA256 已公布。
推薦錢包 —— 全部可做簽章驗證
-
Monero GUI
→ /wallets/monero-gui
官方桌面版。GPG 已簽,可複現建置有文件。
-
Feather
→ /wallets/feather
桌面 XMR 錢包。GPG 已簽,可複現建置有文件。
-
Monerujo
→ /wallets/monerujo
Android。F-Droid + Play Store 都有簽章。APK SHA256 已公布。
-
Cake Wallet
→ /wallets/cake-wallet
行動(App Store 簽章)。桌面版有 SHA256 checksum。
更多指南
發現疏漏? 提交條目 · @xmr_club · @xmrclub_bot.