区块链 · 数字资产知识 · 行业资讯
文章库关于本站

安全防护

区块链数字身份安全怎样核对|签名来源、挑战值与登录会话

摘要

以SIWE登录消息为例,区分请求域名、nonce与时间字段的检查职责,再对照OWASP会话规则,说明签名验证成功为何还不足以建立或延续登录。

区块链数字身份的科技主题配图

登录消息先说明为哪个服务签名

区块链数字身份安全可以从一次账户登录请求讲起。EIP-4361定义的SIWE让以太坊账户通过签署规定格式的链下消息进行认证。服务接到签名后,还要核对消息内容与本次请求是否相符;不能只看签名计算通过,就跳过来源、挑战值和时间条件。

规范中的domain表示请求签名的域名信息,可包含端口;scheme表示来源所用的协议。这些值应匹配提出签名请求的实际来源。尤其在跨来源内嵌页面中,应核对内嵌页的来源,不能借外层页面名称替代。消息里的URI则指向签名所涉及的资源,不能仅凭某一行出现熟悉名称就合并这些字段。

挑战值把签名关联到本次请求

nonce是必填的随机字符串,用于防止重放;规范要求至少八个字母或数字字符,并建议为每次会话发起选择具有足够随机性的值。满足长度格式与难以预测是不同条件,把固定文字凑到八位不能据此证明挑战安全。

设想一个虚构流程:上一次登录对应挑战甲,新一次登录期待挑战乙。有人交回一份针对甲的旧签名,即使签名本身仍能验证,也不能当作已经响应乙。这个例子说明核对预期值的必要性,没有给出真实挑战或重放步骤;具体生成方法和状态管理仍由实现确定。

区块链技术数字签名的科技主题配图

生成时间与有效窗口各有含义

Issued At记录消息生成时间;可选的Not Before限定何时开始有效,Expiration Time限定签署后的认证消息何时失效。因此,看见生成时间不能推算它自带多少分钟有效期,缺少过期字段也不能据此认定网站承诺永久登录。

另设同一时区内的纸面例子:消息写明十四点十分过期,十四点十一分才提交验证时,就不应再作为有效认证消息接受。若网站此前已完成认证并创建会话,后续会话存活多久还要看其管理规则;消息的时间字段不会代替服务器执行失效处理。

认证之后还要维护会话的边界

OWASP会话管理资料要求在身份认证等权限层级变化后更新会话标识,防止把事先固定的旧标识继续用于认证状态;同时区分空闲超时与绝对超时。前者关注多久没有活动,后者限定会话总存续时间。这些超时应由服务端执行,仅靠网页倒计时不能构成完整控制。这里更新的是服务器识别已登录访问的会话标识,不是把刚才的挑战值改名保存;两者服务于认证前后不同阶段。

SIWE还要求会话绑定到账户地址,而不是可能改变的解析资源。由此可见,展示头像或名称变化,与登录会话究竟绑定谁,是两个问题。排查一次失败时,可区分来源不符、挑战不符、消息过期和会话失效,再查对应环节;无需为了说明问题而公开完整签名或会话凭据。

← 返回全部文章

延伸阅读 · 相关栏目

安全防护钱包与账户风险识别信息核验