Solidity mapping 变量的生日碰撞风险
Shurong Shen
Sep 21
生日碰撞生日攻击是一种密码攻击,它利用概率论中生日问题背后的数学原理,极大地降低发生碰撞的计算复杂度。利用生日攻击进行 hash 碰撞便称为生日碰撞。 一个好的设计应该尽量避免生日碰撞的风险,不幸的是 Solidity 的 mapping 变量便存在该风险,截至到本文发表时,所有 Solidity 版本(最新版本为 0.8.17)都存在该问题。这将给数以万亿美元计的链上资产带来潜在的安全隐患。Solidity 的 mapping 实现在 Solidity 中,mapping 变量会根据变量的索引位置(该变量在源文件中定义的顺序位置)和 key 值计算出存储 slot 位置,然后将 value 存储在该位置(注:当 value 类型是 string 等变长数组时,该位置是起始位置)。 设变量索引位置为 i,则一级 mapping(k) 的 slot 位置算法(伪代码,下同)如下:storage_slot = keccak(memory_concat(k,i)); 二级 mapping(k1, k2) 的 slot 位置算法如下:ii = keccak(memory_concat(k...
ParagraphParagraph

Shurong Shen

Written by
Shurong Shen
Subscribe

2025 Paragraph Technologies Inc

PopularTrendingPrivacyTermsHome
Search...Ctrl+K

Shurong Shen

Subscribe