比特幣迎來新技術更新,Core開發者教你如何驗證客戶端

買賣虛擬貨幣

編譯:灑脫喜

"Don't Trust, Verify!"

今日,比特幣又迎來了新的進展,Core開發者Luke Dashjr宣佈了Knots 0.19.1.knots20200304客戶端的釋出。

(注:Bitcoin Knots是Bitcoin Core的衍生客戶端,其具有一些Bitcoin Core尚未實施的功能,該程式碼庫主要是由Luke Dashjr在負責維護)

關於新客戶端更新的內容,你可以在這裡找到:https://github.com/bitcoinknots/bitcoin/blob/v0.19.1.knots20200304/doc/release-notes.md

而擺在我們面前的問題是,如何驗證自己下載的客戶端是安全的,而不是經惡意篡改的呢?當然,確保從可信網站下載是必須的,那我們又如何確保該可信網站沒有被攻擊者篡改呢?

這也是本文要講的內容,原文作者是Luke Dashjr。

以下是譯文:

期望

以下的說明,要求你瞭解檔案在計算機中的儲存方式(理論上來講,如果你知道目錄/資料夾是什麼就可以了),以及懂得如何使用命令列來執行程式和訪問檔案。如果你不瞭解這些概念,請先從指南開始入手。

請注意,本文的說明只能幫你安全地安裝比特幣客戶端,其並不會幫助你保護你的硬體、作業系統,或者避免安裝其它引入惡意軟體的應用。通常,如果計算機的其他地方受到威脅,則無論你如何驗證自己安裝的客戶端,你的節點也會受到威脅。

如果你想要一個絕對安全的節點,除了本文提到的說明之外,你至少還需要避免使用後門硬體(包括樹莓派,英特爾或AMD生產的任何產品),而僅執行可信任的基於Linux的作業系統,僅安裝或使用你的作業系統供應商提供的軟體,或使用GnuPG進行了其他驗證(如本文所述)的軟體,並確保該軟體更新到最新的漏洞修復版本。

即使您無法解決這些問題,因此無法獲得最大的安全性,但這也不意味著你應該放棄:無論如何,驗證比特幣節點軟體仍然是一個好主意。

概述

要確保你所安裝的比特幣客戶端是安全的,有三個重要的步驟:

驗證OpenPGP金鑰;

驗證簽名;

驗證檔案本身;

每個步驟都取決於先前的步驟是否成功,雖然我們可以跳過一個步驟,但重要的是要了解,除非所有步驟都成功,否則我們就相當於沒有對安裝進行驗證。

請注意,舉例來說,我將在用於 ppc64le Linux的 Bitcoin Knots v0.19.0.1.knots20200104客戶端上驗證我自己的簽名,而要驗證其他人的簽名或其他檔案,你需要更改命令列以使用該指紋或檔名。

步驟0:安裝加密軟體GNU Privacy Guard(GPG)

在開始之前,你需要確保自己已安裝了GNU Privacy Guard(GPG)工具,這是檔案的加密驗證所需的。

如果你執行了一個基於Linux的系統,通常可透過作業系統供應商那進行安裝(最近,這通常會是預設安裝的),你可以透過執行gpg --version進行檢查。如果沒有,請嘗試使用以下命令之一進行安裝(如果失敗,請轉到下一個):

apt-get install gnupgdnf install gnupg2yum install gnupg2emerge app-crypt/gnupgpacman -S gnupgapk add gnupg

如果您不幸使用的是Windows或macOS作業系統,則可以從官方網站下載GnuPG,但我不知道有任何安全的方式可以驗證這種下載,當然,它們確實提供了簽名,但這裡就遇到了雞與蛋的問題:在你安裝好的副本之前,你無法驗證這些簽名!

步驟1:驗證OpenPGP金鑰

可以說,這一步是驗證過程中最困難的部分:你需要確認你實際使用的金鑰,是你信任之人所釋出的正確金鑰。如果你不小心,可能會得到一個假冒的“Luke Dashjr”金鑰!

每個OpenPGP金鑰都有一個“指紋”,即40個十六進位制字元(數字0-9和a-F),有時會顯示空格,以便於閱讀。如果你確保使用的金鑰指紋與受信任簽名者的指紋匹配,則你知道自己擁有了正確的金鑰。

獲取金鑰或指紋

驗證金鑰最安全的方法,就是親自見面,並確認金鑰“指紋”。幾乎沒有人記得他們的金鑰指紋,所以我們可能不得不在自己的膝上型電腦或手機上查詢,偶爾(通常是在會議上)可能會有“金鑰簽署方”,一群人在會議上確認其他人的指紋,每個參與者要麼親自朗讀自己的指紋,要麼手動確認每個人看到的或聽到的都是正確的。如果你機會參與這樣的會議,這是一個好的方法來一次性驗證很多金鑰。

如果你不感興趣或沒有機會親自見面,理想情況下應該從多個來源驗證金鑰。有時,會議會發布演示影片,其中的金鑰指紋可能會顯示在幻燈片中。當然,由於“deep fake”這些新技術的存在,要注意影片中的幻燈片是容易被操縱的。

開發人員通常會在他們的網站上釋出他們的金鑰或指紋,也許還有其他一些途徑(例如,我的金鑰或指紋,會放在個人網站、bitcoinknots.org、bitcoin.org以及GitHub上)。

如果你已經安裝你了你信任的軟體副本,有時它會包含驗證更新所需的金鑰(目前Bitcoin Core只包含原始碼)。

檢查金鑰檔案的指紋

要檢視金鑰檔案的指紋,你可以使用以下命令:

gpg --import-options show-only --import --with-fingerprint luke-jr.asc

這將輸出有關金鑰檔案的許多資訊,而相關資訊位於最上面:

pub rsa8192 2012-03-23 [SC] [expires: 2020-06-09]E463 A93F 5F31 17EE DE6C 7316 BD02 9424 21F4 889F

在本示例中,E463 A93F 5F31 17EE DE6C 7316 BD02 9424 21F4 889F就是我的金鑰指紋。

注意:如果GPG提示金鑰過期了,那可能也沒有關係!在步驟2中,你將更新到同一金鑰的最新版本,這通常會延長到期日期。

匯入已驗證的金鑰

無論你如何驗證金鑰,都應該確保記住你使用的是哪個金鑰,以便將來更新時可驗證使用的是同一個金鑰。即使你跳過了驗證金鑰步驟(這是不安全的),至少這將確保你的更新有相同的簽名者。

當你確信自己擁有的金鑰是正確的時候,你可以這樣匯入它(將luke-jr.asc替換為包含所需金鑰的檔名):

gpg --import < luke-jr.asc

或者如果你只有指紋,像這樣(把你想用的金鑰指紋放進去!):

gpg --keyserver hkp://keyserver.ubuntu.com --recv-key E463A93F5F3117EEDE6C7316BD02942421F4889F

步驟2 :驗證簽名

現在你知道要用什麼金鑰進行驗證了,下一步就是檢查簽名是否有效。

在繼續此步驟之前,必須確保簽名者金鑰的副本是最新的。如果你不這樣做,你可能會收到一條關於金鑰已過期的訊息。執行(使用你所需的指紋):

gpg --keyserver hkp://keyserver.ubuntu.com --refresh-key E463A93F5F3117EEDE6C7316BD02942421F4889F

接下來,(除了你正在檢查的程式檔案之外)你將需要兩個檔案:包含檔案指紋列表的“.assert”檔案和包含該列表簽名的“.assert.sig”檔案。這是因為我們所做的不是對程式檔案本身進行簽名,而是對所有檔案進行指紋識別,然後對該列表進行簽名。因此,這兩個檔案你都是需要的。

Bitcoin Core的“assert”檔案對釋出在這裡:https://github.com/Bitcoin-Core/gitian.sigs/find/master;

Bitcoin Knots的“assert”檔案對釋出在這裡:https://github.com/bitconinkots/gitian.sigs/find/Knots

注意,每個簽名者都有一個單獨的檔案對。如果你正在驗證是否有多個人簽名了你的檔案(你應該這樣做),則需要檢查每個檔案對。此外,你還需要確保自己正在獲取要驗證的版本的檔案!

在列表中找到所需檔案後,單擊連結在瀏覽器中開啟該檔案,然後右鍵單擊“Raw”或“Download”按鈕並選擇“連結另存為”。

一旦你有了這兩個“assert”檔案,你就可以透過執行來檢查簽名(將檔名調整為特定的.assert.sig)

gpg --verify bitcoin-core-linux-0.19-build.assert.sig

如果這步成功了,你就會得到下面的結果:

gpg: Signature made Sun 19 Jan 2020 03:47:15 AM UTCgpg: using RSA key E463A93F5F3117EEDE6C7316BD02942421F4889Fgpg: Good signature from “Luke Dashjr <[email protected]>” [ultimate]

注意金鑰的指紋是粗體顯示的。該指紋必須要和你在步驟1中驗證的金鑰匹配,否則它可能是由其他人簽名的!關於“好籤名”的部分也很重要,而名字和電子郵件地址卻不重要,如果指紋是錯誤的,這兩個都可能是偽造的。

假設一切順利,你現在知道“.assert”檔案是由所述金鑰的控制者提供擔保的,並且可繼續驗證你的實際程式檔案,是否是該“.assert”檔案中列出的。

步驟3:驗證檔案本身

要驗證程式檔案,必須首先對其進行加密雜湊驗證(基本上是提取其指紋)。

這是透過一個簡單的命令完成的(注意替換你正在驗證的實際檔名!):

Linux: sha256sum bitcoin-0.19.0.1.knots20200104-powerpc64le-linux-gnu.tar.gzWindows: certUtil -hashfile bitcoin-0.19.0.1.knots20200104-win64.zip SHA256macOS: shasum -a 256 bitcoin-0.19.0.1.knots20200104-osx-unsigned.dmg

這將輸出如下內容:

d370692590c4546ac0de250da91c6c288d9ee5252f1a4b857a5b80c4e3d81149 bitcoin-0.19.0.1.knots20200104-powerpc64le-linux-gnu.tar.gz

這是檔案內容的指紋,後跟指定的檔名。

現在,在任何純文字編輯器/檢視器中開啟“.assert”檔案,並查詢該指紋。它應該在頂部的“out_manifest”部分,如果你到達了“in_manifest”或“base_manifests”,那麼你已經走得太遠了。

如果你在“.assert”檔案中找到了它,那麼你已經驗證了你擁有的檔案,是與簽名者所擔保的檔案是相同的(你將在指紋右側的“.assert”檔案中看到它們的檔名,它可能與你的檔名是相同的)。

而如果“.assert”檔案中缺少該檔案,則可能表示你使用了錯誤的“.assert”檔案,或者你的檔案是不匹配的(在這種情況下,你將在預期的檔名旁看到另一個指紋)。如果檔案已列出,但有著不同的指紋,請不要開啟檔案,而是儲存它(我們可能會要求您提供副本),並與受影響專案的安全團隊聯絡。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;