做京東網(wǎng)站的摘要百度seo搜索引擎優(yōu)化方案
文章目錄
- Pre
- 機(jī)密性
- 完整性
- 1. 哈希函數(shù)(Hash Function)
- 定義
- 特征
- 常見算法
- 應(yīng)用
- 散列函數(shù)常用場景
- 散列函數(shù)無法解決的問題
- 2. 消息認(rèn)證碼(MAC)
- 概述
- 定義
- 常見算法
- 工作原理
- 如何使用 MAC
- MAC 的問題
- 不可否認(rèn)性
- 數(shù)字簽名(Digital Signature)
- 總結(jié)

Pre
加密與安全_常見的分組密碼 ECB、CBC、CFB、OFB模式介紹
加密與安全_ 解讀非對稱密鑰解決密鑰配送問題的四個(gè)方案
密鑰體系的三個(gè)主要目標(biāo)
機(jī)密性:確保第三者無法通過密文猜測出明文。
完整性:確保第三者無法篡改原文內(nèi)容。
不可否認(rèn)性:確保第三者不能冒充其他人發(fā)送消息。
接下來我們將圍繞以下幾點(diǎn)展開:
- 重述密鑰體系的三個(gè)主要目標(biāo):機(jī)密性、完整性和不可否認(rèn)性。
- 介紹確保機(jī)密性的對稱密碼和非對稱密碼的作用。
- 詳細(xì)講解如何通過技術(shù)手段確保消息的完整性。
- 介紹確保不可否認(rèn)性的技術(shù)方法。
- 總結(jié)加密與消息完整性及不可否認(rèn)性的方法及其應(yīng)用場景。
機(jī)密性
對稱密碼:使用相同的密鑰進(jìn)行加密和解密。主要的實(shí)現(xiàn)方式包括AES、DES等。
- 優(yōu)點(diǎn):加密速度快,適合大數(shù)據(jù)量的加密。
- 缺點(diǎn):密鑰管理困難,需確保密鑰的安全傳遞。
非對稱密碼:使用一對密鑰進(jìn)行加密和解密,公鑰加密,私鑰解密。主要的實(shí)現(xiàn)方式包括RSA、ECC等。
- 優(yōu)點(diǎn):無需安全通道傳遞公鑰,私鑰無需共享。
- 缺點(diǎn):加密速度較慢,不適合大數(shù)據(jù)量的加密。
對稱密碼和非對稱密碼解決的是機(jī)密性,也就是確保 Eve 即便截獲到密文,也無法猜測出 Alice 和 Bob 傳遞的是啥內(nèi)容。
完整性
有的時(shí)候,Eve 并非需要破解消息。 比如 Alice 辛辛苦苦寫了一個(gè)程序,Eve 晚上偷偷在程序后面追加了一些代碼。 第二天 Alice 將被替換的程序發(fā)給了 Bob。 雖然 Eve 沒有截獲任何密鑰,但事實(shí)上也破壞了 Alice 和 Bob 之間的信任關(guān)系。
所以密鑰體系仍然需要解決完整性,即第三者無法篡改原文內(nèi)容.
為了確保消息的完整性,即防止消息在傳輸過程中被篡改,我們可以使用以下技術(shù)手段:
1. 哈希函數(shù)(Hash Function)
定義
哈希函數(shù)將任意長度的數(shù)據(jù)映射為固定長度的散列值(哈希值)。 散列函數(shù)是一個(gè)單向計(jì)算函數(shù),只有一個(gè)輸入和對應(yīng)的輸出。f(x)=y . 其中x稱為消息, 而y則稱為散列值。 f(x)=y可以跟進(jìn)消息內(nèi)容計(jì)算出對應(yīng)的散列值,而我們就可以通過散列值來檢查信息的完整性
特征
一個(gè)合格工業(yè)級散列函數(shù),必須具備以下特征:
-
固定長度的散列值
無論x是多長的消息,單向散列函數(shù)必須能夠生成固定長度的y(散列值)。比如SHA-256它所計(jì)算出來的散列值永遠(yuǎn)是 256 比特
-
計(jì)算速度非???/p>
當(dāng)然快是相對的,盡管隨著x的變大,計(jì)算時(shí)間勢必會加長。但如果不能在現(xiàn)實(shí)的時(shí)間內(nèi)計(jì)算出來,那么就喪失實(shí)際應(yīng)用的價(jià)值了
-
散列值的唯一性
散列值的唯一性稱之為抗碰撞性。也就是只要x不同那么計(jì)算出來的y一定不能相同??古鲎残苑譃閮深? 強(qiáng)抗碰撞性和弱抗碰撞性
弱抗碰撞性指的是x確定,那么y也就確定。 此時(shí)找到一個(gè)散列值等于y的x是非常困難的.
和弱抗碰撞性對應(yīng)的是強(qiáng)抗碰撞性。強(qiáng)抗碰撞性指的是在茫茫數(shù)據(jù)集中,指定任意一個(gè)y,找到 x 和 x’ 是非常困難的
一個(gè)合格的散列函數(shù),必須同時(shí)具備強(qiáng)抗碰撞性和弱抗碰撞性。 -
單向性: 根據(jù)x可以計(jì)算出y,但無法根據(jù)y反推出x。
哈希函數(shù)具有不可逆性和抗碰撞性,即難以通過哈希值反推出原始數(shù)據(jù),也難以找到兩個(gè)不同的輸入具有相同的哈希值。
在一些場合中,單向散列函數(shù)也稱之為"消息摘要函數(shù)"、“哈希函數(shù)"和"雜湊函數(shù)”. 計(jì)算出的散列值也稱之為"消息摘要"或者"指紋"
常見算法
- MD4/5 : MD 是消息摘要(Message Digest)的縮寫。 常用的是 MD5,目前 MD5 已經(jīng)被證實(shí)強(qiáng)抗碰撞性是不安全的,即根據(jù) md5 的算法,現(xiàn)在已經(jīng)可以產(chǎn)生具有相同y的兩個(gè)不同x了。所以在安全性高的場合中,不建議使用 md5
- SHA-1/256/384/512: 這是一個(gè)系列。后面的數(shù)字表示y的長度(SHA-1 除外)。 SHA-1 已經(jīng)被證實(shí)強(qiáng)抗碰撞性是不安全的,而 SHA-256/384/512 仍未被攻破,所以后面這三個(gè)仍可以使用。后面這三類統(tǒng)稱SHA-2
- SHA-3: 算法和 SHA-2 已經(jīng)完全不一樣了。 SHA-3 使用的是Keccak算法。Keccak算法理論上可以生成任意長度的散列值,目前在 SHA-3 規(guī)范中規(guī)定了SHA3-224\256\384\512這四種版本。Keccak使用的是一種稱之為海綿結(jié)構(gòu)的分組算法,大意是將x進(jìn)行分組,然后每個(gè)分組計(jì)算生成y’,再將y’作為輸入和下一個(gè)明文分組一起計(jì)算
- RIPEMD-160: 這個(gè)算法系列有兩個(gè)版本: RIPEMD 和 RIPEMD-160。 其中 RIPEMD 已經(jīng)被證實(shí)強(qiáng)抗碰撞性是不安全的。但 RIPEMD-160 仍然是安全的
應(yīng)用
- Alice發(fā)送消息前,計(jì)算消息的哈希值,并將消息和哈希值一起發(fā)送給Bob。
- Bob收到消息后,計(jì)算消息的哈希值,并與Alice發(fā)送的哈希值比較,確保消息未被篡改。
散列函數(shù)常用場景
- 口令加密
- 消息認(rèn)證碼
- 數(shù)字簽名
- 偽隨機(jī)數(shù)生成器
- 一次性口令
散列函數(shù)無法解決的問題
散列函數(shù)只能確保信息內(nèi)容不被篡改,而無法保證消息一定是從合法渠道發(fā)來的。 例如 Eve 可以偽裝成 Alice 向 Bob 發(fā)送消息和對應(yīng)的散列值。 Bob 接受到消息和散列值后,如果校驗(yàn)一致,那么也只能證明消息沒有經(jīng)過篡改,而無法證明消息是 Alice 發(fā)來的。
而為了解決這個(gè)問題,就需要同時(shí)使用散列值和數(shù)字簽名了
2. 消息認(rèn)證碼(MAC)
概述
散列函數(shù)中,我們提到過通過散列函數(shù)我們確保消息原文并沒有被篡改過。但無法保證消息是雙方真實(shí)意思的表現(xiàn)。
比如說 Bob 收到一條借款消息,上面寫著請 Bob 給 Alice 的銀行賬戶 xxxxx 轉(zhuǎn) 1000. Bob 通過計(jì)算消息內(nèi)容的散列函數(shù),證實(shí)消息沒有被篡改過。 那么此時(shí)此刻,Bob 應(yīng)該給這個(gè)賬戶轉(zhuǎn)賬嗎?
不能!
因?yàn)?Bob 并不能證實(shí)這條消息是來自于 Alice 的。 有可能這條消息來自于 Eve。 所有僅通過散列函數(shù)只能解決是否篡改,而不能解決是否真實(shí)。
這是 Bob 以為的
而實(shí)際上卻是這樣的:
而消息認(rèn)證碼則可以解決這個(gè)問題.
定義
消息認(rèn)證碼是基于哈希函數(shù)或?qū)ΨQ加密算法生成的一段固定長度的代碼,用于驗(yàn)證消息的完整性和真實(shí)性。消息認(rèn)證碼是一種確認(rèn)信息完整性并可以進(jìn)行認(rèn)證的技術(shù),簡稱 MAC(Message Authentication Code)。 MAC 由兩部分組成: 消息 + 共享密鑰
和散列函數(shù)類似, MAC 可以將任意長度的消息計(jì)算出固定長度的輸出值。但和散列函數(shù)不同的是,如果沒有共享密鑰,則無法計(jì)算出最終的 MAC 值。 所以通過這一個(gè)性質(zhì)來確保安全性.
MAC = 單向散列 + 共享密鑰
常見算法
HMAC (基于哈希函數(shù)的消息認(rèn)證碼), CMAC (基于塊密碼的消息認(rèn)證碼)等。
HMAC 的 H 指的是 Hash 的意思,是一種利用 Hash 來構(gòu)造消息認(rèn)證碼的算法。 我們說過MAC = 散列函數(shù) + 共享密鑰 。 HMAC 使用的散列函數(shù)有:SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 幾種函數(shù)。
因此相對應(yīng)的 HMAC 也稱為:HMAC-SHA-1、HMAC-SHA-224、HMAC-SHA-256、HMAC-SHA-384、HMAC-SHA-512.
HMAC 用數(shù)學(xué)公式來表示是:
hash(opadKey || hash(ipadKey || message ))
其中:
ipadKey 是 key(密鑰) ⊕ ipad(內(nèi)部 16 進(jìn)制的 36 比特流) opadKey 是 key(密鑰) ⊕ opad(外部 16 進(jìn)制的 5C 比特流)
所以 HMAC 是兩層 HASH 的結(jié)果值。
步驟分解:
密鑰填充:如果密鑰不足預(yù)設(shè)長度(散列函數(shù)的分組長度),則填充’0’。如果長呢?那就用散列函數(shù)計(jì)算固定長度的散列值作為密鑰值
- 將填充后的密鑰與 Ipad 進(jìn)行異或操作,最后達(dá)到散列函數(shù)分組長度。此時(shí)將此值稱為IpadKey
- 將IpadKey附加在 message 開頭
- 將第三步的結(jié)果輸入 hash 函數(shù),得出散列值
- 將填充后的密鑰與 Opad 進(jìn)行異或操作,最后達(dá)到散列函數(shù)分組長度。此時(shí)將此值稱為OpadKey
- 將IpadKey附加在 message 末尾
- 將第六步的結(jié)果輸入 hash 函數(shù),得出散列值
工作原理
- Alice和Bob共享一個(gè)對稱密鑰。
- Alice使用共享密鑰和哈希函數(shù)生成消息認(rèn)證碼,并將消息和消息認(rèn)證碼一起發(fā)送給Bob。
- Bob使用共享密鑰和哈希函數(shù)重新計(jì)算消息認(rèn)證碼,并與Alice發(fā)送的消息認(rèn)證碼比較,確保消息未被篡改。
如何使用 MAC
以 Bob 和 Alice 之間借錢的例子開始說。 假設(shè)這倆人之間通過 MAC 確保安全性,那么雙方處理流程應(yīng)該大致是這個(gè)樣子
- Alice 將借錢消息發(fā)給 Bob。
- Bob 收到借錢消息后并不急于執(zhí)行,而是等著 Alice 發(fā)來消息認(rèn)證碼 Alice
- 通過共享密鑰和散列函數(shù)計(jì)算出 mac
- Alice 將消息認(rèn)證碼發(fā)送給 Bob
- Bob 按照相同的規(guī)則計(jì)算一遍 Mac
- Bob將自己計(jì)算的 Mac 和 Alice 發(fā)來的 Mac 比對一遍。通過是否相同判斷請求是否合法
MAC 的問題
在 MAC 算法里面既然提到了共享密鑰,那么就無法逃離對稱密鑰體系的宿命:“密鑰配送問題”。 而解決這個(gè)問題,目前來說只能依靠公鑰密鑰、Diffie-Hellman 密鑰交換,密鑰中心等解決方案.
使用 HMAC 可以解決消息合法性和完整性的問題,但卻無法抵御重放攻擊。 比如 Eve 截獲到 Alice 和 Bob 之間的 Hmac 報(bào)文后,無限制的重復(fù)這段報(bào)文。 那么 Bob 就會無限制的進(jìn)行轉(zhuǎn)賬。所以使用 HMAC 進(jìn)行消息認(rèn)證時(shí),也會配合序號、時(shí)間戳等輔助信息,來判斷報(bào)文是否需要處理。
同時(shí) HMAC 也無法解決否認(rèn)的問題,比如 Alice 完全可以事后否認(rèn)找 Bob 借過錢,因?yàn)?Bob 完全有能力偽造出這段報(bào)文。即便 Bob 拿出了 MAC 值,也無法證明是 Alice 生成的。
那又該如何證明錢是由 Alice 借的呢?
這就需要數(shù)字簽名技術(shù)了
不可否認(rèn)性
不可否認(rèn)性確保消息的發(fā)送者不能否認(rèn)曾經(jīng)發(fā)送過消息,這通常通過數(shù)字簽名實(shí)現(xiàn)。
數(shù)字簽名(Digital Signature)
定義:數(shù)字簽名是一種基于非對稱密碼技術(shù)的認(rèn)證機(jī)制,用于驗(yàn)證消息的發(fā)送者身份和消息的完整性。
工作原理:
- Alice使用自己的私鑰對消息的哈希值進(jìn)行加密,生成數(shù)字簽名,并將消息和數(shù)字簽名一起發(fā)送給Bob。
- Bob使用Alice的公鑰對數(shù)字簽名進(jìn)行解密,得到消息的哈希值,并計(jì)算接收到的消息的哈希值。
- Bob比較兩個(gè)哈希值,若相同,則確認(rèn)消息完整且由Alice發(fā)送。
優(yōu)點(diǎn):
- 提供身份認(rèn)證和完整性驗(yàn)證。
- 防止發(fā)送者否認(rèn)發(fā)送過消息。
應(yīng)用場景:
- 安全電子郵件、數(shù)字合同、軟件分發(fā)等需要驗(yàn)證身份和完整性的場景。
總結(jié)
確保信息的機(jī)密性、完整性和不可否認(rèn)性是密鑰體系的重要目標(biāo)。對稱密碼和非對稱密碼主要解決機(jī)密性問題。哈希函數(shù)、消息認(rèn)證碼(MAC)和數(shù)字簽名是實(shí)現(xiàn)消息完整性和不可否認(rèn)性的主要技術(shù)手段。
應(yīng)用建議:
- 對于大數(shù)據(jù)量的加密,使用對稱密碼如AES。
- 對于身份驗(yàn)證和不可否認(rèn)性,結(jié)合使用非對稱密碼和數(shù)字簽名。
- 對于消息完整性,使用哈希函數(shù)和消息認(rèn)證碼。