使用Rutoken技術在系統中註冊和授權用戶的經驗(第1部分)

午安我想分享我在這個主題上的經驗。

Rutoken是身分驗證、資訊安全和電子簽章領域的硬體和軟體解決方案。 本質上,這是一個閃存驅動器,可以儲存用戶用於登入系統的身份驗證資料。

本例中使用Rutoken EDS 2.0。

要使用此 Rutoken,您需要 在 Windows 上安裝驅動程式.

對於 Windows,僅安裝一個驅動程式可確保安裝所需的所有內容,以便作業系統可以看到您的 Rutoken 並可以使用它。

您可以透過多種方式與 Rutoken 互動。 您可以從應用程式的伺服器端或直接從客戶端存取它。 此範例將著眼於從應用程式的用戶端與 Rutoken 進行互動。

應用程式的用戶端部分透過 rutoken 外掛程式與 rutoken 進行互動。 這是一個單獨安裝在每個瀏覽器上的程式。 對於 Windows,您只需下載並安裝插件, 位於此連結.

就是這樣,現在我們可以從應用程式的客戶端與 Rutoken 進行互動。

本範例討論使用挑戰-回應方案在系統中實現使用者授權演算法的想法。

這個想法的本質如下:

  1. 客戶端向伺服器發送授權請求。
  2. 伺服器透過發送隨機字串來回應來自客戶端的請求。
  3. 客戶端以隨機 32 位元填充該字串。
  4. 用戶端使用其憑證對接收到的字串進行簽署。
  5. 客戶端將收到的加密訊息傳送到伺服器。
  6. 伺服器透過接收原始未加密訊息來驗證簽名。
  7. 伺服器從收到的未加密訊息中移除最後 32 位元。
  8. 伺服器將收到的結果與請求授權時發送的訊息進行比較。
  9. 如果訊息相同,則認為授權成功。

上面的演算法中有一個證書這樣的東西。 對於這個例子,您需要了解一些密碼學理論。 在哈布雷上有 關於這個主題的好文章.

在本例中,我們將使用非對稱加密演算法。 要實現非對稱演算法,您必須擁有金鑰對和憑證。

密鑰對由兩部分組成:私鑰和公鑰。 私鑰,顧名思義,必須是秘密的。 我們用它來解密資訊。 公鑰可以分發給任何人。 此密鑰用於加密資料。 因此,任何用戶都可以使用公鑰加密數據,但只有私鑰的擁有者才能解密該資訊。

證書是一種電子文檔,其中包含有關擁有該證書的使用者的信息以及公鑰。 有了證書,用戶可以對任何資料進行簽名並將其發送到伺服器,伺服器可以驗證簽名並解密資料。

為了使用證書正確簽署訊息,您需要正確建立它。 為此,首先在 Rutoken 上建立金鑰對,然後必須將憑證連結到該金鑰對的公鑰。 憑證必須具有位於 Rutoken 上的公鑰,這一點很重要。 如果我們只是立即在應用程式的客戶端建立金鑰對和證書,那麼伺服器如何解密此加密訊息? 畢竟,他對密鑰對或憑證一無所知。

如果您深入研究這個主題,您可以在網路上找到有趣的資訊。 我們顯然信任某些認證機構。 這些憑證授權單位可以向使用者頒發憑證;他們將這些憑證安裝在其伺服器上。 此後,當客戶端訪問該伺服器時,他會看到這個證書,並且看到它是由證書頒發機構頒發的,這意味著該伺服器是可以信任的。 網路上還有大量有關如何正確設定所有內容的資訊。 例如,你可以從這個開始.

如果我們回到我們的問題,解決方案似乎是顯而易見的。 您需要以某種方式建立自己的認證中心。 但在此之前,你需要弄清楚認證中心應該根據什麼來頒發給用戶證書,因為他對此一無所知。 (例如,他的名字、姓氏等)有一種叫做憑證要求的東西。 有關此標準的更多資訊可以在例如維基百科上找到 ru.wikipedia.org/wiki/PKCS
我們將使用版本 1.7 - PKCS#10。

讓我們來描述一下Rutoken上產生憑證的演算法(原始來源: 文件):

  1. 我們在客戶端建立金鑰對並將其保存在 Rutoken 上。 (自動儲存)
  2. 我們在客戶端上建立一個憑證請求。
  3. 我們從客戶端將此請求發送到伺服器。
  4. 當我們在伺服器上收到憑證請求時,我們會從憑證授權單位發出憑證。
  5. 我們將此證書傳送給客戶。
  6. 我們將 Rutoken 憑證保存在客戶端上。
  7. 憑證必須綁定到第一步中所建立的金鑰對。

現在很清楚伺服器如何解密客戶端的簽名,因為它自己向客戶端頒發了憑證。

在下一部分中,我們將仔細研究如何基於成熟的開源加密庫 openSSL 設定憑證授權單位。

來源: www.habr.com

添加評論