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演算法。雖然非對稱加密很安全,但是和對稱加密比起來,它非常的慢,所以我們還是要用對稱加密來傳送訊息,但對稱加密所使用的金鑰我們可以通過非對稱加密的方式傳送出去。
公鑰和私鑰:
乙個公鑰對應乙個私鑰。 金鑰對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。 如果用其中乙個金鑰加密資料,則只有對應的那個金鑰才可以解密。 如果用其中乙個金鑰可以進行解密資料,則該資料必然是對應的那個金鑰進行的加密。 rsa演算法的作用: 1、加密:公鑰加密私鑰解密
主要用於將資料資料加密不被其他人非法獲取,保證資料安全性。使用公鑰將資料資料加密,只有私鑰可以解密。即使密文在網路上被第三方獲取由於沒有私鑰則無法解密。從而保證資料安全性。
a在自己電腦上生成rsa鑰匙檔案,乙個私鑰檔案乙個公鑰檔案,並將他的公鑰傳送給b。 此時b要傳送資訊給a,於是b用a的公鑰加密他的訊息,然後傳送給a。【網路上傳輸的密文,沒有a的私鑰無法解密,其他人獲取之後也沒用】 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)當該使用者傳送檔案時,用私鑰簽名,別人用他給的公鑰驗證簽名,可以保證該資訊是由他傳送的。當該使用者接受檔案時,別人用他的公鑰加密,他用私鑰解密,可以保證該資訊只能由他接收到。
python RSA 公私鑰 對檔案加密解密
使用rsa模組 import rsa import base64 讀取私鑰 privkey rsa.privatekey.load pkcs1 open private.pem rb read 讀取公鑰 pubkey rsa.publickey.load pkcs1 open public.pem ...
RSA公私鑰生成
1 生成私鑰 openssl genrsa out rsa private key.pem 1024 2 根據私鑰生成與之配對的公鑰 openssl rsa in rsa private key.pem pubout out rsa public key.pem 3 將第1步生成的私鑰轉換成pkcs...
openssl公私鑰生成
1 雙擊啟動bin openssl.exe 2 手動輸入命令 或者 複製一行命令,右擊標題欄 編輯 貼上 3 enter完成輸入,生成對應公私鑰檔案 生成步驟 1 生成private key.pem openssl genrsa out private key.pem 1024 2 生成pkcs8 ...