DID系列11--如何出具凭证VC

发证机关为用户发放证书VC,因为VC中具有用户的隐私信息,所以VC一般保存在私有的存储中,比如用户自己的手机中,或者需要授权的网络地址中。除了前面示例中给出的数据外,我们的VC还可以有失效日期,比如我们的身份证一般10年有效,过期后就需要重新向颁发者申请新的VC。
一些文章介绍在某些需要用户出具证明的的场景,用户可以直接出具VC全文即可,但是并没有具体说明具体的过程细节,我对此问题了思考方案。(比如用二维码显示,扫码即可获得VC全文)。
1 把VC证书用二维码显示,供验证端扫码
用二维码方案首先要搞清楚的是二维码能显示的文本内容长度是多少字节?
查阅标准:二维码信息容量大:可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字。QrcodeVersion的范围值是0-40,0的含义是表⽰压缩的信息量将会根据实际传⼊值确定,只有最⾼上限的控制,⽽且图⽚的⼤小受纠错等级1~40决定。

一般的VC中会出现中文汉字,字符数量常常突破了1000,生成的二维码比较大,点密集,不容易扫描识别。
现在二维码生成网站经常提示内容较大,生成活码, 本质是把内容保存到服务器端,用一个短地址关联到服务器端的内容,把短地址呈现为二维码。
例如这个BSN-DID的VC证书:
{
    "claim":{
        "sex":"female",
        "name":"aa",
        "age":38
    },
    "context":"https://www.w3.org/2018/credentials/v1",
    "cptId":942210021536416315,
    "created":"2022-10-02 07:36:43",
    "expirationDate":"2025-03-17",
    "id":"1576476257296715776",
    "issuerDid":"did:bsn:2nbUugNA1D7M4ZRxsMqqYYYFkX5W",
    "proof":{
        "creator":"did:bsn:2nbUugNA1D7M4ZRxsMqqYYYFkX5W",
        "type":"Secp256k1",
        "signatureValue":"VZPd9+fTOJ6nfDC2YRfhwZRJ0WAF4D1h8e7hRsjI8OJ43gSjIMeZB98uVtuJreRLMIJc5Q3KZ8EKXQwJDXdO3gA="
    },
    "shortDesc":"test cpt template 01",
    "type":"Proof",
    "userDid":"did:bsn:2xFB7ki3FraKLVsYWyR65JJ7iVL5"
}
​​​​​​​ “草料二维码”生成的二维码密密麻麻,不容易识别。右边是生成的活码连接。
由于VC本身就是个人的私有数据,用户当然不希望变成活码保存在二维码网站的服务器上啦,因此这种活码实际是不肯能使用的。
2 用Post方式发送到服务器后端
既然用二维码不靠谱,那么只能把VC文本数据提交Post给服务器端了。如果害怕http报文被截获VC数据,就使用https加密通讯。 
例如 BSN-DID的服务器网关: BSN China:  https://didservice.bsngate.com:18602  就是https, 防止泄露数据。
服务端收到VC文本数据后,可以直接转化成Json对象,就能程序处理了。
3 保存到隐私数据区域(Hub)
上面第二种方法使用仍然不方便,最好是让对方扫码一下就能购获得VC数据的访问地址,只有用户授权过的验证方才能访问一次。访问后立即失效无法再次访问。
这样就可用BSN-DID推出的隐私区域功能,用户把自己的VC存入隐私区域(Hub), 只有自己授权过的验证方才能访问,授权一次才能访问一次,很好的控制住了权限,又不会造成VC泄露。
同时,资源有个访问路径,刚好适合用二维码形式展示出来,验证方扫码后只能读取一次该路径的资源, 完美啦~~
用户注册Hub用户--用户保存VC资源---用户授权---  用户出具资源URL(二维码)-----验证方读取资源

猜你喜欢

转载自blog.csdn.net/u012084827/article/details/127218628