16. IBC身份模型

16.1. 概述

长安链现有的认证体系(PermissionedWithCert、PermissionedWithKey、Public),都是基于公钥的认证体系。

Public 模式提供了公链所需的弱权限控制。PermissionedWithCert 模式通过 CA认证中心给成员公钥颁发证书的方式,将用户的身份标识信息(用户名称、组织、角色等)与其公钥绑定到一起,实现了强权限管理所需的身份认证和权限管理的功能。PermissionedWithKey 模式通过管理员发起合约,将其他成员身份信息和公钥记录在链上的的方式,实现强权限的组织成员的身份识别和权限管理。

基于标识的密码(Identity-Based Cryptography 简称 IBC),是一种新的认证体系。相比于传统的公钥密码体系,其主要特点是 IBC 体系下用户的公钥可以由用户自己指定,而传统公钥是随机生成的。 通常,IBC 体系会选择用户的身份标识(如电子邮箱、电话号码、身份证号等)作为公钥。这样,通过用户的公钥,就能直接知道用户的身份信息。然后使用公钥对发来的消息进行签名校验,就能得知消息是否由该用户发起。

在 IBC 体系中,没有证书体系里为用户公钥颁发证书的步骤,避免了繁琐的证书管理工作。同时还同时减轻了交换证书、验证证书导致的成本。

基于 IBC 技术,我们为长安链提供了一种新的强权限身份权限管理模型,并将其命名为 PermissionedWithIBC。下面是 PermissionedWithIBC 模式与其他模式的对比:

身份模式 标识长度 标识方式 身份验证
PermissionedWithIBC 公钥直接标识 直接验证
PermissionedWithCert 需 CA 颁发数字证书 需交换证书
PermissionWithKey 一般 需管理员发起合约标识 需先将用户公钥注册到链上
Public 一般

了解 IBC 身份模式的使用方法,请参考搭建IBC模式账户体系

16.2. 整体设计

16.2.1. 底层算法

长安链 IBC 身份模式采用国密 SM9 标识密码算法作为底层实现。

16.2.2. 主密钥

每个组织都有至少一套主密钥。主密钥是一套非对称密钥,包括主公钥和主私钥。其中主公钥通过以配置文件或以执行合约的形式,在链上公开。主私钥由组织的密钥中心秘密保存。密钥中心用主私钥和用户标识生成用户的私钥。

主密钥一般由密钥中心通过随机数发生器产生。

16.2.3. 用户密钥

用户密钥由密钥中心用主私钥和用户标识生成,包括用户签名公钥和用户签名私钥。

在 IBC 体系中,用户公私钥需结合主密钥才能进行签名验证。同时由于 IBC 底层算法是基于椭圆曲线对的双线性的特点,无法像传统非对称密钥一样,通过用户私钥生成用户公钥。为实现传统非对称用户密钥独立签名验证功能,长安链对用户密钥进行了封装,将组织主公钥封装进用户公钥、用户公钥封装进用户私钥中。

16.2.4. 用户标识

在生成用户密钥对时,需包含其组织、角色等信息,便于进行权限管理。

在 IBC 身份模式下,密钥中心将成员标识、所属组织、成员角色、有效期起始时间、有效期结束时间 5 个参数拼接起来,为用户生成一个新的标识,并用新生成的标识为用户生成密钥对。

这样,用户拿到的公钥中就包含了所属组织、角色、有效期等信息。同时由于有效期可以修改,增加了密钥标识的灵活性。在用户密钥丢失等情况下,可以通过颁发不同有效期的新密钥来取代,便于组织管理组织内成员密钥。

16.2.5. 身份验证

每个加入区块链网络的成员,需先在所属组织的密钥中心用自己的用户标识生成密钥对。其中公钥里包含了成员的组织、角色信息,不可修改,否则无法与私钥配对。用户拿到密钥,即完成了身份注册,可以进行链上活动。

链上成员在发起合约时,每条发出去的消息需要附加自己的公钥。其他成员在接收到消息后,将从其附加的公钥中,解析出用户的标识、组织、角色、有效期等信息。通过其中的组织信息,在链上拿到所属组织的主公钥,进而进行签名验证。签名验证通过后,再利用其组织、角色信息,进行权限校验。

16.2.6. 加密通信

目前 IBC 身份模式下仍然采用传统证书模式加密通信,仅利用 SM9 的签名验证功能做身份标识。所以在启动 IBC 模式的区块链时,需将 TLS 根证书和主密钥同时配置上链,并且成员数字证书内的用户标识、组织、角色字段需与 IBC 用户公钥内的字段保持一致。

IBC 身份模式可以通过证书管理相关的命令来管理证书,但是没有证书哈希、别名功能。