2013-04-02 96 views
0

我想了解SSH授權方法是如何工作的,因爲我正嘗試使用gitolite設置git服務器。使用公鑰和私鑰進行SSH通信

據我所知,gitolite將使用ssh授權用戶並授予他們訪問具有個人寫入和讀取權限的特定存儲庫的權限。但我對授權如何工作感到困惑。

我在YouTube上觀看過一些視頻,他們用一些顏色比喻來解釋。如果我理解正確,對於兩個以祕密方式彼此溝通的人,他們需要一個祕密和公共密鑰。

這兩個人彼此認識對方的公鑰,並彼此溝通他們同意使用一個公鑰。爲建立連接,他們使用相同的公鑰將私鑰加密,並將結果發送給對方。當他們收到結果時,他們會將私鑰添加到該消息中,並像魔術一樣獲得相同的消息。

但我不認爲我理解這個權利,因爲我看不到服務器如何驗證客戶端。我知道服務器必須持有將連接到他的客戶端的公鑰,但他也有私鑰?

當客戶端嘗試連接到服務器時,他會發送使用其公鑰加密的私鑰,服務器使用客戶端公鑰將其私鑰加密併發送給客戶端?

服務器如何檢查用戶是否真的是他?我還讀到,要解密用公鑰加密的信息,只有持有私鑰的人才能解密該消息。那麼,如果服務器沒有客戶私鑰,服務器如何解密客戶端發送的消息呢?

如果有人能夠解釋我如何使用這個公鑰和私鑰來驗證,授權和交換信息,我會非常高興。

回答

4

SSH作品大致如下。請注意,這只是一個高層次的解釋:

每一方都有兩個密鑰:公鑰和私鑰。公鑰/私鑰在數學上是相關的,因此它們在功能上是相反的。因此,一個人執行的操作只能由另一個人完全撤銷。這很複雜,但想象它就像計算x^nnn與x的第nn個根一樣。前者很容易,但後者很困難,因此在計算上不可能用足夠的準確度來推測操作。這爲我們提供了一些令人滿意的屬性,允許SSH與他們進行以下操作:

客戶端連接到服務器。服務器通過提供使用其私鑰簽名的證書來證明其身份。客戶端使用服務器的公鑰解密證書,並知道只有客戶端可以加密它,因爲它需要私鑰。然後,服務器對客戶端提供的證書執行相同操作。只有在使用可信第三方管理公鑰的情況下才能100%確保識別。沒有第三方,只能檢測到標識變化。

現在驗證身份後,服務器會生成一個對稱密鑰,使用客戶端的公鑰對其進行加密,然後將其發送給客戶端(由於客戶端需要私鑰,因此唯一可以解密消息的客戶端) 。從這一點開始,客戶端和服務器都擁有對稱密鑰,並且所有通信都使用此密鑰進行加密。這是出於性能原因完成的,因爲對稱加密操作比不對稱操作快大約100倍。

這就是SSL如何驗證身份並加密信息。請注意,更高級別的應用程序(如* nix文件權限)提供更細粒度的訪問控制,而不是SSL。

0

此主題的解釋對於Stackoverflow格式有點過分。

幾天前Coursera上加密(第一部分),說明正是你感興趣的問題開始了免費課程。

歡迎您來我cryptography course尋找答案的提問