Почему `blake2_256` не может помешать« первой паре ключей »в StorageDoubleMap скомпрометировать при использовании decl_storage? - PullRequest
2 голосов
/ 21 мая 2019

decl_storage! - это «процедурный макрос», используемый для хранения данных, чтобы сделать их доступными в последующих блоках.

Он говорит, что если пользователь может установить первую пару ключей в double_map, то мы не можем доверять этой паре ключей, и поэтому мы должны использовать криптографический хеш, такой как blake2_256, для не допускать, чтобы «другие значения всех элементов хранилища были скомпрометированы».

Далее говорится, что если пользователь может установить вторую пару ключей в double_map, то мы не можем доверять этой паре ключей, и поэтому мы должны использовать криптографический хеш, такой как blake2_256 для предотвращения «скомпрометирования других предметов в хранилище с тем же первым ключом».

Что касается первой пары ключей , почему говорится, что это просто предотвращает "другие значения всех элементов хранилища, которые могут быть скомпрометированы" ? Разве blake2_256 также не используется для предотвращения компрометации самой первой пары ключей (а не только "других значений")?

1 Ответ

1 голос
/ 28 мая 2019

Скажем, хэш module1.someValue равен 0x12345678

хеш module2.doubleMapValue.firstKey(value1) равен 0x1234

хеш module2.doubleMapValue.secondKey(value2) равен 0x5678

Это означает, что module2.doubleMapValue.fullKey(value1, value2) и module1.someValue имеют одинаковый хэш. то есть значения хранятся в одном и том же месте.

Если пользователь может управлять обоими ключами module2.doubleMapValue и определить значения value1 и value2, тогда они смогут переопределить значение module1.someValue и вызвать проблемы с безопасностью.

Вот почему хеш-функция key1 двойной карты должна быть криптографическим хэшем, если значение контролируется пользователем. В противном случае пользователь может создать value1 таким образом, что он столкнется с хранилищем всех других модулей и, следовательно, скомпрометирует их.

В случае, если пользователь не контролирует key2, двойная карта обеспечивает очистку всех ключей с функцией префикса hash (key1), которая также может быть взломана, чтобы вызвать проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...