做者: 溫馨(ArcBlock 數據工程師)算法
自從日前微軟宣佈推出去中心化身份識別系統,「去中心化身份」(DID)成爲區塊鏈領域最火熱的概念之一。繼 「去中心化交易所」、「去中心化應用」以後,「去中心化」的戰火終於蔓延到了身份識別系統上,但絕大多數人對於這個全新的概念依然是一頭霧水。後端
DID 本質是什麼?安全
DID 是由什麼算出來的?函數
計算 DID 的過程是什麼?工具
雖然 DID 有各類各樣的應用場景,但 DID 本質上實際上是一個地址。DID 和傳統的比特幣、以太坊地址的類似之處在於:它們都是根據一個私鑰算出來的地址。不一樣私鑰能生成同一個地址的概率在現實世界中接近於零。區塊鏈
而 DID 和傳統地址的區別在於,DID 的計算過程當中加入了某些特定信息,包括這個 DID 使用的加密算法類型、哈希算法類型等。這些算法類型做用於 DID 生成的不一樣步驟,如加密算法是規定用戶私鑰和公鑰是如何計算的,哈希算法是規定用戶信息被計算成哈希的時候使用什麼算法(以後會有詳細解釋)。DID 的全部者可使用此 DID 執行各類操做,包括驗證身份、受權交易等。能夠說,DID 將在將來成爲互聯網基礎設施,任何須要受權或驗證的行爲均可以經過 DID 完成。如今通常的受權驗證行爲都是經過輸入密碼、提供有效證件,或經過第三方公證完成,而 DID 的普及將使得一切均可以在移動端用私鑰簽名完成,這將讓人們的數字生活,甚至線下的衣食住行都將獲得極大便利。優化
功能如此強大的 DID,技術工程實現卻並不複雜。
編碼
其實,生成 DID 的過程,和下廚房烹飪一道菜的過程很是類似。須要準備以下:加密
廚具:生成 DID 須要的外部工具cdn
食材:DID 計算的基礎原材料
烹飪方法:如何搭配這些廚具和食材,具體須要執行的步驟
接下來詳細解析如何經過六個步驟生成一個 DID,讓 DID 再也不神祕。
一套廚具:簽名算法、哈希算法、DID 類型
生成 DID 的第一步是選擇一套合適的廚具。這些信息會嵌入在生成的 DID 中,這樣第三方驗證的時候,就知道應該選用對應的工具來驗證。
簽名算法: 用於生成用戶的私鑰和公鑰的算法。目前 Forge SDK默認支持兩個簽名系統選項:secp256k1 和 ed25519。
哈希算法: 用於計算數據哈希的算法。哈希函數有點像黑盒子,它能將任意長度的數據轉換爲固定長度的數據。對於相同的輸入,不一樣類型的 harsher 將具備不一樣的輸出。Forge SDK 的默認哈希算法是 SHA3 256。
DID 類型: 選擇完簽名算法和哈希算法後,最後一個要選擇的是 DID 角色類型。這指定了 DID 的角色類型,告訴驗證方這個 DID 表明的是應用程序、我的仍是設備等。下面是咱們當前支持的角色類型。
這三樣東西是咱們生成 DID 時須要的廚具。優秀的壽司師傅老是離不開一把好刀,由於廚具會在對食材的每一次處理中留下痕跡;同理,咱們選擇的廚具,也會在以後生成的 DID 中留下本身的影子。
食材:私鑰、公鑰
如今你們已經準備好必要的鍋碗瓢盆了,接下來讓咱們看看若是要作一道 DID 大餐須要些什麼原材料。
最核心的食材是私鑰。私鑰是一組須要仔細保管的數據。任何持有你密鑰的人均可以從新生成你的錢包,並用錢包作包括轉帳、批准交易等各類事情,因此你們必定要當心保管好本身的密鑰信息。
公鑰是根據加密算法從私鑰計算出來的,一般因爲第三方或公衆以驗證簽名。公鑰是公開的,因此若是別人知道了你的公鑰,但不知道你的私鑰,不會對你的信息安全形成任何威脅。
通常來講,DID 的生成只須要公鑰。可是因爲公鑰是從密鑰計算出來的,因此即便只給出密鑰,DID 也能夠生成。也就是說,私鑰或公鑰任意提供一個,就能夠生成 DID 了。但出於安全考慮,咱們通常建議你們提供公鑰,而保管好本身的私鑰信息。
做爲 DID 的原材料,私鑰/公鑰直接決定了 DID 的內容,就像壽司使用的魚,決定了這道壽司是鰻魚壽司,三文魚壽司仍是八爪魚壽司。
烹飪方法
介紹完廚具和原材料以後,咱們來看看應該如何烹製這道 DID。
在咱們介紹 DID 的烹飪方法前,請肯定你已經準備好哈希算法、簽名算法、DID 類型,並擁有了一組密鑰和公鑰。接下來按照烹飪方法的步驟,就能夠獲得一個 DID 了。
步驟 1
使用哈希算法爲公鑰算一個哈希值 hash1。
步驟 2
取 hash1 的前 20 個字節做爲 hash2,放置一旁待用。
步驟 3
在 hash2 前面添加 DID 角色類型字節,獲得 hash3。
步驟 4
使用哈希算法把 hash3 算出一個哈希值,獲得 hash4
步驟 5
將 hash4 的前 4 個字節和 hash3 合併起來,生成 hash5。
步驟 6
使用比特幣 base58 方法對 hash5 進行編碼,獲得 DID。
恭喜你順利生成了一個本身的 DID!
總結
如今你已經體驗了 DID 生成的全過程,一共只須要六步,比曹植的七步詩還少一步。
雖而後端的技術支持比較複雜,可是用戶和開發者使用過程當中徹底感覺不到。例如,在 ABT 錢包中,建立一個以 DID 爲基礎的我的錢包僅須要四步;而對於開發者來講,整個 DID 的生成過程就是自動集成在 Forge SDK 裏的。
DID 讓用戶能夠無需額外的註冊流程,而直接使用 DID 中的信息,整個過程不須要第三方參與。Forge SDK 將全部用戶地址、資產地址的計算所有自動優化成了 DID,所以 Forge SDK 開發出來的應用自然享有 DID 的優點,彼此交流將更將暢順。Forge SDK 把 DID 融入到去中心化應用的核心邏輯中,推進 DID 成爲互聯網基礎設施之一,各類應用互聯互通。在 Forge SDK 和 DID 的共同做用下,區塊鏈將來已來。