第二章:協議結構模塊
協議概述
協議:是一系列步驟,它包括兩方或多方,設計它的目的是要完成一項任務,
密碼協議:是使用密碼學的協議,使用密碼的目的是防止或發現竊聽者和欺騙,
協議角色
重點說仲裁者(arbitrator)是在完成協議的程序中,值得信賴的公正的第三方,“公正”意味著仲裁者在協議中沒有既得利益,對參與協議的任何人也沒有特別的利害關系,“值得信任”表示協議中的所有人都接受這一事實,即仲裁者說的都是真實的,他做的都是正確的,并且他將完成協議中涉及他的部分,仲裁者能幫助互不信任的雙方完成協議,
仲裁協議中價格比較低廉的有兩種:非仲裁子協議(僅實作協議各方的需求)和仲裁子協議(有爭議的時候),這時特殊的仲裁者叫裁決者,
對協議的攻擊:
- 被動攻擊:與協議無關的人能夠竊聽協議的一部分或全部,因為攻擊者不可能影響協議,所有他能做的事是觀察協議并試圖獲取訊息,難于發現,所以協議應該阻止被動攻擊,
- 主動攻擊:假裝是其他人,在協議中引入新訊息、刪掉原有的訊息、替換、重放舊訊息、破壞通信信道、改變存盤在計算機中的訊息等,
- 在攻擊者是協議中的一方這種情況時,這個人叫騙子,也分為主動和被動,
使用對稱密碼系統通信
(1)a和b協商用同一個密碼系統,
(2)a和b協商用同一個密鑰,
(3)a用加密演算法和選取的密鑰加密她的明文訊息,得到了密文訊息,
(4)a發送密文訊息給b,
(5)b用同樣的演算法和密鑰解密密文,讀取資訊,
好的密碼系統的全部安全性只與密鑰有關,與演算法沒有任何關系,
單向函式
單向函式計算起來相對容易,但求逆卻非常困難,比如,打碎盤子很容易,但讓盤子恢復卻很難,但單向函式不能用于加密,
陷門單向函式是特殊的單向函式,它有一個秘密,如果知道這個秘密,將會容易求逆,如果不知道就難于計算,就像很復雜的積木,如果沒有圖紙,很難拼回原來的樣子,
單向散列函式
也叫壓縮函式、收縮函式、訊息摘要、指紋、密碼校驗和、資訊完整性檢驗(MIC)、操作檢驗碼(MDC),現代密碼學的中心,
散列函式就是把可變長度輸入串(預映射)轉換成固定長度輸出串(散列值)的一種函式,(簡單的散列函式就是對預映射的處理,并且回傳由所有輸入位元組異或組成的位元組)
這里我需要先去學一下散列函式的基礎知識才能了解書上說的東西,現在的了解就是散列函式就是哈希函式,打算先學一下哈希函式,再學單向的,
散列函式
- 散列值的概念:散列函式把訊息或資料壓縮成摘要,使得資料量變小,將資料的格式固定下來,該函式將資料打亂混合,重新創建一個叫做散列值(hash values,hash codes,hash sums,或hashes)的指紋,散列值通常用一個短的隨機字母和數字組成的字串來代表,好的散列函式在輸入域中很少出現散列沖突,
- 若結構中存在和關鍵字K相等的記錄,則必定在f(K)的存盤位置上,由此,不需比較便可直接取得所查記錄,稱這個對應關系f為散列函式(Hash function),按這個事先建立的表為散串列,
- 對不同的關鍵字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),這種現象稱碰撞,具有相同函式值的關鍵字對該散列函式來說稱做同義詞,綜上所述,根據散列函式H(key)和處理沖突的方法將一組關鍵字映射到一個有限的連續的地址集(區間)上,并以關鍵字在地址集中的“象”作為記錄在表中的存盤位置,這種表便稱為散串列,這一映象程序稱為散列造表或散列,所得的存盤位置稱散列地址,
- 若對于關鍵字集合中的任一個關鍵字,經散列函式映象到地址集合中任何一個地址的概率是相等的,則稱此類散列函式為均勻散列函式(Uniform Hash function),這就是使關鍵字經過散列函式得到一個“隨機的地址”,從而減少沖突,
性質: 所有散列函式都有如下一個基本特性:如果兩個散列值是不相同的(根據同一函式),那么這兩個散列值的原始輸入也是不相同的,這個特性是散列函式具有確定性的結果,但另一方面,散列函式的輸入和輸出不是一一對應的,如果兩個散列值相同,兩個輸入值很可能是相同的,但不絕對肯定二者一定相等(可能出現哈希碰撞),輸入一些資料計算出散列值,然后部分改變輸入值,一個具有強混淆特性的散列函式會產生一個完全不同的散列值,
- 典型的散列函式都有無限定義域,比如任意長度的位元組字串,和有限的值域,比如固定長度的位元串,在某些情況下,散列函式可以設計成具有相同大小的定義域和值域間的一一對應,一一對應的散列函式也稱為排列,可逆性可以通過使用一系列的對于輸入值的可逆“混合”運算而得到,
常用HASH函式
散列函式能使對一個資料序列的訪問程序更加迅速有效,通過散列函式, 資料元素將被更快地定位,常用Hash函式有:
- 直接尋址法,取關鍵字或關鍵字的某個線性函式值為散列地址,即H(key)=key或H(key) = a·key + b,其中a和b為常數(這種散列函式叫做自身函式)
- 數字分析法,分析一組資料,比如一組員工的出生年月日,這時我們發現出生年月日的前幾位數字大體相同,這樣的話,出現沖突的幾率就會很大,但是我們發現年月日的后幾位表示月份和具體日期的數字差別很大,如果用后面的數字來構成散列地址,則沖突的幾率會明顯降低,因此數字分析法就是找出數字的規律,盡可能利用這些資料來構造沖突幾率較低的散列地址,
- 平方取中法,取關鍵字平方后的中間幾位作為散列地址,
- 折疊法,將關鍵字分割成位數相同的幾部分,最后一部分位數可以不同,然后取這幾部分的疊加和(去除進位)作為散列地址,
- 亂數法,選擇一隨機函式,取關鍵字作為隨機函式的種子生成隨機值作為散列地址,通常用于關鍵字長度不同的場合,
- 除留余數法,取關鍵字被某個不大于 散串列表長m的數p除后所得的余數為散列地址,即 H(key) = key MOD p,p<=m,不僅可以對關鍵字直接取模,也可在折疊、平方取中等運算之后取模,對p的選擇很重要,一般取素數或m,若p選的不好,容易產生碰撞,
重點掌握MD5碼,
使用公開密鑰密碼系統通信
解決了對稱密鑰密碼體系的一些問題,簡單來說,每個網民有自己的公鑰和私鑰,當a給b發訊息時,知道知道b的公鑰,就可以通過b的公鑰加密要發送的訊息,之后發給b,b再用自己的私鑰解密就可以了,全程a只需要知道b的公鑰,不需要a和b用一個密鑰來加解密,
在現實世界中,公開密鑰比對稱密鑰慢很多,所以不會取代對稱密鑰的位置,而是用公開密鑰來加密密鑰(這樣叫混合密碼系統),而且公開加密密鑰就會導致在明文是可能明文文集中的一個的時候,可以通過加密所有可選擇明文,再與密文對比,這樣公開密鑰密碼系統對選擇明文攻擊是脆弱的,
數字簽名
- 使用對稱密碼系統和仲裁者對檔案簽名,優點是可信、不可偽造、不可重新使用、檔案不能改變、不能抵賴,缺點是仲裁者在其中做了大量重復且易錯的作業,他必須保證自己的可信和安全,他太難了,所以這種協議只在理論上可行,
- 數字簽名樹,
- 使用公開密鑰系統對檔案簽名,有幾種公開密鑰演算法能用作數字簽名,如RSA,公開密鑰或私人密鑰都可以用做加密,用你的私人密鑰加密檔案,你就擁有安全的數字簽名,這里描述一下基本協議
- A用她的私人密鑰對檔案加密,從而對檔案簽名,
- A將簽名的檔案傳給B,
- B用A的公開密鑰解密檔案,從而驗證簽名,
這個簽名不需要仲裁者去簽名和驗證,但要注意數字簽名數字簽名經常包括時間標記,對日期和時間的簽名附在訊息中,并與訊息中的其他部分一起簽名,
在實際實作程序中,采用公開密鑰演算法對長檔案簽名效率太低,所以一般都不對整個檔案簽名,只對檔案的散列值簽名,這個協議中,單向散列函式和數字簽名演算法是事先協商好的,
- 采用單向散列函式,很容易實作多重簽名(多個人對一個數字檔案簽名),
還閱讀了抗抵賴的方法,以及數字簽名的應用,早期是用在對禁止核試驗條約的驗證,
-
帶加密的數字簽名就像一封信,加密前簽名是一種謹慎的習慣做法,
-
如果一個演算法既用作加密又用作數字簽名,就有可能受到攻擊,可以使用時間標記、每次操作使用不同的密鑰、加密和數字簽名操作不同、使用單向散列函式的數字簽名,這樣就有四種方法可以防止重新發送訊息作為收據的問題發生,
-
得到另一個人的公開密鑰將在3.1提及,目前是2.7.3,講的是有一個密鑰鑒定機關(KCA)或密鑰分配中心(KDC),是一個資料庫,存盤很多人的公開密鑰,一個值得信賴的仲裁者寫入資料,為了防止壞人在資料傳送期間用另外的公鑰來替代別人的公鑰而存在,為了防止這個問題,仲裁者可以用自己的私鑰對每個公鑰簽名,
-
隨機和偽隨機序列的產生:計算機做不到真正的隨機(目前,
-
偽隨機序列:最好的計算機能產生偽隨機序列發生器,但密碼學對于隨機性比較挑剔,
密碼學意義上安全的偽隨機序列還必須具有以下性質:
它不可預測,即使給出產生序列的演算法或硬體和所有以前產生的位序列的全部知識,也不可能通過計算來預測下一個隨機位是什么,
真正的隨機:
- 它不能重復產生,如果用完全同樣的輸入對序列發生器操作兩次(至少與人所能做到的最精確的一樣),你將得到兩個不相關的隨機序列,
不知道是書上寫錯了的問題還是什么,說有三點性質,這里只有一點啊,我只能看到一點,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/356731.html
標籤:其他
