日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Hyperledger Indy 理解

發(fā)布時(shí)間:2025/4/17 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hyperledger Indy 理解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Hyperledger Indy 的優(yōu)勢(shì)和不足:
在 Sovrin 架構(gòu)中,每個(gè) DID 都有一個(gè)對(duì)應(yīng)的專(zhuān)用代理程序,該程序具有自己的匿名網(wǎng)絡(luò)地址,身份所有者可以從該地址通過(guò)加密的專(zhuān)用通道與另一個(gè)身份所有者交換可驗(yàn)證聲明和其他任何數(shù)據(jù)。默認(rèn)設(shè)置用戶(hù)數(shù)據(jù)有選擇地公開(kāi)。Sovrin 的可驗(yàn)證聲明使用加密的零知識(shí)證明,因此它們可以自動(dòng)支持?jǐn)?shù)據(jù)最小化。
雖然解決了區(qū)塊鏈的數(shù)據(jù)存儲(chǔ)量不足、用戶(hù)隱私保護(hù)等問(wèn)題,在技術(shù)上取得了有效的突破與進(jìn)展,但是無(wú)法解決現(xiàn)實(shí)世界與數(shù)字世界身份對(duì)應(yīng)的問(wèn)題,項(xiàng)目后續(xù)實(shí)施推廣的難度較大,可能需要與政府權(quán)威部門(mén)合作并讓其充當(dāng)驗(yàn)證人的角色,后續(xù) Sovrin 項(xiàng)目在企業(yè)之間發(fā)展聯(lián)盟鏈有可能是一個(gè)不錯(cuò)的選擇。
以上內(nèi)容來(lái)自:去中心化身份

以下內(nèi)容來(lái)自:Hyperledger Indy:一個(gè)使用 Libindy 構(gòu)建 Indy 客戶(hù)端的開(kāi)發(fā)指南
看得很懵,嘗試?yán)硪焕怼?br /> 背景就忽略了,簡(jiǎn)單來(lái)說(shuō)就是學(xué)生Alice、Faver大學(xué)、銀行Thrift想要使用Indy上的身份進(jìn)行交互。
這個(gè)一個(gè)Demo環(huán)境,我理解為搭建一個(gè)私鏈來(lái)進(jìn)行模擬。步驟如下:

1.初始化環(huán)境,也就是下載安裝Sovrin區(qū)塊鏈,和以太坊一樣,通過(guò)修改配置文件比如修改網(wǎng)絡(luò)id搭建一個(gè)私鏈。配置文件里還需要配置Steward角色,中文翻譯為管家,他們管理著這個(gè)區(qū)塊鏈。配置的這些Steward在生成區(qū)塊鏈后會(huì)寫(xiě)在創(chuàng)世區(qū)塊中。
2, agent,我理解為一個(gè)客戶(hù)端應(yīng)用程序,這個(gè)應(yīng)用程序可以跟Sovrin區(qū)塊鏈進(jìn)行交互。每個(gè)agent都有自己的配置文件,稱(chēng)為pool configuration。這個(gè)pool configraton應(yīng)該指明這個(gè)agent連接的是哪個(gè)區(qū)塊鏈(也稱(chēng)之為節(jié)點(diǎn)池),就行以太坊通過(guò)網(wǎng)絡(luò)id號(hào)來(lái)連接測(cè)試鏈或者本地私鏈一樣。那么我們這一步要做的就是下載安裝一個(gè)agent,這個(gè)agent是一個(gè)管家agent,安裝在管家的計(jì)算機(jī)上,管家通過(guò)這個(gè)agent來(lái)管理這個(gè)區(qū)塊鏈。修改配置文件,使這個(gè)agent根據(jù)區(qū)塊鏈的名稱(chēng)和配置文件來(lái)連接到區(qū)塊鏈。如下:

3.這個(gè)agent應(yīng)該使用錢(qián)包來(lái)管理它的DID相關(guān)信息。因此我們調(diào)用sdk需要生成一個(gè)錢(qián)包。

4. 這個(gè)agent目前還是一個(gè)普通的agent,但是它想要成為管家,來(lái)行使管家的權(quán)限,就要獲得他管家的身份,那么管家的相關(guān)數(shù)據(jù)被寫(xiě)在了創(chuàng)世區(qū)塊中,可以通過(guò)之前約定好的seed來(lái)獲取管家的身份,這個(gè)seed在區(qū)塊鏈創(chuàng)建之前已經(jīng)分配給了各個(gè)管家企業(yè)。以下是通過(guò)seed生成管家的DID。那么到這一步,這個(gè)區(qū)塊鏈的管理者–管家就確定下來(lái)了。

5.現(xiàn)在Alice或者其它組織想要在鏈上創(chuàng)建賬號(hào),也就是DID,那改怎么操作呢?首先得下個(gè)agent客戶(hù)端,然后讓鏈上的用戶(hù)幫他進(jìn)行創(chuàng)建。鏈上的用戶(hù)被稱(chēng)為T(mén)rust Anchor角色,只有Trust Anchor角色才能操作賬本,也就是創(chuàng)建DID。現(xiàn)在區(qū)塊鏈剛創(chuàng)建,唯一的Trust Anchor就是管家steward了。以下的例子就是faber大學(xué)通過(guò)Steward來(lái)獲取一個(gè)DID.這個(gè)操作也叫onboarding。

6.一個(gè)Onboarding操作需要雙方也就是Steward和Faber大學(xué)各建一個(gè)DID,這個(gè)DID是一個(gè) Pairwise-Unique Identifiers(DIDs)對(duì)(pair)。一個(gè) DID 是由與之連接的一方所有,第二個(gè)應(yīng)該是另一方所有。這個(gè)DID是為了建立連接使用的。
首先,Steward創(chuàng)建一個(gè)DID,就稱(chēng)為steward_faber_did。

這個(gè)steward_faber_did有什么用呢,可以用來(lái)生成連接請(qǐng)求。把連接請(qǐng)求放到了鏈上。生成連接請(qǐng)求方式如下:
注意要往鏈上寫(xiě)數(shù)據(jù)還得使用管家的DID才行。這個(gè)連接請(qǐng)求被放在鏈上,nym_request請(qǐng)求還有一個(gè)參數(shù)Nonce。這個(gè)Nonce是一個(gè)大隨機(jī)數(shù),代表著Steward和Faber之間唯一的連接號(hào)。
Steward把請(qǐng)求放到了鏈上,還得告訴Faber他生成的did和nonce是多少,于是他搞了這么一個(gè)connection_request文件發(fā)送給Faber.

7.現(xiàn)在到Faber創(chuàng)建他的連接DID了。前提是他已經(jīng)安裝好了agent。首先他得創(chuàng)建一個(gè)錢(qián)包才能創(chuàng)建DID。然后跟Steward一樣調(diào)用did.create_and_store_my_did方法創(chuàng)建一個(gè)連接用的DID.
創(chuàng)建錢(qián)包:

創(chuàng)建和Steward連接用DID,稱(chēng)為faber_steward_did:

Faber還需要使用Steward的steward_faber_did的steward_faber_key。于是向賬本請(qǐng)求,也就是從區(qū)塊鏈上獲取,雖然他沒(méi)有寫(xiě)的權(quán)限,但是讀應(yīng)該可以。獲取steward_faber_key:
connection_request[‘did’]應(yīng)該是Steward發(fā)給Faber的connection_request文件中的did。這個(gè)did數(shù)據(jù)之前第6步的時(shí)候已經(jīng)被Steward放到了鏈上。
這個(gè)steward_faber_verkey就是這個(gè)did的公鑰。這個(gè)公鑰是拿來(lái)加密用的。加密什么東西呢?
Faber還需要?jiǎng)?chuàng)建一個(gè)連接反饋,這個(gè)連接返回包含自己創(chuàng)建的did和Steward之前生成的Nonce。連接反饋如下:

使用steward_faber_verkey對(duì)這個(gè)連接反饋進(jìn)行加密,發(fā)給Steward,因?yàn)樗借€在Steward手上。
對(duì)連接反饋加密:

Steward解密后驗(yàn)證發(fā)過(guò)來(lái)的nonce值和自己生成的nonce值是否一樣:

如果一樣,就證明了Steward手里的Faber的私鑰是正確的,同時(shí)Faber手里的Steward的私鑰也是正確的,因?yàn)樗菑逆溕险?qǐng)求得來(lái)的。
證明了Faber的私鑰是正確的以后,Steward把faber的私鑰放在鏈上,之后他們就可以通過(guò)訪問(wèn)區(qū)塊鏈拿到對(duì)方的公鑰來(lái)進(jìn)行加密了!
把Faber創(chuàng)建的公鑰和did放在鏈上:
有了對(duì)方的公鑰,他們可以放心交流了,這種方法我能想到的好處是沒(méi)有使用CA來(lái)確定公鑰!

8.下一步Faber要干嘛呢,他得生成一個(gè)Verinym類(lèi)型的DID,這個(gè)DID代表著他的法律身份。
和之前一樣生成一個(gè)新的DID:
然后把這個(gè)DID封裝成faber_did_info文件:

封裝好了進(jìn)行加密:

這個(gè)加密算法使用了Steward的公鑰和自己的公鑰。
加密好了私下發(fā)給Steward,Steward進(jìn)行解密:
解密后得到了Faber新生成的DID數(shù)據(jù),也就是faber_did_info文件,里面是包含了DID和這個(gè)DID的公鑰。
Steward需要確認(rèn)的是Faber發(fā)過(guò)來(lái)的DID和這個(gè)DID對(duì)應(yīng)的的公鑰是不是正確的,也就是說(shuō),DID和DID對(duì)應(yīng)的公鑰是有聯(lián)系的,通過(guò)DID和計(jì)算出它對(duì)應(yīng)的公鑰。
首先Steward通過(guò)Faber發(fā)過(guò)來(lái)的DID號(hào)計(jì)算對(duì)應(yīng)的公鑰:


然后跟Faber發(fā)過(guò)來(lái)的公鑰對(duì)比一下看有沒(méi)有造假情況:

確定沒(méi)問(wèn)題后Steward向賬本發(fā)送創(chuàng)造DID交易,雖然是給Faber創(chuàng)造的,但是這個(gè)DID的owner還是Faber的,因?yàn)檫@個(gè)DID的私鑰和公鑰都在Faber的手上。現(xiàn)在,Faber終于擁有了自己真正的DID了。
如法炮制,Alice、Thrift銀行也可以申請(qǐng)自己的DID。

接下來(lái):

政府部門(mén)的操作:
政府(權(quán)威部門(mén))生成Credential Schema。包括transcript_schema_id和對(duì)應(yīng)的transcript_schema,也就是證件所包括的數(shù)據(jù)項(xiàng)的模板文件。

政府部門(mén)把transcript_schema發(fā)布到賬本上。
-----------------------------------------------------------------------------------------------------------------------------------------------
Faber的操作:
Faber通過(guò)transcript_schema_id創(chuàng)建獲得transcript_schema的請(qǐng)求,請(qǐng)求發(fā)到鏈上獲得transcript_schema。這個(gè)時(shí)候鏈上會(huì)記錄faber_did申請(qǐng)獲取了一次transcript_schema。

Faber通過(guò)transcript_schema創(chuàng)建一個(gè)Credential Definnition,一個(gè)Credential Definnition包括faber_transcript_cred_def_id和對(duì)應(yīng)的faber_transcript_cred_def_json

把Faber_transcript_cred_def_json存到錢(qián)包中。然后還把faber_transcript_cred_def_json發(fā)送到賬本(區(qū)塊鏈)中。

Faber根據(jù)Credential Definnition中的faber_transcript_cred_def_id,創(chuàng)建了一個(gè)Credential Offer(transcript_cred_offer_json)。這個(gè)json文件里邊包括了schema_id和faber_transcript_cred_def_id。存放在自己錢(qián)包中。

faber把Credential Offer發(fā)送給Alice


Alice的操作:
Alice以之前和faber建立的通信did,也就是alice_faber_did,和Faber發(fā)過(guò)來(lái)的Credential Offer中的schema_id獲取transcript_schema。

為什么不直接像Faver那樣直接通過(guò)transcript_schema_id來(lái)獲取,難道Alice沒(méi)有transcript_schema_id?那Alice直接給不就完事了嗎?為什么要使用alice_faber_did這個(gè)did呢
Alice創(chuàng)建一個(gè)Master Secret。這么Maste Secret用來(lái)證明你擁有了某個(gè)Credential。

Alice從Credential Offer中拿到cred_def_id,根據(jù)cred_def_id從賬本中獲取Faber創(chuàng)建的Credential Definition。還是使用alice_faber_did這個(gè)did 從賬本上獲取。

好了,Alice現(xiàn)在已經(jīng)可以集齊七龍珠了,可以生成請(qǐng)求信息,來(lái)請(qǐng)求Faber大學(xué)生成的成績(jī)單了?Alice的七龍珠是,和Faver溝通用的did,Scheme_id,faber_transcript_cred_def_id,他創(chuàng)建的master_secret。
生成的請(qǐng)求包括:transcript_cred_request_json、transcript_cred_request_metadata_json。有了這兩個(gè)東西就可以請(qǐng)求憑證了!

faber給Scheme附上數(shù)據(jù),生成transcript_cred_values。然后通過(guò)給Alice的Credential Offer和Alice生成的憑證定義請(qǐng)求文件transcript_cred_request_json,加上帶有數(shù)據(jù)的憑證transcript_cred_values生成了一個(gè)transcript_cred_json,也就是最后的帶有數(shù)據(jù)的憑證。

Alice目前擁有了
憑證定義請(qǐng)求文件transcript_cred_request_json,
憑證定義請(qǐng)求元數(shù)據(jù)transcript_cred_request_metadata_json,
上一步Faber生成后給的憑證數(shù)據(jù) transcript_cred_json
Faber之前給的憑證定義文件faber_transcript_cred_def
把這些,放在自己的錢(qián)包中。作為真實(shí)的憑證。

截止目前:
1.政府把憑證模板放到了鏈上
2.faber根據(jù)憑證模板制作了Credential Definition,把Credential Definition存到了鏈上,又根據(jù)Credential Definition制作了Credential Offer,把Credential Offer加密交給了Alice.
3.Alice拿到了Credential Offer,根據(jù)Credential Offer,他們可以拿到憑證模板(好像沒(méi)什么用),4.Alice創(chuàng)建一個(gè)Master Secret。Alice根據(jù)Credential Offer從鏈上拿到了Credential Definition。
5.Faber大學(xué)給憑證模板寫(xiě)上數(shù)據(jù)。
6.Alice想申請(qǐng)這個(gè)憑證數(shù)據(jù),它需要向Faber大學(xué)提供:Credential Offer、和Faber大學(xué)通信的DID,即alice_faber_did,Credential Definition,alice_master_secret。

總結(jié)

以上是生活随笔為你收集整理的Hyperledger Indy 理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。