1.前言
信息安全包括兩點:一是信息的保密性,所謂的保密就是指只有你和你允許的人能看到信息。二是信息的完整性,所謂完整性就是指對方發(fā)的信息和你接收到的信息是一致的,中間沒有被別人篡改過。
2.加密與算法
加密是保護(hù)信息安全的手段之一,對信息加密是需要加密算法的。
1.摘要算法
摘要算法就是把任意一個大小的文檔,通過計算得到一個固定大?。ǎū热?2))的字符串。并且,這個過程是不可逆的,也就是說,沒有辦法通過字符串還原那個文檔的內(nèi)容。還有就是任意兩個文檔得到相同結(jié)果字符串的概率很小,幾乎為0。
2.對稱加密
加密就是把一段文本通過算法計算生成另一段文本。這個過程是可逆的,可逆的過程是解密。目前我們說的加密算法都是基于密鑰的。加密算法不能單獨工作,需要跟密鑰配合。加密算法是公開的,但密鑰是保密的。對稱加密是指加密和解密需要的密鑰是同一個。比如:你寫了一篇表白想發(fā)給你的女神,但是又不想別人看到內(nèi)容所以采用加密。然后你跟女神提前約定好加密算法和密鑰(比如女神的生日之類的),只有你們兩個人知道。在發(fā)之前,你用加密算法和密鑰給表白加密,然后把加密后的表白發(fā)送給女神。女神收到以后用加密算法和密鑰對表白進(jìn)行解密,然后再讀取表白的內(nèi)容。在信息發(fā)送過程即使有人攔截了這篇表白,因為沒有密鑰,所以并不能解密還原表白的原始內(nèi)容。對稱加密的優(yōu)點是速度快,缺點是安全性差(雙方持有的密鑰一致,有一方的密鑰公開后那么信息將不再安全)。
3.非對稱加密
如果了解了對稱加密,那么非對稱加密就簡單了。從字面上理解就是加密和解密用的是不同的密鑰,其中一個稱為公鑰,另一個稱為私鑰。公鑰就是公開的,大家都可以知道,而私鑰只有你自己知道。公鑰和私鑰的聯(lián)系是:用公鑰加密的內(nèi)容只能由相應(yīng)的私鑰來解密,反過來,用私鑰加密的內(nèi)容只能由相應(yīng)的公鑰來解密。而且很重要的一點是,通過公鑰并不能推導(dǎo)出私鑰,或者說很困難。還是上面的例子,如果用非對稱加密來處理的話就是:你把表白用女神的公鑰來加密,然后把加密后的表白發(fā)給女神,女神收到后用私鑰來解密。在信息發(fā)送過程中即使有人攔截了因為并沒有女神的私鑰,也沒有辦法看到表白的原始內(nèi)容。非對稱加密的優(yōu)點是安全性強(qiáng)(因為私鑰只有你知道),缺點是加密過程速度慢。
4.數(shù)字簽名
先來說下現(xiàn)實生活中的簽名,比如逛超市刷信用卡,刷完卡之后都要要求簽名,這樣做的好處就是商家可以通過你的簽名來判斷刷卡操作是不是你本人來完成的(雖然這對商家意義不大),當(dāng)然這里面有個前提條件:只有你自己能重現(xiàn)你的簽名,其他人做不到(筆跡鑒定)。
回到信息世界,還是上面的例子,女神收到表白后對你動心了,但是她不確定表白到底是不是你發(fā)出的,或者表白內(nèi)容是否經(jīng)過別人修改了。如果表白是用對稱加密的,那么其他人攔截到表白后,雖然沒有密鑰,但是可以隨便修改表白的內(nèi)容,這樣女神解密表白后并不知道原始的表白內(nèi)容被修改了。如果表白是用非對稱加密的,那么其他人攔截到表白后,重新寫一份表白并用女神的公鑰加密后發(fā)給女神,這樣表白內(nèi)容也被修改了。以上兩種情況,不管是用對稱加密還是非對稱加密,表白信息都可能被別人修改,那怎么才能知道表白信息有沒有被別人修改呢?
數(shù)字簽名的目的就是為了證明你發(fā)的信息并沒有被別人修改,原理就是非對稱加密(證明是你本人)和摘要算法(證明信息沒有被修改)結(jié)合,當(dāng)然這里面也有個前提條件:只有你自己有私鑰,其他人沒有。還是上面的例子,你寫一份表白,寫完后用摘要算法計算表白信息的摘要值,計算完之后再用你自己的私鑰給摘要值加密,加密后的摘要值跟表白信息一起發(fā)給女神,女神收到信息(表白+摘要)后,首先用你的公鑰解密摘要信息獲取摘要的原始內(nèi)容A,然后再用相同的摘要算法計算表白信息的摘要值B,最后比對A和B的值是不是一致,如果一致就說明表白信息是你發(fā)的并且沒有被修改過。如果表白信息被攔截后并且被修改了,只有將修改過的表白信息重新計算摘要值并重新加密才行,雖然表白信息和表白的摘要信息別人都可以改,但是別人并沒有你的私鑰,這樣女神最后得到的A和B的值是不相等的,結(jié)果就是女神知道信息被別人修改過并不可靠。
這里有兩個疑點可以思考:
一:將摘要信息加密,那表白信息還需要加密么?如果表白信息不想被別人看到,還是需要加密的,那么用對稱加密還是非對稱加密呢?
二:女神有你的公鑰,如果公鑰被別人調(diào)包了呢?
3.數(shù)字證書
1.數(shù)字證書的用途
以上“數(shù)字簽名”例子中,我們都默認(rèn)了一個前提條件:女神擁有的確實是你的公鑰,如果女神的公鑰被別人調(diào)包了呢?繼續(xù)上面的實例:如果女神的公鑰被你的一個情敵調(diào)包換成情敵的公鑰了,當(dāng)你把表白和數(shù)字簽名發(fā)給女神的過程中,情敵把信息攔截了,攔截后重新寫了一份表白并用他自己的私鑰生成數(shù)字簽名(重復(fù)你的操作,只不過內(nèi)容已經(jīng)換成情敵的了)重新發(fā)給女神,這時女神并不知道“你”已經(jīng)換成“情敵”了,那你就悲劇了哦。這時數(shù)字證書就起作用了,數(shù)字證書就是為了給女神證明發(fā)信人的身份的。
2.數(shù)字證書包含的內(nèi)容
在現(xiàn)實生活里,為了證明我們身份,公安機(jī)關(guān)會給每個人頒發(fā)一個身份證。在信息世界里,數(shù)字證書就是對方的身份證。同樣的,數(shù)字證書也有專門的發(fā)證機(jī)關(guān)Certificate Authority,簡稱CA。發(fā)證機(jī)關(guān)頒發(fā)的數(shù)字證書里包含以下基本內(nèi)容:
1.證書頒發(fā)機(jī)關(guān)
2.證書持有者名稱/服務(wù)器域名
3.證書有效期
4.證書簽名算法(摘要算法和加密算法)
5.證書簽名值
6.證書所有者加密算法
7.證書所有者公鑰
3.如何驗證
現(xiàn)實中要驗證一個人的身份,首先核對這個人的身份證有效性,然后再核對本人相貌跟身份證上的照片是否一致。數(shù)字證書也是一樣的驗證思路:
1.驗證數(shù)字證書有效性
數(shù)字證書里包含了發(fā)證機(jī)關(guān)對這張證書的數(shù)字簽名,而瀏覽器默認(rèn)內(nèi)置了發(fā)證機(jī)關(guān)的公鑰(暫且這么理解),拿到公鑰后先解密證書的數(shù)字簽名拿到證書的摘要,然后瀏覽器用證書的摘要算法重新計算下證書的摘要,最后比對這兩者的值是否相等,如果相等證明這張數(shù)字證書確實是發(fā)證機(jī)關(guān)頒發(fā)的有效證書。
2.驗證“相貌”
如何驗證該證書的所有者就是跟瀏覽器正在對話的網(wǎng)站呢?
數(shù)字證書包含了web網(wǎng)站服務(wù)器的一個或者多個域名,瀏覽器會驗證該域名跟正在對話的服務(wù)器的域名是否匹配(防止MITM)。
4.數(shù)字證書的級聯(lián)
頒發(fā)證書的機(jī)構(gòu)是可以有級聯(lián)關(guān)系的,即A機(jī)構(gòu)可以委派B機(jī)構(gòu)頒發(fā)證書,B機(jī)構(gòu)也可以委派C頒發(fā)證書,如果網(wǎng)站的證書是C頒發(fā)的,那么需要用B的證書去驗證C頒發(fā)的證書,同理需要用A機(jī)構(gòu)的證書去驗證B頒發(fā)的證書,這個過程是遞歸的,A機(jī)構(gòu)的證書被稱為“根證書”?!案C書”是配置在我們電腦上,默認(rèn)是安全的。
4.ssl
前面討論過信息安全的技術(shù),而ssl就是基于這些技術(shù)的一套協(xié)議。 ssl全稱Secure Socket Layer,它是介于傳輸層(TCP)和應(yīng)用層(比如HTTP)的協(xié)議,以下簡單介紹下ssl的工作原理:
1.握手協(xié)議:
第一步:客戶端將ssl協(xié)議版本信息、客戶端支持的加密方法、客戶端生成的隨機(jī)數(shù)A發(fā)給服務(wù)端
第二步:服務(wù)端確認(rèn)雙方使用的加密方法,并將服務(wù)端的數(shù)字證書、服務(wù)端生成的隨機(jī)數(shù)B發(fā)給客戶端,同時有個可選請求,即服務(wù)端可以要求客戶端發(fā)送自己的證書(雙方認(rèn)證時需要)。
第三步:客戶端確認(rèn)數(shù)字證書的有效性,然后生成一個新的隨機(jī)數(shù)C,并使用數(shù)字證書中的公鑰(服務(wù)端的),加密這個隨機(jī)數(shù),發(fā)給服務(wù)端
第四步:服務(wù)端使用自己的私鑰,解密獲取客戶端的隨機(jī)數(shù)
第五步:此時服務(wù)端和客戶端都擁有三個隨機(jī)數(shù)A、B、C,再根據(jù)約定的加密算法,生成一份密鑰(對稱加密),握手結(jié)束的結(jié)果就是雙方都持有該密鑰
2.傳輸協(xié)議:
傳輸協(xié)議是基于上一步產(chǎn)生的密鑰對信息進(jìn)行對稱加密的(對稱加密的性能比非對稱的好)。
傳輸信息時,除了對信息本身加密外,還對每條信息生成時間戳,再用摘要算法計算信息+時間戳得到摘要值,那每次發(fā)送信息時就是:encrypt(message) + hash(message + timestamp)
時間戳的好處:
1.防止篡改信息
2.防止消息重放
5.總結(jié)
數(shù)字簽名是為了證明對方發(fā)的信息并沒有被更改過,但前提條件是你確認(rèn)對方是可靠的,即你擁有的公鑰確實是對方的公鑰而不是其他人的公鑰。而數(shù)字證書就是為了證明你擁有的公鑰確實是對方的。