Conda 包的完整性是否经过验证?

Is the integrity of the Conda packages verified?

当使用 conda install <some package>conda install -c <some channel> <some package> 安装包时,conda 二进制文件是否验证下载包存档的完整性(使用 SHA256 等算法)?

我问的原因是,在某些国家,官方的 Anaconda Cloud 存储库非常慢(或被阻止),而本地镜像通常更快并且提供更好的用户体验,但是本地镜像的完整性不能保证。如果 conda 二进制文件使用从官方 Anaconda Cloud 存储库获得的元数据以某种方式验证下载的存档,那么那些不幸的用户仍然可以使用本地镜像,而不必担心本地镜像的完整性。

无独立元数据 (AFAIK)

Conda 确实有一个 SHA256 完整性检查选项 (conda config --set extra_safety_checks true),但它不适用于您要解决的问题。问题是校验和信息是在包存档本身中提供的,在 info/paths.json 文件中,而不是由独立的元数据存储库提供。这可能会减轻中间人将某些内容插入存档文件的情况,但它不会捕获使用 conda build 构建的包含恶意代码并推送到频道的包。因此,仅使用受信任的渠道很重要。

为什么要进行安全检查?

除了基本的文件完整性验证之外,所提供检查的主要用例实际上是为了防止 Conda 因 Pip 破坏其包文件而感到惊讶。由于 Conda 使用硬链接,如果 Pip 在一个环境中覆盖一个包文件,它可能会在未来所有的环境中覆盖它。虽然它不会在行动中捕获 Pip,但这些安全检查至少让 Conda 检查以确保包在链接到另一个环境之前仍然完好无损。

"Understanding and Improving Conda's Performance" post 的 验证包内容 部分下有一些背景知识。