官术网_书友最值得收藏!

2.1 加密解密基礎(chǔ)

加密解密主要用于保證信息安全,加密是以某種特殊的算法改變原有的信息數(shù)據(jù)的過程,而解密則是將改變后的信息數(shù)據(jù)進(jìn)行還原的過程。

加密算法可以分為單向加密和雙向加密兩大類,單向加密是不可逆的加密,只能加密無法解密。單向加密有以下特性,任意兩段不同的明文加密之后的密文是不同的,而同一段明文經(jīng)過加密之后的密文是相同的,不可逆,即理論上通過密文無法解密出原文。單向加密可以用于判斷文件在傳輸過程中是否被竄改過,也可以用于記錄一些隱蔽的信息。例如,用戶的密碼,可以通過MD5加密之后存儲到數(shù)據(jù)庫中,每次用戶登錄都只將用戶提交的經(jīng)過MD5加密的密文與數(shù)據(jù)庫中的密文進(jìn)行比較來判斷,這樣大大提高了安全性。常用的單向加密算法有MD5、SHA、HMAC等。

雙向加密與單向加密相反,經(jīng)過雙向加密的密文可以被解密回明文,而雙向加密又可以分為對稱加密和非對稱加密。對稱加密指的是可以通過同一個密鑰加密和解密,常見的對稱加密算法有DES、3DES、AES等。而非對稱加密指的是加密和解密用的是不同的密鑰,常見的非對稱加密算法有RSA。

2.1.1 公鑰/私鑰與非對稱加密

理解非對稱加密是理解數(shù)字簽名與數(shù)字證書等一系列概念的關(guān)鍵,每一個技術(shù)的出現(xiàn)都是為了解決問題,非對稱加密主要是為了解決以下幾個問題。

? 如何確保收到的內(nèi)容沒有被竄改。

? 如何確保收到的內(nèi)容確實(shí)是對方發(fā)的,而不是其他人偽造的。

如果使用普通的對稱加密,是解決不了上面這兩個問題的,因?yàn)槿绻M笥涯軌驅(qū)ξ壹用芰说膬?nèi)容進(jìn)行解密,就需要把密鑰給朋友,但密鑰在傳輸?shù)倪^程中有可能泄露,一旦密鑰被泄露,其他人就可以在我們的通信中攔截通信的內(nèi)容,對其解密然后進(jìn)行修改,然后重新加密再發(fā)送。

非對稱加密很好地解決了上面這兩個問題,首先非對稱加密會生成兩個密鑰,稱之為公鑰和私鑰,公鑰是可以公開的,私鑰掌握在自己的手上,當(dāng)發(fā)送一個文件給朋友,可以用我的私鑰加密,朋友需要用我的公鑰解密,而當(dāng)朋友要發(fā)送一個文件給我的時候,需要用我的公鑰加密,然后我可以用我的私鑰進(jìn)行解密。這段話非常關(guān)鍵的點(diǎn)在于,私鑰加密之后,只有公鑰可以解開(私鑰解不開);而公鑰加密之后,則只有私鑰可以解開(公鑰解不開),如圖2-1所示。

圖2-1 非對稱加密

因?yàn)槲业乃借€不需要經(jīng)過任何傳輸,自己保管即可,泄露的風(fēng)險非常低。而別人拿不到我的私鑰,就無法冒充或修改我發(fā)送的內(nèi)容,因?yàn)橹挥薪?jīng)過我的私鑰加密之后,才能用我的公鑰解開,否則用我的公鑰是解不開的。如果有人想竄改朋友發(fā)給我的文件,因?yàn)闆]有我的私鑰,解不開朋友發(fā)送的文件,所以也就無法竄改朋友發(fā)送給我的文件了。

2.1.2 信息摘要與數(shù)字簽名

由于非對稱加密算法的復(fù)雜度很高,效率比對稱加密算法要大得多,所以對一個巨大的文件執(zhí)行非對稱加密的代價非常大,因此可以對文件先執(zhí)行信息摘要,然后對文件的摘要進(jìn)行非對稱加密。信息摘要指的是將一個文件執(zhí)行一次單向加密,輸出一段固定簡短的摘要內(nèi)容,這段摘要內(nèi)容相當(dāng)于這個文件的指紋,對不同的文件執(zhí)行信息摘要可以得出不同的摘要內(nèi)容,而對同一個文件執(zhí)行信息摘要得出的摘要內(nèi)容是相同的。對文件的指紋進(jìn)行加密要比對整個文件進(jìn)行加密高效得多。而數(shù)字簽名就是對摘要進(jìn)行非對稱加密的操作,把數(shù)字簽名當(dāng)作名詞時可以理解為經(jīng)過非對稱加密后的摘要內(nèi)容。

當(dāng)我希望發(fā)送一個巨大的文件給朋友時,保證這個文件沒有被篡改過,就可以對文件進(jìn)行信息摘要和數(shù)字簽名,然后把簽名結(jié)果和文件一起發(fā)送給朋友,如圖2-2所示。

圖2-2 信息摘要與數(shù)字簽名的生成

當(dāng)朋友接收到文件和數(shù)字簽名時,先用公鑰對數(shù)字簽名進(jìn)行解密(這個過程也稱之為驗(yàn)簽),然后對文件執(zhí)行一次信息摘要,對比摘要內(nèi)容,如果簽名中的摘要內(nèi)容和文件執(zhí)行信息摘要得出的摘要內(nèi)容一致,說明這個文件沒有被篡改過,如圖2-3所示。

圖2-3 驗(yàn)簽

2.1.3 數(shù)字證書

為了讓其他人能夠方便地辨別使用公鑰,可以將公鑰以及公鑰使用的算法、所有者、有效期等一系列屬性進(jìn)行打包,這樣的一個數(shù)據(jù)結(jié)構(gòu)稱之為PKCS10數(shù)據(jù)包,在操作iOS開發(fā)者證書時會碰到.p10文件就是對應(yīng)一個這樣的數(shù)據(jù)結(jié)構(gòu)。

不論是直接給出公鑰還是給出PKCS10數(shù)據(jù)包,都存在一個隱患,就是公鑰或PKCS10數(shù)據(jù)包在傳輸?shù)倪^程中被替換修改,這樣其他人就可以偽裝成我們發(fā)送任何內(nèi)容,那么如何保證你拿到的公鑰確確實(shí)實(shí)就是我發(fā)給你的公鑰呢?

數(shù)字證書就是用來解決這個問題的,首先需要有一個頒發(fā)證書的權(quán)威的第三方機(jī)構(gòu)(CA數(shù)字證書認(rèn)證中心),來幫我們認(rèn)證這個PKCS10數(shù)據(jù)包,CA使用它的私鑰來對我們的PKCS10數(shù)據(jù)包進(jìn)行數(shù)字簽名,這樣就得到了一份經(jīng)過CA認(rèn)證的數(shù)字證書,數(shù)字證書一般遵循同一個格式標(biāo)準(zhǔn)(X509標(biāo)準(zhǔn))。

在發(fā)送文件的時候,除了對文件進(jìn)行簽名之外,還需要附帶我們的證書。接收到文件時可以使用CA的公鑰對證書進(jìn)行驗(yàn)簽,確保這個證書是有效的,接下來再使用證書中的公鑰對文件的數(shù)字簽名進(jìn)行驗(yàn)簽。經(jīng)過了雙重驗(yàn)簽之后,就可以保證文件的來源和內(nèi)容沒有經(jīng)過竄改。

主站蜘蛛池模板: 北票市| 肥东县| 德阳市| 北票市| 芒康县| 甘洛县| 京山县| 利津县| 连平县| 西平县| 兴国县| 浪卡子县| 喀喇| 夏邑县| 铁岭县| 云南省| 绥滨县| 石嘴山市| 方正县| 翁牛特旗| 襄垣县| 滨州市| 洛宁县| 木里| 灵宝市| 宜兰县| 石城县| 神农架林区| 乐清市| 普兰县| 涿鹿县| 根河市| 武川县| 涞源县| 渭南市| 方山县| 巢湖市| 天等县| 台江县| 江孜县| 石泉县|