SHA 的 SHA 作为复合对象的签名
SHA of SHA as signatures of composite objects
我有一堆大对象,以及它们的结构和它们的向量。有时检查复合对象的完整性很重要;为此,我正在使用对象的 Sha256 "signature"。
至少有两种方法可以定义复合对象的签名:通过计算 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 树。
这种结构的安全性与您选择的哈希函数的原像抵抗力一样强。
我有一堆大对象,以及它们的结构和它们的向量。有时检查复合对象的完整性很重要;为此,我正在使用对象的 Sha256 "signature"。
至少有两种方法可以定义复合对象的签名:通过计算 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 树。
这种结构的安全性与您选择的哈希函数的原像抵抗力一样强。