为什么包/代码签名被认为更安全,以及它是如何工作的?

为什么包/代码签名被认为更安全,以及它是如何工作的?

这个问题有点儿菜鸟,但我一直在阅读有关签名以及它如何使 Linux 发行版更安全的文章。Docker 最近添加了镜像签名,这看起来很酷。为什么这如此重要?只是因为我可以可靠地知道,如果 A 说他们做了某件事,那么当我下载并安装该东西时,我可以做些什么来保证 A 确实创建了该东西?

我很难理解为什么这会让软件本身更加安全。如果 A 是恶意的怎么办?这只能由你自行决定吗?这似乎不是一个很好的系统。

从高层次来看,整个过程是如何运作的?我还阅读了有关 GPG 信任环的文章。GPG 是否使用与 ssh 或 https 相同的密钥?如果不是,那么有什么区别?

答案1

您的理解是正确的。软件包签名使您能够验证您下载的软件包是否来自受信任的开发人员。这消除了恶意分发服务器以任何方式更改已签名信息的可能性。

但正如你所说What if Person A is malicious? Is that just up to your discretion?——确切地- 签名过程与个人意图无关。它只会帮助您确保数据来自他们并且没有被篡改。

数字签名就像一本护照——它证明持有人的身份,但却没有告诉你持有人的意图。

我很难理解为什么这会让软件本身更加安全

因为它可以防止未经授权的人更改分发服务器上的软件包或源代码。例如,如果我在自己的计算机上托管 Linux 发行版的公共镜像,我可以用自己的恶意软件包替换合法的 OpenSSL 软件包。如果有人下载它并运行签名验证过程,它将失败,因为我更改了软件包。然后用户可以决定不安装它。

为了使该方案发挥作用,最终用户必须从开发人员处下载公共加密密钥并确认他们信任这些密钥。之后,他们应在操作系统中启用签名验证过程。

这是一个摘抄来自 Gentoo 文档中关于此主题的内容。

从高层次来看,整个过程是如何运作的?我还阅读了有关 GPG 信任环的文章。GPG 是否使用与 ssh 或 https 相同的密钥?如果不是,那么有什么区别?

虽然我可以尝试解释它,但我怀疑我能做得比https://security.stackexchange.com/能。

此外,YouTube 还充足关于该主题的视频。

答案2

这个想法是,你知道 A 是谁,并且有理由相信他。成千上万的人也信任 A,所以如果他们进行了恶意构建,就会有很多人发现。由于恶意构建会被签名,所以他们会有证据证明他们被 A 背叛了,而不仅仅是证明某个地方存在某种问题(哎呀,也许他们自己进行了恶意构建)。

相比之下,如果没有代码签名,您必须信任获取代码的整个路径。如果您收到恶意代码,您不知道该责怪谁或不再信任谁。

相关内容