关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » HTML5 »Linux上验证下载文件的真实性和完整性

    Linux上验证下载文件的真实性和完整性

    2014-11-05 00:00:00 出处:NOALGO博客
    分享

    你从互联网上下载了某个文件(比如安装程序、ISO映像文件或压缩文件)后,该文件可能因各种错误情形而遭到损坏,比如由于网络连接上的传输错误、下载受到中断、存储硬件有故障、文件系统错误等。抛开此类错误情形不说,文件还有可能被攻击者在下载过程中或下载前恶意篡改。比如说,攻击者对认证中心做手脚后,就能发动中间人(MITM)攻击,引诱你从假冒的HTTPS网站下载感染了恶意软件的文件。

    为了保护自己远离这些种类的问题,你从互联网下载文件时,我们常常建议验证文件的真实性和完整性。尤其是你下载了相当敏感的文件(比如操作系统映像文件、应用程序二进制代码和可执行的安装程序等)后,盲目地相信已下载文件可不是一个好习惯。

    想验证已下载文件的完整性,一个快速而简单的办法就是,使用各种校验和工具(比如md5sum、sha256sum和cksum),计算并比较校验和(比如MD5、SHA或CRC)。不过,校验和很容易遭到碰撞攻击,而且无法用来验证文件的真实性(即所有者)。

    假如你既想验证已下载文件的真实性(所有者),又想验证文件的完整性(内容),就要改而依赖加密签名。我在本教程中将介绍如何使用GnuPG(GNU隐私保护),检验文件的真实性和完整性。

    在这个例子中,我要验证可从https://onionshare.org下载的一个磁盘映像文件。在该网站上,文件发布者提供了官方公钥,还提供了用于验证的指纹。

    在Linux上如何验证已下载文件的真实性和完整性

    至于有待下载的文件,发布者还提供了相应的PGP签名。

    在Linux上如何验证已下载文件的真实性和完整性

    安装GnuPG,生成密钥对

    我们不妨先将GnuPG安装到你的Linux系统上。

    在Debian、Ubuntu及其他Debian衍生版上:

    $ sudo apt-get install gnupg

    在Fedora、CentOS或RHEL上:

    $ sudo yum install gnupg

    安装完毕后,生成密钥对,你在本教程中要用到该密钥对。

    $ gpg --gen-key

    在Linux上如何验证已下载文件的真实性和完整性

    密钥生成过程中,会要求你提供姓名和电子邮件地址,以及保护你私钥的密码。你还可以选择密钥对何时到期(默认情况下没有到期日)。密钥生成过程可能需要几分钟或更久,长短取决于你选择的密钥大小(1024位到4096位),因为它需要收集足够数量的随机性数据,这些数据来自你的桌面活动(比如键盘键入、鼠标移动、磁盘访问)。

    密钥生成完毕后,公钥和私钥都将存储在~/.gnupg目录中,供之后使用。

    在Linux上如何验证已下载文件的真实性和完整性

     

    导入文件所有者的公钥

    验证已下载文件的第一步是,导入文件所有者的公钥,与所有者建立信任关系则是可选步骤。

    首先,下载文件所有者的公钥:

    $ wget https://onionshare.org/signing-key.asc

    然后继续使用gpg命令,将公钥导入到你的密钥环:

    $ gpg --import signing-key.asc

    在Linux上如何验证已下载文件的真实性和完整性

    一旦所有者的公钥导入完毕,它会输出一个密钥编号(比如“EBA34B1C”),如上所示。记下这个密钥编号。

    现在,运行这个命令,检查已导入公钥的指纹:

    $ gpg --fingerprint EBA34B1C

    在Linux上如何验证已下载文件的真实性和完整性

    你会看到公钥的指纹串。将该指纹串与网站上显示的指纹进行比对,看看两者是否匹配。

    通常来说,验证公钥的所有者确实是他或她声称的那个人必须经历比简单的指纹比对更严格的过程,因为网站有可能经过伪造,以便与指纹匹配。只有密钥已经过了全面审查,确实属于某个人(比如你见过那个人,通过电话聊了聊,以证实对方的身份,等等),才可以信任对方的公钥。

    一旦你通过另外的一些手段验证了公钥的有效性,并决定信任公钥,就可以明确将你的信任赋予该密钥,如下所示。要注意:这一步是可选的,不需要你在使用前赋予明确的信任。

    $ gpg --edit-key EBA34B1C

    这个命令会显示GPG提示符:

    在Linux上如何验证已下载文件的真实性和完整性

    在GPG提示符下键入“trust”,这会让你可以选择该密钥的信任级别:从1到5。

    在Linux上如何验证已下载文件的真实性和完整性

    在这里,我决定赋予信任“4”。之后,键入“sign”,用你自己的私钥来对它签名,然后在GPG提示符下键入“save”:

    在Linux上如何验证已下载文件的真实性和完整性

    同样,这种明确将信任赋予公钥的方式不是必需的;通过仅仅导入密钥表明绝对信任常常就够了。

    将“完全”信任赋予密钥带来的影响是,假如另一个密钥X用这个完全信任的密钥来签名,密钥X也被你认为是有效的。通常而言,密钥验证依赖一种名为“信任网络”(web of trust)的复杂机制。

    回到本教程,现在不妨检验已导入密钥列表。

    $ gpg --list-keys

    在Linux上如何验证已下载文件的真实性和完整性

    你应该至少会看到两个密钥:一个是深度为0、终极信任(“1u”)的密钥;另一个是深度为1、完全信任(“1f“)的密钥,后者是由你自己早些时候签名的密钥。

    验证文件的真实性/完整性

    一旦你使用文件所有者的公钥与对方建立起了信任关系,我们现在就可以准备验证你从所有者那里下载的某个文件的真实性和完整性了。

    在我们这个例子中,文件所有者分开发布了文件和相应的PGP签名(*.asc)。签名的作用就是验证文件,并给文件加上时间戳。

    一个典型的签名(*.asc)看起来如下。

    —–BEGIN PGP SIGNATURE—–

    iQIcBAABCgAGBQJUJGhsAAoJEP1yCtnro0sc1jUP/ixNY/lKdrcMIAUoqlWKNE8f

    sj4SFiwREMew76w66GASDF03fa5zPX6EsS2kucgx8ZsfEiSmN5T0y2P/aSaXwZqF

    kywZVEzirKtca5AJ4DBzu6qrt9GgSw6JBJVv1oBJCMNyO+eAj341paR3MudvnyQz

    H/N5tc4Qcilzy6M184opGIzy4ipEmMXfLHsd7WJpAyn+tO/z3uhh9NkNuygZpaFr

    olpSWPE8revdDJyfMfSmb3ZrFmhLn7FCEltOi+a7SluvrMclizfnbec9rgLJtjo0

    CPDZY7tsWmmL0DA3VvpMVqGvkg/Dyhpn2IIDrNaLAlvGQ5aovf+4tjad5IHvyaWx

    4Gds93G6Hqvv5RwGx7OR3hgt2o0Y+qFsVDxVnPxerGhXeJXHzSDwLQMpdj9IoSU

    Ae/53XXnxqSN6POZcwHiHvbsv0pdlg0Ea0dDAAN0ZeINNyZf1R0tLjWkcgpvGCtv

    qkJuYFF9W9cWHraPY2ov5Hs/JZzPcG0eVpnDdzfOOH1gDKADq9A5D2X5QJCulsh9

    WwU3X+E43OqIsoRzBucItD9HhZbEH7t8Q0xAqnAkgU3hriZp3dN4cnMfhM6I9hli

    EmpSpLKCceMexu2o9QgzGXVm+AGZJe4QkuwAhRIccp5JDMVny61UlKTasjy6co8h

    5GBhhYybPEFM+G1BODMd

    =c9wo

    —–END PGP SIGNATURE—–

    我们不妨下载文件及其签名:

    $ wget https://onionshare.org/files/0.6/OnionShare.dmg $ wget https://onionshare.org/files/0.6/OnionShare.dmg.asc

    现在,验证已下载文件的PGP签名。

    $ gpg --verify OnionShare.dmg.asc OnionShare.dmg

    在Linux上如何验证已下载文件的真实性和完整性

    假如该命令的输出里面含有“Good signature from ”,这表明已下载的.dmg文件已成功通过了验证。要是已下载文件在签名生成后以任何一种方式而遭到篡改,验证就会失败。

    现在你大可放心,可以信任那个已下载文件了。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    商业智能成CIO优先关注点 技术落地方显成效(1)

    用linux安装MySQL时产生问题破解

    JAVA中关于Map的九大问题

    windows 7旗舰版无法使用远程登录如何开启telnet服务

    Android View 事件分发机制详解

    MySQL用户变量的用法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。