SSH公鑰登錄原理


在平時工作中我們經常要遠程登錄服務器,這就要用到SSH協議:

$ ssh user@host

主要有兩種登錄方式:第一種為密碼口令登錄,第二種為公鑰登錄

密碼口令登錄

  通過密碼進行登錄,主要流程為:

    1、客戶端連接上服務器之后,服務器把自己的公鑰傳給客戶端

    2、客戶端輸入服務器密碼通過公鑰加密之后傳給服務器

    3、服務器根據自己的私鑰解密登錄密碼,如果正確那么就讓客戶端登錄

公鑰登錄

  公鑰登錄是為了解決每次登錄服務器都要輸入密碼的問題,流行使用RSA加密方案,主要流程包含:

    1、客戶端生成RSA公鑰和私鑰

    2、客戶端將自己的公鑰存放到服務器

    3、客戶端請求連接服務器,服務器將一個隨機字符串發送給客戶端

    4、客戶端根據自己的私鑰加密這個隨機字符串之后再發送給服務器

    5、服務器接受到加密后的字符串之后用公鑰解密,如果正確就讓客戶端登錄,否則拒絕。這樣就不用使用密碼了。

   具體做法請參考:Linux使用ssh公鑰實現免密碼登錄Linux

   下面主要說說RSA

  先介紹兩個概念:

    對稱加密:對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key)。對稱加密有很多種算法,由於它效率很高,所以被廣泛使用在很多加密協議的核心當中。對稱加密通常使用的是相對較小的密鑰,一般小於256 bit。因為密鑰越大,加密越強,但加密與解密的過程越慢。如果你只用1 bit來做這個密鑰,那黑客們可以先試着用0來解密,不行的話就再用1解;但如果你的密鑰有1 MB大,黑客們可能永遠也無法破解,但加密和解密的過程要花費很長的時間。密鑰的大小既要照顧到安全性,也要照顧到效率。對稱加密的一大缺點是密鑰的管理與分配,換句話說,如何把密鑰發送到需要解密你的消息的人的手里是一個問題。在發送密鑰的過程中,密鑰有很大的風險會被黑客們攔截。現實中通常的做法是將對稱加密的密鑰進行非對稱加密,然后傳送給需要它的人。

    非對稱加密:非對稱加密為數據的加密與解密提供了一個非常安全的方法,它使用了一對密鑰,公鑰(public key)和私鑰(private key)。私鑰只能由一方安全保管,不能外泄,而公鑰則可以發給任何請求它的人。非對稱加密使用這對密鑰中的一個進行加密,而解密則需要另一個密鑰。比如,你向銀行請求公鑰,銀行將公鑰發給你,你使用公鑰對消息加密,那么只有私鑰的持有人--銀行才能對你的消息解密。與對稱加密不同的是,銀行不需要將私鑰通過網絡發送出去,因此安全性大大提高。目前最常用的非對稱加密算法是RSA算法。雖然非對稱加密很安全,但是和對稱加密比起來,它非常的慢,所以我們還是要用對稱加密來傳送消息,但對稱加密所使用的密鑰我們可以通過非對稱加密的方式發送出去。

  公鑰和私鑰:

  1. 一個公鑰對應一個私鑰。
  2. 密鑰對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。
  3. 如果用其中一個密鑰加密數據,則只有對應的那個密鑰才可以解密。
  4. 如果用其中一個密鑰可以進行解密數據,則該數據必然是對應的那個密鑰進行的加密。

   RSA算法的作用:
    1、加密:公鑰加密私鑰解密

        主要用於將數據資料加密不被其他人非法獲取,保證數據安全性。使用公鑰將數據資料加密,只有私鑰可以解密。即使密文在網絡上被第三方獲取由於沒有私鑰則無法解密。從而保證數據安全性。     

      1. A在自己電腦上生成RSA鑰匙文件,一個私鑰文件一個公鑰文件,並將他的公鑰傳送給B。
      2. 此時B要傳送信息給A,於是B用A的公鑰加密他的消息,然后傳送給A。【網絡上傳輸的密文,沒有A的私鑰無法解密,其他人獲取之后也沒用】
      3. A用他的私鑰解密B的消息。

    2、認證:私鑰加密公鑰解密

        主要用於身份驗證,判斷某個身份的真實性。使用私鑰加密之后,用對應的公鑰解密從而驗證身份真實性。

          A要驗證B是否是真實用戶

          1、B將自己公鑰給A

                                2、B將文件用自己私鑰加密傳送給A

          3、A根據B的公鑰解密,如果成功則為真實身份用戶

 

      SSH公鑰登錄則用的是第二種功能。

      安全性: 這種算法非常可靠,密鑰越長,它就越難破解。根據已經披露的文獻,目前被破解的最長RSA密鑰是768個二進制位。也就是說,長度超過768位的密鑰,還無法破解(至少沒人公開宣布)。因此可以認為,1024位的RSA密鑰基本安全,2048位的密鑰極其安全。所以我們在用ssh-keygen命令時候要注意密鑰長度,具體參數為:

 

-b bits
   指定密鑰長度。對於RSA密鑰,最小要求768位,默認是2048位。DSA密鑰必須恰好是1024位(FIPS 186-2 標准的要求)。

 

  至少不能少於768。一般不用寫默認就是2048了。哈哈!

 

      總結:

 公鑰與私鑰使用場景:
 (1)私鑰用來進行解密和簽名,是給自己用的。
 (2)公鑰由本人公開,用於加密和驗證簽名,是給別人用的。
   (3)當該用戶發送文件時,用私鑰簽名,別人用他給的公鑰驗證簽名,可以保證該信息是由他發送的。當該用戶接受文件時,別人用他的公鑰加密,他用私鑰解密,可以保證該信息只能由他接收到。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM