题目
你的登录流程是:前端调用钱包拿到签名,前端先做一次「恢复地址」校验,通过后把签名发给服务端。
有同事认为前端已经验过了,服务端直接信任前端上报的地址即可。请说明这个设计的问题,以及签名验签在两端各自的职责。
考察目标
- 是否理解前端验签不具备安全意义。
- 能否说明不同账户类型需要不同的验签方式。
- 能否指出会话绑定对象与失效条件。
考察验签的信任边界,以及外部账户与合约账户在验签方式上的分歧。
你的登录流程是:前端调用钱包拿到签名,前端先做一次「恢复地址」校验,通过后把签名发给服务端。
有同事认为前端已经验过了,服务端直接信任前端上报的地址即可。请说明这个设计的问题,以及签名验签在两端各自的职责。
前端运行在用户可控环境里,其验签结论不能作为服务端的信任依据;服务端需要拿到消息原文与签名后独立校验:外部账户按 EIP-191 恢复地址,合约账户按消息声明的 chain-id 解析合约并采用 ERC-1271,校验通过后把会话绑定到地址。
chain-id 解析(依据:EIP-4361 §Specification 的 Signing and Verifying Messages with Ethereum Accounts)。resources 内容变化时,服务端宜使相关会话失效(依据:EIP-4361 §Security Considerations 的 Session Invalidation)。0x45 格式;前后端需要按同一格式拼接与校验(依据:EIP-191 §Specification 的 Version 0x45)。chain-id 解析合约;依据:EIP-4361 §Specification 的 Signing and Verifying Messages with Ethereum Accounts)。发现这道题有问题? 反馈此题