阅读有关攻击者成功替换大型项目代码的最新消息后,自然会产生一个问题:如果代码已签名,这怎么可能! 忽略加密领域的安全规则是一个矛盾的事实,因此,这是一个事实,因此为了使本文不再成为撒谎的人,我选择分析的不是新手,而是CoinMarketCap评级最高的加密货币。 而且,您猜对了,但没有白费。
让我们看看在金融科技革命的大本营中数字签名的使用情况。
动机
如您所知,官方站点和加密项目的github配置文件被黑客入侵的情况经常发生,恶意代码通过该漏洞进行传播。 有时替换钱包地址,在其他情况下替换分布式软件。 黑客方法不同:对负责数据传递的网络节点之一进行攻击,并执行数据片段的隐藏替换。 在视觉上很难发现欺骗,这正是网络罪犯所使用的。 有几种方法可以防御这种攻击。 PGP签名被认为是标准的:发布签名的验证金额。 为此,必须正确分配PGP密钥。 例如,在各种资源上发表(最好是两种以上)。
分析方法
为了进行分析,我使用了官方资源,这些资源是我从各种来源获得的链接。 然后他开始收集来自不同方向的信息。 该分析考虑了用户软件和SDK的发布。 为了进行分析,未采用基于智能合约的代币或项目,仅采用了加密货币。
结果
专案 | 结果 |
---|
比特币核心 | 一键发布密钥和代码 |
以太坊葛 | 一键发布密钥和代码 |
以太坊SDK | 没有签名 |
平价 | 没有签名 |
Xrp | -- |
莱特币 | 一键发布密钥和代码 |
卡尔达诺 | 没有签名 |
卡尔达诺 | 没有签名 |
恒星 | 未发布的密钥 |
恒星SDK | 未签名的版本,带有未发布密钥的签名 |
IOTA IRI | 没有签名 |
IOTA钱包 | 没有签名 |
Tron核心 | 没有签名 |
Tron钱包 | 没有签名 |
新桂 | 没有签名 |
新cli | 没有签名 |
门罗 | 一键发布密钥和代码 |
短跑核心 | 一键发布密钥和代码 |
达世币电 | 没有签名 |
NEM纳米钱包 | 没有签名 |
尼姆尼斯 | 未发布的密钥 |
以太坊经典 | * |
Qtum核心 | 没有签名 |
零现金 | 未签名的版本 |
(*)以太坊经典使用第三方软件,并且不会发布信息来确认发行。
常见错误
- 缺乏签名( 10/15 ):
它可能未签名为可执行代码,但是未签名的库和应用程序软件(如电子钱包)更为常见。 - 未发布密钥签名( 2/15 ):
该代码由几位未在任何地方发布密钥的开发人员签名,因此此类签名无用。 - 在一个源中发布密钥和代码( 5/15 )。
一个非常常见的错误是通过第三方资源上的链接发布密钥,或者以站点形式创建单个受信任的源。 因此,要替换数据,仅入侵站点就足够了。
非典型错误
Monero提供了查看带有签名数据的文件夹中的密钥的功能。 从本质上讲,这是一个关键的分配错误,导致完全丧失可靠性。
注意!
- Litecoin发布密钥,包括作为到受信任资源pgp.mit.edu的链接。
- 以太坊和Zcash发布详细的密钥列表:
- 以太坊发布CI服务密钥。
原因
- 缺乏统一的战略 。 如今,没有适合大多数开发人员的指令来解决确保在不同平台上确保代码交付的问题。 业余表演占很大比例。
- 过时 。 如果查看PGP技术的主要站点,您会感到该技术被遗忘了:
- 缺乏用于发布和验证签名的综合工具 。 即使有需求,用户也会在途中遇到严重的障碍-许多用户不知道如何并且不准备使用强制性控制台来验证签名。 即使对于开发人员来说,使用签名也不是一件容易的事。
- 不推荐使用的密钥交换协议 。 在21世纪,当开发人员几乎从来没有亲自见过面时,以p2p为基础安排密钥交换变得不太方便,并且需要工具来更快地分发和撤消签名。
小费
在这种情况下的最佳提示:
- 按任务分开密钥(这将有助于避免主密钥泄漏或使用开发人员密钥签署发布)。
- 在官方网站和Github上有多个来源的重复信息(同时破解两个资源比一个更困难)。
- 生成易于阅读的网址(它们更容易记住和检查)。
使用说明书
如果您尚未使用PGP密钥,我强烈建议您在工作流程中包括签名验证,即使您不开发金融项目,也最好在需要此功能之前将其自动使用。 从一个小时的时间来看,足够的力量足以开始,但是随后所获得的愉悦感无法衡量。
在Git中使用GPG- 下载密钥管理软件:
- Linux(无需安装,请使用
gpg2
)。 - MacOS GPG工具 。
- Windows GPG4Win 。
- 生成密钥:
> gpg2 --gen-key
- 我们得到密钥的指纹:
> gpg2 --fingerprint user@localhost gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u gpg: next trustdb check due at 2020-07-01 pub rsa2048 2018-07-02 [SC] [expires: 2020-07-01] E5F1 2C73 045F 1E85 302D A9D5 269E 7C5E B852 68BB uid [ultimate] User <user@localhost> sub rsa2048 2018-07-02 [E] [expires: 2020-07-01]
- 将密钥添加到git(请参阅stackoverflow ):
> git config user.signingkey E5F12C73
- 我们通过添加-S开关来签署提交:
> git commit -S -m 'Signed commit'
导出密钥:
> gpg2 --armor --export user@localhost -----BEGIN PGP PUBLIC KEY BLOCK----- mQENBFs6VDsBCADzd5F4jaJr7Dzp11+h5CmnRNHGSTWOMQe+TSXljR351BCF9hS6 VrIizaPCVkLW/ATsqdf6vZEApvbQplwHecFPwMpFhusTOILk7lsuXm8w5CscqgBo KiZdSBa9bpWmFrSsPgD8/2VMlQdh+3uChOKapsLo7cHKXNuWX8b1L30twNwgavMc Sel/3clO7Bwp9cFftyktsM/HtSUu1oaE//dibS60HzwmscPHsIIoYsfUSCEOj08f DwK2vLbPilYKyE7fONJpXCSPk5pfDnNxzdFWylNBTQL8benhCtSyfabbtHmeywe+ VWfRAGf/BRjjb7meAMX5vO6qh1l4FfHVo7irABEBAAG0FVJ1bWtpbiA8c3BhbUBy dW1rLmluPokBVAQTAQgAPhYhBOXxLHMEXx6FMC2p1SaefF64Umi7BQJbOlQ7AhsD BQkDwmcABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJECaefF64Umi7e4kIALs2 0wbQ0g5557cIbN/eXeK+DsyZFyp3D95RoOnLgWiDknVBluRyPY1QFkjKgNNepMNr 7TM1eNev1CcSDLkuUxlLMrDH9AsAIVWFl7v1+/npJuHkazylU2DgssWICF0yKgWZ tzOQUEDwX7xwIJ3g5v44Lymq0hPi56FVv+rq15hkNsqIOyjDQNVGROUURyO/+vUP khOa2ryjWCpdBzoRNxSyVMlyoABLHwTfXDkCFHV9T7bOa/o0GqILOZ7wCBN9tT5C 38ellwu/HTCtmzZsWvl3a6g8JcunB9yV3RZFQgUDvLEjiVoY2qqn/SWgcl6QR2Ro aEwTKk/p3PU1Foz7mEC5AQ0EWzpUOwEIAPbKGT/xzJ9JvXhMyoOGQZNWkqyXKtV4 zVdfdjxkWMrsMD/C2K1CQ5HPafTM9G/kATGCAmoFPCdLwrc9QqOw3H8PNxnph3Ca irvp0ICj6KDiuCCuptJYICzllKriyLhUDyFkb7GPpRgHpKJZMVCkRbDEau3jcJEx jsdUnjf3gDpEnkuV1pwSxGFxTV3vHNQBqGbFG8mjVkfZSnB++e+tyKPhC5X0QFue K2AlHbnj0/uXZ9wYfRTOJsbW6myR0k1edo7Y5P93fhpW49wwaMTe2Q9p+m6zRguf 8vC9sGUB/eGD9+6OwtIZJ6ZlUa8/MYUBr9er/z+hl7ApdpibChCb8lUAEQEAAYkB PAQYAQgAJhYhBOXxLHMEXx6FMC2p1SaefF64Umi7BQJbOlQ7AhsMBQkDwmcAAAoJ ECaefF64Umi7e3UIAO9ixyXaKmsfWVB11tYPHP+9Xo2s0RRanNMyqAcp1se3jQBZ Z7gfr7DBFBFPU0KeOibWXysMz54hXImxDgYQPKFznzKB5463DiZt8pYjxdphX4/j m6ccw1GnpImRJHpu3mMPSItd/QDqEl87KqSw+IojaLDid3QeL0uRzi2k5/Jwz6ru QMCwdKIMBDPw936YOsfHjQx1RTY9NC59cW1i0lU813By1J80hd24aIJH5vVyYI/I suz153mZUZ+dmN0F6wfnuqNzeCfJRoHKh45ABDD3cRQ2kE76UQ4Kr0xb0G512yUO WJFT8ff3EWn1FulR7bmprA4HHACyx/otL7P777E= =zi5u -----END PGP PUBLIC KEY BLOCK-----
- 我们复制结果并将其添加到Github,Gitlab或Bitbucket界面中的可信密钥中。
结论
如今,代码交付基础设施遭受儿童疾病的困扰:碎片化,缺乏完善的实践,不符合实际情况的软件以及在数千名专家的仔细审查下的大型项目开发人员在安全方面甚至犯了简单的错误。 因此,请信任,但请检查%用户名%!