密碼學基礎概念 — 密碼學複習(一)

不愛學習的Shirley發表於2021-07-31

 寫在前面:

  最近因為疫情,閉關了半個多月準備的事情延期了,也不知道什麼時候才能弄。另外的事情又冒出來了,所以只能把可搜尋加密先放放,寫一下密碼學的複習筆記了。但最近寫可搜尋加密發現還是有人看的,讓我十分有動力。忙完這點事情希望可以儘快把可搜尋加密更完。

  下面就進入今天的正題 —— 密碼學基礎概念。

  在開始介紹之前可以先看看三個有趣的問題:

電話拋幣協議 這個問題簡單描述就是:在沒有第三方協助下,通話雙方有辦法在電話裡模擬拋擲一枚公平的硬幣嗎?

百萬富翁問題 這個問題簡單描述就是:兩個百萬富翁相比較一下誰更富有,但是不想暴露自己的確切錢數,也不想讓第三方知道,要怎麼比較呢?

零知識證明問題  這個問題簡單描述就是:在不洩露任何有用資訊的前提下,向驗證者證明自己確實知道某一事情。

  關於這些問題其實網上有很多寫得很好的文章,在這裡我只是給出一個對其簡單解釋的文章/課件連結,想要深入瞭解可以自行搜尋。

  一、基本概念

  接下來就對密碼學中經常用到的一些字母簡單介紹。

  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)擴散

  擴散:將每一位明文和金鑰的影響擴大到儘可能多的密文位中。

  “擴散”是一種將明文冗餘度分散到密文中的方法。即將單個明文或金鑰位的影響儘可能擴大到更多地密文中去,不僅將統計關係隱藏起來,也使密碼分析者尋求明文冗餘度增加了難度。最簡單的“擴散”方法是“置換”法。

相關文章