caict-4iot-dev / bif-rfcs

11 stars 5 forks source link

提出一种“星火数字身份插件钱包登录规范”的标准建议 #15

Open bubichain opened 1 year ago

bubichain commented 1 year ago

作为“星火·链网”用户,在登录当前流行的非区块链服务场景时,会存在用户数字身份由于集中化管理可能带来集体泄露账户的风险以及访问过程可能存在被钓鱼的信任安全风险,为此需要一种星火数字身份插件钱包登录的标准规范,此规范为希望对自己的数字身份承担更多控制权的用户提供一种新的自主管理规范。

生命周期

提出日期:2023-1-5 演示日期:2023-1-5 接受日期:2023-1-5 采纳日期:2023-04-05

bubichain commented 1 year ago

1. 序言

编号:

类型:标准

标题:星火数字身份插件钱包登录规范

作者:蒋海,jianghai@bubi.cn;王璟,wangjing@bubi.cn;赵正涌,zhaozhengyong@bubi.cn;胡楠,hunan@bubi.cn;

发布时间:

状态:

更新时间:2023-01-05

讨论地址:

依赖RFC:

2. 摘要

本文规范了星火链网账户如何签署由范围、会话信息和安全机制等参数化的标准消息格式与链外服务进行身份验证。其目的是为集中式身份提供商提供一种自主定制的替代方案,提高基于星火链网账户认证的链外服务的互操作性,并为钱包供应商提供一致的机器可读消息格式,以实现改进的用户体验和授权管理。

3. 动机

在登录当前流行的非区块链服务时,用户通常会使用身份提供商(Idps),而这些身份提供商是对用户标识符具有最终控制权的中心化实体,比如大型互联网公司和电子邮件提供商等,其动机大多不一样,存在一定的信任安全风险。使用星火数字身份登录(Sign-in with Bid)是为希望对自己的数字身份承担更多控制权的用户提供一种新的自主管理规范。

4. 规范

使用星火数字身份登录工作方式如下:

4.1 签名消息示例

service.example.org 使用星火数字身份进行签名:
did:bid:zfQiEFySHXssUXbKEgM5uUgxez25KBru

我接受xxxxx团队的服务: https://service.example.org

URI=https://service.example.org/login
Version=1
Nonce=78372888
Issued At=2022-12-12 11:20:13

4.2 签名消息模板

${domain} 使用星火数字身份进行签名:
${bid}

${statement}

URI=${domain}
Version=${version}
Nonce=${nonce}
Issued At=${issued-at}
Request ID=${request-id}

4.3 消息体属性描述

domain 是验证服务端域名

bid是用于服务端进行验证的星火数字身份 BID

statement [可选] 是展示给用户签名时的ASCII编码的文案,它不得包含'\n'(字节0x0a)

uri 登录目标的URI地址

Version 当前 message 的版本号,默认为1

Nonce 用于防止重放攻击的随机数,至少8个字母或数字字符。

Issued At 当前请求时间(ISO 8601格式)

Request ID(可选)是登录时的唯一请求号。

4.4 服务侧验证规范

4.4.1 验证签名 message

必须检查消息是否符合签名体的规范,在解析后根据预期的术语值进行检查,并且必须验证其签名。

具体检查规则如下:

术语值检查:

bid 是否符合BID生成规范

statement是可选参数,如果不为空时需要检测是否上下各空一行

Version 是否是1

Nonce 由服务端生成的字符串,其规范至少8个字母或数字字符,提交到服务端后需要校验其值的合法性及有效性

Issued At 当前请求时间,服务器根据自身业务安全规范,比较其请求有效性。即需要跟当前服务器时间进行对比,比如超过2分钟,就拒绝本次请求,节省服务器查询数据的消耗。

Request ID 由服务端生成的唯一性字符串,建议使用 UUID ,提交到服务端后需要校验其值的合法性及有效性

签名验证:

根据ED25519签名算法,对 message 转成的十六进制字符串后通过私钥对其签名,在服务端需要用签名账户公钥、签名原文(Message)以及签名串进行签名验证。

4.5 创建会话

会话必须建立在 bid 基础之上,而不是绑定在一个可能会变动的资源标识上。

4.6 钱包侧验证规范

4.6.1 验证 message

4.6.2 验证 domain

4.7 使用星火浏览器插件钱包展示登录

钱包必须在默认情况下并在签名之前向用户显示来自星火签名请求的以下条款(如果存在):domain、bid、statement

img

5. 安全注意事项

5.1 钱包与服务端安全交互

5.2 域名绑定验证

5.3 平台侧安全

CAICT-DEV commented 1 year ago

接受关于“星火数字身份插件钱包登录规范”的标准建议,现分配编号RFC-012。RFC-012进入接受阶段。

CAICT-DEV commented 1 year ago

编号:RFC-012

类型:标准

标题:星火数字身份插件钱包登录规范

作者:蒋海,jianghai@bubi.cn;王璟,wangjing@bubi.cn;赵正涌,zhaozhengyong@bubi.cn;胡楠,hunan@bubi.cn

发布时间:2023-01-05

状态:接受

更新时间:2023-01-05

讨论地址:https://github.com/caict-4iot-dev/bif-rfcs/issues/15

依赖RFC:无