此 EIP 描述了要添加到 JSON-RPC 的三个新方法,这些方法使钱包能够支持去中心化身份标识符 (DID) 以及JSON 对象签名和加密 (JOSE)。这些标准使钱包能够支持数据解密以及经过身份验证的数据,两者都使用 JOSE 标准格式。借助这些新方法,应用程序可以从用户钱包请求 DID,从中可以解析 DID 文档。 DID 文档包含可用于加密和签名验证的公钥。这使得 Alice 仅通过知道 Bob 的 DID 即可发现 Bob 的公钥。此 EIP 不强制使用任何特定的 DID 方法或 JOSE 算法,钱包可以随意实现这些方法。
动机
之前已经进行过一次主要的尝试 (#130, #1098),以标准方式向以太坊钱包添加解密功能。之前的方法使用了一种非标准的方式来编码和表示使用 x25519-xsalsa20-poly1305 加密的数据。虽然这种方法确实提供了一种向钱包添加加密支持的功能性方法,但它没有考虑到在标准化加密数据表示方式方面所做的类似工作,即使用 JOSE。这是 IETF 提出的用于表示签名和加密对象的标准。先前方法的另一个缺点是,如果仅知道以太坊地址,则无法从另一个用户那里检索 x25519 公钥。公钥发现是 W3C DID 标准工作的核心,在该标准中,给定一个 DID,始终可以发现包含公钥的文档。该标准的实现已经存在,并在以太坊社区内得到采用,例如 did:ethr 和 did:3。 JOSE 和 DID 之间的互操作性 已经存在,并且正在努力 加强它。添加对 JOSE 和 DID 的支持将使以太坊钱包能够支持广泛的新用例,例如使用 JWT 的更传统的身份验证,以及新的新兴技术,例如 安全数据存储 和 IPFS 中的加密数据。
规格
在新的 did_* 前缀下指定了三种新的 JSON-RPC 方法。
身份验证
验证当前 rpc 连接到 DID 方法。
提示用户授予当前连接访问用户 DID 和给定 paths 的权限。
方法:
did_authenticate
参数:
nonce - 用作质询的随机字符串
aud - 身份验证响应的预期受众
paths - 字符串数组
返回:
包含以下属性的具有通用序列化的 JWS:
nonce - 用作质询的随机字符串
did - 授予身份验证的 DID
paths - 授予权限的路径
exp - JWS 应被视为无效的 unix 时间戳
aud - JWS 的可选受众,应与发出请求的域匹配
应将具有表示 DID 的值的附加属性 kid 和用于签署 JWS 的 keyFragment 添加到受保护的标头 (详细信息)。
CreateJWS
创建 JSON Web 签名 (JWS)。
应将具有表示 DID 的值的附加属性 kid 和用于签署 JWS 的 keyFragment 添加到受保护的标头 (详细信息)。当 revocable 设置为 false 时,不应可以撤销 JWS 签名。对于某些 DID 方法,例如 did:key,情况总是如此。对于其他支持密钥撤销的方法,需要在 kid 中包含 version-id 以引用 DID 文档的特定版本。当 revocable 设置为 true 时,对于支持密钥撤销的 DID 方法,version-id 不得包含在 kid 中。