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