PUB:20141017 How to verify the authenticity and integrity of a downloaded file on Linux

@geekpi
This commit is contained in:
wxy 2014-12-04 23:52:45 +08:00
parent 38909dfa5d
commit 3f9ed17fd2

View File

@ -1,19 +1,19 @@
如何在Linux上验证下载文件的可靠性和完整性
使用 GnuPG 加密签名来验证下载文件的可靠性和完整性
================================================================================
当你从网上下载一个文件后比如安装程序、ISO镜像或者一个压缩包文件可能在不同的情况下发生了损坏比如由于线路传输错误、中断的下载、存储硬件错误、文件系统错误等等。除了这些错误文件还可能在下载前或者下载中的攻击而被有意地篡改了。比如一个攻破证书颁发机构的攻击者可以实施一个MITM攻击中间人攻击欺骗你从HTTPS网站上下载隐藏恶意软件的文件。
要保护你自己免受这些问题的困扰,建议你验证从网上下载的文件的可靠性和完整性。特别是你下载了一个非常敏感的文件的时候)(比如:操作系统镜像、二进制应用程序、可执行安装包等等),盲目地相信下载的文件不是一个好习惯。
要保护你自己免受这些问题的困扰,建议你验证从网上下载的文件的可靠性和完整性。特别是你下载了一个非常敏感的文件的时候)(比如:操作系统镜像、二进制应用程序、可执行安装包等等),盲目地相信下载的文件不是一个好习惯。
一个快速和简单地验证下载文件的完整性的方法是使用不同的校验工具比如md5sum、sha356sum、cksum来计算和比较校验码比如MD5、SHA、CRC。然而然而校验容易受到[碰撞攻击][1],而且同样不能用于验证文件的可靠性(比如:拥有者)。
integrity by using GnuPG (GNU Privacy Guard).
如果你想要同时验证下载文件的可靠性拥有者和完整性内容你需要依赖于加密签名。本教程中我会描述如何使用GnuPGGNU Privacy Guard来检查文件的可靠性和完整性。
本例中我会验证一个从https://onionshare.org上下载的磁盘镜像。这个网站中发行商会提供他们的公钥还有它用于密钥验证的指纹。
本例中我会验证一个从 https://onionshare.org 上下载的磁盘镜像。这个网站中,发行商会提供他们的公钥,还有它用于密钥验证的指纹。
![](https://farm4.staticflickr.com/3933/15360287249_1bc4380a67_z.jpg)
至于下载的文件,发行也会提供它相关的PGP签名。
至于下载的文件,发行也会提供它相关的PGP签名。
![](https://farm6.staticflickr.com/5597/15360894527_e12bedce63_z.jpg)
@ -35,7 +35,7 @@ integrity by using GnuPG (GNU Privacy Guard).
![](https://farm6.staticflickr.com/5612/15360848908_ae171c485e_z.jpg)
在生成你会被要求提供你的姓名和email还有保护你私钥的密码。你同样也可以在键对要过期的时候选择默认不会过期。依赖于你选择的key的大小在1024和4096位之间key生成会花上几分钟或者更多这由于它要求收集来自你桌面活动的大量的随机数据。(比如键盘输入、鼠标移动、磁盘访问等等)。
在生成键对期你会被要求提供你的姓名和email还有保护你私钥的密码。你同样也可以选择键对何时过期默认不会过期。依赖于你选择的key的大小在1024和4096位之间key生成会花上几分钟或者更多同时它要求收集来自你桌面活动的大量的随机数据。(比如键盘输入、鼠标移动、磁盘访问等等,所以这个时候随便动动鼠标键盘什么的)。
一旦key生成完毕后公钥和私钥会存储在~/.gnupg目录。
@ -45,7 +45,7 @@ integrity by using GnuPG (GNU Privacy Guard).
验证下载文件的第一步是与任何提供文件下载的人建立信任。出于此,我们下载了这个文件的公钥,并且验证公钥的拥有者是否是他或者她自称的。
在下载文件拥有者的公钥后:
在下载文件拥有者的公钥后:
$ wget https://onionshare.org/signing-key.asc
@ -55,7 +55,7 @@ integrity by using GnuPG (GNU Privacy Guard).
![](https://farm6.staticflickr.com/5613/15360894397_48fec1ef05_z.jpg)
一旦拥有者的共要导入后他会像下面那样打印出一个key ID比如"EBA34B1C"。记住这个key ID。
一旦拥有者的公钥导入后他会像下面那样打印出一个key ID比如"EBA34B1C"。记住这个key ID。
现在,运行下面的命令检查导入的公钥的指纹:
@ -65,7 +65,7 @@ integrity by using GnuPG (GNU Privacy Guard).
你会看到key的指纹字符串。把这个和网站上显示的指纹做对比。如果匹配你可以选择信任这个文件拥有者的公钥。
一旦你决定相信这个公钥你可以通过编辑key来标记它
一旦你决定相信这个公钥你可以通过编辑key来设置信任级别
$ gpg --edit-key EBA34B1C
@ -83,7 +83,7 @@ integrity by using GnuPG (GNU Privacy Guard).
要注意的是不需要这样明确地给一个公钥指派信任通过key的导入隐式地信任往往就够了。
给一个key隐式地分配给“完全”的信任就是任何其他由这个完全信任签名的key X都会被认为是对你有效的。通常上key验证依赖于一个复杂的机制称之为“[信任网][2]”
给一个key隐式地分配给“完全”的信任就是任何其他由这个完全信任签名的key X都会被认为是对你有效的。通常上key验证依赖于一个称之为“[信任网][2]”的复杂机制。
回到教程现在让我们检查导入的key列表。
@ -97,7 +97,7 @@ integrity by using GnuPG (GNU Privacy Guard).
一旦你建立了与文件拥有者和他的/她的公钥之间的信任关系,我们需要验证你从拥有者那边下载的文件的可靠性和完整性了。
本例中文件拥有者分别公布了一个文件和它相关的PGP签名.asc。签名的角色就是认证并且在文件中加入一个时间戳
本例中文件拥有者分别公布了一个文件和它相关的PGP签名.asc。签名所起的作用就是认证(文件)并且在其中加入一个时间戳。
一个典型的签名(*.asc看上去像这样。
@ -139,7 +139,7 @@ via: http://xmodulo.com/verify-authenticity-integrity-downloaded-file.html
作者:[Dan Nanni][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出