我有一堆大对象,以及它们的结构和它们的向量。有时检查复合对象的完整性很重要;为此,我正在使用对象的 Sha256“签名”。
至少有两种方法可以定义复合对象的签名:通过计算组件串联的sha
,或者通过计算的串联的
。sha
>组件的 sha
也就是说,向量 Object0, Object1, Object2
的第一个方法签名是 sha(Object0 Object1 Object2)
,第二个方法是 sha(sha(Object0) sha(Object1) sha(Object2))
.
我使用第二种方法对复合对象进行签名的速度要快得多。问题是,这种计算 sha
的 sha
的方法是否会增加冲突的机会?我是否因为我不是在散列对象而是在散列对象而牺牲任何安全性?
最佳答案
您所描述的结构是众所周知的 Merkle tree or hash tree . Git 存储库基本上是巨大的 Merkle 树。
这种结构的安全性与您选择的哈希函数的原像抵抗力一样强。
关于hash - SHA 的 SHA 作为复合对象的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51508668/