發(fā)布源:深圳維創(chuàng)信息技術(shù)發(fā)布時(shí)間:2020-10-29 瀏覽次數(shù): 次
通信風(fēng)險(xiǎn)竊聽風(fēng)險(xiǎn)(eavesdropping):第三方可以獲知通信內(nèi)容。
篡改風(fēng)險(xiǎn)(tampering):第三方可以修改通信內(nèi)容。
冒充風(fēng)險(xiǎn)(pretending):第三方可以冒充他人身份參與通信。
風(fēng)險(xiǎn)防范信息加密傳輸,第三方無法竊聽。
增加校驗(yàn)機(jī)制,一旦被篡改,通信雙方會(huì)立刻發(fā)現(xiàn)。
配備身份證書,防止身份被冒充。
?哈希(Hash)哈希也叫散列,是把任意長度的輸入通過散列算法變換成固定長度的輸出,該輸出就是散列值,也叫摘要(Digest)。
哈希是一種壓縮映射,通常不可逆這種轉(zhuǎn)換是一種壓縮映射。
也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值,但如果輸出的位數(shù)足夠,不同輸入散列成相同輸出的概率非常非常小。
簡單的說,散列就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的過程。
散列是不可逆的,也就是無法通過輸出還原輸入,此特性常被用于密碼保存。
SHA-512、MD5等都是著名的散列函數(shù),MD5生成的散列碼是128位,甚至MD5就是哈希的同名詞,你可以通過網(wǎng)站:https://passwordsgenerator.net/sha512-hash-generator/ 在線計(jì)算哈希。
散列有什么用?散列可用于保存密碼,明文保存密碼是危險(xiǎn)的。
通常我們把密碼哈希加密之后保存,這樣即使泄漏了密碼,因?yàn)槭巧⒘泻蟮闹?,也沒有辦法推導(dǎo)出密碼明文(字典攻擊難以破解)。
驗(yàn)證的時(shí)候,只需要對(duì)密碼(明文)做同樣的散列,對(duì)比散列后的輸出和保存的密碼散列值,就可以驗(yàn)證同一性。
可用于驗(yàn)證下載文件的完整性以及防篡改,比如網(wǎng)站提供安裝包的時(shí)候,通常也同時(shí)提供md5值,這樣用戶下載之后,可以重算安裝包的md5值,如果一致,則證明下載到本地的安裝包跟網(wǎng)站提供的安裝包是一致的,網(wǎng)絡(luò)傳輸過程中沒有出錯(cuò)。
加密加密就是把明文變成密文的過程,解密就是反方向把密文變成明文。
比如著名的凱撒密碼,就是把每個(gè)字對(duì)應(yīng)到另一個(gè),這樣的話,只要有密碼本,就能對(duì)照完成加解密。
比如最簡單的,對(duì)于英文26個(gè)字母,每個(gè)字母右移3個(gè),abc變成def,這也是一種加密,當(dāng)然這種加密很簡單,很容易被破譯。
而諸如AES(高級(jí)加密標(biāo)準(zhǔn))、3DES(三重?cái)?shù)據(jù)加密算法)則被公認(rèn)為很難破解,不過山東大學(xué)女教授王小云很厲害,破解了MD5和SHA-1,迫使加密標(biāo)準(zhǔn)升級(jí),最終當(dāng)上了院士。
1. 對(duì)稱加密對(duì)稱加密就是加解密的密鑰是一樣的,優(yōu)點(diǎn)是快,這也是傳統(tǒng)的加密方式,像AES、3DES都是對(duì)稱加密。
2. 非對(duì)稱加密非對(duì)稱加密用于加解密的密鑰不一樣,有2個(gè)密鑰,公鑰和私鑰,公鑰可以公開,私鑰妥善保管。
RSA、ECC(橢圓曲線加密算法)、DH(密鑰交換算法)這些都是非對(duì)稱加密。
非對(duì)稱加密很慢,有多慢?相比對(duì)稱加密慢1000倍,因?yàn)槁?,所以它常用于密鑰協(xié)商(Handshake),協(xié)商出會(huì)話密鑰后,再用對(duì)稱密鑰加密通信數(shù)據(jù)。
1976年,Whitfield Diffie和Martin Hellman首次提出了非對(duì)稱加密的概念,該算法被稱為Diffie-Hellman密鑰交換。
然后在1978年,麻省理工學(xué)院的Ron Rivest,Adi Shamir和Leonard Adleman發(fā)表了RSA 算法。
這些都可以被視為非對(duì)稱加密的基礎(chǔ)。
非對(duì)稱加密也稱為公鑰基礎(chǔ)結(jié)構(gòu),又稱PKI。
非對(duì)稱加密的提出是密碼學(xué)上的一次革命,影響深遠(yuǎn)。
非對(duì)稱加密算法用私鑰加密,用公鑰解密,或者用公鑰加密,用私鑰解密。
證書證書就是為了證明我是我,比如你要訪問中國銀行網(wǎng)站,但中行官網(wǎng)如何證明它是中行官網(wǎng)呢?答案就是數(shù)字證書。
CA是數(shù)字證書中心,服務(wù)器需要找CA做認(rèn)證,讓CA給自己頒布數(shù)字證書,數(shù)字證書內(nèi)一般包含服務(wù)的一些信息、以及服務(wù)器的公鑰,通過CA的私鑰加密后,產(chǎn)生的數(shù)字證書,因?yàn)镃A的權(quán)威性,且它的公鑰天下皆知,所以,如果你能用CA的公鑰解開證書,那便可證明該證書一定是CA頒發(fā)的,要不然它不會(huì)有CA的私鑰,也便沒法產(chǎn)生可用CA公鑰解密的證書。
所以,由此可見,數(shù)字證書用到了非對(duì)稱加密。
數(shù)字簽名日常生活中也有簽名,每個(gè)人的筆跡是不一樣的,你刷卡消費(fèi)后在賬單簽上大名,服務(wù)員校驗(yàn)過之后保存下來,你哪天賴賬,便可以有簽名為證,因?yàn)閯e人寫的字跟你的筆跡終有差別。
那數(shù)字簽名是什么呢?比如a發(fā)一封email,接收方怎么證明這封信是a寫的?本質(zhì)上,數(shù)字簽名也是利用了非對(duì)稱加密。
前面講了,非對(duì)稱加密有公鑰和私鑰,如果發(fā)生方用私鑰加密,然后接收方用發(fā)送方的公鑰可以解密,那便可以證明是從某發(fā)送方發(fā)送的,因?yàn)閯e人拿不到你的私鑰,也便無法用你的私鑰加密,你不能抵賴。
數(shù)字簽名通常先對(duì)內(nèi)容算哈希,產(chǎn)生內(nèi)容摘要,再用私鑰加密,得到簽名。
密鑰協(xié)商下面舉一個(gè)例子來說明這幾個(gè)問題:張三有2把鑰匙,一把公鑰,公告天下,一把私鑰,妥善保管,只有自己知道,很明顯,非對(duì)稱加密。
李四給張三寫信,寫完之后,用張三的公鑰加密,通過郵局寄給張三,即使郵遞員拆開信封看,他也看不懂,因?yàn)閮?nèi)容是密文,只有張三的密鑰才能解密。
張三收到信后,用私鑰解密,可以正常閱讀。
現(xiàn)在張三要給李四回信,寫完后,用hash函數(shù)生成摘要digest。
然后張三,再用私鑰對(duì)摘要加密,生成數(shù)字簽名signature。
然后把簽名附在信的下面,一起發(fā)給李四。
過程是:信明文 -> hash -> digist -> 私鑰加密 -> signature。
李四收到回信后,用張三的公鑰對(duì)數(shù)字簽名解密,得到摘要,由此證明,信確實(shí)是張三發(fā)出的,為什么?因?yàn)槿绻皇菑埲l(fā)的,那寫信的人就沒有張三私鑰,用別的私鑰加密得到的簽名,是無法用張三的公鑰解開的。
李四,再對(duì)信的內(nèi)容做hash,得到摘要,與上一步得到的摘要對(duì)比,如果一致,則證明信的內(nèi)容沒有被修改過,信的內(nèi)容是完整的。
復(fù)雜的情況出現(xiàn)了。
王五,用自己的公鑰替換李四保存的張三的公鑰,也就是王五欺騙了李四,李四誤把王五的公鑰當(dāng)張三的公鑰,這樣一來,王五就能冒充張三給李四寫信(王五用自己的私鑰加密)。
問題是什么?問題是李四不能確信自己保存的公鑰真的是張三的公鑰。
如果客戶端電腦上存的工商銀行官網(wǎng)的公鑰,實(shí)際上是騙子公司的公鑰,那就麻煩大了。
怎么破?讓張三去認(rèn)證中心CA(Certificate Authority),為公鑰做認(rèn)證,怎么做呢?CA中心用自己的私鑰,對(duì)張三的公鑰和其他相關(guān)信息一起加密,生成數(shù)字證書(Digital Certificate)。
張三拿到數(shù)字證書后,以后給李四回信,在簽名的同時(shí),附帶上數(shù)字證書。
李四收到信之后,從CA的公鑰解開數(shù)字證書,取出張三的公鑰(一定是真的),然后就能放心的愉快的按之前的流程解開簽名了。
數(shù)字證書加入后,核心區(qū)別就是張三的公鑰不再保存在李四處,而是通過數(shù)字證書下發(fā)。
為什么數(shù)字證書里的張三的公鑰一定是真的呢?因?yàn)镃A是權(quán)威機(jī)構(gòu),假設(shè)全世界就一家(其實(shí)不止,但也不多),它的公鑰天下盡知,就是固定的串,所以能用CA公鑰解開的證書,一定是CA頒布的,因?yàn)镃A用它的私鑰加密產(chǎn)生的證書。
很明顯,非對(duì)稱加密能用于證明我是我。
密鑰交換算法著名的DH密鑰交換算法,這個(gè)算法很有意思,也很巧妙,簡而言之,就是通信雙方交換一點(diǎn)信息(不怕被偷看到),然后就在兩端,分布產(chǎn)生出一個(gè)相同的密鑰,神奇啊。
有一個(gè)很有意思的例子。
Apce和Bob要協(xié)商出一個(gè)公共的顏色,他們可以交換信息,但交換的信息,可以被偷看到,怎么辦?既能協(xié)商出公共顏色,又不能讓別人知道呢。
首先,他們有公共的顏色,都是1毫升黃色。
然后Apce挑選一個(gè)私密的紅色,Bob選綠色,都是1毫升。
只有自己知道,不會(huì)告訴別人。
然后Apce把黃色和紅色混合在一起,Bob把黃色和綠色混合在一起,各為2毫升。
然后,他們把自己混合后的2毫升顏色液體,發(fā)給對(duì)方。
然后,用自己的一毫升私密顏色液體,跟從對(duì)方那里收到的2毫升液體,混合,下面就是見證奇跡的顏色的時(shí)刻,他們得到了相同的顏色,而第三方并不能通過偷看他們傳遞的數(shù)據(jù)知道他們最終得到的顏色(基于一個(gè)假設(shè),圖里有說明)。
密鑰交換算法的原理跟這個(gè)差不多,網(wǎng)上有大量的資料講述這個(gè)問題,我覺得理解了上面的例子,再看ECDH便也不難了。
眾所周知http是互聯(lián)網(wǎng)協(xié)議,但是它不夠安全,所以后面有改進(jìn)版的https,其實(shí)就是多了一個(gè)TLS,這個(gè)是傳輸層加密,本質(zhì)上,就是通過handshake,協(xié)商出一個(gè)會(huì)話密鑰,后面的數(shù)據(jù)傳遞,都用這個(gè)密鑰做對(duì)稱加解密。
我們經(jīng)常講安全通道,其實(shí)也就是協(xié)商出一個(gè)會(huì)話密鑰,他并不神秘。
胡亂放幾張圖片吧。
為了減少這幾個(gè)RTT,又想了各種辦法,然后復(fù)用連接的話,就可以做到0RTT,1RTT了。
Copyright © 2021 深圳市維創(chuàng)信息技術(shù)有限公司 版權(quán)所有