FetchContent_Declare中URL_HASH的用法



我是CMake的新手,试图理解以下CMake命令

FetchContent_Declare(curl
URL                    https://github.com/curl/curl/releases/download/curl-7_75_0/curl-7.75.0.tar.xz
URL_HASH               SHA256=fe0c49d8468249000bda75bcfdf9e30ff7e9a86d35f1a21f428d79c389d55675
USES_TERMINAL_DOWNLOAD TRUE) 

当我打开浏览器并输入https://github.com/curl/curl/releases/download/curl-7_75_0/curl-7.75.0.tar.xz,文件curl-7.75.0.tar.xz将开始下载,而不需要URL_HASH。我相信这不是多余的。我想知道URL_HASH的目的是什么?

还有SHA256是如何被发现的?因为当我访问https://github.com/curl/curl/releases/download/curl-7_75_0寻找更多信息时,链接被破坏了。

我相信这不是多余的。我想知道URL_HASH的目的是什么?

像SHA256这样的安全哈希函数被设计成单向的;(在实践中)不可能制作一个具有与原始文件相同SHA256哈希值的恶意版本。甚至不可能找到两个具有相同哈希值的任意文件。这样的一对被称为"碰撞"。即使找到一个,也将是密码分析的重大突破。

那么,CMakeLists.txt中这个哈希值的目的是作为完整性检查。如果一个不良行为者以某种方式拦截了您的连接,那么检查您实际下载的文件的哈希值与这个硬编码的期望的哈希值将检测文件是否在传输中更改。这甚至可以捕获较少的恶意数据损坏,例如由硬盘故障引起的数据损坏。

包含这样的散列("校验和")是绝对必要的下载代码或其他二进制工件时。

如何找到SHA256 ?

通常,这些将与二进制文件一起发布。如果可用,使用已发布的值。

如果你必须自己计算,你有几个选择。在Linux命令行中,可以使用sha256sum命令。作为一个黑客,你可以故意写一个错误的SHA256=0值或其他东西,并从错误消息中获取观察到的值。

请注意,如果你自己计算哈希,你应该(a)从一个绝对可信的连接和设备下载文件,或者(b)从多个独立的设备下载它(像GitHub Actions这样的免费CI系统对此很有用),并确保哈希在所有这些设备上都是相同的。

最新更新