問題
- 什么是散列算法(信息摘要)枯饿,散列算法是加密嗎?
- 什么是對稱加密诡必?
- 什么是非對稱加密奢方,什么時間用公鑰加密,什么時間用私鑰”加密“爸舒?
- 什么是數(shù)字簽名蟋字?
- 什么是數(shù)字證書?
- Https原理是什么扭勉?
加密算法
散列算法
我們從一個小故事開始鹊奖,學(xué)生時代,即使我們沒有寫過小紙條涂炎,但也幫別人傳過不少忠聚,假如最后一排的張三想給第一排的李四傳紙條,而走到王五那里唱捣,王五看到后两蟀,把紙條信息給改了,李四怎么確認震缭,這個信息有沒有被別人篡改過赂毯?
簡單的做法,張三可以在傳遞信息之前,比如結(jié)尾處寫一個”共xx字“党涕,這樣王五看到后烦感,想在后面補點什么,估計就有點棘手了膛堤,實際這個”共xx字“手趣,我們就可以理解為摘要信息。
生成這個”摘要信息”骑祟,有個專業(yè)的名詞,叫:散列算法气笙,又叫摘要算法次企、哈希算法等,就是一種將字符組成的字符串轉(zhuǎn)換為固定長度(一般是更短長度)的數(shù)值或索引值的方法潜圃。常見的有MD5缸棵、SHA1等。
可以看下在線工具:http://www.jsons.cn/md5/s/
示意圖
還有其他用途谭期,比如:我們網(wǎng)上下載一個軟件堵第,怎么保證這個軟件,是否被別人修改過隧出,植入木馬等惡意程序踏志?我們通常會發(fā)現(xiàn):軟件旁邊一般會有MD5值或者SHA值,這個實際就是軟件摘要信息胀瞪,如果下載后的軟件针余,做MD5之后,跟這個不匹配凄诞,說明軟件被別人修改過圆雁。
特點:
- 無論原始字符串長度如何,都會產(chǎn)生固定長度的摘要信息帆谍,16位伪朽、32位、160位等汛蝙。
- 不能從摘要信息反推出原始信息(彩虹表不算)烈涮,也就是解密,不能稱之為”加密”窖剑。
對稱加密
我們更進一步跃脊,如果張三和李四,要傳遞一些機密信息苛吱,不想被中間人看到信息內(nèi)容酪术,我們需要怎么做?
張三可以買一把鎖,只有自己和李四有鑰匙绘雁,投遞前先鎖起來橡疼,等李四接到,再用相同的鑰匙打開庐舟,這種做法實際就是對稱加密欣除,也就是同一個密鑰可以同時用作信息的加密和解密,這種加密方法稱為對稱加密挪略。
但這樣還是有風(fēng)險的历帚,且不說張三、李四本身會因為保管不嚴杠娱,有泄露風(fēng)險挽牢,張三把鑰匙給李四的時候,需要明文傳遞摊求,本身就有可能泄露的風(fēng)險禽拔。那有沒有其他辦法解決,下面就是看另外一種加密方式 - 非對稱加密室叉。
非對稱加密
非對稱加密睹栖,就是提前產(chǎn)生一對密鑰:公鑰和私鑰,公鑰給別人茧痕,私鑰自己保留野来,利用公鑰加密,私鑰解密踪旷,私鑰”加密”梁只,公鑰”解密”。
此時李四就可以提前把自己的公鑰傳遞給張三埃脏,張三拿著公鑰加密后搪锣,就可以把信息傳遞給李四,這時就只有李四利用自己的私鑰可以解開這個信息彩掐。
此時又有新的問題:如何證明李四收到的信息一定是張三發(fā)過來的构舟?比如王五獲取了李四的公鑰,模擬張三給李四發(fā)消息堵幽,李四怎么確認狗超,這封信一定是張三發(fā)的?
此時可以利用非對稱加密的另外一個功能朴下,數(shù)字簽名努咐。
數(shù)字簽名
數(shù)字簽名,也就是利用自己的私鑰殴胧,給信息”加密”渗稍,實際就是給信息做簽名佩迟,這個簽名只有公鑰可以驗證成功。反過來竿屹,公鑰能驗簽的报强,信息肯定來源于另外一只私鑰”加密”的,從而可以證明信息來源拱燃。
下圖所示:李四能用張三公鑰驗證成功秉溉,一定來源于張三。
事情看似得到解決碗誉,但我們再來思考一個問題:如果提前王五冒充張三召嘶,提前把自己的公鑰給了李四,然后用自己的私鑰簽名哮缺,給李四弄跌,這樣李四用假冒的公鑰也可以驗簽的,是不是事情出現(xiàn)了無解蝴蜓?
此時最大的問題就是碟绑,李四無法證明俺猿,公鑰一定來源于張三茎匠。
數(shù)字證書
既然就剩下公鑰的身份證明問題,那我們是不是可以找一個專業(yè)機構(gòu)押袍,把我們的公鑰經(jīng)過他們證明一下就可以了诵冒,于是有了CA機構(gòu)(證書授權(quán)機構(gòu)),專門做數(shù)字證書的簽發(fā)谊惭。下面看下數(shù)字證書有哪些構(gòu)成汽馋,以百度為例:
數(shù)字證書的簽發(fā)流程如下:
- 個人或者公司,通過工具生成自己的公鑰和私鑰
- 私鑰自己保留圈盔,公鑰+申請者信息+域名等豹芯,發(fā)送給CA機構(gòu)
- CA核實信息無誤后,把信息生成摘要信息
- 然后用自己的私鑰對摘要進行簽名驱敲,加上申請信息铁蹈,這樣產(chǎn)生的一個文件,就是數(shù)字證書
- CA把數(shù)字證書返回給申請者
示意圖(侵刪)
小結(jié)一下
非對稱加密:就是公鑰加密众眨,私鑰解密握牧、私鑰簽名、公鑰驗簽娩梨。
Https工作原理
這里借用一下別人的圖沿腰,侵刪,流程如下:
- 客戶端訪問站點的時候狈定,獲取CA頒發(fā)的數(shù)字證書
- 客戶端驗證CA證書合法后颂龙,獲取里面的公鑰,并生成隨機碼(Key)
- 利用公鑰對隨機碼(Key)進行加密,發(fā)送給服務(wù)器端
- 服務(wù)器端厘托,利用自己的私鑰對隨機碼(Key)進行解密
- 然后客戶端和服務(wù)器端友雳,利用隨機碼作為Key,采用對稱加密铅匹,進行數(shù)據(jù)傳輸
總結(jié)
- 什么是散列算法(信息摘要)押赊,散列算法是加密嗎?
- 散列算法是一種摘要算法包斑,把任意長度的字符串流礁,轉(zhuǎn)換為特定長度的字符串
- 散列算法不可逆,不能解密罗丰,嚴格上不能算加密算法
- 什么是對稱加密神帅?
- 使用相同的密鑰,可以對信息進行加密和解密
- 速度相對非對稱加密萌抵,速度比較塊
- 什么是非對稱加密找御,什么時間用公鑰加密,什么時間用私鑰”加密“绍填?
- 利用成對的公鑰對信息進行加密和解密
- 公鑰加密霎桅,私鑰解密,私鑰簽名讨永、公鑰驗簽
- 速度相比較對稱加密滔驶,有點慢
- 希望加密信息的時候,用公鑰加密
- 希望證明自己的時候卿闹,用私鑰簽名
- 什么是數(shù)字簽名揭糕?
- 給信息添加指紋,證明信息來源
- 一般對內(nèi)容的散列值再簽名锻霎,減少簽名長度和提高速度
- 什么是數(shù)字證書著角?
- 數(shù)字證書就是由 CA 機構(gòu)使用自己私鑰,對證書申請者的公鑰進行簽名認證
- 證書包含申請者公鑰旋恼、域名吏口、是否過期、申請者信息等
- Https原理是什么蚌铜?
- 通過數(shù)字證書锨侯,獲取對方服務(wù)器的公鑰
- 然后通過公鑰傳遞隨機生成的對稱加密的密鑰
- 最后雙方用隨機密鑰進行通信
- 為什么數(shù)字證書,要用摘要做簽名冬殃?
- 數(shù)據(jù)可能比較大囚痴,簽名是使用非對稱加密算法,比較耗時
- Https已經(jīng)獲取了公鑰审葬,為什么還要用對稱加密進行數(shù)據(jù)傳輸深滚?
- 對稱加密速度快