Professional Documents
Culture Documents
Verifiable Credential
Verifiable Credential
Verifiable Credential
![](C:\Users\82621\Desktop\笔记\DID\VC1.png)
![VC2](C:\Users\82621\Desktop\笔记\DID\VC2.png)
VC 通常是一系列防篡改的声明(**claims**)和证明签发者的元数据(**metadata**、**proofs**)组成
的。
# Selective disclosure
## 默克尔证明
选择性披露步骤:
1. 将所有属性作为叶子节点的初始数据,生成一个无序默克尔树;
2. 在**VC**中给出随机种子**seed**、默克尔根**merkleRoot**、对默克尔根的签名**rootSign**;
3. 生成**VP**时给出需要验证数据在默克尔树中的索引**index**、该数据的**salt**、默克尔根
**merkleRoot**、对默克尔根的签名**rootSign**、默克尔验证路径**merkleSibling**。
验证者可以使用 VP 中给出的数据首先对默克尔根的有效性进行验证,然后根据默克尔验证路径验证所需属性确实
处于该默克尔根中,从而实现在不暴露具体属性值的情况下验证属性的正确性。
用户属性的零知识证明方法之一:**基于范围数据构建 + 默克尔树验证**
对于可以划分范围的数据,例如年龄,设定采样粒度(年、月、天)后对年龄构建一个范围数组。于是对于用户
的年龄可以用一组断言来表示:
将该断言组中每个断言看作一个初始数据构建一个无序默克尔树:
<img src="C:\Users\82621\Desktop\笔记\DID\断言默克尔树.png" style="zoom:80%;" />
这样**Issuer**在生成**VC**就可以对该默克尔树根进行签名认证,验证者在验证用户的年龄满足某一条件,
例如已经年满 18 周岁,通过验证某一个断言存在于默克尔根哈希中的方式代替了验证用户具体的年龄或出生日期,
从而达到零知识证明的目的。
设计了一种适用于一般凭证共享情况下的灵活选择披露方法,使用**redactable signature(可修订签名)*
*。
[]: https://www.w3.org/TR/vc-imp-guide/#selective-disclosure)
**atomic credentials**:创建多个凭证,每个凭证只包含用户的一个属性,是最简单的方法。缺点就是需
要创建管理验证大量的签名,增加了通信代价。
**hashed values**:一个凭证中包含多个属性,但每个属性的原始数据与不同的值进行哈希后存储在凭证中。
本质上就是一种默克尔证明,将需要暴露的属性暴露,不需要暴露的属性进行哈希后提供给验证者,验证者通过
生成默克尔根的哈希进行比对判断凭证的有效性。
## 基于 BLS 签名方案的可选择披露方案
## Blind Signature——>保护凭证与用户身份之间没有关联
### 盲签名的性质:
1. 签名者对其签名的消息是不可见的(这就是“盲”的含义),即**签名者不知道他所签名消息的具体内容**。
2. 签名消息不可追踪,即当签名消息被公布后,**签名者无法知道这是他何时/哪次的签署的**。
3. 包含一般签名的性质:**不可伪造性**、**不可抵赖性**。
![](C:\Users\82621\Desktop\笔记\DID\图片\盲签名.png)