在Linux上使用PGP签名验证文件完整性
来源:互联网 发布:淘宝屏蔽粉丝数 编辑:程序博客网 时间:2024/06/05 20:15
文件在下载及存储过程中可能由于传输错误、硬件故障、文件系统错误等网络、硬件和软件方面的原因导致文件损坏,也可能在传输过程中受到攻击(如“中间人攻击”)导致下载的文件被篡改或者下载到了其它非原始文件。所以,在使用一个文件之前(如安装一个软件或操作系统)最好先对文件进行完整性(或者说“原始性”)的检验。常用的文件校验方法有SHA、MD5、CRC和PGP签名等。本文主要阐述一下在Linux上使用PGP证书校验文件完整性的操作步骤。
下载提供有PGP证书的文件
这里我们下载的是VeraCrypt(下载地址:点击这里)。我们可以看到,每个文件后面都提供有对应的PGP Signature,下载时我们要把文件和文件对应的PGP Signature都下载下来放到一个文件夹里。
注:下面的操作步骤使用Ubuntu进行演示。需要注意的是,在Ubuntu中不能校验Windows下使用的文件对应的PGP数字签名。如图:
在文件和文件PGP签名所在的文件夹中打开终端
输入gpg -–verify PGP签名文件名
如我这里的PGP签名文件名是“veracrypt-1.21-setup.tar.bz2.sig”(签名文件一般以.sig或.asc结尾),所以我输入的命令就是
gpg –verify veracrypt-1.21-setup.tar.bz2.sig
回车执行后如下图所示。这一步操作的目的主要是为了获取从公钥服务器上下载公钥的“钥匙号”,如图中的钥匙号为“54DDD393”。
但是,在上图中我们可以看到“完好的签名”这一提示,这表明PGP校验已经完成(“gpg -–verify PGP证书文件名”这一命令本身就可以在已经导入公钥的前提下直接校验文件完整性,但是在没有导入公钥时运行这一命令可以使用得到的钥匙号去公钥服务器上下载公钥)。这是因为我之前已经进行过一次检验,公钥已经导入到了本地,下面我们把本地公钥删除,重新进行一次校验。我们可以使用“gpg -k”命令查看当前系统中的公钥:
现在可以知道,公钥pubring.gpg在一个名为“gnupg”的隐藏文件夹里,我们进到这个文件夹里,用rm命令将它删除:
然后再执行“gpg -–verify PGP证书文件名”:
这次的运行后仍得到了钥匙号,但是没有出现“完好的签名”这样的提示,而是“无法检查签名”,这说明本地此时并没有可以用于检验签名的公钥。
注:在这里我们可以看到,我们要验证的是PGP签名,使用的却是“gpg”命令,关于PGP和GPG的更多内容可以查看我的另一篇博文电子邮件加密技术初探
输入gpg –keyserver hkp://pgp.mit.edu –recv-keys 钥匙号
输入gpg -–verify PGP签名文件名
至此,我们看到了“完好的签名”这样的提示,这说明文件本身基本可以保证是完整的。
注:上一步出现了警告“没有找到任何绝对信任的秘钥”,这一步操作也有类似的警告“没有证据表明这个签名属于他所声称的持有者”。也就是说,秘钥本身也是可以被伪造的,PGP签名只是检测文件是否完整的一个参考。PGP签名的原理就是使用非对称秘钥加密技术和数字摘要技术产生一段只有文件的原始发布者才能产生的数字串。我们对文件进行PGP签名校验,就是要使用公钥解密文件的原始发布者使用私钥加密的签名,核对上述中的“数字串”是否和原来一致。为了方便获取公钥,人们一般把公钥上传到公钥服务器中。有时候人们为了防止PGP签名本身被伪造,还提供了SHA256用于对PGP签名文件本身的完整性进行检测。
附:PGP公钥服务器列表:
http://keyserver.ubuntu.com
http://keys.gnupg.net
hkp://subkeys.pgp.net
hkp://pgp.mit.edu
hkp://pool.sks-keyservers.net
hkp://zimmermann.mayfirst.org
有一个网站不断统计着几乎所有公钥服务器上的公钥数目(网站地址:https://sks-keyservers.net/status/),如图:
其实我一直觉得Linux操作系统很难使用,一方面在Windows上常使用的软件很少有支持Linux的,另一方面使用Linux时总会遇到各种障碍。当我学会在Linux上使用PGP证书校验文件完整性之前,我对Linux优势的了解仅仅是占用内存小且开源免费,自从实际操作了PGP证书校验文件我才真正开始感觉到了Linux在处理一些专业任务上的便捷性。
end
更多内容请访问我的个人主页http://zhaokaifeng.com/
- 在Linux上使用PGP签名验证文件完整性
- 如何使用pgp证书来验证文件的完整性
- 在Windows下使用Gpg4win对文件进行完整性校验(PGP校验)
- 在Linux上如何验证已下载文件的真实性和完整性
- Linux系统中校验下载文件的完整性方法(MD5,SHA1,PGP)
- Linux系统中校验下载文件的完整性方法(MD5,SHA1,PGP)
- Linux系统中校验下载文件的完整性方法(MD5,SHA1,PGP)
- Linux系统中校验下载文件的完整性方法(MD5,SHA1,PGP)
- 验证下载文件完整性
- PGP 加密、解密 和 验证签名 函数 大全
- java中使用MD5验证文件的完整性
- gmail pgp 签名工具
- 使用PGP加密你的文件
- linux文件完整性校验
- 通过将目录服务器配置为拒绝不请求签名(完整性验证)的 SASL (协商式、Kerberos、NTLM 或摘要式) LDAP 绑定和在明 文(非 SSL/TLS 加密的)连接上执行的 LDAP 简单绑定
- 在WindowsServer2003-SP2-x86-CHS补丁 安装补丁时不能验证update.inf文件的完整性,请确定加密服务正在此计算机上运行
- 解析文件,要验证文件完整性
- GPG加密解密及文件完整性验证
- 一个简单的防火墙(iptables)实例
- 对volatile关键字的理解
- Your project contains C++ files but it is not using a supported native build system
- 枚举——完美立方和
- Java优先级
- 在Linux上使用PGP签名验证文件完整性
- ion-input在ionic中的input,带label的带icon的输入框
- 递归——苹果数
- (10)外键、级联操作
- 文章标题
- Problem A: 2016
- android常用adb快捷命令一览表
- java相关集合和java各种集合的线程安全
- C#日志系统 Log4net使用总结