Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
bubichain opened this issue Jan 5, 2023 · 3 comments

Comments

@bubichain
Copy link

bubichain commented Jan 5, 2023

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

生命周期

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

@bubichain
Copy link
Author

1. 序言

编号:

类型:标准

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

作者:蒋海,[email protected];王璟,[email protected];赵正涌,[email protected];胡楠,[email protected]

发布时间:

状态:

更新时间:2023-01-05

讨论地址:

依赖RFC:

2. 摘要

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

3. 动机

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

4. 规范

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

  • 钱包向用户提供结构化明文消息,用于使用ED25519签名算法进行签名,其中 message 必须包含Xinghuo bid、请求 domain、Version、URI、Nonce和Issued At

  • 然后将签名提交给服务器,服务器检查签名的有效性和消息内容。

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

  • 必须检查完整的 message 是否符合上述规范。
  • 如果字符串"使用星火链网账户进行签名"出现在消息签名请求中的不规范的位置,钱包应该提示用户。

4.6.2 验证 domain

  • domain 钱包必须在处理签名请求时通过匹配术语来防止网络钓鱼攻击。例如,当处理以 开头的消息时"service.example.org 使用星火数字身份...",钱包会检查请求是否实际源自 service.example.org 。
  • 域名应该从受信任的数据源(例如浏览器窗口)或通过 WalletConnect 会话读取,以便与签名消息内容进行比较。

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

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

img

5. 安全注意事项

5.1 钱包与服务端安全交互

  • 钱包和服务端都必须按照此规范进行实施以提高用户使用过程中的安全性。钱包侧必须检查 domain 是否匹配实际的签名请求源,否则用户将会受到网络钓鱼的攻击。
  • 每个会话应从服务端获取一个具有足够熵的随机数以防止重放攻击,建议服务端通过最新星火区块哈希派生出其所需的 nonce 字符串,其规范至少8个字母或数字字符。

5.2 域名绑定验证

  • 钱包必须检查 domain 是否匹配实际的签名请求源。
  • 插件钱包通过获取当前浏览器窗口 URL 与 domain 进行对比检查。

5.3 平台侧安全

  • 对于 web 应用程序,所有通信都应该使用 HTTPS 来防止对消息签名的中间人攻击。

@CAICT-DEV
Copy link
Collaborator

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

@CAICT-DEV
Copy link
Collaborator

CAICT-DEV commented Jan 5, 2023

编号:RFC-012

类型:标准

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

作者:蒋海,[email protected];王璟,[email protected];赵正涌,[email protected];胡楠,[email protected]

发布时间:2023-01-05

状态:接受

更新时间:2023-01-05

讨论地址:#15

依赖RFC:无

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants