我已多次阅读基于SHA-1哈希的git中的完整性机制以及指向父提交的链接,这确保不会对git存储库中的已提交数据进行任何更改。
我的问题是:在哪些操作中git检查哈希是否有效,i。即匹配提交的内容?是在推动期间执行检查还是拉动?不幸的是,我还没有找到任何相关信息。
答案 0 :(得分:3)
Obsidian's comment是正确的:每个Git对象的名称是对象内容的哈希ID,所以任何使用该ID查找和读取的内容内容可以并且通常会验证提取的数据的哈希值是否与用作提取数据的密钥的ID相匹配。
额外检查 - 验证标记或提交中的GPG签名 - 仅在您明确请求时才进行。您可以使用git log
配置设置请求log.showSignature
默认检查此类签名。
请注意,Merkle tree中任何节点的完整性取决于您是否信任先前的节点以抵御第二张前映像攻击。如果使用GPG签名标记,那些标记中的签名将保护每个标记的数据(无论您信任GPG本身的程度如何),然后标记保护其提交对象(无论您信任SHA-1的程度如何)。提交对象反过来保护其树,保护其子树和blob,并且blob哈希保护其内容。因此,如果您关注的是第二次原像攻击,那么您应该进行不同类型的分析。如果你只关心随机数据损坏(如在旋转媒体和/或非ECC内存中看到的那样),你可以像Git那样直接使用SHA-1哈希。