Hash 为什么可以';t`blake2'u 256`防止;“第一对钥匙”;在StorageDoubleMap中,使用decl_存储时是否会受到损害?

Hash 为什么可以';t`blake2'u 256`防止;“第一对钥匙”;在StorageDoubleMap中,使用decl_存储时是否会受到损害?,hash,rust,substrate,Hash,Rust,Substrate,是一个“程序宏”,用于存储数据以使其在后续块中可用 它说,如果用户能够在双_映射中设置第一个密钥对,那么我们就不能信任该密钥对,因此我们必须使用加密哈希器,如blake2_256,以防止“所有存储项的其他值受到损害” 然后,它接着说,如果用户能够在双密钥映射中设置第二个密钥对,那么我们就不能信任该密钥对,因此我们必须使用加密哈希器,例如blake2_256,以防止“存储中具有相同第一个密钥的其他项被泄露” 关于第一个密钥对,为什么说它只是为了防止“所有存储项的其他值被破坏”?blake2_256

是一个“程序宏”,用于存储数据以使其在后续块中可用

它说,如果用户能够在
双_映射
中设置第一个密钥对,那么我们就不能信任该密钥对,因此我们必须使用加密哈希器,如
blake2_256
,以防止“所有存储项的其他值受到损害”

然后,它接着说,如果用户能够在
双密钥映射中设置第二个密钥对,那么我们就不能信任该密钥对,因此我们必须使用加密哈希器,例如
blake2_256
,以防止“存储中具有相同第一个密钥的其他项被泄露”


关于第一个密钥对,为什么说它只是为了防止“所有存储项的其他值被破坏”
blake2_256
是否也用于防止第一个密钥对本身被泄露(而不仅仅是“其他值”)?

假设
module1的散列。someValue
0x12345678

module2.doubleMapValue.firstKey(value1)的哈希值为
0x1234

module2.doubleMapValue.secondKey(value2)的哈希值为
0x5678

这意味着
module2.doubleMapValue.fullKey(value1,value2)
module1.someValue
具有相同的散列。i、 e.值存储在同一位置

如果用户能够控制
module2.doubleMapValue
的两个键,并计算出
value1
value2
的值,则他们将能够覆盖
module1.someValue
的值并导致安全问题

这就是为什么如果值由用户控制,则double map的key1的散列函数需要是加密散列器。否则,用户可能会手工制作
value1
,使其与所有其他模块的存储冲突,从而危害它们


如果用户无法控制key2,double map会提供一个带有哈希(key1)前缀的clear all keys功能,该功能也可能被劫持,从而引发麻烦。

这是您在大约4小时内提出的第四个问题。尽管我们很乐意在这方面提供帮助,但我认为(这是我个人的观点),你应该多处理一点这个话题,而不是一个接一个地问问题。看来,你还没有理解这个话题本身(至少对我来说)。如果我错了,请纠正我。谢谢。我重新审视了这个问题,并将其调整为只关注一个问题,因为其中一个问题适用于多种存储类型。我现在还删除了作为有用的背景上下文的内容(即使是对我未来的自己),这是我的惯常做法,以及任何与“品牌”相关的词语,因为一些用户认为这是垃圾邮件/促销。对不起,我没意识到会有这样的感觉。