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