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