1. 關(guān)于非對(duì)稱加密(轉(zhuǎn)載)
作者:鄭一軒
鏈接:https://www.zhihu.com/question/33645891/answer/57512229
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
首先,每個(gè)用戶都有兩把鑰匙,一把公鑰一把私鑰。公鑰是對(duì)外發(fā)布的,所有人都看的到所有人的公鑰,私鑰是自己保存,每個(gè)人都只知道自己的私鑰而不知道別人的。
用該用戶的公鑰加密后只能該用戶的私鑰才能解密。這種情況下,公鑰是用來加密信息的,確保只有特定的人(用誰的公鑰就是誰)才能解密該信息。
下面我拿A銀行和小明來舉例子吧。假設(shè)這2者之間是用不對(duì)稱的加密算法來保證信息傳輸?shù)陌踩裕ú槐坏谌酥佬畔⒌暮x及篡改信息)。大致流程如下:首先小明發(fā)了一條信息給A銀行“我要存500元”。這條信息小明會(huì)根據(jù)A銀行的對(duì)外發(fā)布的公鑰把這條信息加密了,加密之后,變成“XXXXXXX”發(fā)給A銀行。中間被第三者截獲,由于沒有A銀行的私鑰無法解密,不能知道信息的含義,也無法按正確的方式篡改。所以拿這條加密信息是沒辦法的。最后被A銀行接受,A銀行用自己的私鑰去解密這條信息,解密成功,讀取內(nèi)容,執(zhí)行操作。然后得知消息是小明發(fā)來的,便去拿小明的公鑰,把“操作成功(或失?。边@條信息用小明的公鑰加密,發(fā)給小明。同理最后小明用自己的私鑰解開,得知知乎發(fā)來的信息內(nèi)容。其他人截獲因?yàn)闆]有小明的私鑰所以也沒有用。
還有第二種情況,公鑰是用來解密信息的,確保讓別人知道這條信息是真的由我發(fā)布的,是完整正確的。接收者由此可知這條信息確實(shí)來自于擁有私鑰的某人,這被稱作數(shù)字簽名,公鑰的形式就是數(shù)字證書。
繼續(xù)拿小明和銀行A舉例子。銀行A發(fā)布了一個(gè)銀行客戶端的補(bǔ)丁供所有用戶更新,那為了確保人家下載的是正確完整的客戶端,銀行A會(huì)為這個(gè)程序打上一個(gè)數(shù)字簽名(就是用銀行A的私鑰對(duì)這個(gè)程序加密然后發(fā)布),你需要在你的電腦里裝上銀行A的數(shù)字證書(就是銀行對(duì)外發(fā)布的公鑰),然后下載好這個(gè)程序,數(shù)字證書會(huì)去解密這個(gè)程序的數(shù)字簽名,解密成功,補(bǔ)丁得以使用。同時(shí)你能知道這個(gè)補(bǔ)丁確實(shí)是來自這個(gè)銀行A,是由他發(fā)布的,而不是其他人發(fā)布的。
總結(jié)
非對(duì)稱加密中通過公鑰加密的數(shù)據(jù),只能通過私鑰才能解密(該操作通常被用于加密通信);通過私鑰加密的信息,可以通過公鑰來解密(該操作通常被用于簽名/證書驗(yàn)證)。
如果A和B完全通過非對(duì)稱加密進(jìn)行通信的話,那么A需要有B的公鑰,B需要有A的公鑰。當(dāng)A向B發(fā)信息時(shí),A通過B的公鑰對(duì)信息進(jìn)行加密發(fā)送給B,B通過自己的私鑰對(duì)信息進(jìn)行解密;反之,當(dāng)B向A發(fā)信息時(shí),B通過A的公鑰對(duì)信息進(jìn)行加密發(fā)送給A,A通過自己的私鑰對(duì)信息進(jìn)行解密。
2. 關(guān)于http和https(轉(zhuǎn)自程序員小灰)




















總結(jié)
https與服務(wù)通信最終是通過對(duì)稱加密來實(shí)現(xiàn),但是需要以非對(duì)稱加密的方式來發(fā)送對(duì)稱加密的密鑰。
如果通信雙方之間直接傳遞公鑰的話,存在公鑰被中間截獲修改的風(fēng)險(xiǎn)(從而導(dǎo)致通信時(shí)用的對(duì)稱加密的密鑰丟失)。
因此,通過一個(gè)中間機(jī)構(gòu)(CA)來管理非對(duì)稱加密的公鑰,而通信方只保留由CA機(jī)構(gòu)提供的證書,在通信時(shí)通過解密證書來獲取服務(wù)方的公鑰(從而對(duì)通信時(shí)用的對(duì)稱密鑰進(jìn)行加密)?!?strong>因此,不要在本地安裝不合法的證書?。?!】