安全算法(三)消息驗(yàn)證碼、數(shù)字簽名和數(shù)字證書
主要介紹了消息驗(yàn)證碼、數(shù)字簽名和數(shù)字證書三種加密方式。
消息認(rèn)證碼
消息認(rèn)證碼可以實(shí)現(xiàn)“認(rèn)證”和“檢測篡改”這兩個(gè)功能。密文的內(nèi)容在傳輸過程中可能會(huì)被篡改,這會(huì)導(dǎo)致解密后的內(nèi)容發(fā)生變化,從而產(chǎn)生誤會(huì)。消息認(rèn)證碼就是可以預(yù)防這種情況發(fā)生的機(jī)制。
假設(shè) A 在 B 處購買商品,需要將商品編號 abc 告訴 B。此處,假設(shè) A 使用共享密鑰加密對消息進(jìn)行加密。A通過安全的方法將密鑰發(fā)送給了 B。
A 使用雙方共有的密鑰對消息進(jìn)行加密。A把密文發(fā)送給B,B 收到后對密文進(jìn)行解密,最終得到了原本的商品編號 abc。
**可能出現(xiàn)的問題:**假設(shè) A 發(fā)送給 B 的密文在通信過程中被 X 惡意篡改了,而 B 收到密文后沒有意識(shí)到這個(gè)問題。
B 對被篡改的密文進(jìn)行解密,得到消息 xyz。B 以為 A 訂購的是編號為 xyz 的商品,于是將錯(cuò)誤的商品發(fā)送給了 A。
如果使用消息認(rèn)證碼,就能檢測出消息已被篡改。
A 生成了一個(gè)用于制作消息認(rèn)證碼的密鑰,然后使用安全的方法將密鑰發(fā)送給了 B。
接下來,A 使用密文和密鑰生成一個(gè)值。此處生成的是 7f05。這個(gè)由密鑰和密文生成的值就是消息認(rèn)證碼,以下簡稱為 MAC(Message Authentication Code)。
A 將 MAC(7f05)和密文發(fā)送給 B。和 A 一樣,B 也需要使用密文和密鑰來生成 MAC。經(jīng)過對比,B 可以確認(rèn)自己計(jì)算出來的 7f05 和 A 發(fā)來的 7f05 一致。
*我們可以把 MAC 想象成是由密鑰和密文組成的字符串的“哈希值”。
計(jì)算 MAC 的算法有 HMAC、OMAC、CMAC等。目前,HMAC 的應(yīng)用最為廣泛。
①Hash-based MAC 的縮寫。 ②One-key MAC 的縮寫。 ③Cipher-based MAC 的縮寫。
X 在通信過程中對密文進(jìn)行了篡改是怎樣一種情況呢?假設(shè)在 A 向 B 發(fā)送密文和 MAC 時(shí),X 對密文進(jìn)行了篡改。B 使用該密文計(jì)算 MAC,得到的值是 b85c,發(fā)現(xiàn)和收到的 MAC 不一致。由此,B 意識(shí)到密文或者 MAC,甚至兩者都可能遭到了篡改。于是 B 廢棄了收到的密文和 MAC,向 A 提出再次發(fā)送的請求。
缺點(diǎn):在使用消息認(rèn)證碼的過程中,AB 雙方都可以對消息進(jìn)行加密并且算出 MAC。也就是說,我們無法證明原本的消息是 A 生成的還是 B 生成的。
因此,假如 A 是壞人,他就可以在自己發(fā)出消息后聲稱“這條消息是 B 捏造的”, 而否認(rèn)自己的行為。如果 B 是壞人,他也可以自己準(zhǔn)備一條消息,然后聲稱“這是 A 發(fā)給我的消息”。
使用 MAC 時(shí),生成的一方和檢測的一方持有同樣的密鑰,所以不能確定 MAC 由哪方生成。這個(gè)問題可以用以下將會(huì)講到的“數(shù)字簽名”來解決。
數(shù)字簽名
數(shù)字簽名不僅可以實(shí)現(xiàn)消息認(rèn)證碼的認(rèn)證和檢測篡改功能,還可以預(yù)防事后否認(rèn)問題的發(fā)生。
由于在消息認(rèn)證碼中使用的是共享密鑰加密,所以持有密鑰的收信人也有可能是消息的發(fā) 送者,這樣是無法預(yù)防事后否認(rèn)行為的。而數(shù)字簽名是只有發(fā)信人才能生成的,因此使用它就 可以確定誰是消息的發(fā)送者了。
假設(shè)A要向B發(fā)送消息。在發(fā)送前 A 給消息加上數(shù)字簽名。數(shù)字簽名只能由 A 生成。只要發(fā)送的消息上有 A 的數(shù)字簽名,就能確定消息的發(fā)送者就是 A。B 可以驗(yàn)證數(shù)字簽名的正確性,但無法生成數(shù)字簽名。
數(shù)字簽名的生成使用的是公開密鑰加密:安全算法(二):共享密鑰加密、公開密鑰加密、混合加密和迪菲-赫爾曼密鑰交換-CSDN博客
公開密鑰加密中,加密使用的是公開密鑰 P ,解密使用的是私有密鑰 S 。任何人都可以 使用公開密鑰對數(shù)據(jù)進(jìn)行 加密,但只有持有私有密鑰的人才能解密數(shù)據(jù)。然而,數(shù)字簽名卻是恰恰相反的。
首先由A準(zhǔn)備好需要發(fā)送的消息、私有密鑰和公開密鑰。由消息的發(fā)送者來準(zhǔn)備這兩個(gè)密鑰,這一點(diǎn)與公開密鑰加密有所不同。
A 使用私有密鑰加密消息。加密后的消息就是數(shù)字簽名。
A 將消息和簽名都發(fā)送給了 B。B 使用公開密鑰對密文(簽名)進(jìn)行解密。B 對解密后的消息進(jìn)行確認(rèn),看它是否和收到的消息一致。流程到此結(jié)束。
公開密鑰加密的加密和解密都比較耗時(shí)。為了節(jié)約運(yùn)算時(shí)間,實(shí)際上不會(huì)對消息直接進(jìn)行加密,而是先求得消息的哈希值,再對哈希值進(jìn)行加密,然后將其作為簽名來使用(請參考下圖)
缺點(diǎn):
雖然數(shù)字簽名可以實(shí)現(xiàn)“認(rèn)證”“ 檢測篡改”“ 預(yù)防事后否認(rèn)”三個(gè)功能,但它也有一個(gè)缺陷。
那就是,雖然使用數(shù)字簽名后 B 會(huì)相信消息的發(fā)送者就是 A,但實(shí)際上也有可能是 X 冒充了 A。
其根本原因在于使用公開密鑰加密無法確定公開密鑰的制作者是誰。收到的公開密鑰上也沒有任何制作者的信息。因此,公開密鑰有可能是由某個(gè)冒充 A 的人生成的。
使用以下將要講到的“數(shù)字證書”就能解決這個(gè)問題。
數(shù)字證書
“公開密鑰加密”和“數(shù)字簽名”無法保證公開密鑰確實(shí)來自信息的發(fā)送者。因此,就算公開密鑰被第三者惡意替換,接收方也不會(huì)注意到。不過,如果使用本節(jié)講解的數(shù)字證書,就能保證公開密鑰的正確性。
A持有公開密鑰PA和私有密鑰SA,現(xiàn)在想要將公開密鑰 PA 發(fā)送給 B。A首先需要向認(rèn)證中心 (Certification Authority, CA)申請發(fā)行證書,證明公開密鑰PA 確實(shí)由自己生成。認(rèn)證中心里保管著他們自己準(zhǔn)備的公開密鑰 PC和私有密鑰 SC 。A將公開密鑰PA 和包含郵箱信息的個(gè)人資料發(fā)送給認(rèn)證中心。
A將公開密鑰PA 和包含郵箱信息的個(gè)人資料發(fā)送給認(rèn)證中心。
認(rèn)證中心對收到的資料進(jìn)行確認(rèn),判斷其是否為 A 本人的資料。確認(rèn)完畢后,認(rèn)證中心使用自己的私有密鑰 SC,根據(jù) A 的資料生成數(shù)字簽名。
認(rèn)證中心將生成的數(shù)字簽名和資料放進(jìn)同一個(gè)文件中。
然后,把這個(gè)文件發(fā)送給 A。這個(gè)文件就是 A 的數(shù)字證書。
A 將作為公開密鑰的數(shù)字證書發(fā)送給了 B。B 收到數(shù)字證書后,確認(rèn)證書里的郵件地址確實(shí)是 A 的地址。接著,B 獲取了認(rèn)證中心的公開密鑰。
B 對證書內(nèi)的簽名進(jìn)行驗(yàn)證,判斷它是否為認(rèn)證中心給出的簽名。證書中的簽名只能用認(rèn)證中心的公開密鑰 PC 進(jìn)行驗(yàn)證。如果驗(yàn)證結(jié)果沒有異常,就能說明這份證書的確由認(rèn)證中心發(fā)行。
確認(rèn)了證書是由認(rèn)證中心發(fā)行的,且郵件地址就是A的之后,B從證書中取出A的公開密鑰PA。這樣,公開密鑰便從 A 傳到了 B。
假設(shè)交付過程中存在X。
X 冒充 A,準(zhǔn)備向 B 發(fā)送公開密鑰 PX。但是,B 沒有必要信任以非證書形式收到的公開密鑰。
假設(shè) X 為了假冒 A,準(zhǔn)備在認(rèn)證中心登記自己的公開密鑰。然而 X 無法使用 A 的郵箱地址,因此無法獲得 A 的證書。
此處疑問:B 得到的公開密鑰 PC 真的來自認(rèn)證中心嗎?
實(shí)際上,認(rèn)證中心的公開密鑰 PC 是以數(shù)字證書的形式交付的,會(huì)有更高級別的認(rèn)證中心對這個(gè)認(rèn)證中心署名。
假設(shè)存在一個(gè)被社會(huì)廣泛認(rèn)可的認(rèn)證中心 A。此時(shí)出現(xiàn)了一個(gè)剛成立的公司 B,雖然 B 想要開展認(rèn)證中心的業(yè)務(wù),但它無法得到社會(huì)的認(rèn)可。
于是 B 向 A 申請發(fā)行數(shù)字證書。當(dāng)然 A 會(huì)對 B 能否開展認(rèn)證中心業(yè)務(wù)進(jìn)行適當(dāng)?shù)臋z測。只要 A 發(fā)行了證書,公司 B 就可以向社會(huì)表示自己獲得了公司 A 的信任。于是, 通過大型組織對小組織的信賴擔(dān)保,樹結(jié)構(gòu)就建立了起來。
最頂端的認(rèn)證中心被稱為“根認(rèn)證中心”(root CA),其自身的正當(dāng)性由自己證明。對根認(rèn)證中心自身進(jìn)行證明的證書為“根證書”。如果根認(rèn)證中心不被信任,整個(gè)組織就無法運(yùn)轉(zhuǎn)。因此根認(rèn)證中心多為大型企業(yè),或者與政府關(guān)聯(lián)且已經(jīng)取得了社會(huì)信賴的組織。文章來源:http://www.zghlxwxcb.cn/news/detail-815331.html
參考資料:我的第一本算法書 (石田保輝 宮崎修一)文章來源地址http://www.zghlxwxcb.cn/news/detail-815331.html
到了這里,關(guān)于安全算法(三)消息驗(yàn)證碼、數(shù)字簽名和數(shù)字證書的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!