文章更新于:2020-04-02
注:本文參考自機械工業出版社《密碼工程原理與應用》,
點擊目錄可跳轉
- 一、密碼學研究范圍
- 1.1、密碼學的作用
- 1.2、木桶理論
- 1.3、對手的設定
- 二、密碼學簡介
- 2.1、加密
- 2.2、認證
- 2.3、公鑰加密
- 2.4、數字簽名
- 2.5、PKI
- 2.6、攻擊
- 2.6.1 唯密文攻擊
- 2.6.2 已知明文攻擊
- 2.6.3 選擇明文攻擊
- 2.6.4 選擇密文攻擊
- 2.6.5 生日攻擊
- 2.6.6 中間相遇攻擊
- 三、Enjoy!
一、密碼學研究范圍
密碼學是一門關于加密的藝術和科學,
1.1、密碼學的作用
密碼學是整個安全系統的一部分,但也是最關鍵的一部分,
密碼學通常提供系統的訪問控制功能,
1.2、木桶理論
每個安全系統的安全性都取決于它最脆弱的部分,
為了提高系統的安全性,我們需要提高系統最脆弱地方的安全性,所以我們必須先知道那些是最脆弱的,這可以用一個分層的樹結構來完成,系統的每部分都是有哪些環節,同時每個環節還有哪些子環節,我們可以將這些環節組織成一顆攻擊樹(attack tree),
1.3、對手的設定
因為如果有攻擊者想要攻擊系統,它一定會攻擊系統最薄弱的環節,
所以我們必須把對手設定為最狡猾的對手,這樣我們才能更好的完善我們系統的安全性!
二、密碼學簡介
注1:密碼學傳統上為了方便舉例稱發送方為 Alice ,接收方為 Bob,竊聽者為 Eve,
注2:如果你查字典,你會發現密鑰讀(yue),但是一些密碼學的老教授讀的時候會讀 (yao),所以在不致產生歧義(密鑰(yue)和蜜月同音~))的時候,你讀哪種應該都是可以的,
2.1、加密
-
為了不讓我們發送的資訊被竊聽,我們可以選擇在發送資訊前,將明文
m通過加密函式E用密鑰 ke 進行加密成密文c,然后再發送, -
接收方受到密文
c以后通過解密函式D用密鑰 ke 進行解密為明文m,至此,資訊發送完成, -
如果
Eve進行了竊聽,那么他只能得到密文,沒有密鑰 ke 它將無法得到明文, -
那么問題來了,如何傳送密鑰嗎?如果有安全的信道用來傳送密鑰,那么直接用來發送資訊好了?
這涉及到了密鑰的分發問題,這里先不拓展,暫且認為
Alice和Bob使用了另外一個安全的信道進行密鑰的協商,比如上次見面的時候協商,或寫在紙上郵寄過去等, -
kerckhoff原則加密方案的安全性必須僅僅依賴于對于密鑰 ke 的保密,而不依賴于對于演算法的保密,
事實證明,不公開的演算法往往是存在問題的,是經不起檢驗的,
2.2、認證
在上一章節中,我們解釋了如何進行加密以防止 Eve 竊聽到明文,但是這卻防不住 Eve 對資訊進行修改,
因為 Eve 既然可以竊聽到信道,那么他相應的也有可能對資訊進行修改、攔截刪掉、或者改變幾個資訊的順序,這些都是可能的,
而接收方卻無法分辨資訊是否被篡改,為了解決這個問題,我們引入了認證的概念,
-
和加密一樣,認證也需要使用一個密鑰,這里記為 ka
-
在發送資訊之前,我們先使用 ka 對資訊進行計算得到一個訊息認證碼(Message Authentication Code),也可以稱為
MAC, -
發送資訊的時候,連
MAC也一起發送過去, -
Bob接收到資訊m和MAC以后,自己對資訊計算一遍MAC,看是否與發過來的MAC相同,如果相同,說明資訊安然無恙,如果不相同,就說明資訊被篡改或已損壞,直接丟棄便是, -
現在如果
Eve進行竊聽即便同時篡改了資訊,但因為他沒有認證密鑰 ka ,所以他的篡改是無法起到作用的,因為Bob收到發現MAC不對就該扔了不是~ -
但是這還有一個問題,就是這還不足以抵擋
訊息重放攻擊, 什么是訊息重放攻擊呢?就比如說,
Eve竊聽到資訊并不篡改,而是連同MAC保存下來,等待一段時間以后,再連同MAC一起發送給Bob,由于MAC是有效的,所以Bob會認為訊息有效,如果在某些場景資訊的順序很重要的話,這同樣會造成危害,為了避免這種情況,我們可以在訊息中加上編號,并在接收的時候驗證編號,如果受到的編號小于已經收到的資訊編號,便丟棄,說白了就是如果收到 2 號資訊以后,才收到 1 號資訊,1 號資訊就會被丟棄,
注:加密 和 認證 是兩個不同的概念,加密只能保證不泄露明文,而認證則是保證訊息的完整性,
2.3、公鑰加密
在上述我們討論的加密方案中,兩者發送資訊需要有一個加密密鑰 ke ,我們可以設想一下,如果一個團隊人數比較多的話,交換密鑰是一個非常麻煩的事情,而且人一多,密鑰的數量也顯著增多,
你的老板可不希望你把大量的作業時間話花費在交換密鑰上,
為了解決這個問題,我們引入 公鑰加密 的概念,
-
首先我們使用一種特殊的演算法生成一對密鑰(SBob ,PBob),其中 SBob 為私鑰,PBob 為公鑰,
-
然后
Bob公開他的公鑰!這樣一來,所有人都可以獲取 Bob 的公鑰,這也符合公鑰的名字哈, -
接著
Alice就可以使用Bob的公鑰對資訊m進行加密成密文c,然后發送給Bob, -
Bob受到密文c以后,使用 私鑰 SBob 對密文進行解密得到明文m, -
那么
Bob想給Alice發資訊是用自己的私鑰進行加密嗎?不可能的,那樣任何擁有Bob公鑰的人都將可以解密資訊,那用什么加密?給Alice發資訊當然是用Alice的公鑰啦! -
所以說,給誰發資訊就用誰的公鑰加密,而解密資訊則只有對應的私鑰才可以,那么如果你想讓人家給你發資訊,你公開自己的公鑰就可以了,
注1:公鑰和私鑰是不一樣的,不像之前提到的加密密鑰 ke ,在公鑰加密系統中,甚至連加密函式和解密函式都是不一樣的,
注2:沒有私鑰你想解密公鑰加密的資訊?你解密個試試,我看著你解密,
2.4、數字簽名
前文我們提到了訊息認證碼的概念,其實數字簽名可以理解為使用公鑰加密技術實作的訊息認證碼,
假設 Alice 想要發送訊息給 Bob:
1、Alice 先校驗出要發送資訊的 Hash ,然后 使用私鑰對 Hash 進行加密得到加密結果 s,
2、Alice 將訊息和加密結果 s 一同發送給 Bob,
3、Bob 收到以后使用 Alice 的公鑰對加密結果 s 進行解密,得到由 Alice 發送的 Hash,
4、Bob 自己計算一遍 Hash 然后對比,進行驗證,
2.5、PKI
使用公鑰加密的數字簽名雖然保證了訊息的加密,但卻無法保證使用但是正確的公鑰,可能公鑰已經被掉包了卻渾然不知,
PKI 的中心思想是設立一個中心機構,稱為證書機構或CA,每個用戶都把他的公鑰報給CA并向CA證明自己,然后CA使用數字簽名簽署用戶的公鑰,
之后,每個人都只需要有CA的公鑰即可驗證對方是否是正確的要通信的人,
2.6、攻擊
2.6.1 唯密文攻擊
只有密文,試圖將其解密成明文,難度最大,
2.6.2 已知明文攻擊
同時知道明文和密文,試圖得到解密密鑰,
2.6.3 選擇明文攻擊
比已知明文攻擊更強大,
可以構造指定明文的密文,試圖得到解密密鑰,
2.6.4 選擇密文攻擊
比選擇明文攻擊更強大,
可以構造指定明文的密文,也可以得到指定密文的明文,試圖得到解密密鑰,
2.6.5 生日攻擊
此攻擊得名于生日悖論,
如果一個房間里由23個人,那么其中兩個人生日相同的概率超過50%,
一般來說,如果一個元素可以取N種不同的值,那么隨機選擇了大約 個元素之后,就可以預期出現第一次碰撞,
很多情況下,我們討論 n 位的值,因為有 2n 個可能的值,所以集合中需要有 = 2n/2 個元素才能預期出現第一次碰撞,我們將經常談到 2n/2 這個屆,或稱為生日屆,
2.6.6 中間相遇攻擊
中間相遇攻擊與生日攻擊同屬于碰撞攻擊,
在生日攻擊中,我們期待同一個值在相同的元素集合中出現兩次,即出現碰撞,
而在中間相遇攻擊中,我們則自己構建一個集合,并等待這兩個集合出現交際,即出現碰撞,
三、Enjoy!
有后續…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/33703.html
標籤:其他
