比特币迎来新技术更新,Core开发者教你如何验证客户端

今天,比特币迎来了新的发展。核心开发人员Luke Dashjr宣布发布Knots0.19.1.knots20200304客户程序。

(注意:Bitcoin Knots是Bitcoin Core的派生客户端,它具有Bitcoin Core尚未实现的某些功能。代码库主要由Luke Dashjr维护)

关于新客户端的更新内容,您可以在这里找到它:

摆在我们面前的问题是如何验证自己下载的客户端是安全的并且未被恶意篡改?当然,有必要确保从受信任的网站上进行下载是必需的,那么我们如何确保该网站是否已被攻击者篡改?

这也是本文的内容,原始作者是Luke Dashjr。

以下是翻译:

期望

以下说明要求您了解文件在计算机上的存储方式(理论上,如果您知道目录/文件夹是什么),以及如何使用命令行来运行程序和访问文件。如果您不了解此概念,请先从手册开始。

请注意,本文中的说明只能帮助您安全地安装比特币客户端。它不会帮助您保护硬件,操作系统或阻止安装引入恶意软件的其他应用程序。通常,如果计算机的其他部分受到威胁,则无论您如何验证自己安装的客户端,您的节点也将受到威胁。

如果您想要一个绝对安全的节点,除了本文中提到的说明之外,您至少需要阻止使用侧门硬件(包括Raspberry Pi,Intel或AMD制造的任何产品),并且只能运行受信任的对于基于Linux的操作系统,仅安装或使用操作系统供应商提供的软件,或将GnuPG用于其他经过验证的软件(如本文所述),并确保将软件更新为最新的漏洞补丁程序版本。

即使您未能解决此问题并因此无法获得最大的安全性,这也不意味着您应该放弃:无论如何,验证比特币节点软件仍然是一个好主意。

概述

要确保已安装的比特币客户端是安全的,请执行三个重要步骤:

验证OpenPGP密钥;

验证签名;

验证文档本身;

每个步骤都取决于上一步的成功。尽管我们可以跳过一个步骤,但重要的是要了解,除非所有步骤都成功,否则我们尚未验证安装。

请注意,例如,我将在ppc64le Linux的BitcoinKnots v0.1 [k2]0.1.knots20200104客户端上验证我自己的签名,并验证其他文件或其他文件的签名,您需要修改命令行以使用指纹或文件名。

第0步:安装加密软件GNU Privacy Guard(GPG)

开始之前,您需要确保已安装GNU Privacy Guard(GPG)工具,该工具是文件加密验证所必需的。

如果您正在运行基于Linux的系统,通常可以通过操作系统供应商来安装它(最近,通常默认情况下会安装它),并且可以运行gpg –version进行检查。如果没有,请尝试使用以下命令之一进行安装(如果失败,请转到下一个命令):

易于安装gnupg

dnf安装gnupg2

yum install gnupg2

出现app-crypt / gnupg

pacman -S gnupg

apk添加gnupg

如果不幸的是使用Windows或macOS操作系统,则可以从官方网站下载GnuPG,但我不知道有任何安全的方法可以验证这些下载。当然,它们确实提供了签名,但是就在这里。鸡和蛋的问题:安装副本之前,您无法验证此签名!

第1步:验证OpenPGP密钥

可以说,此步骤是验证过程中最困难的部分:您需要确认您实际使用的密钥是您信任的人发布的正确密钥。如果您不注意,则可能会得到假的“ Luke Dashjr”密钥!

每个OpenPGP密钥都有一个“指纹”,它是40个十六进制字符(数字0-9和a-F),有时会显示空格以便于阅读。如果您确定所使用的密钥的指纹与受信任的签名者的指纹匹配,那么您知道您拥有正确的密钥。

获取密钥或指纹

验证钥匙的最安全方法是亲自见面并确认钥匙的“指纹”。几乎没有人记得他们的秘密指纹,因此我们可能不得不在笔记本电脑或移动电话上查找它们。有时(通常是在会议上)可能会有“关键签名人”,并且一群人会在会议上确认其他人。每个参与者都必须亲自阅读其指纹,或自动确认每个人看到或看到的东西都是正确的。如果您有机会参加这样的会议,这是一次验证许多密钥的好方法。

如果您不感兴趣或有机会见面,则最好从多个来源验证密钥。有时,会议会发布演示视频,并且秘密密钥的指纹可能会显示在幻灯片上。当然,由于这些“深造假”新技术的存在,需要注意的是,视频中的幻灯片易于操作。

开发人员通常在其网站上发布其密钥或指纹,并且可能还有其他方式(例如,我的密钥或指纹将被放置在个人网站和GitHub上)。

如果您已经安装了您信任的软件的副本,则有时它会包含验证更新所需的密钥(当前Bitcoin Core仅包含源代码)。

检查密钥文件的指纹

要查看密钥文件的指纹,可以使用以下命令:

gpg –import-options仅显示–import –with-fingerprint luke-jr.asc

这将输出有关密钥文件的很多信息,并且相关信息位于顶部:

pub rsa8192 2012-03-23 [SC] [过期: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

或者,如果您只有这样的指纹(输入要使用的秘密密钥的指纹!):

gpg –keyserver hkp:// –recv-key E463A93F5F3117EEDE6C7316BD02942421F4889F

第2步:验证签名

现在您知道要用于验证的密钥比特币客户端更新,下一步就是检查签名是否有效。

在继续此步骤之前,您必须确保签名者的私钥副本是最新的。如果不这样做,您可能会收到一条消息,提示密钥已过期。运行(使用所需的指纹):

gpg –keyserver hkp:// –refresh-key E463A93F5F3117EEDE6C7316BD02942421F4889F

接下来,(除了正在测试的程序文件之外),您将需要两个文件:包含文件指纹列表的“ .assert”文件和包含列表签名的“ .assert.sig”文件。这是因为我们要做的不是对程序文件本身进行签名,而是对所有文件进行指纹识别,然后对列表进行签名。因此,您将需要这两个文件。

Bitcoin Core的“断言”文件对发布在这里:;

比特币结的“声明”文件对发布在这里:

请注意,每个签名者都有一个单独的文件对。如果要验证是否有多个人对您的文件签名(应该这样做),则需要检查每个文件对。此外,您还需要确保获取要验证的文件版本!

在列表中找到所需的文件后,单击链接以在浏览器中打开文件,然后右键单击“原始”或“下载”按钮并选择“另存为”。

一旦有了这两个“断言”文件,就可以运行以检测签名(将文件名调整为特定的.assert.sig)

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

如果此步骤成功,您将获得以下结果:

gpg:签名制作为UTC 2020年1月19日上午03:47:15

gpg:使用RSA密钥E463A93F5F3117EEDE6C7316BD02942421F4889F

gpg:“卢克(Luke Dashjr)”的好签名[最终]

请注意,密钥的指纹以斜体显示。指纹必须与您在步骤1中验证的密钥匹配,否则它可能会被其他人签名!关于“良好签名”的部分也很重要,但是名称和电子邮件地址并不重要。如果指纹错误,则可能都是伪造的。

假设一切顺利,您现在知道密钥的控制器保证了“ .assert”文件,并且您可以继续验证是否在“ .assert”文件中列出了您的实际程序文件。

第3步:验证文件本身

要验证程序文件,必须先对其进行加密和哈希处理(基本上是提取其指纹)。

这是通过一个简单的命令完成的(请小心替换要验证的实际文件名!):

Linux:sha256sum比特币-0.1 [k2]0.1.结20200104-powerpc64le-linux-gnu.tar.gz

Windows:certUtil -hashfile bitcoin-0.1 [k2]0.1.knots20200104-win64.zip SHA256

macOS:shasum -a 256比特币-0.1 [k2]0.1.结20200104-osx-unsigned.dmg

这将输出以下内容:

d370692590c4546ac0de250da91c6c288d9ee5252f1a4b857a5b80c4e3d81149比特币-0.1 [k2]0.1.结20200104-powerpc64le-linux-gnu.tar.gz

这是文件内容的指纹,后跟指定的文件名。

现在,在任何纯文本编辑器/查看器中打开“ .assert”文件,然后查找指纹。它应该在底部的“ out_manifest”部分中。如果您达到“ in_manifest”或“ base_manifests”,那么您已经走得很远了。

如果您在“ .assert”文件中找到该文件,则说明您已经拥有该文件与签名者保证的文件相同(您将位于文件“ .assert”左侧)指纹(请在其中输入文件名,该文件名可能与您的文件名相同)。

如果“ .assert”文件中缺少该文件,则可能表明您使用了错误的“ .assert”文件,或者您的文件不匹配(在这些情况下,您将位于预期的文件中请参阅名称旁边的另一个指纹)。如果列出的文件具有不同的指纹,请不要打开文件,而要保存文件(我们可能会要求您提供副本),然后与受影响项目的安全团队联系。