NEAR链谜题合约未通过view函数返回的智能合约数据安全性咨询
NEAR谜题合约答案哈希安全性问题解答
关闭答案哈希查询接口仅存储在链上的安全性
NEAR网络的所有合约状态存储默认完全公开透明,不存在仅合约可访问的私有存储。即使移除了返回答案哈希的view函数,任何攻击者都可以通过NEAR公共RPC接口直接拉取合约的状态存储空间数据,解析后即可拿到答案哈希,这种调整完全不会提升答案哈希的安全性,和直接通过view接口返回的安全等级没有任何区别。
新增单账号答题次数限制后是否仍会被无限制猜题
答案是肯定的,攻击者完全可以实现无限制猜题,核心原因有两点:
- 答案哈希可通过链上公开状态直接获取,不需要依赖合约提供的接口,攻击者拿到哈希后可以在本地离线跑字典、生成候选答案做
SHA256哈希碰撞,如果谜题答案是低熵内容(比如常见短语、短句、数字组合),批量碰撞的成本极低,很短时间内就能找到正确答案。 - NEAR的账号创建成本极低,攻击者可以批量生成大量无成本的隐式账号绕过单账号答题次数限制,即使碰撞耗时稍长,也可以用多个账号分别提交不同候选答案,完全绕开次数限制。
可选优化方案
如果要解决该安全风险,可以参考以下优化方向:
- 采用提交-揭示方案:不要提前把答案哈希存在链上,先开放答题提交窗口,用户提交自己答案的哈希+随机盐的承诺值,窗口关闭后再公布正确答案,链上对比用户提交的承诺和正确答案是否匹配,避免提前泄露答案哈希给攻击者碰撞的机会。
- 若必须提前存储答案哈希,要保证答案本身是高熵的随机字符串,避免使用低熵的常规谜题答案,提升字典碰撞的成本到不可接受的程度。
- 可以增加答题的Gas消耗门槛,或者绑定一定的质押要求,提升批量刷号答题的成本。
内容的提问来源于stack exchange,提问作者Christopher Brown
相关产品推荐
相关产品推荐

