去中心化跨域身份管理系统解析
在当今数字化时代,身份管理的安全性、隐私性和跨域性变得尤为重要。本文将详细介绍一种新的去中心化跨域身份管理系统,涵盖其基础概念、系统模型、设计目标、系统概述以及具体的协议设计。
1. 基础概念
在深入了解该系统之前,我们需要先熟悉一些关键的基础概念。
-
去中心化标识符(DID)标准
:在自主身份生态系统中,实体由去中心化标识符(DID)表示。DID 具有全球唯一性且不可更改,可在与 DID 兼容的账本上生成。DID 标准包括以下几个方面:
-
DID 语法
:由三部分组成,第一部分 Scheme 是统一资源名称(URN),第二部分 Namespace 是通用唯一标识符(UUID),最后一部分 Namespace - specific identifier 在 Namespace 内唯一标识一个实体。
-
DID 文档(DDO)
:DID 作为键值模式中的键,对应的值是 DDO,其中包含有关 DID 的信息,如关联的公钥等。
-
DID 解析器
:描述如何生成或解析给定 DID 的 DDO。
-
计数布隆过滤器(CBF)
:布隆过滤器(BF)是一种节省空间的随机数据结构,使用位阵列简洁地表示一个集合,并确定一个元素是否属于该集合。标准 BF 不支持删除操作,而 CBF 通过将每个位替换为计数器来支持删除操作。CBF 是一个 m 位的数组,代表一组 n 个元素 (S = {x_1, x_2, …, x_n})。初始时,CBF 中的所有位都设置为零。有 k 个相互独立的哈希函数 (h_i(x))((1 \leq i \leq k)),将 (x \in S) 分别映射到范围 ({1, …, m}) 内均匀分布的随机数。插入元素时,将对应位的值加 1;检查元素是否属于集合时,检查每个对应位的值;删除元素时,将对应位的值减 1。
-
零知识证明
:是一种协议,证明者 P 可以在不透露任何关于陈述的具体信息的情况下,使验证者 V 相信陈述的真实性。在本系统中,基于 Fiat - Shamir 启发式方案将其转换为非交互式证明。零知识证明具有完整性、可靠性和零知识性三个基本特征。
-
动态累加器
:累加器的概念最早由 Benaloh 和 de Mare 提出,但他们提出的是静态累加器,只能添加值而不能删除。动态累加器允许动态添加或删除值,且添加或删除的成本与累加的值的数量无关。本系统使用的是 Camenisch 和 Lysyanskaya 提出的动态累加器。
-
匿名凭证
:匿名凭证系统由用户和组织组成。组织只知道用户的假名,同一用户的不同假名无法关联。组织向假名颁发凭证,用户可以向其他组织证明自己拥有该凭证而不泄露任何信息。本系统使用的是 Camenisch 和 Lysyanskaya 提出的 CL 匿名凭证系统。
2. 系统模型
该系统有三种类型的参与者:用户、身份提供者(IDP)和服务提供者(SP)。传统 IDP 的功能分配给委员会 IDP,委员会 IDP 负责信任域内身份信息的背书和跨域用户身份信息的认证等,SP 为用户提供服务。相关符号及其描述如下表所示:
| 符号 | 描述 |
| — | — |
| ((pk_A^U, sk_A^U)) | 域 A 中用户的公私钥对 |
| ((pk_B^S, sk_B^S)) | 域 B 中 SP 的公私钥对 |
| (C_A, C_B) | 域 A 和 B 的委员会 IDP |
| ((pk_A^C, sk_A^C)) | (C_A) 的公私钥 |
| ((pk_B^C, sk_B^C)) | (C_B) 的公私钥 |
| (C’) | 所有域中部分 IDP 参与的委员会 |
| ((pk’_C, sk’_C)) | (C’) 的公私钥 |
| (Bchain_A, Bchain_B) | 域 A 和 B 的联盟区块链 |
| (Bchain’) | 跨域主链(由 (C’) 中的节点维护) |
| (C_A^i (1 \leq i \leq n_A)) | (C_A) 中的 (n_A) 个节点 |
| ((pk_A^{C,i}, sk_A^{C,i})) | (C_A) 中 (n_A) 个节点的公私钥 |
| (C_B^i (1 \leq i \leq n_B)) | (C_B) 中的 (n_B) 个节点 |
| ((pk_B^{C,i}, sk_B^{C,i})) | (C_B) 中 (n_B) 个节点的公私钥 |
| (C’^i (1 \leq i \leq n’)) | (C’) 中的 (n’) 个节点 |
| ((pk’_C^i, sk’_C^i)) | (C’) 中 (n’) 个节点的公私钥 |
- 威胁模型 :本方案不考虑物理硬件攻击和软件渗透。攻击者可以捕获网络中传输的数据包并将其发送到网络中。假设 SP 节点是诚实但好奇的,除了委员会 (C’) 中的 IDP 节点外,其他委员会中的 IDP 节点也是诚实但好奇的。
-
设计目标
:
- 抗女巫攻击 :每个用户在身份注册阶段通过验证现实生活中的身份,获得唯一的 DID 身份。
- 隐私保护 :在身份管理的所有阶段保护用户身份信息的隐私。
- 安全匿名认证 :提供一种高效实用的匿名跨域认证协议。
3. 系统概述
该系统主要包括以下四个过程:
-
身份注册
:每个用户在身份注册阶段只能通过将其与现实生活中的合法身份凭证(如身份证)绑定来注册唯一的去中心化身份 DID。委员会 (C_A) 会检查身份凭证是否已注册。具体步骤如下:
1.
导入身份
:使用 Oracle 系统将用户的现实生活身份凭证导入系统,采用 DECO 协议。用户的凭证表示为 ({pk_U, ctx, CS, \delta_{Oracle}}),委员会可以与 Oracle 验证该凭证。
2.
去重
:委员会节点根据用户凭证声明中的属性生成相应的 CBF,并存储在 (Bchain’) 中,用于记录已注册的属性身份。用户向节点展示凭证 (C_d),节点检查该凭证是否与 CBF 匹配。为了保护隐私,CBF 存储属性值的承诺值 (C_v)。
3.
DID 生成
:在联盟区块链 (Bchain_A) 上生成通用唯一标识符 DID。
4.
DID 颁发和应用
:将 DID 返回给用户,DID 可用于身份认证、身份撤销和身份更新。
-
跨域认证
:假设域 A 中的用户 (U_A) 请求域 B 中的 SP (B) 的服务,跨域认证过程如下:
1.
初始化
:用户 (U_A) 从委员会 (C_A) 获取匿名凭证 (cred)。
2.
上传凭证
:委员会 (C’) 中的节点将用户的凭证 (cred) 上传到区块链 (Bchain’) 的全局累加器 (GA1) 中。
3.
请求
:用户 (U_A) 向 (C_B) 发送跨域请求以访问 SP (B)。
4.
获取
:委员会 (C_B) 从 (Bchain’) 获取最新的全局动态累加器 (GA1) 的值。
5.
认证和访问
:委员会 (C_B) 认证凭证 (cred) 是否存在于全局累加器 (GA1) 中。如果认证成功,委员会 (C_B) 向用户 (U_A) 颁发令牌,用户 (U_A) 可以使用该令牌访问 SP (B)。
-
身份撤销和身份更新
:传统的公钥基础设施(PKI)使用证书撤销列表或在线证书状态协议来发布身份撤销信息。本方案的身份撤销分为两步:撤销匿名身份和匿名证书,撤销 DID 身份。身份更新包括更新 DID 和更新与 DID 对应的公私钥对。
4. 协议设计
接下来,我们将从身份注册和跨域认证两个主要方面详细介绍系统的协议设计。
-
身份注册
-
设置
:域 A 中的委员会 (C_A) 包含 (n_A) 个节点,使用阈值签名方案 (TS = (KGen, Sig, Comb, Vf)) 向用户颁发凭证。委员会成员执行分布式协议生成 ((pk_A^C, sk_A^C)),(C_A) 中节点的私钥是 (sk_A^C) 的份额 ([sk_A^{C,i}]),公钥保持为 (pk_A^C)。每个用户 (U_A) 在域 A 中生成公私钥对 ((pk_A^U, sk_A^U)),CBF 初始化为空的 m 位数组。
-
导入身份
:将用户 (U_A) 的现实生活凭证 (C_d) 导入委员会 (C_A)。凭证 (C_d = {pk_A^U, ctx, claim, \delta_{Oracle}}),其中 (claim = (a, C_v)),(C_v = commitment(v, r))(Pedersen 承诺 (C_v = g^r h^v),(g) 是阶为 (q) 的生成器,(k) 由 (C_A) 随机选择,委员会 (C_A) 计算 (h = g^k),然后用户计算 (C_v = g^r h^v))。
-
去重和 DID 生成
:使用以下去重算法:
Algorithm 1. Deduplication
Input: Cd = {pkA_U, ctx, claim, δOracle}
Output: b ∈ {0, 1}
procedure CBFa ← SearchCBF(a)
b1 ← CheckCBF(Cv, CBFa)
if b1 = 1 then return b = 0
else {
AddCBF(Cv, CBFa)
return b = 1
}
end
procedure CheckCBF(Cv, CBFa)
for i = 1 to k do
if (CBFa[hi(Cv)] == 0)
then return 0
else return 1
end for
end
procedure AddCBF(Cv, CBFa)
for i = 1 to k do
if (CBFa[hi(Cv)] == 1)
CBFa[hi(Cv)] ++
end for
return CBFa
end
如果算法输出 (b = 1),则执行 DID 生成过程,并从 (Bchain_A) 获取 DID。
-
DID 颁发和应用
:委员会 (C_A) 将 DID 返回给用户 (U_A) 后,使用阈值签名对用户 (U_A) 的声明 (claim = DID/pk_A^U) 进行背书并存储。用户可以将 DID 和 (pk_A^U) 互换使用,具体步骤如下:
1. 节点 (C_A^i) 通过 DID 解析器找到与 DID 关联的 DDO,其中包括 DID、(pk_A^U) 和其他关于 (U_A) 的信息。
2. 用户 (U_A) 通过零知识证明向委员会证明拥有与 (pk_A^U) 对应的 (sk_A^U)。
3. 节点 (C_A^i) 对消息 (m = {pk_A^U, ctx, claim}) 进行签名,获得签名份额 (\delta_{\pi}^i \leftarrow TS.Sig(sk_A^{C,i}, m))。
4. 用户 (U_A) 组合至少 t 个份额得到完整签名 (\delta_{\pi} = TS.Comb(\delta_{\pi}^i)),获得背书 (C_{\pi} = {pk_A^U, ctx, claim, \delta_{\pi}})。
5. DID 和 (pk_A^U) 可以互换用于身份认证、身份撤销和身份更新。
下面是身份注册的 mermaid 流程图:
graph TD
A[导入身份] --> B[去重]
B -->|通过| C[DID 生成]
C --> D[DID 颁发和应用]
B -->|未通过| E[终止流程]
通过以上介绍,我们对该去中心化跨域身份管理系统有了较为全面的了解。该系统通过多种技术手段实现了身份管理的安全性、隐私性和跨域性,为数字化身份管理提供了一种有效的解决方案。后续我们将继续深入探讨跨域认证的详细协议设计。
去中心化跨域身份管理系统解析
4. 协议设计(续)
-
跨域认证
- 设置 :委员会 (C_A) 配备公私钥对 ((pk_A^C, sk_A^C)),包含 (n_A) 个节点 (C_A^i)((1 \leq i \leq n_A))。委员会 (C’) 负责动态累加器的添加和删除操作。为了追踪 (Bchain’) 中最新的全局动态累加器,在 (Bchain’) 的每个块头中定义了参数 (GAStatus)。若块中的 (GAStatus = 1),则全局动态累加器是最新的,反之则不是。
-
初始化
:为了让用户 (U_A) 从 (C_A) 获取凭证,需要在 (C_A) 上实现基于强 RSA 假设的去中心化 CL 匿名凭证部署,具体步骤如下:
- CLSetup(1λ1) → params1 :由 (C_A) 运行该算法生成系统参数 (params1)。算法输入安全参数 (1λ1),(C_A) 选择两个安全素数 (p = 2p’+1),(q = 2q’+1) 并计算 (N = pq),(N) 的长度为 (l_n)。然后 (C_A) 随机选择元素 (a),(b),(c),(g),(h \in QRN)。算法输出 (params1 = (N, a, b, c, g, h))。
- CommitteeKeyGen(params1) → (pk_A^C, sk_A^C, pk_A^{C,i}, sk_A^{C,i})) : 委员会 (C_A) 调用该算法生成公私钥对。算法输入 (params1),(C_A) 获得 (pk_A^C = (N, a, b, c)) 和 (sk_A^C = (p’, q’))。(C_A) 中节点 (C_A^i) 的私钥 (sk_A^{C,i}) 是 (sk_A^C) 的份额,公钥 (pk_A^{C,i}) 保持为 (pk_A^C)。
- UserKeyGen(pk_A^U, sk_A^U) → (pk_A^U, sk_A^U)) : 用户 (U_A) 运行该算法设置其公私钥对。算法输入 ((pk_A^U, sk_A^U)),此阶段用户 (U_A) 的 ((pk_A^U, sk_A^U)) 与身份注册阶段的对应。其主私钥 (sk_A^U = sku \in (0, 2^{l_m}))。算法输出 ((pk_A^U, sk_A^U))。
- FormNym(params1, sk_A^U) → Nym_{CA}^{U_A}) : 用户 (U_A) 和 (C_A) 运行该算法生成假名 (Nym_{CA}^{U_A})。算法输入 (params1) 和用户的主密钥 (sk_A^U = sku)。(U_A) 和 (C_A) 共同选择一个随机数 (s)(长度为 (l_s = l_n + l_m + l),(l) 为安全参数)并计算 (Nym_{CA}^{U_A} = a^{sk_u}b^s)。算法输出 (Nym_{CA}^{U_A})。
-
MintCred(params1, Nym_{CA}^{U_A}) → cred
:用户 (U_A) 和委员会 (C_A) 运行该算法获取匿名凭证元组 (cred)。算法输入 (params1) 和 (Nym_{CA}^{U_A}),步骤如下:
- 算法随机选择 (C_A) 中的一个节点 (C_A^t) 与用户生成凭证。
- 节点 (C_A^t) 选择一个随机素数 (e)(长度为 (l_e = l_m + 2) 且 (e) 满足全局累加器 (GA1) 中累积值的范围 (E \in [A, B]))。节点 (C_A^t) 选择一个随机数 (c) 并计算满足 (v^e = Nym_{CA}^{U_A}c \equiv a^{sk_u}b^sc) 的 (v) 值。节点 (C_A^t) 颁发凭证 (cred) 作为元组 ((e, v, s))。
- 节点 (C_A^t) 创建一个包含结果凭证 (cred = (e, v, s)) 的交易 (T_{cred}),并将其广播到 (Bchain_A) 中的其他节点 (C_A^i)。
- 当其他节点收到交易 (T_{cred}) 并通过 (VerifyCred(cred, Nym_{CA}^{U_A}, pk_A^{C,i}) → {0, 1}) 验证时,(VerifyCred) 验证 (v^e = Nym_{CA}^{U_A}c)。如果所有节点验证 (VerifyCred) 为真,则将交易写入 (Bchain_A) 的块中。
- 算法 (MintCred) 输出合法凭证 (cred)。
-
UploadCred
:委员会 (C’) 将匿名凭证 (cred) 上传到 (Bchain’) 中的全局累加器 (GA1)。累加器值只能是素数。(C’) 中的节点 (C’^i) 将匿名凭证 (cred = (e, v, s)) 中的 (e) 上传到区块链 (Bchain’) 上的动态累加器 (GA1)。具体算法如下:
- AccumSetup(1λ2) → (params2, tf) :委员会 (C’) 运行该算法。算法输入安全参数 (λ2),从算法 (CLSetup) 中获取 (p),(q) 和 (N = pq)。选择一个种子值 (u \in QRN)((u \neq 1)),(C’) 设置 (tf = (p, q))。算法输出 (params2 = (N, u)) 和 (tf)。
- ObtainAcc({C’^i}_{i = 1}^{n’}, Bchain’) → GA :由委员会 (C’) 中的节点 (C’^i) 运行。可以从 (Bchain’) 中获取全局累加器 (GA1) 的当前累加器值 (GA = u^{e_1e_2…e_i}),其中 (E = {e_1, …, e_i|e \in [A, B]})。全局累加器 (GA1) 的值 (GA) 包含在块头参数 (GAStatus = 1) 的块中。在 (Bchain’) 中向后追溯,第一个 (GAStatus = 1) 的块包含最新的全局累加器值 (GA)。算法输出 (GA)。
-
UploadPartCred(C’, E’, Bchain’, params2) → (T_{GA}, GAStatus))
: 委员会 (C’) 将部分凭证上传到 (Bchain’)。算法输入 (params2) 和一组上传的素数 (E’)(包括 (e)),步骤如下:
- CollectAccNum({C’^i}_{i = 1}^{n’}, timestamp, e’_i) → E’ :由委员会 (C’) 中的节点 (C’^i) 运行,这些节点在离线状态下收集当前时间戳下上传的素数 (e’_i)。此步骤输出 (E’ = {e’_1, …, e’_i|e’_i \in [A, B]}),(E’) 包括素数 (e)。
- 这些节点 (C’^i) 通过运行 (ObtainAcc) 获取当前累加器值 (GA)。
- AccAdd(parmas2, GA, E’) → GA :由委员会 (C’) 中的节点 (C’^i) 运行,输入为 (params2 = (N, u))。新的全局累加器 (GA1) 的值 (GA) 累加为 (GA = GA^{e’_1e’_2…,e’_i} = u^{e_1e_2…,e_ie’_1e’_2…,e’_i}),其中 (E = {E \cap E’} = {e_1, …, e_i, e’_1, e’_2, …, e’_i|e_i, e’_i \in [A, B]})。此步骤输出 (GA) 的值。
- 节点 (C’^t) 创建一个包含当前全局累加器 (GA1) 值 (GA) 的交易 (T_{GA}),并将 (T_{GA}) 广播到 (Bchain’) 中其他节点 (C’^i)((i \neq t))。
- 当其他节点 (C’^i) 收到交易 (T_{GA}) 时,节点 (C’^i) 验证上传的值 (e’_i) 是否属于最新的 (GA1)。每个节点 (C’^i) 通过算法 (GenAccWitness(params2, e’_i, E)) 生成证明 (w’_i = AccAdd(params2, E{e’_i}))。然后 (C’^i) 使用 (AccVerify(params2, G, e’_i, w’_i)) 验证 (e’_i) 在 (GA) 中,(AccVerify()) 计算 (\tilde{G} = w’_i^{e’_i} \bmod N),并验证 (\tilde{G} = G) 且 (e’_i \in [A, B])。
- 当所有其他节点通过 (AccVerify) 验证时,包含 (GA) 的交易 (T_{GA}) 将存储在一个新块中,并在该块头中将参数 (GAStatus) 设置为 1。
- 这些步骤成功上传关于值 (GA) 的 (T_{GA}) 并在 (Bchain’) 中设置 (GAStatus = 1)。算法 (UploadPartCred) 输出 (T_{GA}) 和 (GAStatus = 1)。
-
请求和获取
:用户 (U_A) 使用 (Nym_{CA}^{U_A}) 向 (C_B) 发送服务请求。节点 (C_B) 从 (Bchain’) 获取最新的全局动态累加器 (GA1) 的值 (GA)。
- Request(Nym_{CA}^{U}, C_B, SP_B) → request :用户 (U_A) 使用假名 (Nym_{CA}^{U}) 向 (C_B) 发送请求,以访问域 (B) 中的服务提供者 (SP_B)。
- Obtain({C_B^i}_{i = 1}^{n_B}, Bchain’) → GA :节点 (C_B^i) 运行步骤 2 UploadCred 中的 (ObtainAcc(C’^i, Bchain’)) 算法,获取 (GA1) 的累加器值 (GA)。需要注意的是,部分属于 (C’) 的节点 (C_B^i) 直接使用步骤 2 UploadCred 中的 (ObtainAcc(C’^i, Bchain’)),其他节点使用 (Bchain’) 上的 API 接口获取 (GA1)。
- 认证和访问 :在身份认证阶段,用户利用其假名 (Nym_{CA}^{U_A}) 通过非交互式零知识与委员会 (C_B) 生成证明 (\pi_e),其中 (e) 的承诺值是证明的一部分。如果证明通过验证,用户 (U_A) 可以获得访问服务提供者 (SP_B) 的权限。
下面是跨域认证的 mermaid 流程图:
graph TD
A[初始化] --> B[上传凭证]
B --> C[请求]
C --> D[获取]
D --> E[认证和访问]
5. 总结
该去中心化跨域身份管理系统通过结合去中心化标识符、计数布隆过滤器、零知识证明、动态累加器和匿名凭证等多种技术,实现了身份管理的安全性、隐私性和跨域性。在身份注册阶段,确保每个用户获得唯一的 DID 身份,并保护用户的隐私信息。在跨域认证阶段,提供了一种高效实用的匿名跨域认证协议,使得用户可以在不同域之间安全地访问服务。同时,系统还考虑了身份撤销和身份更新的需求,为数字化身份管理提供了全面的解决方案。该系统的设计目标明确,通过合理的系统模型和详细的协议设计,有望在实际应用中发挥重要作用,为用户提供更加安全、便捷的身份管理服务。
| 系统过程 | 关键技术 | 主要作用 |
|---|---|---|
| 身份注册 | DID、CBF、阈值签名、零知识证明 | 确保用户身份唯一,保护隐私,颁发有效 DID |
| 跨域认证 | CL 匿名凭证、动态累加器、非交互式零知识证明 | 实现匿名跨域认证,提高认证效率和安全性 |
| 身份撤销和更新 | - | 满足身份状态变更需求,保障系统安全性 |
去中心化跨域身份管理系统解析
超级会员免费看
1226

被折叠的 条评论
为什么被折叠?



