如何生成自己的去中心化身份DID
自從日前微軟宣布推出去中心化身份識(shí)別系統(tǒng),“去中心化身份”(DID)成為區(qū)塊鏈領(lǐng)域最火熱的概念之一。繼 “去中心化交易所”、“去中心化應(yīng)用”之后,“去中心化”的戰(zhàn)火終于蔓延到了身份識(shí)別系統(tǒng)上,但絕大多數(shù)人對(duì)于這個(gè)全新的概念依然是一頭霧水。
· DID 本質(zhì)是什么?
· DID 是由什么算出來(lái)的?
· 計(jì)算 DID 的過(guò)程是什么?
雖然 DID 有各種各樣的應(yīng)用場(chǎng)景,但 DID 本質(zhì)上其實(shí)是一個(gè)地址。DID 和傳統(tǒng)的比特幣、以太坊地址的相似之處在于:它們都是根據(jù)一個(gè)私鑰算出來(lái)的地址。不同私鑰能生成同一個(gè)地址的幾率在現(xiàn)實(shí)世界中接近于零。
而 DID 和傳統(tǒng)地址的區(qū)別在于,DID 的計(jì)算過(guò)程中加入了某些特定信息,包括這個(gè) DID 使用的加密算法類(lèi)型、哈希算法類(lèi)型等。這些算法類(lèi)型作用于 DID 生成的不同步驟,如加密算法是規(guī)定用戶(hù)私鑰和公鑰是如何計(jì)算的,哈希算法是規(guī)定用戶(hù)信息被計(jì)算成哈希的時(shí)候使用什么算法(之后會(huì)有詳細(xì)解釋?zhuān)?。DID 的所有者可以使用此 DID 執(zhí)行各種操作,包括驗(yàn)證身份、授權(quán)交易等??梢哉f(shuō),DID 將在未來(lái)成為互聯(lián)網(wǎng)基礎(chǔ)設(shè)施,任何需要授權(quán)或驗(yàn)證的行為都可以通過(guò) DID 完成。現(xiàn)在一般的授權(quán)驗(yàn)證行為都是通過(guò)輸入密碼、提供有效證件,或通過(guò)第三方公證完成,而 DID 的普及將使得一切都可以在移動(dòng)端用私鑰簽名完成,這將讓人們的數(shù)字生活,甚至線(xiàn)下的衣食住行都將得到極大便利。
功能如此強(qiáng)大的 DID,技術(shù)工程實(shí)現(xiàn)卻并不復(fù)雜。
其實(shí),生成 DID 的過(guò)程,和下廚房烹飪一道菜的過(guò)程非常相似。需要準(zhǔn)備如下:
· 廚具:生成 DID 需要的外部工具
· 食材:DID 計(jì)算的基礎(chǔ)原材料
· 烹飪方法:如何搭配這些廚具和食材,具體需要執(zhí)行的步驟
接下來(lái)詳細(xì)解析如何通過(guò)六個(gè)步驟生成一個(gè) DID,讓 DID 不再神秘。
一套廚具:簽名算法、哈希算法、DID 類(lèi)型
生成 DID 的第一步是選擇一套合適的廚具。這些信息會(huì)嵌入在生成的 DID 中,這樣第三方驗(yàn)證的時(shí)候,就知道應(yīng)該選用對(duì)應(yīng)的工具來(lái)驗(yàn)證。
簽名算法: 用于生成用戶(hù)的私鑰和公鑰的算法。目前 Forge SDK默認(rèn)支持兩個(gè)簽名系統(tǒng)選項(xiàng):secp256k1 和 ed25519。
哈希算法: 用于計(jì)算數(shù)據(jù)哈希的算法。哈希函數(shù)有點(diǎn)像黑盒子,它能將任意長(zhǎng)度的數(shù)據(jù)轉(zhuǎn)換為固定長(zhǎng)度的數(shù)據(jù)。對(duì)于相同的輸入,不同類(lèi)型的 harsher 將具有不同的輸出。Forge SDK 的默認(rèn)哈希算法是 SHA3 256。
DID 類(lèi)型: 選擇完簽名算法和哈希算法后,最后一個(gè)要選擇的是 DID 角色類(lèi)型。這指定了 DID 的角色類(lèi)型,告訴驗(yàn)證方這個(gè) DID 代表的是應(yīng)用程序、個(gè)人還是設(shè)備等。下面是我們當(dāng)前支持的角色類(lèi)型。
這三樣?xùn)|西是我們生成 DID 時(shí)需要的廚具。優(yōu)秀的壽司師傅總是離不開(kāi)一把好刀,因?yàn)閺N具會(huì)在對(duì)食材的每一次處理中留下痕跡;同理,我們選擇的廚具,也會(huì)在之后生成的 DID 中留下自己的影子。
食材:私鑰、公鑰
現(xiàn)在大家已經(jīng)準(zhǔn)備好必要的鍋碗瓢盆了,接下來(lái)讓我們看看如果要做一道 DID 大餐需要些什么原材料。
最核心的食材是私鑰。私鑰是一組需要仔細(xì)保管的數(shù)據(jù)。任何持有你密鑰的人都可以重新生成你的錢(qián)包,并用錢(qián)包做包括轉(zhuǎn)賬、批準(zhǔn)交易等各種事情,所以大家一定要小心保管好自己的密鑰信息。
公鑰是根據(jù)加密算法從私鑰計(jì)算出來(lái)的,通常由于第三方或公眾以驗(yàn)證簽名。公鑰是公開(kāi)的,所以如果別人知道了你的公鑰,但不知道你的私鑰,不會(huì)對(duì)你的信息安全造成任何威脅。
一般來(lái)說(shuō),DID 的生成只需要公鑰。但是由于公鑰是從密鑰計(jì)算出來(lái)的,所以即使只給出密鑰,DID 也可以生成。也就是說(shuō),私鑰或公鑰任意提供一個(gè),就可以生成 DID 了。但出于安全考慮,我們一般建議大家提供公鑰,而保管好自己的私鑰信息。
作為 DID 的原材料,私鑰/公鑰直接決定了 DID 的內(nèi)容,就像壽司使用的魚(yú),決定了這道壽司是鰻魚(yú)壽司,三文魚(yú)壽司還是八爪魚(yú)壽司。
烹飪方法
介紹完廚具和原材料之后,我們來(lái)看看應(yīng)該如何烹制這道 DID。
在我們介紹 DID 的烹飪方法前,請(qǐng)確定你已經(jīng)準(zhǔn)備好哈希算法、簽名算法、DID 類(lèi)型,并擁有了一組密鑰和公鑰。接下來(lái)按照烹飪方法的步驟,就可以得到一個(gè) DID 了。
步驟 1
使用哈希算法為公鑰算一個(gè)哈希值 hash1。
步驟 2
取 hash1 的前 20 個(gè)字節(jié)作為 hash2,放置一旁待用。
步驟 3
在 hash2 前面添加 DID 角色類(lèi)型字節(jié),得到 hash3。
步驟 4
使用哈希算法把 hash3 算出一個(gè)哈希值,得到 hash4
步驟 5
將 hash4 的前 4 個(gè)字節(jié)和 hash3 合并起來(lái),生成 hash5。
步驟 6
使用比特幣 base58 方法對(duì) hash5 進(jìn)行編碼,得到 DID。
恭喜你順利生成了一個(gè)自己的 DID!
總結(jié)
現(xiàn)在你已經(jīng)體驗(yàn)了 DID 生成的全過(guò)程,一共只需要六步,比曹植的七步詩(shī)還少一步。
雖然后端的技術(shù)支持比較復(fù)雜,但是用戶(hù)和開(kāi)發(fā)者使用過(guò)程中完全感受不到。例如,在 ABT 錢(qián)包中,創(chuàng)建一個(gè)以 DID 為基礎(chǔ)的個(gè)人錢(qián)包僅需要四步;而對(duì)于開(kāi)發(fā)者來(lái)說(shuō),整個(gè) DID 的生成過(guò)程就是自動(dòng)集成在 Forge SDK 里的。
DID 讓用戶(hù)可以無(wú)需額外的注冊(cè)流程,而直接使用 DID 中的信息,整個(gè)過(guò)程不需要第三方參與。Forge SDK 將所有用戶(hù)地址、資產(chǎn)地址的計(jì)算全部自動(dòng)優(yōu)化成了 DID,因此 Forge SDK 開(kāi)發(fā)出來(lái)的應(yīng)用天然享有 DID 的優(yōu)勢(shì),彼此交流將更將暢順。Forge SDK 把 DID 融入到去中心化應(yīng)用的核心邏輯中,推動(dòng) DID 成為互聯(lián)網(wǎng)基礎(chǔ)設(shè)施之一,各種應(yīng)用互聯(lián)互通。在 Forge SDK 和 DID 的共同作用下,區(qū)塊鏈未來(lái)已來(lái)。





