SSH私钥公钥加密理解
目錄基本概念密鑰對公鑰私鑰摘要簽名簽名驗證加密密鑰分類對稱密鑰加密非對稱密鑰加密RSA 加解密算法不可逆加密算法base64公鑰私鑰的原則公開密鑰過程公開密鑰認(rèn)證過程公鑰和私鑰的區(qū)別和聯(lián)系總結(jié)
基本概念
密鑰對
在非對稱加密技術(shù)中,有兩種密鑰,分為私鑰和公鑰,私鑰是密鑰對所有者持有,不可公布,公鑰是密鑰對持有者公布給他人的。
公鑰
公鑰用來給數(shù)據(jù)加密,用公鑰加密的數(shù)據(jù)只能使用私鑰解密
私鑰
如上,用來解密公鑰加密的數(shù)據(jù)。
摘要
對需要傳輸?shù)奈谋荆鲆粋€HASH計算,一般采用SHA1,SHA2來獲得
簽名
使用私鑰對需要傳輸?shù)奈谋镜恼M(jìn)行加密,得到的密文即被稱為該次傳輸過程的簽名。(看最下面的一部分就明白了)
簽名驗證
數(shù)據(jù)接收端,拿到傳輸文本,但是需要確認(rèn)該文本是否就是發(fā)送發(fā)出的內(nèi)容,中途是否曾經(jīng)被篡改。因此拿自己持有的公鑰對簽名進(jìn)行解密(密鑰對中的一種密鑰加密的數(shù)據(jù)必定能使用另一種密鑰解密。),得到了文本的摘要,然后使用與發(fā)送方同樣的HASH算法計算摘要值,再與解密得到的摘要做對比,發(fā)現(xiàn)二者完全一致,則說明文本沒有被篡改過。
加密
是將數(shù)據(jù)資料加密,使得非法用戶即使取得加密過的資料,也無法獲取正確的資料內(nèi)容,所以數(shù)據(jù)加密可以保護(hù)數(shù)據(jù),防止監(jiān)聽攻擊。其重點在于數(shù)據(jù)的安全性。
密鑰分類
對稱密鑰加密
又稱私鑰加密或會話密鑰加密算法,即信息的發(fā)送方和接收方使用同一個密鑰去加密和解密數(shù)據(jù)。它的最大優(yōu)勢是加/解密速度快,適合于對大數(shù)據(jù)量進(jìn)行加密,但密鑰管理困難。AES、DES等都是常用的對稱加密算法。
非對稱密鑰加密
又稱公鑰密鑰加密,它需要使用不同的密鑰來分別完成加密和解密操作,一個公開發(fā)布,即公開密鑰,另一個由用戶自己秘密保存,即私用密鑰。信息發(fā)送者用公開密鑰去加密,而信息接收者則用私用密鑰去解密。公鑰機(jī)制靈活,但加密和解密速度卻比對稱密鑰加密慢得多。
在現(xiàn)代密碼體制中加密和解密是采用不同的密鑰(公開密鑰),也就是非對稱密鑰密碼系統(tǒng),每個通信方均需要兩個密鑰,即公鑰和私鑰,這兩把密鑰可以互為加解密。公鑰是公開的,不需要保密,而私鑰是由個人自己持有,并且必須妥善保管和注意保密。RSA、DSA等是常用的非對稱加密的算法。
RSA 加解密算法
RSA 是一個流行的非對稱加密算法, 生成公私鑰內(nèi)容如下:
# 生成秘鑰
openssl genrsa -out test.key 1024
# 從秘鑰中導(dǎo)出公鑰
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。
摘要算法用來把任何長度的明文以一定規(guī)則變成固定長度的一串字符。在做文件一致性校驗的時候,我們通常都是先使用摘要算法,獲得固定長度的一串字符,然后對這串字符進(jìn)行簽名。接收者接收到文件后,也會執(zhí)行一遍摘要算法后再簽名。前后數(shù)據(jù)一致,則表示文件在傳輸過程沒有被竄改。
base64
特別需要注意的是,base64 不是加密算法,它是編碼方式。 它可以方便傳輸過程 ASCII 碼和二進(jìn)制碼之間的轉(zhuǎn)換。類似于圖片或者一些文本協(xié)議,在傳輸過程中通常可以使用 base64 轉(zhuǎn)換成二進(jìn)制碼進(jìn)程傳輸。
公鑰私鑰的原則
1.一個公鑰對應(yīng)一個私鑰。
2.密鑰對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。
3.如果用其中一個密鑰加密數(shù)據(jù),則只有對應(yīng)的那個密鑰才可以解密。
4.如果用其中一個密鑰可以進(jìn)行解密數(shù)據(jù),則該數(shù)據(jù)必然是對應(yīng)的那個密鑰進(jìn)行的加密。
非對稱密鑰密碼的主要應(yīng)用就是公鑰加密和公鑰認(rèn)證,而公鑰加密的過程和公鑰認(rèn)證的過程是不一樣的,下面我就詳細(xì)講解一下兩者的區(qū)別。
公開密鑰過程
比如有兩個用戶Alice和Bob,Alice想把一段明文通過雙鑰加密的技術(shù)發(fā)送給Bob,Bob有一對公鑰和私鑰,那么加密解密的過程如下:
1.Bob將他的公開密鑰傳送給Alice。
2.Alice用Bob的公開密鑰加密她的消息,然后傳送給Bob。
3.Bob用他的私人密鑰解密Alice的消息。
上面的過程可以用下圖表示,Alice使用Bob的公鑰進(jìn)行加密,Bob用自己的私鑰進(jìn)行解密。
公開密鑰認(rèn)證過程
身份認(rèn)證和加密就不同了,主要用戶鑒別用戶的真?zhèn)巍_@里我們只要能夠鑒別一個用戶的私鑰是正確的,就可以鑒別這個用戶的真?zhèn)巍?/p>
還是Alice和Bob這兩個用戶,Alice想讓Bob知道自己是真實的Alice,而不是假冒的,因此Alice只要使用公鑰密碼學(xué)對文件簽名發(fā)送給Bob,Bob使用Alice的公鑰對文件進(jìn)行解密,如果可以解密成功,則證明Alice的私鑰是正確的,因而就完成了對Alice的身份鑒別。整個身份認(rèn)證的過程如下:
1.Alice用她的私人密鑰對文件加密,從而對文件簽名。
2.Alice將簽名的文件傳送給Bob。
3.Bob用Alice的公鑰解密文件,從而驗證簽名。
上面的過程可以用下圖表示,Alice使用自己的私鑰加密,Bob用Alice的公鑰進(jìn)行解密。
公鑰和私鑰的區(qū)別和聯(lián)系
1.鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。
2.鮑勃把公鑰送給他的朋友們—-帕蒂、道格、蘇珊—-每人一把。
3.蘇珊要給鮑勃寫一封保密的信。她寫完后用鮑勃的公鑰加密,就可以達(dá)到保密的效果。
4.鮑勃收信后,用私鑰解密,就看到了信件內(nèi)容。這里要強(qiáng)調(diào)的是,只要鮑勃的私鑰不泄露,這封信就是安全的,即使落在別人手里,也無法解密。
5.鮑勃給蘇珊回信,決定采用”數(shù)字簽名”。他寫完后先用Hash函數(shù),生成信件的摘要(digest)。
6.然后,鮑勃使用私鑰,對這個摘要加密,生成”數(shù)字簽名”(signature)。
7.鮑勃將這個簽名,附在信件下面,一起發(fā)給蘇珊。
8.蘇珊收信后,取下數(shù)字簽名,用鮑勃的公鑰解密,得到信件的摘要。由此證明,這封信確實是鮑勃發(fā)出的。
9.蘇珊再對信件本身使用Hash函數(shù),將得到的結(jié)果,與上一步得到的摘要進(jìn)行對比。如果兩者一致,就證明這封信未被修改過。
10.復(fù)雜的情況出現(xiàn)了。道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。此時,蘇珊實際擁有的是道格的公鑰,但是還以為這是鮑勃的公鑰。因此,道格就可以冒充鮑勃,用自己的私鑰做成”數(shù)字簽名”,寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進(jìn)行解密。
11.后來,蘇珊感覺不對勁,發(fā)現(xiàn)自己無法確定公鑰是否真的屬于鮑勃。她想到了一個辦法,要求鮑勃去找”證書中心”(certificate authority,簡稱CA),為公鑰做認(rèn)證。證書中心用自己的私鑰,對鮑勃的公鑰和一些相關(guān)信息一起加密,生成”數(shù)字證書”(Digital Certificate)。
12.鮑勃拿到數(shù)字證書以后,就可以放心了。以后再給蘇珊寫信,只要在簽名的同時,再附上數(shù)字證書就行了。
13.蘇珊收信后,用CA的公鑰解開數(shù)字證書,就可以拿到鮑勃真實的公鑰了,然后就能證明”數(shù)字簽名”是否真的是鮑勃簽的。
14.下面,我們看一個應(yīng)用”數(shù)字證書”的實例:https協(xié)議。這個協(xié)議主要用于網(wǎng)頁加密。
15.首先,客戶端向服務(wù)器發(fā)出加密請求。
16.服務(wù)器用自己的私鑰加密網(wǎng)頁以后,連同本身的數(shù)字證書,一起發(fā)送給客戶端。
17.客戶端(瀏覽器)的”證書管理器”,有”受信任的根證書頒發(fā)機(jī)構(gòu)”列表。客戶端會根據(jù)這張列表,查看解開數(shù)字證書的公鑰是否在列表之內(nèi)。
18.如果數(shù)字證書記載的網(wǎng)址,與你正在瀏覽的網(wǎng)址不一致,就說明這張證書可能被冒用,瀏覽器會發(fā)出警告。
19.如果這張數(shù)字證書不是由受信任的機(jī)構(gòu)頒發(fā)的,瀏覽器會發(fā)出另一種警告。
總結(jié)
密鑰指的是私鑰或者公鑰 --> 密鑰=私鑰/公鑰
密鑰對,針對的是非對稱加密 --> 密鑰對=私鑰+公鑰
既然是加密,肯定是不希望別人知道我的消息,所以只要我才能解密,所以得出,公鑰負(fù)責(zé)加密,私鑰負(fù)責(zé)解密。 同理,既然是簽名,那肯定是不希望有人冒充我發(fā)消息,只有我才能發(fā)布這個簽名,所以得出,私鑰負(fù)責(zé)簽名,公鑰負(fù)責(zé)驗證。
那么這里一共有兩組四個密鑰:
A的公鑰(PUB_A)
A的私鑰(PRI_A)
B的公鑰(PUB_B)
B的私鑰(PRI_B)
公鑰一般用來加密,私鑰用來簽名。通常公鑰是公開出去的,但是私鑰只能自己私密持有。公鑰和私鑰唯一對應(yīng),用某個私鑰簽名過的內(nèi)容只能用對應(yīng)的公鑰才能解簽驗證;同樣用某個公鑰加密的內(nèi)容只能用對應(yīng)的私鑰才能解密。
這時A向B發(fā)送信息的整個簽名和加密的過程如下:
A先用自己的私鑰(PRI_A)對信息(一般是信息的摘要)進(jìn)行簽名。
A接著使用B的公鑰(PUB_B)對信息內(nèi)容和簽名信息進(jìn)行加密。
這樣當(dāng)B接收到A的信息后,獲取信息內(nèi)容的步驟如下:
B用自己的私鑰(PRI_B)解密A用B的公鑰(PUB_B)加密的內(nèi)容
B得到解密后的明文后用A的公鑰(PUB_A)解簽A用A自己的私鑰(PRI_A)的簽名。
從而整個過程就保證了開始說的端到端的唯一確認(rèn)。A的簽名只有A的公鑰才能解簽,這樣B就能確認(rèn)這個信息是A發(fā)來的;A的加密只有B的私鑰才能解密,這樣A就能確認(rèn)這份信息只能被B讀取。
總結(jié)
以上是生活随笔為你收集整理的SSH私钥公钥加密理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 增城9路6点10分从哪里开出车?
- 下一篇: 勒索软件组织声称已经攻破索尼所有系统,数