SSH公鑰登陸原理

在平時工做中咱們常常要遠程登陸服務器,這就要用到SSH協議:html

$ ssh user@host

主要有兩種登陸方式:第一種爲密碼口令登陸,第二種爲公鑰登陸算法

密碼口令登陸安全

  經過密碼進行登陸,主要流程爲:服務器

    一、客戶端鏈接上服務器以後,服務器把本身的公鑰傳給客戶端網絡

    二、客戶端輸入服務器密碼經過公鑰加密以後傳給服務器ssh

    三、服務器根據本身的私鑰解密登陸密碼,若是正確那麼就讓客戶端登陸post

公鑰登陸加密

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

    一、客戶端生成RSA公鑰和私鑰spa

    二、客戶端將本身的公鑰存放到服務器

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

    四、客戶端根據本身的私鑰加密這個隨機字符串以後再發送給服務器

    五、服務器接受到加密後的字符串以後用公鑰解密,若是正確就讓客戶端登陸,不然拒絕。這樣就不用使用密碼了。

   具體作法請參考: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. A在本身電腦上生成RSA鑰匙文件,一個私鑰文件一個公鑰文件,並將他的公鑰傳送給B。
      2. 此時B要傳送信息給A,因而B用A的公鑰加密他的消息,而後傳送給A。【網絡上傳輸的密文,沒有A的私鑰沒法解密,其餘人獲取以後也沒用】
      3. A用他的私鑰解密B的消息。

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

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

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

          一、B將本身公鑰給A

                                二、B將文件用本身私鑰加密傳送給A

          三、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)當該用戶發送文件時,用私鑰簽名,別人用他給的公鑰驗證簽名,能夠保證該信息是由他發送的。當該用戶接受文件時,別人用他的公鑰加密,他用私鑰解密,能夠保證該信息只能由他接收到。

相關文章
相關標籤/搜索