一文了解Dfinity互聯網計算機的網絡認證和身份驗證

互聯網計算機用一種更先進安全的加密認證方法取代了用戶名和密碼

要理解身份和認證在互聯網計算機的背景下意味着什麼,我們必須首先其在當今的網絡中是如何使用的。

當登錄一個網站時,用戶名通常是電子郵件地址或一串字母和數字,它是你唯一的標識符,可以將服務器上的相關數據與你的身份聯繫起來。密碼則是認證手段,從理論上講,只有你自己才知道密碼,而服務器則將你的密碼解釋為其與你交流的證明。然而事實是,密碼實際上並不是一個好的遠程認證機制。

當你在一個網站上輸入密碼時,你的電腦會將密碼發送到服務器上,並與密碼數據庫進行核對。不幸的是,黑客可以獲得這些密碼數據庫的訪問權。在最惡劣的情況下,密碼是以明文形式存儲在服務器上的,非常不安全。即使密碼是加密的,破解它們也只是黑客是否願意為了獲得訪問權而投入計算和金錢資源的問題。

互聯網計算機是一個以網絡速度運行的區塊鏈計算網絡,可以無限制地增加其容量。其設計是通過在多個數據中心之間複製數據和計算來提供安全,以防止個別計算供應商的惡意行為。要注意的是,複製雖然可以保護數據的完整性,但並不能防止信息的泄漏;在互聯網計算機上使用密碼仍然會受到與傳統網絡上相同的安全問題的影響。因此,在互聯網計算機上,我們用適當的加密認證取代了密碼。

我們在互聯網計算機上用於認證的主要加密機制是數字簽名方案。數字簽名是一個相當標準的概念,發明於20世紀70年代末,從90年代中期開始被廣泛使用。

通常由以下三種算法組成:

  • 密鑰生成:密鑰生成可以看作是選擇密碼。通常,密鑰的產生會創造一對鑰匙:1)一個是像密碼一樣必須保密的私鑰,2)另一個是可以公開的從私鑰衍生的公鑰。
  • 簽名:簽名需要信息和私鑰產生。當我們使用數字簽名進行用戶認證時,該算法是在持有私鑰的用戶端運行的。
  • 驗證:算法接收信息、簽名和公鑰,並驗證簽名是否與信息和公鑰相符。這裡的關鍵屬性是,與檢查密碼不同的是,密碼需要存儲在服務器上,而在這種情況下,簽名的驗證可以僅根據公共信息進行,因為服務器存儲了公鑰列表,每個用戶都有一個,且公鑰和簽名都不需要保密。

互聯網計算機上的應用是基於通過傳遞信息進行交互的容器(Canister)實現的。更詳細地說,交互模型是基於請求的,類似於遠程過程調用。當容器 A調用容器 B時,容器 A便指定了目標容器,所要調用的函數的名稱,以及該函數的參數。當指定的函數在容器 B上被評估時,該容器也知道該函數是由容器 A調用的。評估完成後,容器 A將獲得該函數的返回值以作為響應。而當用戶與容器互動時,同樣的遠程過程調用模型也一樣適用。當用戶調用一個容器時,用戶會向目標容器發送一個請求。這個請求也會指定一個帶有參數的函數,用戶也可以獲得返回值以作為響應。在請求的變化過程中,容器也會了解到調用它的用戶的身份。

註:在ICP平台上,Canister是最基本的組成元素,可以理解為容器,類似於以太坊等區塊鏈公鏈平台上的智能合約。這些容器可以複製、可以分叉,更方便自組織。

一文了解Dfinity互聯網計算機的網絡認證和身份驗證

上圖是用戶發送請求的示意圖。中間的淺灰色區域顯示了核心請求,包括目標容器 ID,函數名稱,參數,以及調用者的身份或主體。而深灰色區域顯示的則是包含認證信息、簽名和公鑰的封套。如圖左側所示,調用者的主體是通過散列法從公鑰中得出的。這種技術在區塊鏈領域被廣泛使用,例如比特幣或以太坊地址就是如此。此外,圖中右側部分顯示了作為數字簽名方案中的消息的請求內容是如何通過簽名與公鑰綁定的。當互聯網計算機收到這樣的請求時,它既要檢查簽名在指定的公鑰下是否有效,也要檢查公鑰和調用者主體之間的關係。

為了確保信息確實是由信息中指定的調用者發送的,容器不必理會這些技術細節。如果一切都檢查完畢,互聯網計算機會評估容器上的指定功能,但如果其中一項檢查失敗,請求就會被放棄。

一文了解Dfinity互聯網計算機的網絡認證和身份驗證

以下是關於我們使用的身份格式的一些細節。我們從DER格式的公鑰開始,用SHA-224對其進行散列,從而得到一個28字節的字符串。我們會添加一個字節,用於區分來自公鑰的身份主體和我們在互聯網計算機中其他地方使用的身份主體,例如容器。這29個字節是以用戶委託書的內部二進製表示的。當把一個委託人轉換為其文本表示時,我們首先要預加一個CRC-32錯誤檢測碼。然後,使用Base32編碼產生的字符串,最後建立每組5個字符的組,並用破折號隔開。我們選擇這種格式是為了支持在有適當錯誤檢測的情況下,可以輕鬆複製粘貼,同時仍然允許ASCII表示法中的字符少於64個,以便與互聯網協議(如DNS)兼容。

一文了解Dfinity互聯網計算機的網絡認證和身份驗證

到目前為止,我們所看到的方案在結構上還是有點不靈活的。它們將用戶的身份主體與單一的加密密鑰進行綁定,但這種限制會使用戶很難與來自不同設備的容器進行交互,因為需要在這些設備之間共享相同的加密密鑰,既繁瑣又不安全。相反,我們在不同的加密密鑰之間使用了授權。如上圖所示,你可以看到從黃色密鑰到橙色密鑰的委託。這種委託包括被委託的密鑰,即橙色的鑰匙;一些額外的參數,如過期或委託範圍的限制;以及委託密鑰的簽名,即黃色密鑰。

當用橙色密鑰簽署請求時,用戶可以使用來自黃色密鑰的委託,以便使用來自黃色密鑰的身份。此外,委託的強大之處在於,可組合性。例如,橙色密鑰可以將授權擴展到紫色密鑰。這種結構與公鑰基礎設施和X.509非常類似,但這並不是巧合,我們向其進行了借鑒,並使用了更輕量級的數據結構。

委託的一個具體應用與網絡認證有關。網絡認證是萬維網聯盟(W3C)的一個最新標準,主要針對網絡應用的雙因素認證。該標準的動機是,如前所述,密碼有嚴重的安全缺陷。它們經常在釣魚郵件、惡意軟件以及黑客攻擊發生時,成為網絡犯罪分子的獵物。

雙因素認證意味着除了密碼之外,登錄網絡應用還需要一個額外的安全因素,通常是用戶擁有的安全設備。在現實中,這可能是一個安全的USB鑰匙或是一個內置在用戶終端設備中並通過生物識別技術激活的安全芯片,由安全芯片存儲加密密鑰。由於加密密鑰從未離開過安全芯片,所以即使用戶的電腦或手機被惡意軟件感染,它們仍然是安全的。

當網絡認證被用作網絡應用中的第二因素時,協議流程如下:在用戶通過提供用戶名和密碼啟動登錄過程后,網絡服務器將生成一個隨機挑戰並將其發送給用戶的瀏覽器。然後,瀏覽器將挑戰發送給安全設備,安全設備在簽署挑戰之前需要與用戶互動。然後,簽署的挑戰書被送回服務器,服務器根據用戶註冊的公鑰驗證挑戰書上的簽名。這確保了登錄網絡應用程序時,除了密碼外還需要持有安全設備。

公認的事實是,網絡認證是一個開放的標準,使用數字簽名進行認證,且已經被廣泛的設備所支持。然而,當把它改編為互聯網計算機時,我們必須克服一些障礙。網絡認證假定了傳統網絡中面向會話的客戶服務器模型,用戶在登錄應用程序時進行一次認證,並在同一會話中發送後續信息。相比之下,互聯網計算機實現了一個模型,且每個請求都是單獨認證的。特別是,由於瀏覽器和互聯網計算機之間不存在有狀態的會話,所以沒有服務器可以生成挑戰,並由安全設備簽署。然而,回顧一下,在典型的網絡認證流程中,安全設備需要對服務器發送的挑戰提供數字簽名。

為了使用相同的協議實現請求認證,我們需要使用請求本身作為挑戰,並由安全設備簽署,類似於我們的一般請求認證方案。我們必須克服的另一個問題是,網絡認證需要用戶對每個簽名進行交互。在互聯網計算機提供的典型前端中,一個頁面的加載可能對應着多個請求。由於我們不想要求用戶明確確認每個請求,所以我們使用了上述的委託機制。當使用網絡認證與一個容器進行交互時,我們會首先生成一個短期的會話密鑰。然後,使用網絡認證來簽署一個面向該會話密鑰的委託,這樣,單個用戶的互動就可以觸發對互聯網計算機的多個請求。

一文了解Dfinity互聯網計算機的網絡認證和身份驗證

雖然網絡認證對安全存儲加密密鑰很有幫助,但它不僅將這些密鑰綁定在設備上,而且還將其綁定在了一個特定的容器上。其原因是瀏覽器的安全模型,該模型嚴格地將在同一網絡瀏覽器中運行的不同應用程序所能訪問的狀態按其來源分開。在網絡上,你可以認為一個原點大致上對應於一個網站。在互聯網計算機上,每個原點則對應於一個容器。這種嚴格的狀態分離對安全至關重要,但它也使得諸如密鑰備份或支持從多個設備無縫訪問同一容器的功能變得繁瑣,因為所有這些操作都必須為每個容器單獨執行。我們通過使用互聯網身份服務來解決這個問題,即身份提供者,類似於你在網絡上熟悉的 "用谷歌或Facebook登錄 "功能。

當用戶第一次加載一個特定容器的前端時,該前端會呈現一個 "用IC登錄 "的按鈕。當用戶點擊該按鈕時,瀏覽器會打開一個彈出窗口,顯示互聯網身份服務,這是一個允許用戶管理鑰匙和身份的特定應用程序。然後,用戶可以決定是否允許容器前端使用用戶身份。如果用戶同意,瀏覽器就會被重定向到容器前端,並能以用戶的身份訪問容器。這個機制將再次觸發會話密鑰和委託機制。屆時,容器前端會生成一個會話密鑰對,並將公鑰傳輸給互聯網身份認證。如果用戶確認,互聯網身份認證產生授權,並將其返回給信息庫前端。作為通過大技術提供商簽署的額外好處,身份提供商的完整認證流程發生在用戶端,所以對用戶私人行為的暴露要少得多,從而減少身份跟蹤。(互聯網身份服務常見問題)

談到用戶追蹤,互聯網身份認證將為用戶登錄的每一個容器前端提供一個不同的身份,這對安全和隱私非常有利。如果不是這樣,互聯網身份認證將允許每一個前端在用戶的單一主體下登錄。如果該用戶與不相關的服務互動,例如留言板和購物網站,這些服務就可以在背後關聯用戶在這些網站上的行為。更糟糕的是,留言板的前端可以惡意調用購物網站的容器 ,並以用戶的名義下訂單。因此,互聯網身份識別服務為用戶登錄的每一個前端生成一個不同的身份,並以主機名進行區分。這樣一來,用戶在不同服務上的行為就不那麼容易被追蹤了。雖然前端仍然能夠使用用戶的身份來調用互聯網計算機上的任何容器,但它永遠只是與執行調用的前端有關的身份。

本文鏈接:https://www.8btc.com/article/6639713

轉載請註明文章出處

(0)
上一篇 2021-05-24 16:44
下一篇 2021-05-24 16:54

相关推荐