下面從整體上粗略的介紹了 RSA/DSA 密鑰的工作原理。讓我們從一種假想的情形開始,假定我們想用 RSA 認證允許一台本地的 Linux 工作站(稱作 localbox)打開 remotebox 上的一個遠程 shell,remotebox 是我們的 ISP 的一台機器。此刻,當我們試圖用 ssh 客戶程序連接到remotebox 時,我們會得到如下提示:
% ssh drobbins@remotebox drobbins@remotebox's password:
此處我們看到的是 ssh 處理認證的缺省方式的一個示例。換句話說,它要求我們輸入 remotebox 上的 drobbins 這個帳戶的密碼。如果我們輸入我們在 remotebox 上的密碼,ssh 就會用安全密碼認證協議,把我們的密碼傳送給 remotebox 進行驗證。但是,和 telnet 的情況不同,這里我們的密碼是加密的,因此它不會被偷看到我們的數據連接的人截取。一旦 remotebox 把我們提供的密碼同它的密碼數據庫相對照進行認證,成功的話,我們就會被允許登錄,還會有一個 remotebox 的 shell 提示歡迎我們。雖然 ssh 缺省的認證方法相當安全,RSA 和 DSA 認證卻為我們開創了一些新的潛在的機會。
但是,與 ssh 安全密碼認證不同的是,RSA 認證需要一些初始配置。我們只需要執行這些初始配置步驟一次。之后,localbox 和 remotebox 之間的 RSA 認證就毫不費力了。要設置 RSA 認證,我們首先得生成一對密鑰,一把專用密鑰和一把公用密鑰。這兩把密鑰有一些非常有趣的性質。公用密鑰用於對消息進行加密,只有擁有專用密鑰的人才能對該消息進行解密。公用密鑰只能用於 加密,而專用密鑰只能用於對由匹配的公用密鑰編碼的消息進行解密。RSA(和 DSA)認證協議利用密鑰對的這些特殊性質進行安全認證,並且不需要在網上傳輸任何保密的信息。
要應用 RSA 或者 DSA 認證,我們要執行一步一次性的配置步驟。我們把公用密鑰拷貝到 remotebox。公用密鑰之所以被稱作是“公用的”有一個原因。因為它只能用於對那些給我們的消息進行 加密,所以我們不需要太擔心它會落入其它人手中。一旦我們的公用密鑰已經被拷貝到remotebox 並且為了 remotebox 的 sshd 能夠定位它而把它放在一個專門的文件(~/.ssh/authorized_keys)里,我們就為使用 RSA 認證登錄到remotebox 上做好了准備。
要用 RSA 登錄的時候,我們只要在 localbox 的控制台鍵入 ssh drobbins@remotebox,就象我們常做的一樣。可這一次,ssh 告訴remotebox 的 sshd 它想使用 RSA 認證協議。接下來發生的事情非常有趣。Remotebox 的 sshd 會生成一個隨機數,並用我們先前拷貝過去的公用密鑰對這個隨機數進行加密。然后, sshd 把加密了的隨機數發回給正在 localbox 上運行的 ssh。接下來,輪到我們的 ssh 用專用密鑰對這個隨機數進行解密后,再把它發回給 remotebox,實際上等於在說:“瞧,我確實有匹配的專用密鑰;我能成功的對您的消息進行解密!”最后, sshd 得出結論,既然我們持有匹配的專用密鑰,就應當允許我們登錄。因此,我們有匹配的專用密鑰這一事實授權我們訪問remotebox。
