Hyperledger Indy 理解
Hyperledger Indy 的優(yōu)勢和不足:
在 Sovrin 架構(gòu)中,每個 DID 都有一個對應(yīng)的專用代理程序,該程序具有自己的匿名網(wǎng)絡(luò)地址,身份所有者可以從該地址通過加密的專用通道與另一個身份所有者交換可驗證聲明和其他任何數(shù)據(jù)。默認設(shè)置用戶數(shù)據(jù)有選擇地公開。Sovrin 的可驗證聲明使用加密的零知識證明,因此它們可以自動支持數(shù)據(jù)最小化。
雖然解決了區(qū)塊鏈的數(shù)據(jù)存儲量不足、用戶隱私保護等問題,在技術(shù)上取得了有效的突破與進展,但是無法解決現(xiàn)實世界與數(shù)字世界身份對應(yīng)的問題,項目后續(xù)實施推廣的難度較大,可能需要與政府權(quán)威部門合作并讓其充當(dāng)驗證人的角色,后續(xù) Sovrin 項目在企業(yè)之間發(fā)展聯(lián)盟鏈有可能是一個不錯的選擇。
以上內(nèi)容來自:去中心化身份
以下內(nèi)容來自:Hyperledger Indy:一個使用 Libindy 構(gòu)建 Indy 客戶端的開發(fā)指南
看得很懵,嘗試理一理。
背景就忽略了,簡單來說就是學(xué)生Alice、Faver大學(xué)、銀行Thrift想要使用Indy上的身份進行交互。
這個一個Demo環(huán)境,我理解為搭建一個私鏈來進行模擬。步驟如下:
1.初始化環(huán)境,也就是下載安裝Sovrin區(qū)塊鏈,和以太坊一樣,通過修改配置文件比如修改網(wǎng)絡(luò)id搭建一個私鏈。配置文件里還需要配置Steward角色,中文翻譯為管家,他們管理著這個區(qū)塊鏈。配置的這些Steward在生成區(qū)塊鏈后會寫在創(chuàng)世區(qū)塊中。
2, agent,我理解為一個客戶端應(yīng)用程序,這個應(yīng)用程序可以跟Sovrin區(qū)塊鏈進行交互。每個agent都有自己的配置文件,稱為pool configuration。這個pool configraton應(yīng)該指明這個agent連接的是哪個區(qū)塊鏈(也稱之為節(jié)點池),就行以太坊通過網(wǎng)絡(luò)id號來連接測試鏈或者本地私鏈一樣。那么我們這一步要做的就是下載安裝一個agent,這個agent是一個管家agent,安裝在管家的計算機上,管家通過這個agent來管理這個區(qū)塊鏈。修改配置文件,使這個agent根據(jù)區(qū)塊鏈的名稱和配置文件來連接到區(qū)塊鏈。如下:
3.這個agent應(yīng)該使用錢包來管理它的DID相關(guān)信息。因此我們調(diào)用sdk需要生成一個錢包。
4. 這個agent目前還是一個普通的agent,但是它想要成為管家,來行使管家的權(quán)限,就要獲得他管家的身份,那么管家的相關(guān)數(shù)據(jù)被寫在了創(chuàng)世區(qū)塊中,可以通過之前約定好的seed來獲取管家的身份,這個seed在區(qū)塊鏈創(chuàng)建之前已經(jīng)分配給了各個管家企業(yè)。以下是通過seed生成管家的DID。那么到這一步,這個區(qū)塊鏈的管理者–管家就確定下來了。
5.現(xiàn)在Alice或者其它組織想要在鏈上創(chuàng)建賬號,也就是DID,那改怎么操作呢?首先得下個agent客戶端,然后讓鏈上的用戶幫他進行創(chuàng)建。鏈上的用戶被稱為Trust Anchor角色,只有Trust Anchor角色才能操作賬本,也就是創(chuàng)建DID。現(xiàn)在區(qū)塊鏈剛創(chuàng)建,唯一的Trust Anchor就是管家steward了。以下的例子就是faber大學(xué)通過Steward來獲取一個DID.這個操作也叫onboarding。
6.一個Onboarding操作需要雙方也就是Steward和Faber大學(xué)各建一個DID,這個DID是一個 Pairwise-Unique Identifiers(DIDs)對(pair)。一個 DID 是由與之連接的一方所有,第二個應(yīng)該是另一方所有。這個DID是為了建立連接使用的。
首先,Steward創(chuàng)建一個DID,就稱為steward_faber_did。
這個steward_faber_did有什么用呢,可以用來生成連接請求。把連接請求放到了鏈上。生成連接請求方式如下:
注意要往鏈上寫數(shù)據(jù)還得使用管家的DID才行。這個連接請求被放在鏈上,nym_request請求還有一個參數(shù)Nonce。這個Nonce是一個大隨機數(shù),代表著Steward和Faber之間唯一的連接號。
Steward把請求放到了鏈上,還得告訴Faber他生成的did和nonce是多少,于是他搞了這么一個connection_request文件發(fā)送給Faber.
7.現(xiàn)在到Faber創(chuàng)建他的連接DID了。前提是他已經(jīng)安裝好了agent。首先他得創(chuàng)建一個錢包才能創(chuàng)建DID。然后跟Steward一樣調(diào)用did.create_and_store_my_did方法創(chuàng)建一個連接用的DID.
創(chuàng)建錢包:
創(chuàng)建和Steward連接用DID,稱為faber_steward_did:
Faber還需要使用Steward的steward_faber_did的steward_faber_key。于是向賬本請求,也就是從區(qū)塊鏈上獲取,雖然他沒有寫的權(quán)限,但是讀應(yīng)該可以。獲取steward_faber_key:
connection_request[‘did’]應(yīng)該是Steward發(fā)給Faber的connection_request文件中的did。這個did數(shù)據(jù)之前第6步的時候已經(jīng)被Steward放到了鏈上。
這個steward_faber_verkey就是這個did的公鑰。這個公鑰是拿來加密用的。加密什么東西呢?
Faber還需要創(chuàng)建一個連接反饋,這個連接返回包含自己創(chuàng)建的did和Steward之前生成的Nonce。連接反饋如下:
使用steward_faber_verkey對這個連接反饋進行加密,發(fā)給Steward,因為私鑰在Steward手上。
對連接反饋加密:
Steward解密后驗證發(fā)過來的nonce值和自己生成的nonce值是否一樣:
如果一樣,就證明了Steward手里的Faber的私鑰是正確的,同時Faber手里的Steward的私鑰也是正確的,因為他是從鏈上請求得來的。
證明了Faber的私鑰是正確的以后,Steward把faber的私鑰放在鏈上,之后他們就可以通過訪問區(qū)塊鏈拿到對方的公鑰來進行加密了!
把Faber創(chuàng)建的公鑰和did放在鏈上:
有了對方的公鑰,他們可以放心交流了,這種方法我能想到的好處是沒有使用CA來確定公鑰!
8.下一步Faber要干嘛呢,他得生成一個Verinym類型的DID,這個DID代表著他的法律身份。
和之前一樣生成一個新的DID:
然后把這個DID封裝成faber_did_info文件:
封裝好了進行加密:
這個加密算法使用了Steward的公鑰和自己的公鑰。
加密好了私下發(fā)給Steward,Steward進行解密:
解密后得到了Faber新生成的DID數(shù)據(jù),也就是faber_did_info文件,里面是包含了DID和這個DID的公鑰。
Steward需要確認的是Faber發(fā)過來的DID和這個DID對應(yīng)的的公鑰是不是正確的,也就是說,DID和DID對應(yīng)的公鑰是有聯(lián)系的,通過DID和計算出它對應(yīng)的公鑰。
首先Steward通過Faber發(fā)過來的DID號計算對應(yīng)的公鑰:
然后跟Faber發(fā)過來的公鑰對比一下看有沒有造假情況:
確定沒問題后Steward向賬本發(fā)送創(chuàng)造DID交易,雖然是給Faber創(chuàng)造的,但是這個DID的owner還是Faber的,因為這個DID的私鑰和公鑰都在Faber的手上。現(xiàn)在,Faber終于擁有了自己真正的DID了。
如法炮制,Alice、Thrift銀行也可以申請自己的DID。
接下來:
政府部門的操作:
政府(權(quán)威部門)生成Credential Schema。包括transcript_schema_id和對應(yīng)的transcript_schema,也就是證件所包括的數(shù)據(jù)項的模板文件。
政府部門把transcript_schema發(fā)布到賬本上。
-----------------------------------------------------------------------------------------------------------------------------------------------
Faber的操作:
Faber通過transcript_schema_id創(chuàng)建獲得transcript_schema的請求,請求發(fā)到鏈上獲得transcript_schema。這個時候鏈上會記錄faber_did申請獲取了一次transcript_schema。
Faber通過transcript_schema創(chuàng)建一個Credential Definnition,一個Credential Definnition包括faber_transcript_cred_def_id和對應(yīng)的faber_transcript_cred_def_json
把Faber_transcript_cred_def_json存到錢包中。然后還把faber_transcript_cred_def_json發(fā)送到賬本(區(qū)塊鏈)中。
Faber根據(jù)Credential Definnition中的faber_transcript_cred_def_id,創(chuàng)建了一個Credential Offer(transcript_cred_offer_json)。這個json文件里邊包括了schema_id和faber_transcript_cred_def_id。存放在自己錢包中。
faber把Credential Offer發(fā)送給Alice
Alice的操作:
Alice以之前和faber建立的通信did,也就是alice_faber_did,和Faber發(fā)過來的Credential Offer中的schema_id獲取transcript_schema。
為什么不直接像Faver那樣直接通過transcript_schema_id來獲取,難道Alice沒有transcript_schema_id?那Alice直接給不就完事了嗎?為什么要使用alice_faber_did這個did呢
Alice創(chuàng)建一個Master Secret。這么Maste Secret用來證明你擁有了某個Credential。
Alice從Credential Offer中拿到cred_def_id,根據(jù)cred_def_id從賬本中獲取Faber創(chuàng)建的Credential Definition。還是使用alice_faber_did這個did 從賬本上獲取。
好了,Alice現(xiàn)在已經(jīng)可以集齊七龍珠了,可以生成請求信息,來請求Faber大學(xué)生成的成績單了?Alice的七龍珠是,和Faver溝通用的did,Scheme_id,faber_transcript_cred_def_id,他創(chuàng)建的master_secret。
生成的請求包括:transcript_cred_request_json、transcript_cred_request_metadata_json。有了這兩個東西就可以請求憑證了!
faber給Scheme附上數(shù)據(jù),生成transcript_cred_values。然后通過給Alice的Credential Offer和Alice生成的憑證定義請求文件transcript_cred_request_json,加上帶有數(shù)據(jù)的憑證transcript_cred_values生成了一個transcript_cred_json,也就是最后的帶有數(shù)據(jù)的憑證。
Alice目前擁有了
憑證定義請求文件transcript_cred_request_json,
憑證定義請求元數(shù)據(jù)transcript_cred_request_metadata_json,
上一步Faber生成后給的憑證數(shù)據(jù) transcript_cred_json
Faber之前給的憑證定義文件faber_transcript_cred_def
把這些,放在自己的錢包中。作為真實的憑證。
截止目前:
1.政府把憑證模板放到了鏈上。
2.faber根據(jù)憑證模板制作了Credential Definition,把Credential Definition存到了鏈上,又根據(jù)Credential Definition制作了Credential Offer,把Credential Offer加密交給了Alice.
3.Alice拿到了Credential Offer,根據(jù)Credential Offer,他們可以拿到憑證模板(好像沒什么用),4.Alice創(chuàng)建一個Master Secret。Alice根據(jù)Credential Offer從鏈上拿到了Credential Definition。
5.Faber大學(xué)給憑證模板寫上數(shù)據(jù)。
6.Alice想申請這個憑證數(shù)據(jù),它需要向Faber大學(xué)提供:Credential Offer、和Faber大學(xué)通信的DID,即alice_faber_did,Credential Definition,alice_master_secret。
總結(jié)
以上是生活随笔為你收集整理的Hyperledger Indy 理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eID是个什么东西
- 下一篇: 数字身份的一些应用和方案