SSH私鑰公鑰加密理解


基本概念

密鑰對

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

公鑰

公鑰用來給數據加密,用公鑰加密的數據只能使用私鑰解密

私鑰

如上,用來解密公鑰加密的數據。

摘要

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

簽名

使用私鑰對需要傳輸的文本的摘要進行加密,得到的密文即被稱為該次傳輸過程的簽名。(看最下面的一部分就明白了)

簽名驗證

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

加密

是將數據資料加密,使得非法用戶即使取得加密過的資料,也無法獲取正確的資料內容,所以數據加密可以保護數據,防止監聽攻擊。其重點在於數據的安全性。

密鑰分類

對稱密鑰加密

又稱私鑰加密或會話密鑰加密算法,即信息的發送方和接收方使用同一個密鑰去加密和解密數據。它的最大優勢是加/解密速度快,適合於對大數據量進行加密,但密鑰管理困難。AES、DES等都是常用的對稱加密算法。

非對稱密鑰加密

又稱公鑰密鑰加密,它需要使用不同的密鑰來分別完成加密和解密操作,一個公開發布,即公開密鑰,另一個由用戶自己秘密保存,即私用密鑰。信息發送者用公開密鑰去加密,而信息接收者則用私用密鑰去解密。公鑰機制靈活,但加密和解密速度卻比對稱密鑰加密慢得多。

在現代密碼體制中加密和解密是采用不同的密鑰(公開密鑰),也就是非對稱密鑰密碼系統,每個通信方均需要兩個密鑰,即公鑰和私鑰,這兩把密鑰可以互為加解密。公鑰是公開的,不需要保密,而私鑰是由個人自己持有,並且必須妥善保管和注意保密。RSA、DSA等是常用的非對稱加密的算法。

RSA 加解密算法

RSA 是一個流行的非對稱加密算法, 生成公私鑰內容如下:

# 生成秘鑰
openssl genrsa -out test.key 1024
# 從秘鑰中導出公鑰
openssl rsa -in test.key -pubout -out test_pub.key
# 公鑰加密文件
echo "test" > hello
openssl rsautl -encrypt -in hello -inkey test_pub.key -pubin -out hello.en
# 私鑰解密文件
openssl rsautl -decrypt -in hello.en -inkey test.key -out hello.de

不可逆加密算法

不可逆加密算法主要用於校驗文件的一致性,摘要算法就是其中一種。常用的摘要算法有 MD5。

摘要算法用來把任何長度的明文以一定規則變成固定長度的一串字符。在做文件一致性校驗的時候,我們通常都是先使用摘要算法,獲得固定長度的一串字符,然后對這串字符進行簽名。接收者接收到文件后,也會執行一遍摘要算法后再簽名。前后數據一致,則表示文件在傳輸過程沒有被竄改。

base64

特別需要注意的是,base64 不是加密算法,它是編碼方式。 它可以方便傳輸過程 ASCII 碼和二進制碼之間的轉換。類似於圖片或者一些文本協議,在傳輸過程中通常可以使用 base64 轉換成二進制碼進程傳輸。

公鑰私鑰的原則

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

非對稱密鑰密碼的主要應用就是公鑰加密和公鑰認證,而公鑰加密的過程和公鑰認證的過程是不一樣的,下面我就詳細講解一下兩者的區別。

公開密鑰過程

比如有兩個用戶Alice和Bob,Alice想把一段明文通過雙鑰加密的技術發送給Bob,Bob有一對公鑰和私鑰,那么加密解密的過程如下:

  • 1.Bob將他的公開密鑰傳送給Alice。
  • 2.Alice用Bob的公開密鑰加密她的消息,然后傳送給Bob。
  • 3.Bob用他的私人密鑰解密Alice的消息。
    上面的過程可以用下圖表示,Alice使用Bob的公鑰進行加密,Bob用自己的私鑰進行解密。

公開密鑰認證過程

身份認證和加密就不同了,主要用戶鑒別用戶的真偽。這里我們只要能夠鑒別一個用戶的私鑰是正確的,就可以鑒別這個用戶的真偽。

還是Alice和Bob這兩個用戶,Alice想讓Bob知道自己是真實的Alice,而不是假冒的,因此Alice只要使用公鑰密碼學對文件簽名發送給Bob,Bob使用Alice的公鑰對文件進行解密,如果可以解密成功,則證明Alice的私鑰是正確的,因而就完成了對Alice的身份鑒別。整個身份認證的過程如下:

  • 1.Alice用她的私人密鑰對文件加密,從而對文件簽名。
  • 2.Alice將簽名的文件傳送給Bob。
  • 3.Bob用Alice的公鑰解密文件,從而驗證簽名。
    上面的過程可以用下圖表示,Alice使用自己的私鑰加密,Bob用Alice的公鑰進行解密。

公鑰和私鑰的區別和聯系

  • 1.鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。

  • 2.鮑勃把公鑰送給他的朋友們—-帕蒂、道格、蘇珊—-每人一把。

  • 3.蘇珊要給鮑勃寫一封保密的信。她寫完后用鮑勃的公鑰加密,就可以達到保密的效果。

  • 4.鮑勃收信后,用私鑰解密,就看到了信件內容。這里要強調的是,只要鮑勃的私鑰不泄露,這封信就是安全的,即使落在別人手里,也無法解密。

  • 5.鮑勃給蘇珊回信,決定采用”數字簽名”。他寫完后先用Hash函數,生成信件的摘要(digest)。

  • 6.然后,鮑勃使用私鑰,對這個摘要加密,生成”數字簽名”(signature)。

  • 7.鮑勃將這個簽名,附在信件下面,一起發給蘇珊。

  • 8.蘇珊收信后,取下數字簽名,用鮑勃的公鑰解密,得到信件的摘要。由此證明,這封信確實是鮑勃發出的。

  • 9.蘇珊再對信件本身使用Hash函數,將得到的結果,與上一步得到的摘要進行對比。如果兩者一致,就證明這封信未被修改過。

  • 10.復雜的情況出現了。道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。此時,蘇珊實際擁有的是道格的公鑰,但是還以為這是鮑勃的公鑰。因此,道格就可以冒充鮑勃,用自己的私鑰做成”數字簽名”,寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進行解密。

  • 11.后來,蘇珊感覺不對勁,發現自己無法確定公鑰是否真的屬於鮑勃。她想到了一個辦法,要求鮑勃去找”證書中心”(certificate authority,簡稱CA),為公鑰做認證。證書中心用自己的私鑰,對鮑勃的公鑰和一些相關信息一起加密,生成”數字證書”(Digital Certificate)。

  • 12.鮑勃拿到數字證書以后,就可以放心了。以后再給蘇珊寫信,只要在簽名的同時,再附上數字證書就行了。

  • 13.蘇珊收信后,用CA的公鑰解開數字證書,就可以拿到鮑勃真實的公鑰了,然后就能證明”數字簽名”是否真的是鮑勃簽的。

  • 14.下面,我們看一個應用”數字證書”的實例:https協議。這個協議主要用於網頁加密。

  • 15.首先,客戶端向服務器發出加密請求。

  • 16.服務器用自己的私鑰加密網頁以后,連同本身的數字證書,一起發送給客戶端。

  • 17.客戶端(瀏覽器)的”證書管理器”,有”受信任的根證書頒發機構”列表。客戶端會根據這張列表,查看解開數字證書的公鑰是否在列表之內。

  • 18.如果數字證書記載的網址,與你正在瀏覽的網址不一致,就說明這張證書可能被冒用,瀏覽器會發出警告。

  • 19.如果這張數字證書不是由受信任的機構頒發的,瀏覽器會發出另一種警告。

總結

密鑰指的是私鑰或者公鑰 --> 密鑰=私鑰/公鑰
密鑰對,針對的是非對稱加密 --> 密鑰對=私鑰+公鑰

既然是加密,肯定是不希望別人知道我的消息,所以只要我才能解密,所以得出,公鑰負責加密,私鑰負責解密。 同理,既然是簽名,那肯定是不希望有人冒充我發消息,只有我才能發布這個簽名,所以得出,私鑰負責簽名,公鑰負責驗證。

那么這里一共有兩組四個密鑰:

  • A的公鑰(PUB_A)
  • A的私鑰(PRI_A)
  • B的公鑰(PUB_B)
  • B的私鑰(PRI_B)

公鑰一般用來加密,私鑰用來簽名。通常公鑰是公開出去的,但是私鑰只能自己私密持有。公鑰和私鑰唯一對應,用某個私鑰簽名過的內容只能用對應的公鑰才能解簽驗證;同樣用某個公鑰加密的內容只能用對應的私鑰才能解密。

這時A向B發送信息的整個簽名和加密的過程如下:

  • A先用自己的私鑰(PRI_A)對信息(一般是信息的摘要)進行簽名。
  • A接着使用B的公鑰(PUB_B)對信息內容和簽名信息進行加密。

這樣當B接收到A的信息后,獲取信息內容的步驟如下:

  • B用自己的私鑰(PRI_B)解密A用B的公鑰(PUB_B)加密的內容
  • B得到解密后的明文后用A的公鑰(PUB_A)解簽A用A自己的私鑰(PRI_A)的簽名。
    從而整個過程就保證了開始說的端到端的唯一確認。A的簽名只有A的公鑰才能解簽,這樣B就能確認這個信息是A發來的;A的加密只有B的私鑰才能解密,這樣A就能確認這份信息只能被B讀取。


免責聲明!

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



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