2

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

它说如果用户能够在 中设置第一个密钥对double_map那么我们就不能信任该密钥对,因此我们必须使用加密散列器blake2_256来防止“所有存储项目的其他值被泄露”。

然后继续说,如果用户能够在 中设置第二个密钥对double_map那么我们就不能信任该密钥对,因此我们必须使用加密散列器blake2_256来防止“存储中的其他项目具有相同的第一个密钥被泄露”。

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

4

1 回答 1

2

假设哈希module1.someValue0x12345678

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

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

这意味着module2.doubleMapValue.fullKey(value1, value2)并且module1.someValue具有相同的哈希值。即值存储在同一个地方。

如果用户能够控制 and 的两个键并计算出andmodule2.doubleMapValue的值,那么他们将能够覆盖 of 的值并导致安全问题。value1value2module1.someValue

这就是为什么如果值由用户控制,双映射的 key1 的散列函数需要是密码散列器。否则,用户可能会制作value1出与所有其他模块的存储相冲突的内容,从而危及它们。

如果用户不控制 key2,double map 提供了一个清除所有带有 hash(key1) 前缀功能的键,也可能被劫持造成麻烦。

于 2019-05-28T02:03:45.140 回答