技術視角理解身份認證:從 Web 2.0 資料庫到 Web 3.0 區塊鏈

買賣虛擬貨幣

原文標題:《身份認證是怎樣一個過程?》
撰文:王廣忠,前端程式設計師,專業區塊鏈講解員

這節要聊的話題是一個我們每天都會遇到,但是通常不會仔細想清楚原理的事情,那就是身份,也就是「我是誰」,另外一個相關的問題是認證身份,也就是「證明某人是某人」。肉身世界中,我們的身份似乎不需要什麼認證,認識我的人自然知道我身份,數字世界中,登入網站的時候,通常我們是會用使用者名稱和密碼登入的,所以如何認證身份似乎是有多重方式的。但是其實不管在肉身空間和數字空間,身份認證底層的邏輯都是統一的。我們來仔細挖一下,要用純技術的思路,來解釋一下如何處理「我是誰」和「證明某人是某人」的這兩個很有哲學味道的問題。

什麼是身份認證?

一個人是可以有多種身份的?我可以同時是公民,司機,影片網站的使用者,丈夫,兒子等等。作為一個喜歡做簡化和抽象的程式設計師,我認為可以把身份抽象為一個身份文件。有了這個身份文件模型,我發現理解各種情景下的身份認證都可以按照統一思路來進行。

一個身份文件,就是一個儲存到可信媒介上的包含兩個資料的文件,兩個資料分別是身份名稱和身份金鑰。所謂身份名稱,就是「我是誰」中的「誰」,例如,身份證上的公民姓名,某個網站使用者名稱等等。身份金鑰是可以證明我是這個人的不可偽造的資訊。舉個例子,每個人的公民身份證上就儲存了一個身份文件。身份名稱是我的姓名以及身份證號,而身份金鑰是我的照片,或者說是我的長相。因為我的長相,或者說生物資訊是不容易偽造的資料,所以可以用來做身份金鑰。

身份認證的過程,就是被認證的物件,透過展示身份金鑰來證明自己身份的過程。例如,我透過展示長相,就可以證明,我就是身份證上的那個公民。同時,身份文件還有另外一個重要特徵,那就是要繫結到一個「可信」的儲存媒介上。」可信「指的可以被實施認證行為的人信任。例如,警察叔叔要確認一下我的身份,這裡警察叔叔就是要實施認證行為的人,那麼身份證卡片就是他認為可信的儲存媒介。而如果實施認證的人不信任這個儲存媒介,那麼認證是無法成功的。身份認證過程,就是被認證的物件,這裡就是我,出示身份金鑰,來讓實施認證的人確認我的確是身份名稱對應的那個人的過程。

再舉一個更生活化的例子,套用一下上面的身份文件模型。例如,我有一個身份是兒子,我爸每次見到我,就能確認我就是他兒子,也就是說完成了身份認證,那麼這個認證過程是怎樣的呢?這裡,身份名稱就是「兒子」,身份金鑰是我的長相。實施認證的人是我老爸,儲存媒介是他自己的腦子,對他而言,當然是自己可信的儲存媒介了。認證過程,就是我在他面前露個臉,他看到後,發現我的長相跟他腦子中的兒子長相吻合,於是認證成功。

傳統上,身份認證指的是確認肉身身份和某個社會角色的繫結關係。但是我們的抽象模型也適用於被認證身份的物件是除了人之外的其他個體的情況,例如一個網站,一個裝置,或者一個機器人。

總之,用一個身份文件的抽象模型,就可以很好的解釋各種情況下的身份認證的過程了。

Web2.0 的身份認證過程

身份文件導讀模型,也完全可以解釋當前我們登入一個普通網站,實現身份認證的過程。

一個普通 Web2.0 App 的身份認證過程是這樣的。實現認證的前提是,使用者一起註冊過,這樣 App 資料庫中就儲存了這個使用者的 id ,或者叫使用者名稱,例如 happypeter ,另外,還會儲存密碼。入戶登入 App 的過程,就是輸入使用者名稱和密碼,認證自己身份的過程。具體過程是,使用者提交使用者密碼到網站伺服器,App 會根據使用者名稱查詢到使用者的密碼,如果這次提交的密碼跟資料庫中儲存的密碼一致,那麼認證就成功了,那麼登入操作也就成功了。

套一下咱們的身份文件模型。要實施認證的人是 App ,需要被認證的物件是使用者。可信的儲存媒介是 App 自己的資料庫,自己的資料庫,App 當然會信任。身份名稱,是使用者名稱,例如 happypeter ,身份金鑰是密碼。密碼是很簡單的數字,密碼之所以比較難以偽造,不是因為複雜,而是因為別人不知道。這裡插一句,實際中比較常見的情況是,資料庫中儲存的不是密碼本身,而是密碼的雜湊。使用者登入時,伺服器會把使用者提交的密碼做雜湊運算,得到的結果跟資料庫中的雜湊值如果相同就證明使用者提交的密碼和註冊時候的密碼是一致的,認證成功。可見,身份金鑰的形式是多樣的。被認證的物件展示的資訊可以不是身份金鑰本身,而是一個與之匹配的東西。

這就是 Web2.0 架構的 App 上實現身份認證的過程了。

去中心化的自主身份的認證過程

Web3.0 下,每個使用者的身份都是自主身份,都是不儲存在 App 資料庫中的,所以認證思路也從中心化變成了去中心化的思路。但是,我們的身份文件的模型還是成立的。

我們以 DID 作為自主身份的代表。DID 執行的基礎是儲存在區塊鏈上的 DID 文件。區塊鏈是一個全球人共同信任的不可篡改的儲存媒介,一個 DID 文件中包含很多資訊,其中包含 DID 號,對應身份名稱,還包含公鑰,對應身份金鑰。如果我需要驗證你是不是 DID 的所有者,只需要要求你出示數字簽名即可。補一點公鑰密碼學的知識:公鑰和私鑰是一起生成的,是天生的一對,公鑰可以公開給任何人,但是隻有持有私鑰的人才是公鑰的擁有者。但問題是,去中心化條件下,我們不能向給 App 提交密碼一樣,直接展示私鑰給實施認證的人,好在只要某人能夠出示數字簽名,就可以證明他肯定是持有私鑰的。

基於 DID 的身份認證有這麼幾個特點。首先,DID 文件中的身份金鑰是公開的,這個跟中心化條件下使用密碼做身份金鑰是有明顯區別的,因為密碼是要嚴格保密的。同時,認證過程中,被認證的人要持有的也不是文件中儲存的身份金鑰,而是一個跟身份金鑰匹配的東西,也就是跟公鑰配對的私鑰。這個好比古代皇帝可以把一個玉璧摔成兩半,自己和遠征的將軍各持有一半,未來用來作為信物,進行對傳令人的身份認證。DID 的這種基於密碼學的認證思路並不是什麼新創造,熟悉 SSL 證書的同學,可以試著套一套咱們的身份文件模型,你會發現也是完全符合的,而且跟 DID 非常的相似,只不過可信儲存媒介從區塊鏈變成了中心化的 CA 的資料庫。

認證和授權是密不可分的。不熟悉 DID 的同學可能奇怪,DID 號只是一個隨機數,為何也是一種身份呢?這種疑問是正常的。因為大部分時候,身份和權力是繫結的,也可以說,身份就是由權力和義務來定義的。例如,我是一個網站使用者,那我就享有在網站內的一些權力。所以網站使用者名稱,看起來更像一個真實的身份,而 DID 預設是不像的,因為它只是一串數字,沒有繫結任何權力。在 Web 開發過程中,認證 Authentication 和授權 Authoriztion 是緊密相關的兩個概念。Web2.0 網站中,對使用者的授權是透過資料庫來記錄的,例如如果使用者是 vip ,那麼這個使用者對應的資料庫記錄上就會有體現。使用 DID 這種自主身份,也可以用去中心化的形式實現授權的,如何對自主身份授權跟主題無關,這裡不展開。

關於,自主身份的認證就聊到這裡。

結論

最後總結一下,結合本節的各種討論,我們發現,不管是數字空間和肉身空間,不管是中心化條件下還是去中心化條件下,身份都可以抽象成為一個儲存在可信媒介上的身份文件,文件中包括身份名稱和身份金鑰。身份認證,就是發起認證的人核對被認證人的金鑰的過程。理解這個抽象,可以幫助我們更好的理解很多技術方案,例如 DID 的設計思路。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;