正文
本文講解對(duì)稱(chēng)加密、非對(duì)稱(chēng)加密、消息摘要、MAC、數(shù)字簽名、公鑰證書(shū)的用途、不足和解決的問(wèn)題。
0.概述
當(dāng)發(fā)送方A向接收方B發(fā)送數(shù)據(jù)時(shí),需要考慮的問(wèn)題有:
1.數(shù)據(jù)的安全性。
2.數(shù)據(jù)的完整性,即數(shù)據(jù)不被篡改。
3.數(shù)據(jù)的真實(shí)性,即數(shù)據(jù)確實(shí)來(lái)自于發(fā)送方,傳輸過(guò)程中沒(méi)有被替換。
4.數(shù)據(jù)的不可否認(rèn)性,即驗(yàn)證發(fā)送方確實(shí)發(fā)送了數(shù)據(jù)。
本文只是對(duì)整套體系做一個(gè)整體的介紹,后續(xù)文章詳細(xì)講解各個(gè)步驟和算法。
本文的整體結(jié)構(gòu)見(jiàn)下圖。
基本概念:
密碼:按特定法則編成,用以對(duì)通信雙方的信息進(jìn)行明密變換的符號(hào)。
密鑰:在現(xiàn)代密碼學(xué)中,秘鑰指的是一組特定的秘密數(shù)據(jù),在加密時(shí),它控制密碼算法按照指定的方式將明文變換為相應(yīng)的密文,并將一組信源標(biāo)識(shí)信息變換不可偽造的簽名;在解密時(shí),它控制密碼算法按照指定的方式將密文變換為相應(yīng)的明文,并將簽名信息變換成不可否認(rèn)的信源證據(jù)。
1.數(shù)據(jù)傳輸?shù)陌踩?/span>
保證數(shù)據(jù)傳輸安全的方法就是對(duì)數(shù)據(jù)進(jìn)行加密了,常用的加密算法有對(duì)稱(chēng)加密和非對(duì)稱(chēng)加密。
1.1 對(duì)稱(chēng)加密
又稱(chēng)共享加密,加解密使用相同的密鑰。
常見(jiàn)算法:
DES 3DES AES RC5 RC6
例:
1).為了安全,A將數(shù)據(jù)加密發(fā)送給B。
2).密文即使在傳送過(guò)程中被截獲,因?yàn)椴恢烂荑€也無(wú)法解密。
3).B接收到密文之后,需要使用加密相同的密鑰來(lái)解密。
4).需要A將密鑰傳給B,但保證密鑰傳輸過(guò)程中的安全又成了問(wèn)題。
優(yōu)點(diǎn):
計(jì)算速度快。
缺點(diǎn):
為了傳送數(shù)據(jù)的安全,將數(shù)據(jù)加密后進(jìn)行傳輸,但是對(duì)稱(chēng)加密需要發(fā)送方將密鑰安全地傳給接收方以便接收方解密,因此密鑰如何安全傳送又成了一個(gè)問(wèn)題。
問(wèn)題:
如何保證密鑰的安全性?
1.2 非對(duì)稱(chēng)加密
也稱(chēng)公鑰加密,這套密鑰算法包含配套的密鑰對(duì),分為加密密鑰和解密密鑰。加密密鑰時(shí)公開(kāi)的,又稱(chēng)為公鑰;解密密鑰時(shí)私有的,又稱(chēng)為私鑰。數(shù)據(jù)發(fā)送者使用公鑰加密數(shù)據(jù),數(shù)據(jù)接收者使用私鑰進(jìn)行數(shù)據(jù)解密。
常見(jiàn)算法:
RSA
例:
1).B生成密鑰對(duì),將公鑰傳給A,私鑰自己保留。公鑰即使被其他人獲得也沒(méi)有關(guān)系。
2).A用B傳過(guò)來(lái)的密鑰將要發(fā)送的明文數(shù)據(jù)加密,然后將密文發(fā)送給A。其他人即使獲得密文也無(wú)法解密,因?yàn)闆](méi)有配對(duì)的用來(lái)解密的私鑰。
3).B接收到A傳送過(guò)來(lái)的密文,用自己保留的私鑰對(duì)密文解密,得到明文。
優(yōu)點(diǎn):
解決了密鑰的安全性問(wèn)題。
缺點(diǎn):
一是計(jì)算速度慢;
二是無(wú)法保證公鑰的合法性,因?yàn)榻邮盏降墓€不能保證是B發(fā)送的,比如,攻擊者截獲B的消息,將公鑰替換。
這里先留下一個(gè)問(wèn)題,后面敘述解決辦法:如何保證公鑰是合法的?
2.保證數(shù)據(jù)完整性
消息摘要
消息摘要函數(shù)時(shí)一種用于判斷數(shù)據(jù)完整性的算法,也稱(chēng)為散列函數(shù)或哈希函數(shù),函數(shù)的返回值就散列值,散列值又稱(chēng)為消息摘要或者指紋。
這種算法是不可逆的,即無(wú)法通過(guò)消息摘要反向推導(dǎo)出消息,因此又稱(chēng)為單向散列函數(shù)。
常見(jiàn)算法:
MD5 SHA
例:
當(dāng)我們使用某一軟件時(shí),下載完成后需要確認(rèn)是否是官方提供的完整版,是否被人篡改過(guò)。通常軟件提供方會(huì)提供軟件的散列值,用戶(hù)下載軟件之后,在本地使用相同的散列算法計(jì)算散列值,并與官方提供的散列值向?qū)Ρ?。如果相同,說(shuō)明軟件完整,未被修改過(guò)。
優(yōu)點(diǎn):
可以保證數(shù)據(jù)的完整性。
缺點(diǎn):
無(wú)法保證數(shù)據(jù)的真實(shí)性,即不能確定數(shù)據(jù)和散列值是來(lái)自發(fā)送方的,因?yàn)楣粽咄耆梢詫?shù)據(jù)和散列值一起替換。
問(wèn)題:
如何驗(yàn)證發(fā)送的數(shù)據(jù)確實(shí)來(lái)自于發(fā)送方?
3.保證數(shù)據(jù)的真實(shí)性
要保證數(shù)據(jù)來(lái)自發(fā)送方,即確認(rèn)消息來(lái)自正確的發(fā)送者,稱(chēng)為消息認(rèn)證。
3.1 消息認(rèn)證碼
消息認(rèn)證碼(Message Authentication Code,簡(jiǎn)稱(chēng)MAC)是一種可以確認(rèn)消息完整性并進(jìn)行認(rèn)證的技術(shù)。消息認(rèn)證碼可以簡(jiǎn)單理解為一種與密鑰相關(guān)的單向散列函數(shù)。
例:
1).A把消息發(fā)送給B前,先把共享密鑰發(fā)送給B。
2).A把要發(fā)送的消息使用共享密鑰計(jì)算出MAC值,然后將消息和MAC發(fā)送給B。
3).B接收到消息和MAC值后,使用共享密鑰計(jì)算出MAC值,與接收到的MAC值對(duì)比。
4).如果MAC值相同,說(shuō)明接收到的消息是完整的,而且是A發(fā)送的。
這里還是存在對(duì)稱(chēng)加密的密鑰配送問(wèn)題,可以使用公鑰加密方式解決。
優(yōu)點(diǎn):
可以保證數(shù)據(jù)的完整性和真實(shí)性。
缺點(diǎn):
接收方雖然可以確定消息的完整性和真實(shí)性,解決篡改和偽造消息的問(wèn)題,但不能防止A否認(rèn)發(fā)送過(guò)消息。
例:
加入A給B發(fā)送了消息,B接收到之后,A否認(rèn)自己發(fā)送過(guò)消息給B,并抵賴(lài)說(shuō),“雖然我和B都能計(jì)算處正確的MAC值,但是可能是B的密鑰被攻擊者盜取了,攻擊者給B發(fā)的消息。”
問(wèn)題:
如何讓發(fā)送方無(wú)法否認(rèn)發(fā)送過(guò)數(shù)據(jù)?
3.2 數(shù)字簽名
數(shù)字簽名(Digital Signature)可以解決發(fā)送方否認(rèn)發(fā)送過(guò)消息的問(wèn)題。
數(shù)字簽名的重點(diǎn)在于發(fā)送方和接收方使用不同的密鑰來(lái)進(jìn)行驗(yàn)證,并且保證發(fā)送方密鑰的唯一性,將公鑰算法反過(guò)來(lái)使用可以達(dá)到此目的:A發(fā)送消息前,使用私鑰對(duì)消息進(jìn)行簽名,B接收到消息后,使用配對(duì)的公鑰對(duì)簽名進(jìn)行驗(yàn)證;如果驗(yàn)證通過(guò),說(shuō)明消息就是A發(fā)送的,因?yàn)橹挥蠥采用配對(duì)的私鑰;第三方機(jī)構(gòu)也是依據(jù)此來(lái)進(jìn)行裁決,保證公正性。
例:
1).A把消息用哈希函數(shù)處理生成消息摘要,并報(bào)摘要用私鑰進(jìn)行加密生成簽名,把簽名和消息一起發(fā)送給B。
2). 數(shù)據(jù)經(jīng)過(guò)網(wǎng)絡(luò)傳送給B,當(dāng)然,為了安全,可以用上述的加密方法對(duì)數(shù)據(jù)進(jìn)行加密。
3). B接收到數(shù)據(jù)后,提取出消息和簽名進(jìn)行驗(yàn)簽。采用相同的哈希函數(shù)生成消息摘要,將其與接收的簽名用配對(duì)的公鑰解密的結(jié)果對(duì)比,如果相同,說(shuō)明簽名驗(yàn)證成功。消息是A發(fā)送的,如果驗(yàn)證失敗,說(shuō)明消息不是A發(fā)送的。
問(wèn)題:
依然是,如何確保公鑰的合法性?
4.公鑰證書(shū)
我們看到,上面的公鑰加密,數(shù)字簽名的問(wèn)題都在于如何保證公鑰的合法性。
解決辦法是將公鑰交給一個(gè)第三方權(quán)威機(jī)構(gòu)——認(rèn)證機(jī)構(gòu)(Certification Authority)CA來(lái)管理。接收方將自己的公鑰注冊(cè)到CA,由CA提供數(shù)字簽名生成公鑰證書(shū)(Public-Key Certificate)PKC,簡(jiǎn)稱(chēng)證書(shū)。證書(shū)中有CA的簽名,接收方可以通過(guò)驗(yàn)簽來(lái)驗(yàn)證公鑰的合法性。
例:
1).接收方B生成密鑰對(duì),私鑰自己保存,將公鑰注冊(cè)到CA。
2).CA通過(guò)一系列嚴(yán)格的檢查確認(rèn)公鑰是B本人的。
3).CA生成自己的密鑰對(duì),并用私鑰對(duì)B的公鑰進(jìn)行數(shù)字簽名,生成數(shù)字證書(shū)。證書(shū)中包含B的公鑰和CA的簽名。這里進(jìn)行簽名并不是要保證B的公鑰的安全性,而是要確定公鑰確實(shí)屬于B。
4).發(fā)送方A從CA獲取B的證書(shū)。
5).A使用CA的公鑰對(duì)從CA獲取的證書(shū)進(jìn)行驗(yàn)簽,如果成功就可以確保證書(shū)中的公鑰確實(shí)來(lái)自B。
6).A使用證書(shū)中B的公鑰對(duì)消息進(jìn)行加密,然后發(fā)送給B。
7).B接收到密文后,用自己的配對(duì)的私鑰進(jìn)行解密,獲得消息明文。
5.算法詳解索引
1.DES算法詳解(已完成)
2.RSA算法詳解
3.SHA算法詳解
4.AES算法詳解
5.待定
標(biāo)簽: 加密, 解密, 對(duì)稱(chēng)加密, 非對(duì)稱(chēng)加密, 消息摘要, 消息認(rèn)證, MAC, 數(shù)字簽名, 公鑰證書(shū)