簡(jiǎn)介
在早期,互聯(lián)網(wǎng)通信是直接以明文進(jìn)行傳輸臣缀,幾乎沒(méi)任何安全性可言,在你發(fā)送數(shù)據(jù)到接收者手上泻帮,經(jīng)過(guò)n個(gè)網(wǎng)絡(luò)設(shè)備精置,在傳輸過(guò)程中,數(shù)據(jù)可能被某些不懷好意的人截取锣杂,造成數(shù)據(jù)泄密甚至被修改脂倦。
美國(guó)NIST針對(duì)互聯(lián)網(wǎng)數(shù)據(jù)安全番宁,提出了幾個(gè)要求:
1. 數(shù)據(jù)保密性:數(shù)據(jù)保密性和隱私性;確保信息不被別人獲取赖阻,個(gè)人存儲(chǔ)的信息不能被別人收集到蝶押;
2. 數(shù)據(jù)完整性:數(shù)據(jù)完整性確保數(shù)據(jù)和程序只能以特定權(quán)限的進(jìn)行授權(quán)和改變,只能授權(quán)之后才能改變或者被改變火欧;確保系統(tǒng)以一種正常的方式執(zhí)行預(yù)定的功能棋电,不會(huì)因別人的介入改變方向;
3. 可用性:工作迅速苇侵,可正常使用的情況并獲取到信息赶盔;
針對(duì)以上幾個(gè)安全要求,對(duì)應(yīng)的解決方案出現(xiàn)衅檀,解決方案提出使用技術(shù)和服務(wù)解決數(shù)據(jù)安全問(wèn)題招刨。
技術(shù)(加密和解密)
服務(wù)(用于抵御攻擊的服務(wù),也即是為了上述安全目標(biāo)而特地設(shè)計(jì)的安全服務(wù))
基本概念
加密:將數(shù)據(jù)轉(zhuǎn)換成不能直接讀取的形式(即密文)的過(guò)程叫加密哀军。數(shù)據(jù)加密的基本過(guò)程就是對(duì)原來(lái)為明文的文件或數(shù)據(jù)按某種加密算法配合密鑰進(jìn)行處理沉眶,使其成為不可讀的一段代碼,通常稱為"密文"杉适,使其只能在輸入相應(yīng)的密鑰之后才能顯示出本來(lái)內(nèi)容谎倔,通過(guò)這樣的途徑來(lái)達(dá)到保護(hù)數(shù)據(jù)不被非法人竊取、閱讀的目的猿推。
解密:加密的逆過(guò)程片习,使用密鑰配合加密算法,轉(zhuǎn)換成明文內(nèi)容蹬叭。
大多數(shù)加密都分為:對(duì)稱式加密藕咏、非對(duì)稱式加密和單向加密:
對(duì)稱式加密:
加密和解密采用同一密鑰的加密方式。加密時(shí)秽五,使用密鑰配合算法加密孽查。解密時(shí),使用對(duì)應(yīng)的密鑰配合算法坦喘,得出解密后的數(shù)據(jù)盲再。常見(jiàn)的對(duì)稱加密有:DES、3DES瓣铣、AES答朋、DH。舉個(gè)簡(jiǎn)單例子:通信雙方約定密鑰為“123”棠笑,加密算法采用AES梦碗,接受者收到加密后的密文后,使用AES算法+密鑰“123”即可完成解密。使用對(duì)稱式加密和解密速度很快叉弦。適合用于加密數(shù)據(jù)丐一。對(duì)稱式加密由于加密解密使用同一密鑰,所以如何安全的在互聯(lián)網(wǎng)傳輸密鑰淹冰,是對(duì)稱式加密所面臨的問(wèn)題库车。
非對(duì)稱式加密
也稱為公鑰或私鑰加密,非對(duì)稱加密的密鑰是成對(duì)出現(xiàn)的樱拴,分為私鑰和公鑰柠衍。公鑰從私鑰提取出,正如其名晶乔,私鑰只能保存起來(lái)自己用珍坊,不能隨意泄密,公鑰是公開(kāi)的正罢,任何人都能得到阵漏。公鑰和私鑰都可以用于加密,但是翻具,如果你用公鑰加密履怯,只能使用私鑰解密;同樣裆泳,如果用私鑰解密叹洲,只能使用公鑰解密。非對(duì)稱加密對(duì)資源消耗大工禾,所以一般不用于加密數(shù)據(jù)运提。但使用非對(duì)稱式加密可以很到的解決對(duì)稱式加密的短板,傳輸密鑰闻葵。而且非對(duì)稱式加密可以解決身份證明問(wèn)題民泵。
單向加密
這種加密嚴(yán)格意思上算不上加密,也常被稱為散列運(yùn)算槽畔,用于對(duì)數(shù)據(jù)生成獨(dú)一無(wú)二的校驗(yàn)碼洪灯,對(duì)于校驗(yàn)碼叫法很多(如特征碼冠句,指紋信息)這類加密有個(gè)特點(diǎn)入热,就是具有雪崩效應(yīng)郊愧,對(duì)任何數(shù)據(jù),就算你改動(dòng)一個(gè)標(biāo)點(diǎn)符號(hào)坏快,改動(dòng)前和改動(dòng)后使用算法計(jì)算出來(lái)的結(jié)果是翻天覆地的變化。但只要數(shù)據(jù)沒(méi)發(fā)生改動(dòng)憎夷,使用單向加密算法計(jì)算出來(lái)的值是不會(huì)發(fā)生改變的莽鸿,所以使用單向加密能很好的解決數(shù)據(jù)完整性的問(wèn)題。
數(shù)據(jù)加密分析:
以上三種算法各有各自的優(yōu)點(diǎn)和缺點(diǎn),在如今復(fù)雜的網(wǎng)絡(luò)環(huán)境中單憑通過(guò)一個(gè)加密方式來(lái)確保數(shù)據(jù)安全是不科學(xué)的
如祥得,通信雙方使用對(duì)稱式加密來(lái)完成數(shù)據(jù)加密兔沃。但通信雙方如何確保用來(lái)加密和解密的密鑰在網(wǎng)絡(luò)中傳輸不被竊取呢?如果單單使用公鑰私鑰來(lái)加密數(shù)據(jù)级及,因?yàn)楣€加解密所消耗的資源實(shí)在太大乒疏,而且不能抵御中間人攻擊∫梗基于以上各種問(wèn)題怕吴,現(xiàn)在的網(wǎng)絡(luò)通信過(guò)程,通常使用各算法的優(yōu)勢(shì)县踢,配合各種服務(wù)組合來(lái)完成數(shù)據(jù)的加密傳輸转绷。
方案1:
考慮到對(duì)稱加密速度快,又考慮到公鑰加密能驗(yàn)證身份的優(yōu)點(diǎn)硼啤,我們先對(duì)這2個(gè)算法配合使用分析一下:
首先A和B兩個(gè)進(jìn)程進(jìn)行通信议经,A要發(fā)送數(shù)據(jù)給B,可以首先對(duì)數(shù)據(jù)進(jìn)行對(duì)稱加密谴返,進(jìn)一步考慮煞肾,對(duì)稱式加密的密鑰怎么安全的傳送呢?可以使用公鑰加密來(lái)解決這個(gè)問(wèn)題亏镰,我們使用對(duì)方的公鑰來(lái)加密這段對(duì)稱式加密的密鑰扯旷,這樣只有對(duì)方的私鑰能解鎖這段數(shù)據(jù);數(shù)據(jù)的收取者解密時(shí)索抓,將使用自己的私鑰解密第一層钧忽,得到對(duì)稱密鑰后加密的數(shù)據(jù),再使用對(duì)稱密鑰解密逼肯,這樣就能獲得最終數(shù)據(jù)
方案2:
方案1的加密方法只保證了數(shù)據(jù)的安全性耸黑,但是數(shù)據(jù)的完整性、一致性和來(lái)源可靠并未解決篮幢。對(duì)于數(shù)據(jù)的完整性和一致性大刊,我們可以通過(guò)單向加密來(lái)解決,前面說(shuō)了三椿,只要數(shù)據(jù)沒(méi)發(fā)生改變缺菌,那么使用相同算法算出來(lái)的值,肯定是一樣的搜锰,那么我們可以在數(shù)據(jù)傳送前伴郁,先使用單向加密方法,算出獨(dú)一無(wú)二的校驗(yàn)碼,這個(gè)校驗(yàn)碼稱為:信息摘要(Message Digest)附加在數(shù)據(jù)后面蛋叼,然后使用自己的私鑰來(lái)加密這個(gè)信息摘要焊傅,這種使用私鑰加密信息摘要產(chǎn)生的加密后的信息摘要剂陡,我們稱為數(shù)字簽名(Signature)由此來(lái)看數(shù)字簽名能保證數(shù)據(jù)來(lái)源可靠性(因?yàn)槭褂盟借€加密,只要對(duì)應(yīng)的公鑰能解密)數(shù)據(jù)的完整性和一致性(私鑰加密的是信息摘要狐胎,解密后得出的信息摘要我們只要使用同樣的單向加密算出數(shù)據(jù)部分的信息摘要鸭栖,經(jīng)過(guò)對(duì)比,如果相同則證明數(shù)據(jù)是完整握巢,未被修改的)用戶獲得數(shù)字簽名后的數(shù)據(jù)晕鹊,首先使用數(shù)據(jù)來(lái)源方的公鑰解密,這樣獲得了數(shù)據(jù)和信息摘要部分镜粤,并確認(rèn)了數(shù)據(jù)來(lái)源的可靠性捏题。由于這時(shí)候數(shù)據(jù)部分是沒(méi)有被加密的,所以用戶也可以使用同種單向加密算法計(jì)算出摘要信息肉渴,然后對(duì)比來(lái)源方的摘要信息和自己計(jì)算出的摘要信息公荧,如果相等則證明數(shù)據(jù)完全未被修改過(guò),是完整一致的同规。
方案3:
方案2中并未對(duì)數(shù)據(jù)部分進(jìn)行加密循狰,所以方案3綜合方案1和方案2的優(yōu)點(diǎn),
加密步驟如下:
1.先對(duì)數(shù)據(jù)進(jìn)行單向加密券勺,得出信息摘要绪钥,可以驗(yàn)證數(shù)據(jù)完整性
2.使用私鑰加密信息摘要,得出數(shù)字簽名关炼,附加在數(shù)據(jù)后面程腹,可以驗(yàn)證來(lái)源合法
3.使用方案1的對(duì)稱式加密,對(duì)數(shù)據(jù)和數(shù)字前面加密儒拂,得出對(duì)稱密鑰
4.使用對(duì)方的公鑰加密這個(gè)對(duì)稱密鑰寸潦,傳送給對(duì)方,只有對(duì)方的私鑰能解密
解密步驟如下
1.先使用自己的私鑰解開(kāi)對(duì)稱加密的密鑰
2.使用該密鑰社痛,解密對(duì)稱加密见转,得出數(shù)字簽名和數(shù)據(jù)
3.使用對(duì)方的公鑰解密數(shù)字簽名,得到信息摘要蒜哀,并且能解開(kāi)斩箫,證明身份得到驗(yàn)證。
4.對(duì)數(shù)據(jù)部分進(jìn)行單向加密撵儿,得出信息摘要乘客,然后和解密后的信息摘要作對(duì)比,如果一致淀歇,那么數(shù)據(jù)完整性得到驗(yàn)證寨典。
中間人攻擊
前面介紹了加密傳輸?shù)母鞣N方案,方案3比較理想房匆,基本上都驗(yàn)證了。但安全并不是絕對(duì)的,方案3也有缺陷浴鸿,沒(méi)辦法驗(yàn)證對(duì)方的公鑰是否可靠井氢。
如果公鑰不可靠帶來(lái)什么后果?
假設(shè)出現(xiàn)這樣的情景:
Alice要和Bob通信岳链,Alice最后把數(shù)據(jù)用Bod的公鑰加密后花竞,發(fā)送給Bod,Bob收到后按照方案3那樣解密掸哑,這樣看起來(lái)好像沒(méi)問(wèn)題约急,但如果Bob收到的數(shù)據(jù)其實(shí)不是Alice發(fā)送過(guò)來(lái)的呢?Alice發(fā)送的數(shù)據(jù)在傳輸過(guò)程中苗分,如果被一個(gè)中間人厌蔽,如eve,eve截取了Alice的數(shù)據(jù)之后摔癣,雖然不能輕易破解奴饮,但是eve對(duì)自己的一個(gè)惡意程序按照Alice那樣對(duì)數(shù)據(jù)加密后用Bob的公鑰加密對(duì)稱密鑰后發(fā)給Bob并聲稱自己就是Alice,同樣對(duì)Alice聲稱自己是Bob择浊,這樣Alice和Bob的通信其實(shí)是跟eve在進(jìn)行戴卜,但是Alice和Bob都不知道。這就是中間人攻擊琢岩。
那么投剥,如何解決這個(gè)漏洞呢,其實(shí)Bob只要確保公鑰是Alice的就可以了担孔,在解密數(shù)字簽名的時(shí)候江锨,如果使用真正的Alice公鑰,是不可能解密eve發(fā)過(guò)來(lái)的數(shù)字簽名攒磨。那么如何保證公鑰的可靠性呢泳桦?CA就是為了保證公鑰的可靠而生。
公鑰基礎(chǔ)設(shè)施PKI娩缰、CA
PKI(Public Key Infrastructure)公鑰基礎(chǔ)設(shè)施是提供公鑰加密和數(shù)字簽名服務(wù)的系統(tǒng)或平臺(tái)灸撰,目的是為了管理密鑰和證書(shū)。
PKI 主要包括四個(gè)部分:
簽證機(jī)構(gòu):CA
注冊(cè)機(jī)構(gòu):RA
證書(shū)吊銷列表:CRL
證書(shū)存取庫(kù):
CA(Certificate Authority)數(shù)字證書(shū)認(rèn)證中心拼坎,常稱為證書(shū)頒發(fā)機(jī)構(gòu)浮毯,申請(qǐng)者把自己的公鑰和一些個(gè)人信息(如國(guó)家、姓名泰鸡、單位等等)給CA债蓝,CA負(fù)責(zé)審核信息,通過(guò)后盛龄,CA會(huì)對(duì)這些信息生成一個(gè)摘要信息饰迹,然后用自己的私鑰加密整個(gè)摘要信息芳誓,這樣申請(qǐng)者的數(shù)字簽名就出來(lái)了,然后CA會(huì)在數(shù)字簽名上再加上一些自己的信息啊鸭。(如CA的機(jī)構(gòu)名稱锹淌,CA層次路徑等)以及該證書(shū)的信息(如證書(shū)有效期限),就得到了所謂的數(shù)字證書(shū)赠制。
其實(shí)簡(jiǎn)單來(lái)理解赂摆,CA作用就是保證公鑰是可靠的,把自己的公鑰給CA钟些,CA幫你生成一張數(shù)字證書(shū)烟号,該證書(shū)不但有你的公鑰信息,而且有其他的一些信息
用戶信任CA,會(huì)獲取該CA的公鑰政恍,由CA頒發(fā)的數(shù)字證書(shū)都就被CA加密汪拥,要有CA的公鑰能解密。
證書(shū)信任鏈:
實(shí)際上抚垃,CA被分成根CA和子CA喷楣,根CA的證書(shū)是自簽的,系統(tǒng)安裝時(shí)候就應(yīng)該提供鹤树,子CA的證書(shū)是上一級(jí)CA簽署的铣焊。
根CA是通過(guò)自簽署數(shù)字證書(shū)的方式標(biāo)榜自己的可信性和合法性,第一級(jí)子CA由根CA頒發(fā)合法數(shù)字證書(shū)罕伯,第二級(jí)直至所有的子CA都由上一級(jí)子CA頒發(fā)數(shù)字證書(shū)曲伊。對(duì)于多級(jí)子CA只需要信任根CA即可,因?yàn)楂@取了根CA的公鑰追他,可以解密第一級(jí)子CA的證書(shū)并獲取驗(yàn)證第一級(jí)子CA的公鑰坟募,層層遞進(jìn),最終獲取到為申請(qǐng)者頒發(fā)數(shù)字證書(shū)的機(jī)構(gòu)并獲取它的公鑰邑狸。
正是這些根CA和子CA組成了PKI懈糯。 信任CA后,每次接收到需要解密的數(shù)字證書(shū)時(shí)单雾,還要去該頒發(fā)機(jī)構(gòu)指定網(wǎng)站的證書(shū)吊銷列表(CRL)中查詢?cè)撟C書(shū)是否被吊銷赚哗,對(duì)于吊銷后的證書(shū)應(yīng)該不予以信任,這是信任CA的第二個(gè)作用硅堆。導(dǎo)致證書(shū)被吊銷的可能性不少屿储,例如申請(qǐng)者的私鑰被黑客獲取,申請(qǐng)者申請(qǐng)吊銷等渐逃。
數(shù)字證書(shū)
TLS和SSL使用的證書(shū)格式都是x509够掠,pgp使用的數(shù)字證書(shū)不是X509
數(shù)字證書(shū)中包含的信息有:申請(qǐng)者的公鑰,證書(shū)有效期茄菊,證書(shū)合法擁有人疯潭,證書(shū)如何被使用赊堪,CA的信息,CA對(duì)申請(qǐng)者信息的數(shù)字簽名
SSL握手機(jī)制竖哩。
SSL的握手過(guò)程(SSL hardshake)
HTTPS通過(guò)SSL協(xié)議實(shí)現(xiàn)安全加密
SSL單向握手過(guò)程雹食,服務(wù)端不需要客戶端提供數(shù)字證書(shū)。
第一步:Visitor生成一個(gè)隨機(jī)數(shù)期丰,客戶端支持的加密方法,發(fā)送給服務(wù)端
第二步:Server確認(rèn)雙方使用的加密方法吃挑,以及一個(gè)服務(wù)端生成的隨機(jī)數(shù)(Server random)钝荡、以及把服務(wù)端的數(shù)字證書(shū)發(fā)送個(gè)客戶端
第三步:客戶端驗(yàn)證數(shù)字證書(shū),用CA公鑰解密證書(shū)舶衬,查看證書(shū)有效期埠通,和是否被吊銷,驗(yàn)證通過(guò)后逛犹,生成一個(gè)新的隨機(jī)數(shù)端辱,(稱為預(yù)備主密鑰Pre-master secret),并使用Server的公鑰加密預(yù)備主密鑰發(fā)給Server虽画。公鑰自然在證書(shū)里提取舞蔽。
第四步:Server使用自己的私鑰,解密Visitor發(fā)來(lái)的預(yù)備主密鑰码撰。
第五步:Visitor和Server雙方都具有了(客戶端隨機(jī)數(shù)+服務(wù)端隨機(jī)數(shù)+預(yù)備主密鑰)渗柿,它們兩者都根據(jù)約定的加密方法,使用這三個(gè)隨機(jī)數(shù)生成對(duì)稱密鑰——主密鑰(也稱為對(duì)話密鑰session key)脖岛,用來(lái)加密接下來(lái)的整個(gè)對(duì)話過(guò)程朵栖。
之后所有的數(shù)據(jù)在這次會(huì)話中只需要使用“對(duì)話密鑰”即可,不需要多余的機(jī)制
注意:
1.在SSL握手機(jī)制中柴梆,需要三個(gè)隨機(jī)數(shù)(客戶端隨機(jī)數(shù)+服務(wù)端隨機(jī)數(shù)+預(yù)備主密鑰)陨溅;
2.至始至終客戶端和服務(wù)端只有一次非對(duì)稱加密動(dòng)作——客戶端使用證書(shū)中獲得的服務(wù)端公鑰加密預(yù)備主密鑰。
3.上述SSL握手機(jī)制的前提單向驗(yàn)證绍在,無(wú)需驗(yàn)證客戶端门扇,如果需要驗(yàn)證客戶端則可能需要客戶端的證書(shū)或客戶端提供簽名等。
4.如果像網(wǎng)銀那種情況揣苏,銀行需要驗(yàn)證客戶端的數(shù)字證書(shū)悯嗓,通常那種證書(shū)都是銀行為用戶簽署的,一般保存在網(wǎng)銀盾上卸察,通過(guò)網(wǎng)銀盾的密碼來(lái)保護(hù)脯厨,證書(shū)里保存著客戶端的公鑰。