我注意到,在从apt安装软件包时,有时我们会执行如下操作:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \如果我正确理解,我们在这里所做的就是从https://download.../gpg中获取一个GPG公钥,并将其放入/usr/share/keyrings/docker-archive-keyring.gpg中。然后,我们告诉apt -“当您从https://download.docker.com/...下载包时,验证这些包是由属于这个公钥的私钥签名的”。
所以我不太明白:如果我们相信它是https://download.docker.com/..的另一边的Docker --而且我们是从这里获得公钥的--那么为什么我们需要用gpg密钥来验证来自那里的包呢?
听起来像是我自己签名的证书。
我是不是漏掉了什么?
发布于 2022-09-03 20:04:12
这是出于多种原因,而且它们都围绕着中世纪袭击中的人 ( MITM ) --特别是,在未来的任何情况下,你都会受到MITM攻击或其他恶意重定向,在获得好密钥之后,被重定向到“假下载源”。
如果您处于最糟糕的情况--您的系统已经被破坏,并被恶意行为者重定向到一个坏站点(简称“MA”)--那么您将被排除在外,这并不能保护您,因为您将下载MA的密钥。这并不是保护PGP密钥和密钥环的目的,而是为了保护您免受未来的MITM攻击。
在这个例子中,您已经被破坏了,并且正在使用的密钥与此无关,因为MA可能在此时控制您的计算机、网络、数据等。然而,最常见的保护场景是从干净的环境/系统开始,然后从合法的源安装软件。(见下一节)
但是,从受损害的环境开始并不是关键sigs所保护的“常见场景”。最常见的情况是: uou在一个干净的系统上,具有干净的更新,不妥协您的系统,您使用的DNS服务器,您所连接的网络等等。
你去安装码头,并从真正的码头的网站获得码头钥匙。然后安装Docker,密钥将验证。
在未来的某个时刻,MA已经控制了你的流量如何流向互联网,并将你重新引导到一个‘假’码头下载网站。
除非MA从Docker窃取了PGP密钥及其相应的私钥,否则您的apt系统将显示download.docker.com上的签名不匹配,并且在您的环境中发生了一些奇怪的事情,并且不会应用MA的“坏”存储库重定向的更新。
这就是密钥签名和关键部分所要保护的:您将在未来成为MITM。如果你已经妥协了,它不能保护你,没有什么能保护你。它保护你时,你开始干净和不妥协,然后成为妥协的原因。
这也是为什么您应该根据已知的好密钥指纹来验证密钥指纹。大多数好的存储库提供者都有自己的指纹,可以手动进行验证,这样您就不会只依赖命令来获取和信任密钥。
https://askubuntu.com/questions/1427399
复制相似问题