linux DSA/RSA 認證的原理

來源:互聯網
上載者:User

讓我們從一種假想的情形開始,假定我們想用 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。


兩項注意事項

關於 RSA 和 DSA 認證有兩項重要的注意事項。第一項是我們的確只需要產生一對密鑰。然後我們可以把我們的公用密鑰拷貝到想要訪問的那些遠程機器上,它們都會根據我們的那把專用密鑰進行恰當的認證。換句話說,我們並不需要為想要訪問的 每個系統都準備一對密鑰。只要一對就足夠了。
另一項注意事項是專用密鑰不應落入其它人手中。正是專用密鑰授權我們訪問遠程系統,任何擁有我們的專用密鑰的人都會被授予和我們完全相同的特權。如同我們不想讓陌生人有我們的住處的鑰匙一樣,我們應該保護我們的專用密鑰以防未授權的使用。在位元和位元組的世界裡,這意味著沒有人是本來就應該能讀取或是拷貝我們的專用密鑰的。

ssh 的開發人員們當然知道專用密鑰的重要性,而且他們已經在 ssh 和 ssh-keygen 裡加入了一些防範措施,以防止我們的專用密鑰被濫用。首先,ssh 被設定成了如果我們的密鑰的檔案許可權允許除我們之外的任何人讀取密鑰,就列印出一條大大的警告訊息。其次,在我們用 ssh-keygen 建立公用/專用金鑰組的時候,ssh-keygen 會要求我們輸入一個密碼短語。如果我們輸入了密碼短語,ssh-keygen
就會用該密碼短語加密我們的專用密鑰,這樣,即使專用密鑰被盜,對於那些碰巧不知道密碼短語的人而言,這把專用密鑰是毫無用處的。具備了這一知識後,讓我們看一下如何設定 ssh 以應用 RSA 和 DSA 認證協議。


ssh-keygen 細探

設定 RSA 認證的第一步從產生一對公用/專用金鑰組開始。RSA 認證是 ssh 密鑰認證的最初形式,因此 RSA 應該可以用於 OpenSSH 的所有版本,儘管這樣,我還是推薦您安裝可用的最近版本,在我寫這篇文章的時候是 openssh-2.9_p2。產生一對 RSA 密鑰的方法如下:

% ssh-keygen
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/drobbins/.ssh/identity): (hit enter)
Enter passphrase (empty for no passphrase): (enter a passphrase)
Enter same passphrase again: (enter it again)
Your identification has been saved in /home/drobbins/.ssh/identity.
Your public key has been saved in /home/drobbins/.ssh/identity.pub.
The key fingerprint is:
a4:e7:f2:39:a7:eb:fd:f8:39:f1:f1:7b:fe:48:a1:09 drobbins@localbox

當 ssh-keygen 要求輸入存放密鑰的預設位置時,我們敲斷行符號鍵接受預設的 /home/drobbins/.ssh/identity。ssh-keygen 將把專用密鑰儲存在此路徑中,公用密鑰就存在緊臨它的一個叫做 identity.pub 的檔案裡。

還要請您注意一下 ssh-keygen 還提示過我們輸入密碼短語。當時我們輸入了一個好的密碼短語(七位或者更多位難以預測的字元)。然後 ssh-keygen 用這個密碼短語加密了我們的專用密鑰(~/.ssh/identity),以使我們的專用金鑰組於那些不知道這個密碼短語的人將變得毫無用處。


參考原文:https://www.ibm.com/developerworks/cn/linux/security/openssh/part1/ - 通用線程:OpenSSH 金鑰管理,第 1 部分

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.