也许我对通过 Internet 下载的软件的验证疏忽了,但我(或我见过的任何人)从未尝试过验证我下载的内容的校验和。因此,我不知道如何验证下载项目的完整性。
那么如何验证下载文件的校验和呢?
也许我对通过 Internet 下载的软件的验证疏忽了,但我(或我见过的任何人)从未尝试过验证我下载的内容的校验和。因此,我不知道如何验证下载项目的完整性。
那么如何验证下载文件的校验和呢?
通常这将在所有者方面开始,显示您希望下载的文件的校验和。看起来像下面这样:
md5: ba411cafee2f0f702572369da0b765e2
sha256: 2e17b6c1df874c4ef3a295889ba8dd7170bc5620606be9b7c14192c1b3c567aa
现在取决于您使用的操作系统,一旦您下载了所需的文件,您就可以计算它的哈希值。首先导航到您下载的文件的目录,然后:
CertUtil -hashfile filename MD5
/ CertUtil -hashfile filename SHA256
md5sum filename
/ sha256sum filename
md5 filename
/ shasum -a 256 filename
从网站检查哈希所带来的问题是它不能确定文件是否可以安全下载,只是您下载的是正确的文件,逐个字节。如果该网站已被入侵,那么您可能会看到另一个文件的哈希值,而这又可能是恶意的。
您在问题标题中提到了校验和、PGP 和 SHA,但这些都是不同的东西。
校验和只是以高度的信心验证没有导致复制文件与原始文件不同的损坏(对于“高”的不同定义)。一般来说,校验和不能保证没有进行故意修改,并且在许多情况下,在仍然具有相同校验和的情况下更改文件是微不足道的。校验和的示例是 CRC、Adler-32、XOR(奇偶校验字节)。
加密哈希提供了简单校验和的附加属性(所有加密哈希都可以用作校验和,但并非所有校验和都是加密哈希)。
加密散列(未损坏或不弱)提供碰撞和原像抗性。防冲突意味着创建两个具有相同哈希的文件是不可行的,而原像抵抗意味着创建与特定目标文件具有相同哈希的文件是不可行的。
MD5 和 SHA1 在碰撞方面都被破坏了,但对原像攻击是安全的(由于生日悖论碰撞更容易生成)。SHA256 是当今常用的,并且对两者都是安全的。
如果您计划使用散列来验证文件,则必须从单独的可信来源获取散列。从您下载文件的同一站点检索哈希并不能保证任何事情。如果攻击者能够修改该站点上的文件或拦截和修改您的连接,他们可以简单地将文件替换为恶意版本并更改哈希以匹配。
如果您的对手可以修改合法文件(例如,提供看似无辜的错误修复),则使用不抗冲突的哈希可能会出现问题。他们可能能够在原始文件中创建一个无辜的更改,使其具有与恶意文件相同的哈希值,然后他们可以将其发送给您。
验证哈希的最佳示例是从软件的受信任网站(当然使用 HTTPS)检索哈希,并使用它来验证从不受信任的镜像下载的文件。
在 Linux 上,您可以使用md5sum
、sha1sum
、sha256sum
等实用程序。Connor J 的回答给出了 Windows 的示例。
与校验和或哈希不同,签名涉及秘密。这很重要,因为虽然文件的哈希值可以由任何人计算,但签名只能由拥有秘密的人计算。
签名使用非对称加密,因此有一个公钥和一个私钥。使用私钥创建的签名可以通过公钥验证,但公钥不能用于创建签名。这样,如果我用我的密钥签名,你就可以确定是我。
当然,现在的问题是如何确保使用正确的公钥来验证签名。密钥分发是一个难题,在某些情况下,您又回到了使用哈希的位置,您仍然必须从单独的可信来源获取它。但正如这个答案所解释的,你甚至可能不需要担心它。如果您通过包管理器或使用签名的可执行文件安装软件,则可能会使用预安装的公钥为您自动处理签名验证(即,密钥分发由对安装介质和安装者的隐含信任处理)。
我使用快捷方式脚本自动验证Linux 上的 SHA 256 和。
如果您使用sha256sum filename
,您必须自己比较这些总和,这很难、不可靠和缓慢。
解决方案:相反,您可以在您的.bashrc
or.zshrc
配置中创建一个简单的函数并按以下方式运行它:
sha256 <expected-sha-256-sum> <name-of-the-file>
它将在单个命令中将预期的 SHA 256 总和与实际的总和进行比较。
功能是:
sha256() {
echo "$1 $2" | sha256sum --check
}
sha256sum -c thefile.sha
// thefile: OK
成功!除非您在不包含 shasum 目标的目录中运行该命令,否则您将获得:
sha256sum: thefile: No such file or directory
thefile: FAILED open or read
sha256sum: WARNING: 1 listed file could not be read
使用 md5sum 手册页可以找到您需要知道的所有内容:
man md5sum
不是因为md5sum
它特别有用,而是因为如果您转发搜索/BUGS
,您将被视为对您的选项的一个很好的概述:)
不要将 MD5 算法用于安全相关目的。相反,使用 SHA-2 算法,在程序 sha224sum(1)、sha256sum(1)、sha384sum(1)、sha512sum(1) 或 BLAKE2 算法中实现,在 b2sum(1) 中实现
他们都有相同的选项,除了b2sum
有一个额外的--length
选项。
以下产生一个sha签名:
sha256sum yourFilename > yourFilename.sha
其中yourFilename.sha
包含:
9f22b735f8f416bb8195cef9436ddec04db709132dae87137026b9725cf5678a yourFilename
要检查只需使用--check
选项运行:
sha256sum -c yourFilename.sha
// yourFilename: OK
如果这看起来有点不满意和神奇,你可以去手动路线:
sha256sum yourFilename > homebrewSHA
并将其与您从 Internet 下载的 sha 文件进行比较:
diff suspiciousInternetSHA homebrewSHA
如果 diff 打印出任何东西,那么那些不是您正在寻找的机器人。否则,你很好!