天天看點

Git原理 SSH 公鑰 私鑰的了解

參考URL:https://www.cnblogs.com/dzblog/p/6930147.html

基本概念

密鑰對:在非對稱加密技術中,有兩種密鑰,分為私鑰和公鑰,私鑰是密鑰對所有者持有,不可公布,公鑰是密鑰對持有者公布給他人的。

公鑰:公鑰用來給資料加密,用公鑰加密的資料隻能使用私鑰解密。

私鑰:如上,用來解密公鑰加密的資料。

摘要:對需要傳輸的文本,做一個HASH計算,一般采用SHA1,SHA2來獲得。

簽名:使用私鑰對需要傳輸的文本的摘要進行加密,得到的密文即被稱為該次傳輸過程的簽名。

簽名驗證:資料接收端,拿到傳輸文本,但是需要确認該文本是否就是發送發出的内容,中途是否曾經被篡改。是以拿自己持有的公鑰對簽名進行解密(密鑰對中的一種密鑰加密的資料必定能使用另一種密鑰解密。),得到了文本的摘要,然後使用與發送方同樣的HASH算法計算摘要值,再與解密得到的摘要做對比,發現二者完全一緻,則說明文本沒有被篡改過。

加密:是将資料資料加密,使得非法使用者即使取得加密過的資料,也無法擷取正确的資料内容,是以資料加密可以保護資料,防止監聽攻擊。其重點在于資料的安全性。

使用密碼登入,每次都必須輸入密碼,非常麻煩。好在SSH提供了另外一種可以免去輸入密碼過程的登入方式:公鑰登入。

所謂"公鑰登入",原理很簡單,就是使用者将自己的公鑰儲存在遠端主機上。

登入的時候,遠端主機會向使用者發送一段随機字元串,使用者用自己的私鑰加密後,再發回來。遠端主機用事先儲存的公鑰進行解密,如果成功,就證明使用者是可信的,直接允許登入shell,不再要求密碼。

以使用者TopGun為例,流程如下:

Git原理 SSH 公鑰 私鑰的了解

公鑰認證流程:

1. Client端使用者TopGun将自己的公鑰存放在Server上,追加在檔案authorized_keys中。

2. Server收到登入請求後,随機生成一個字元串str1,并發送給Client。

3. Client用自己的私鑰對字元串str1進行加密。

4. 将加密後字元串發送給Server。

5. Server用之前存儲的公鑰進行解密,比較解密後的str2和str1。

6. 根據比較結果,傳回用戶端登陸結果。

這種方法要求使用者必須提供自己的公鑰。如果沒有現成的,可以直接用ssh-keygen生成一個:

$ ssh-keygen      

運作上面的指令以後,系統會出現一系列提示,可以一路回車。其中有一個問題是,要不要對私鑰設定密碼(passphrase),如果擔心私鑰的安全,這裡可以設定一個。

運作結束以後,在$HOME/.ssh/目錄下,會新生成兩個檔案:id_rsa.pub和id_rsa。前者是你的公鑰,後者是你的私鑰。

Git原理 SSH 公鑰 私鑰的了解
git