SHA 的 SHA 作为复合对象的签名

SHA of SHA as signatures of composite objects

我有一堆大对象,以及它们的结构和它们的向量。有时检查复合对象的完整性很重要;为此,我正在使用对象的 Sha256 "signature"。

至少有两种方法可以定义复合对象的签名:通过计算 sha 组件的串联,或者通过计算 shasha 串联的组成部分。

也就是说,向量 Object0, Object1, Object2 的第一个方法签名将是 sha(Object0 Object1 Object2),第二个方法将是 sha(sha(Object0) sha(Object1) sha(Object2))

我使用第二种方法对复合对象进行签名要快得多。问题是,这种计算 shasha 的方法是否会增加碰撞的机会?我是否会牺牲任何安全性,因为我不是在散列对象而是在散列对象?

虽然我不能为此提供数学证明,但我想说:不,没关系。

你所描述的是 Merkle tree or hash tree 的众所周知的结构。 Git 存储库基本上是巨大的 Merkle 树。

这种结构的安全性与您选择的哈希函数的原像抵抗力一样强。