寫在前面:
最近因為疫情,閉關了半個多月准備的事情延期了,也不知道什么時候才能弄。另外的事情又冒出來了,所以只能把可搜索加密先放放,寫一下密碼學的復習筆記了。但最近寫可搜索加密發現還是有人看的,讓我十分有動力。忙完這點事情希望可以盡快把可搜索加密更完。
下面就進入今天的正題 —— 密碼學基礎概念。
在開始介紹之前可以先看看三個有趣的問題:
① 電話拋幣協議 這個問題簡單描述就是:在沒有第三方協助下,通話雙方有辦法在電話里模擬拋擲一枚公平的硬幣嗎?
② 百萬富翁問題 這個問題簡單描述就是:兩個百萬富翁相比較一下誰更富有,但是不想暴露自己的確切錢數,也不想讓第三方知道,要怎么比較呢?
③ 零知識證明問題 這個問題簡單描述就是:在不泄露任何有用信息的前提下,向驗證者證明自己確實知道某一事情。
關於這些問題其實網上有很多寫得很好的文章,在這里我只是給出一個對其簡單解釋的文章/課件鏈接,想要深入了解可以自行搜索。
一、基本概念
接下來就對密碼學中經常用到的一些字母簡單介紹。
M —— 明文空間 C —— 密文空間 K —— 密鑰 E —— 加密算法 D —— 解密算法
有E(m)=c;D(c)=m.
一些常見的人物:
Alice:協議發起者 Bob:協議應答者 Eve:竊聽者和可能的攻擊者 Oscar:被動的觀察者,僅僅根據從公開信道獲得的資料進行破譯 Malice,Mallory:主動的攻擊者,可能會攔截數據、篡改信息和冒充合法的通信者。
1.1 基於公開信道的攻擊手段
可以看到有;①中斷 ②竊聽 ③篡改 ④偽造 四種攻擊手段。
攻擊又可以分為被動攻擊和主動攻擊。被動攻擊難以被檢測到,但可以用密碼學方式來防范。主動攻擊常常是對數據流的篡改,可以被檢測到。
(原諒我比較懶不想在畫圖了,直接把筆記的圖貼上來hhh)
1.2 密碼分析的攻擊方式
根據攻擊所能獲得的信息資源,可以將其攻擊方式分為六類:
① 唯密文攻擊:攻擊者有一些消息的密文,這些消息都是用同一加密算法的。攻擊者的目的是恢復盡可能多的明文,當然最好是獲得消息的加密密鑰。
② 已知明文攻擊:攻擊者在得到密文的同時還知道這些消息的明文。攻擊的目標就是根據加密信息推導出用來加密的密鑰,或者等價的,即使沒有找到密鑰但是能找到一種方法,能對同一密鑰加密的密文獲得其明文。
③ 選擇明文攻擊: 攻擊者不僅可以獲得一些密文-明文消息對,而且能選擇被加密的明文。這比已知明文攻擊更加有效,因為攻擊者可以選擇能加密的特定明文塊去獲得密文,那些快可能產生更多密鑰消息。
④ 自適應選擇明文攻擊: 這是比選擇明文攻擊具有更多權限的攻擊方式。攻擊者不僅可以選擇一大塊明文用來加密獲得密文,還可以基於以前的結果修正這個選擇,選擇另一塊余地一塊明文相關的明文塊。
⑤ 選擇密文攻擊: 攻擊者能選擇不同的被加密的密文,並可能得到對應的解密的明文。比如,攻擊者能選擇不同的被加密的密文,並可能得到對應解密的明文。比如,攻擊者獲得了某個解密機,或者攻擊這是在滲透在保密系統內部的員工,可以有一定的權限獲得某些密文的原文等。
⑥ 選擇密鑰攻擊: 指密碼分析者具有不同的密鑰間關系的有關知識。如在類似於差分密碼分析的相關密鑰分析中有所應用。
1.3 基於密鑰的算法
加密和解密算法,根據所使用的密鑰的性質,通常分為兩類:對稱算法和公開密鑰算法。在實際使用中,加密和解密的密鑰可能有所區分,下面兩個式子更精確的描述加解密過程:
y = Ek1(x) (1)
x = Dk2(y) (2)
(1)對稱密鑰密碼算法
加密密鑰k1和解密密鑰k2相同或相關(k1和k2可以相互推導)。
主要包含 序列算法 和 分組算法。
序列算法:一次只對明文中的單個比特(又是對字節)運算。
分組算法:對明文中一組比特進行運算。
對稱密鑰密碼算法例子:古典加密體制、DES、AES.
(2)非對稱密鑰面積碼算法(公開密鑰算法)
加密密鑰k1和解密密鑰k2之間沒有任何關聯。在使用中,通常將加密密鑰公開,所有人都可以用這個密鑰加密,而只有解密密鑰的持有者才可以解密。
Alice只要知道Bob的公鑰,就可以將自己的消息用Bob的公鑰進行加密,然后發送給Bob.對於加密后的消息,只有Bob才能夠解密。
例子:RSA.
1.4 密碼協議
密碼協議是應用密碼學,解決實際信息系統中信息安全問題的方式。協議是一系列步驟,它包含雙方或多方。設計它的目的是要完成一項任務,協議不同於算法和任務,它具有如下特點:
(1)協議中的參與方都必須了解協議,並預先知道所要完成的所有步驟。
(2)協議中的每個參與方都必須同一並遵守它。
(3)協議必須是清楚的。每一步都必須明確定義。如進行通信或完成一方或者多方運算,並不會引起誤解。
(4)協議必須是完整的。對每種情況必須規定具體的動作。
密碼協議的主要目標:
密碼協議在安全系統中,其關鍵性目的並不是保證密碼算法的不可破譯,二是假設密碼算法本身是安全的。借助這種安全的密碼算法,達到以下四個主要目標:
(1)機密性
搭線竊聽者Eve不能讀取到信道上的傳輸的信息的明文,主要的手段是先加密后傳輸,由接受者解密。
(2)完整性
接收者Bob需要確認Alice的消息沒有被更改過。密碼學的散列函數,就提供了檢測方法來檢測數據是否被攻擊者有意無意地修改過。
(3)認證性
接收者Bob需要確認消息確實是Alice發送的,而不是冒名頂替的行為。通常這種認證包含兩類:實體認證 和 數據源認證。對消息中所涉及參與方的鑒別,也常用身份鑒別來表示。身份認證主要是確認主體是都合法的參與者;數據源認證主要是確認消息是由他所聲稱的主體生成和發送的。
(4)抗抵賴性
也稱為不可否認性。對於一個已經進行的行為,參與的主體不能否認。即發送者時候不能否認其發送消息的行為,數據接收者不能否認其接收數據的行為。
1.5 密碼算法的安全性
(1)無條件安全(Unconditionally secure)
無論破譯者有多少個密文,他也無法解出相應的明文。即使解出也無法驗證正確性。
(2)計算上安全(Conputationally secure)
破譯代價超出消息本身價值,破譯時間超出信息有效期。
1.6 對加密系統的要求
(1)系統應該是實際上安全的。截獲密文或已知明文對時,要決定密鑰或任意明文在計算上不可行的。
(2)加密解密算法適用於密鑰空間中所有元素。
(3)系統易於實現,使用方便。
(4)系統的安全性不依賴於對加密體制或加密算法的保密,而是依賴於密鑰,即Kerckhoff原則。
(5)系統的使用不應使通信網絡的效率過分降低。
1.7 “采用混淆、擴散和乘積的方法來設計密碼”
(1)混淆
混淆:是密文和明文、密鑰之間的關系復雜化。
“混淆”可以隱藏明文、密文、密鑰之間的任何關系,好的“混淆”可以使復雜甚至強有力的密碼分析工具不得奏效。最容易的方法是“代替”法。
(2)擴散
擴散:將每一位明文和密鑰的影響擴大到盡可能多的密文位中。
“擴散”是一種將明文冗余度分散到密文中的方法。即將單個明文或密鑰位的影響盡可能擴大到更多地密文中去,不僅將統計關系隱藏起來,也使密碼分析者尋求明文冗余度增加了難度。最簡單的“擴散”方法是“置換”法。