對(duì)稱加密與非對(duì)稱加密按照密鑰的使用形式,加密算法可以分為對(duì)稱加密和非對(duì)稱加密(又叫公鑰加密)。對(duì)稱加密在加密和解密的過程中,使用相同的秘鑰;而非對(duì)稱加密在加密過程中使用公鑰進(jìn)行加密,解密使用私鑰。 對(duì)稱加密的加密和解密需要使用相同的密鑰,所以需要解決密鑰配送問題。 非對(duì)稱加密的處理速度遠(yuǎn)低于對(duì)稱密鑰
對(duì)稱加密下的密鑰配送問題發(fā)送者A想要發(fā)一封郵件給接受者B,但是不想被人看到其中的內(nèi)容。A決定使用對(duì)稱加密的方法。但是我們知道,對(duì)稱在對(duì)稱加密中,加密與解密需要使用同樣的密鑰。B想要看到接收到的內(nèi)容必須要有A的密鑰。也就是說,A需要把密鑰安全地送到B的手上。 那如果把加密后的密文和密鑰一同通過郵件發(fā)送給B行不行呢?答案是不行的。因?yàn)橐坏┍患用艿拿芪暮兔荑€同時(shí)落在竊聽者C的手中,C就可以用密鑰對(duì)密文進(jìn)行解密。 混合密碼系統(tǒng)混合密碼系統(tǒng),是將對(duì)稱密碼和非對(duì)稱密碼的優(yōu)勢(shì)相結(jié)合的方法?;旌厦艽a系統(tǒng)解決了對(duì)稱密碼的密鑰配送問題,又解決了非對(duì)稱密碼的加密與解密速度問題。 混合密碼系統(tǒng)中會(huì)先用快速的對(duì)稱密碼,對(duì)消息進(jìn)行加密,這樣消息就變?yōu)槊芪?,保證消息機(jī)密性。然后,用非對(duì)稱加密對(duì)對(duì)稱密碼的密鑰進(jìn)行加密,因?yàn)槊荑€一般比要加密的信息短,加密和解密的速度就得到保證了。這樣,密碼配送問題就得到了解決。 單向散列函數(shù)單向散列函數(shù)也稱為消息摘要函數(shù)(message digest function),哈希函數(shù),適用于檢查消息完整性的加密技術(shù)。 單向散列函數(shù)有一個(gè)輸入和一個(gè)輸出,其中輸入稱為信息,輸出稱為散列值。單向散列函數(shù)可以根據(jù)消息的內(nèi)容計(jì)算出散列值,篡改后的信息的散列值計(jì)算結(jié)果會(huì)不一樣,所以散列值可以被用來檢查消息的完整性 。
無法解決的問題使用單向散列函數(shù)可以實(shí)現(xiàn)完整性的檢查,但有些情況下即便能檢查完整性也是沒有意義的。 例如,主動(dòng)攻擊者D偽裝成發(fā)送者A發(fā)送消息和散列值給B。這時(shí),B能夠通過單向散列函數(shù)檢查消息的完整性,但這只是對(duì)D發(fā)送的信息進(jìn)行完整性檢查,而無法識(shí)別出D的偽裝。 辨別偽裝需要用到認(rèn)證,用于認(rèn)證的技術(shù)包括消息認(rèn)證碼和數(shù)字簽名,消息認(rèn)證碼可以保證信息沒有被篡改,而數(shù)字簽名還能向第三方做出保證。 消息認(rèn)證碼消息認(rèn)證碼(MAC)是一種與密鑰相關(guān)聯(lián)的單向散列函數(shù)。 使用步驟(1)發(fā)送者A與接收者B事先共享密鑰。 (2)發(fā)送者A根據(jù)請(qǐng)求信息,計(jì)算MAC值(使用共享密鑰)。 (3)發(fā)送者A將請(qǐng)求信息和MAC值發(fā)送給接收者B。 (4)接收者B根據(jù)接收到的信息,計(jì)算MAC值。 (5)接收者B將自己計(jì)算的MAC值與A發(fā)送過來的MAC值進(jìn)行對(duì)比。 (6)如果MAC值一致,則接收者B可以斷定請(qǐng)求來自發(fā)送者A。 依然存在密鑰配送問題在消息認(rèn)證碼中,發(fā)送者A與接受者B共享密鑰,這個(gè)密鑰不可以被攻擊者獲取,如果攻擊者獲取到這個(gè)密鑰。則攻擊者也可以計(jì)算出MAC值,從而可以進(jìn)行偽裝攻擊。 因此,要解決密鑰配送問題,我們需要向?qū)ΨQ密碼一樣,使用一些共享密鑰的方法,如公鑰密碼,密鑰分配中心,或其他安全的方式發(fā)送密鑰。 MAC與對(duì)稱密碼認(rèn)證MAC技術(shù)中,發(fā)送者與接受者需要使用相同的密鑰進(jìn)行加密;對(duì)稱加密中,密文只有使用和加密時(shí)相同的密鑰才能正確解密,否則將會(huì)產(chǎn)生看上去雜亂無章的“明文”。那么,是否可以用對(duì)稱密碼進(jìn)行認(rèn)證呢? 答案是不可以。假設(shè)我們要發(fā)送的明文就是一串隨機(jī)的比特序列,我們將明文用對(duì)稱密碼加密之后發(fā)送出去,當(dāng)接受者收到密文并進(jìn)行解密時(shí),看上去都是一串隨機(jī)的比特序列,那我們?cè)趺磁袛嘈畔⑹欠駚碜怨粽吣兀?/span> 更準(zhǔn)確地說,我們無法根據(jù)“是否雜亂無章”而判斷認(rèn)證是否通過,這不是一個(gè)可行的標(biāo)準(zhǔn)。而使用MAC則可以通過對(duì)比MAC碼,得到一個(gè)明確的結(jié)果。 MAC無法解決的問題對(duì)第三方的證明接收者B收到了來自A的信息后,想要想第三方驗(yàn)證者D證明這條信息確實(shí)是A發(fā)送的。但是MAC無法進(jìn)行這樣的證明。 對(duì)于驗(yàn)證著D來說,知道密鑰的人有A和B,只要知道密鑰,就可以計(jì)算出正確的MAC值。因此,D不可以斷定信息是由A發(fā)送的,因?yàn)橐灿锌赡苁荁自己偽造信息發(fā)送給自己的。 無法防止否認(rèn)接受者B收到了A發(fā)送過來的信息,里面包含有B與A共享的密鑰計(jì)算出來的,因此B斷定這條信息來自A。 但是,A可以聲稱自己并沒有向B發(fā)送過這條信息。因?yàn)锳與B都擁有密鑰,A可以聲稱該信息的MAC值,是由B計(jì)算出來的,而不是自己。 數(shù)字簽名數(shù)字簽名,就是只有信息的發(fā)送者才能產(chǎn)生的別人無法偽造的一段數(shù)字串,這段數(shù)字串同時(shí)也是對(duì)信息的發(fā)送者發(fā)送信息真實(shí)性的一個(gè)有效證明。 數(shù)字簽名是非對(duì)稱密鑰加密技術(shù)與數(shù)字摘要技術(shù)的應(yīng)用。 簽名的生成與驗(yàn)證在數(shù)字簽名技術(shù)中,涉及到兩種行為:生成消息簽名和驗(yàn)證數(shù)字簽名。 生成消息簽名這一行為是由消息的發(fā)送者A來完成的,也稱為“對(duì)消息簽名”。生成簽名就是根據(jù)消息內(nèi)容計(jì)算數(shù)字簽名的值,這個(gè)行為意味著“我認(rèn)可改消息的內(nèi)容”。 驗(yàn)證數(shù)字簽名這一行為一般由消息的接受者B來完成,也可以由消息的驗(yàn)證者來完成。驗(yàn)證的結(jié)果可以是成功或者失敗,成功以為著消息屬于A,失敗則意味著消息不屬于A 。 數(shù)字簽名對(duì)簽名密鑰和驗(yàn)證密鑰進(jìn)行了區(qū)分,使用驗(yàn)證密鑰是無法生成簽名的。簽名密鑰只能有簽名者持有,而驗(yàn)證密鑰則是任何需要驗(yàn)證簽名的人都可以持有。
數(shù)字簽名的流程發(fā)送者A需要對(duì)消息簽名,而接受者B要對(duì)簽名進(jìn)行驗(yàn)證。那么,A需要事先生成一個(gè)包括公鑰和私鑰的密鑰對(duì),而需要驗(yàn)證簽名的B則需要得到A的公鑰。 簽名和驗(yàn)證的過程如下: 1. A用自己的私鑰對(duì)信息進(jìn)行加密。用私鑰加密得到的密文就是A對(duì)這條信息的簽名,由于只有A才持有自己的私鑰,因此除了A以外,其他人是無法生成相同的簽名的。 2. A將信息和簽名發(fā)送給B 3. B用A的公鑰對(duì)收到的簽名進(jìn)行解密。如果收到的簽名確實(shí)是用Alice的私鑰進(jìn)行加密得到的密文,那么用A的公鑰應(yīng)該能夠正確解密,反之,則不能正確解密。 4. B將解密得到的結(jié)余A發(fā)送的信息進(jìn)行對(duì)比,兩者一直,簽名驗(yàn)證成功。兩者不一致,則簽名驗(yàn)證失敗。
與MAC相比下的優(yōu)勢(shì)可以防止否認(rèn) 。還記得為什么MAC無法防止否認(rèn)嗎?正是因?yàn)槊荑€由通信的雙方共同持有,發(fā)送者A可以謊稱消息認(rèn)證碼是由接受者B生成的。而在數(shù)字簽名技術(shù)中,加密的私鑰只由一方持有,只有持有密鑰的一方才可以生成簽名。 第三方的證明 。同理,因?yàn)樗借€僅由單方面持有,簽名僅能由私鑰的持有者生成,所以可以實(shí)現(xiàn)第三方的證明。 證書什么是證書公鑰證書(Public-Key Certificate,PKC)由認(rèn)證機(jī)構(gòu)(CA)生成,用于確認(rèn)公鑰確實(shí)屬于此人。 認(rèn)證機(jī)構(gòu),就是能確認(rèn)“公鑰確實(shí)屬于此人”并能夠生成數(shù)字簽名的個(gè)人或者組織。 證書的使用場(chǎng)景下面通過代表性的應(yīng)用場(chǎng)景來理解證書的作用。 我們用文字進(jìn)一步說明這些步驟都做了些什么。 1. B生成密鑰對(duì) 2. B在認(rèn)證機(jī)構(gòu)D注冊(cè)自己的公鑰 3. 認(rèn)證機(jī)構(gòu)D用自己的私鑰對(duì)B的公鑰施加簽名并生成證書 4. A得到帶認(rèn)證機(jī)構(gòu)D的數(shù)字簽名的B的公鑰 5. A使用認(rèn)證機(jī)構(gòu)D的公鑰驗(yàn)證數(shù)字簽名,確認(rèn)B的公鑰的合法性 6. A用B的公鑰加密信息并發(fā)送給B 7. B用自己的私鑰解密密文得到A的信息 各種密碼技術(shù)對(duì)比對(duì)稱密碼與非對(duì)稱密碼
消息認(rèn)證碼與數(shù)字簽名
參考《圖解密碼學(xué)》
|
|