Скажем, хэш 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), которая также может быть взломана, чтобы вызвать проблемы.