對稱加密與非對稱加密
按照密鑰的使用形式垮媒,加密算法可以分為對稱加密和非對稱加密(又叫公鑰加密)倔韭。對稱加密在加密和解密的過程中,使用相同的秘鑰芝此;而非對稱加密在加密過程中使用公鑰進行加密憋肖,解密使用私鑰。
對稱加密的加密和解密需要使用相同的密鑰婚苹,所以需要解決密鑰配送問題岸更。
非對稱加密的處理速度遠低于對稱密鑰
密鑰:一個加密算法中,輸入為明文和密鑰膊升,輸出為密文怎炊。在加密算法中,密鑰通常是像238435639047397537493753453945379346236這樣的 一串非常大的數(shù)字廓译。
對稱加密下的密鑰配送問題
發(fā)送者A想要發(fā)一封郵件給接受者B,但是不想被人看到其中的內(nèi)容评肆。A決定使用對稱加密的方法。但是我們知道非区,對稱在對稱加密中瓜挽,加密與解密需要使用同樣的密鑰。B想要看到接收到的內(nèi)容必須要有A的密鑰院仿。也就是說秸抚,A需要把密鑰安全地送到B的手上。
那如果把加密后的密文和密鑰一同通過郵件發(fā)送給B行不行呢歹垫?答案是不行的剥汤。因為一旦被加密的密文和密鑰同時落在竊聽者C的手中,C就可以用密鑰對密文進行解密排惨。
混合密碼系統(tǒng)
混合密碼系統(tǒng)吭敢,是將對稱密碼和非對稱密碼的優(yōu)勢相結(jié)合的方法∧喊牛混合密碼系統(tǒng)
解決了對稱密碼的密鑰配送問題鹿驼,又解決了非對稱密碼的加密與解密速度問題欲低。
混合密碼系統(tǒng)中會先用快速的對稱密碼,對消息進行加密畜晰,這樣消息就變?yōu)槊芪睦常WC消息機密性。然后凄鼻,用非對稱加密對對稱密碼的密鑰進行加密腊瑟,因為密鑰一般比要加密的信息短,加密和解密的速度就得到保證了块蚌。這樣闰非,密碼配送問題就得到了解決。
單向散列函數(shù)
單向散列函數(shù)也稱為消息摘要函數(shù)(message digest function)峭范,哈希函數(shù)财松,適用于檢查消息完整性的加密技術(shù)。
單向散列函數(shù)有一個輸入和一個輸出纱控,其中輸入稱為信息辆毡,輸出稱為散列值。單向散列函數(shù)可以根據(jù)消息的內(nèi)容計算出散列值其徙,篡改后的信息的散列值計算結(jié)果會不一樣胚迫,所以散列值可以被用來檢查消息的完整性 。
單向散列函數(shù)輸出的散列值也成為消息摘要唾那,或者指紋访锻。散列來源于英文"hash"一值,單向散列函數(shù)的作用闹获,實際上就是將很長的消息剁碎期犬,然后混合成固定長度的散列值。
無法解決的問題
使用單向散列函數(shù)可以實現(xiàn)完整性的檢查避诽,但有些情況下即便能檢查完整性也是沒有意義的龟虎。
例如,主動攻擊者D偽裝成發(fā)送者A發(fā)送消息和散列值給B沙庐。這時鲤妥,B能夠通過單向散列函數(shù)檢查消息的完整性,但這只是對D發(fā)送的信息進行完整性檢查拱雏,而無法識別出D的偽裝棉安。
辨別偽裝需要用到認證,用于認證的技術(shù)包括消息認證碼和數(shù)字簽名铸抑,消息認證碼可以保證信息沒有被篡改贡耽,而數(shù)字簽名還能向第三方做出保證。
消息認證碼
消息認證碼(MAC)是一種與密鑰相關(guān)聯(lián)的單向散列函數(shù)。
使用步驟
(1)發(fā)送者A與接收者B事先共享密鑰蒲赂。
(2)發(fā)送者A根據(jù)請求信息阱冶,計算MAC值(使用共享密鑰)。
(3)發(fā)送者A將請求信息和MAC值發(fā)送給接收者B滥嘴。
(4)接收者B根據(jù)接收到的信息木蹬,計算MAC值。
(5)接收者B將自己計算的MAC值與A發(fā)送過來的MAC值進行對比若皱。
(6)如果MAC值一致届囚,則接收者B可以斷定請求來自發(fā)送者A。
依然存在密鑰配送問題
在消息認證碼中是尖,發(fā)送者A與接受者B共享密鑰,這個密鑰不可以被攻擊者獲取泥耀,如果攻擊者獲取到這個密鑰饺汹。則攻擊者也可以計算出MAC值漫萄,從而可以進行偽裝攻擊套利。
因此,要解決密鑰配送問題间螟,我們需要向?qū)ΨQ密碼一樣夸溶,使用一些共享密鑰的方法逸吵,如公鑰密碼,密鑰分配中心缝裁,或其他安全的方式發(fā)送密鑰扫皱。
MAC與對稱密碼認證
MAC技術(shù)中,發(fā)送者與接受者需要使用相同的密鑰進行加密捷绑;對稱加密中韩脑,密文只有使用和加密時相同的密鑰才能正確解密,否則將會產(chǎn)生看上去雜亂無章的“明文”粹污。那么段多,是否可以用對稱密碼進行認證呢?
答案是不可以壮吩。假設(shè)我們要發(fā)送的明文就是一串隨機的比特序列进苍,我們將明文用對稱密碼加密之后發(fā)送出去,當接受者收到密文并進行解密時鸭叙,看上去都是一串隨機的比特序列觉啊,那我們怎么判斷信息是否來自攻擊者呢?
更準確地說递雀,我們無法根據(jù)“是否雜亂無章”而判斷認證是否通過柄延,這不是一個可行的標準。而使用MAC則可以通過對比MAC碼,得到一個明確的結(jié)果搜吧。
MAC無法解決的問題
對第三方的證明
接收者B收到了來自A的信息后市俊,想要想第三方驗證者D證明這條信息確實是A發(fā)送的。但是MAC無法進行這樣的證明滤奈。
對于驗證著D來說摆昧,知道密鑰的人有A和B,只要知道密鑰蜒程,就可以計算出正確的MAC值绅你。因此,D不可以斷定信息是由A發(fā)送的昭躺,因為也有可能是B自己偽造信息發(fā)送給自己的忌锯。
無法防止否認
接受者B收到了A發(fā)送過來的信息,里面包含有B與A共享的密鑰計算出來的领炫,因此B斷定這條信息來自A偶垮。
但是,A可以聲稱自己并沒有向B發(fā)送過這條信息帝洪。因為A與B都擁有密鑰似舵,A可以聲稱該信息的MAC值,是由B計算出來的葱峡,而不是自己砚哗。
數(shù)字簽名
數(shù)字簽名,就是只有信息的發(fā)送者才能產(chǎn)生的別人無法偽造的一段數(shù)字串砰奕,這段數(shù)字串同時也是對信息的發(fā)送者發(fā)送信息真實性的一個有效證明蛛芥。
數(shù)字簽名是非對稱密鑰加密技術(shù)與數(shù)字摘要技術(shù)的應(yīng)用。
簽名的生成與驗證
在數(shù)字簽名技術(shù)中脆淹,涉及到兩種行為:生成消息簽名和驗證數(shù)字簽名常空。
生成消息簽名這一行為是由消息的發(fā)送者A來完成的,也稱為“對消息簽名”盖溺。生成簽名就是根據(jù)消息內(nèi)容計算數(shù)字簽名的值漓糙,這個行為意味著“我認可改消息的內(nèi)容”。
驗證數(shù)字簽名這一行為一般由消息的接受者B來完成烘嘱,也可以由消息的驗證者來完成昆禽。驗證的結(jié)果可以是成功或者失敗,成功以為著消息屬于A蝇庭,失敗則意味著消息不屬于A 醉鳖。
數(shù)字簽名對簽名密鑰和驗證密鑰進行了區(qū)分,使用驗證密鑰是無法生成簽名的哮内。簽名密鑰只能有簽名者持有盗棵,而驗證密鑰則是任何需要驗證簽名的人都可以持有壮韭。
在公鑰密碼中,密鑰分為加密密鑰和解密密鑰纹因,用加密密鑰無法進行解密喷屋。解密密鑰只能有需要解密的人持有,而加密密鑰則是任何需要加密的人都可以持有瞭恰⊥筒埽可以說,數(shù)字簽名就是將公鑰密碼“反過來用”來實現(xiàn)的惊畏。
數(shù)字簽名的流程
發(fā)送者A需要對消息簽名恶耽,而接受者B要對簽名進行驗證。那么颜启,A需要事先生成一個包括公鑰和私鑰的密鑰對偷俭,而需要驗證簽名的B則需要得到A的公鑰。
簽名和驗證的過程如下:
- A用自己的私鑰對信息進行加密缰盏。用私鑰加密得到的密文就是A對這條信息的簽名社搅,由于只有A才持有自己的私鑰,因此除了A以外乳规,其他人是無法生成相同的簽名的。
- A將信息和簽名發(fā)送給B
- B用A的公鑰對收到的簽名進行解密合呐。如果收到的簽名確實是用Alice的私鑰進行加密得到的密文暮的,那么用A的公鑰應(yīng)該能夠正確解密,反之淌实,則不能正確解密冻辩。
- B將解密得到的結(jié)余A發(fā)送的信息進行對比,兩者一直拆祈,簽名驗證成功恨闪。兩者不一致,則簽名驗證失敗放坏。
除了對消息進行加密得到簽名咙咽,我們還可以對消息的散列值進行加密,得到簽名淤年。這樣無論消息有多長钧敞,我們對消息進行加密和解密都是非常快速的麸粮。
與MAC相比下的優(yōu)勢
可以防止否認 溉苛。還記得為什么MAC無法防止否認嗎?正是因為密鑰由通信的雙方共同持有愚战,發(fā)送者A可以謊稱消息認證碼是由接受者B生成的。而在數(shù)字簽名技術(shù)中,加密的私鑰只由一方持有寂玲,只有持有密鑰的一方才可以生成簽名塔插。
第三方的證明 。同理敢茁,因為私鑰僅由單方面持有佑淀,簽名僅能由私鑰的持有者生成,所以可以實現(xiàn)第三方的證明彰檬。
證書
什么是證書
公鑰證書(Public-Key Certificate,PKC)由認證機構(gòu)(CA)生成伸刃,用于確認公鑰確實屬于此人。
認證機構(gòu)逢倍,就是能確認“公鑰確實屬于此人”并能夠生成數(shù)字簽名的個人或者組織捧颅。
證書的使用場景
下面通過代表性的應(yīng)用場景來理解證書的作用。
我們用文字進一步說明這些步驟都做了些什么较雕。
- B生成密鑰對
- B在認證機構(gòu)D注冊自己的公鑰
- 認證機構(gòu)D用自己的私鑰對B的公鑰施加簽名并生成證書
- A得到帶認證機構(gòu)D的數(shù)字簽名的B的公鑰
- A使用認證機構(gòu)D的公鑰驗證數(shù)字簽名碉哑,確認B的公鑰的合法性
- A用B的公鑰加密信息并發(fā)送給B
- B用自己的私鑰解密密文得到A的信息
各種密碼技術(shù)對比
對稱密碼與非對稱密碼
對稱密碼 | 公鑰密碼 | |
---|---|---|
發(fā)送者 | 用共享密鑰加密 | 用公鑰加密 |
接受者 | 用共享密鑰加密 | 用私鑰解密 |
密鑰配送問題 | 存在 | 不存在 |
機密性 | 可保證 | 可保證 |
消息認證碼與數(shù)字簽名
消息認證碼 | 數(shù)字簽名 | |
---|---|---|
發(fā)送者 | 用共享密鑰計算MAC值 | 用私鑰生成簽名 |
接受者 | 用共享密鑰計算MAC值 | 用公鑰驗證簽名 |
密鑰配送問題 | 存在 | 不存在,但是公鑰需要另外驗證 |
完整性 | 可保證 | 可保證 |
認證 | 可保證(僅限通信雙方) | 可保證(可使用與第三方) |
防止否認 | 不可保證 | 可保證 |
參考
《圖解密碼學(xué)》