我想知道使用 git sha 指向依赖项的特定版本是否安全。我知道这不是一个好的做法,但有时是必要的。
我已经读到,通常情况下,不可能选择提交 ID,因为它是使用很多东西自动计算的。但没有人提到你可以在本地重建 git 来覆盖这个算法,让我们生成重复的 sha。
我没有读到 gitserver 检查它以确保 gitclient 没有“损坏”,就是这样。
那么,假设上述情况是可能的(请确认与否),sha git是否就被认为是sicured呢?
你所说的那种技巧称为原像攻击。当前用于生成故意 SHA-1 冲突的技术要求伪造副本的内容包含一个大的“二进制区域”\xe2\x80\x94,基本上是一个连续的字节块\xe2\x80\x94,攻击者可以在其中操纵这些字节。PDF 图像在这里是很好的候选者,因为 PDF 可能包含此类块。
\n然而, Git提交和标记对象不包含此类块。他们确实有一个区域,可以在其中删除像这样的块,但是当您检查提交(使用或)或标签(使用)时,该区域向我们显示日志消息或标签消息。人们很难忽视这样一个事实:当特定的提交或标签被“祝福”为“可以使用”时,消息类似于:git loggit showgit show
Release version x.y\nRun Code Online (Sandbox Code Playgroud)\n现在是:
\nRelease version x.y\nfiller filler filler ... filler\n<random bytes to produce desired hash>\n<this section goes on and on for many pages>\nfooter footer footer ... footer\nRun Code Online (Sandbox Code Playgroud)\n不费心查看提交消息或标签消息的自动化软件系统可能会被愚弄,但添加一个熵检测器会很简单,该检测器会注意到此处消息中的内容不再与人类生成的数据(其熵相对较低;请参阅有关香农熵的博客文章和IBM 安全文档)。这是一个致命的赠品,而且计算可以自动化。
\n(消息大小也将从“很小”跃升至“相对较大”,这也可以单独使用。)
\n不过,如果您愿意,您可以尝试新的 Git SHA-256 变体。(但您不能混合使用变体:您必须仅使用 SHA-1,或仅使用 SHA-256。至少,今天的情况是这样。)
\n| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |