協定(protocol)是一系列步驟,它包括兩方或者多方,設計它的目的是要完成一項任務。
“一系列步驟”:意味着協定從開始到結束的一個序列,每一步驟必須一次執行,在前一步完成之前,後面的步驟都不能執行
“包括兩方或者多方”:意味着完成這個協定至少需要兩個人
“設計它的目的是要完成一項任務”:意味着協定必須做一些事情。
計算機仲裁者有下面幾個問題:
1,如果你知道後對方是誰,并能見到他的面,那麼很容易找到和相信中立的第三方。而互相懷疑的雙方很可能也懷疑在網絡别的什麼地方并不露面的仲裁者。
2,計算機網絡必須負擔仲裁者的費用。
3,在任何仲裁協定中都有延遲的特性
4,仲裁者必須處理每一筆交易。
5,由于在網絡中每人都必須相信仲裁者,對試圖破壞網絡的人來說,仲裁者便是一個易受攻擊的弱點。
裁決協定:在有争議的時候才執行,這種特殊的仲裁者叫做裁決者。
裁決者和仲裁者之間的不同是裁決者并不總是必需的。
裁決協定是為了發現欺騙,而不是為了阻止欺騙。發現欺騙起了防止和阻礙欺騙的作用。
被動攻擊試圖擷取協定中各方的消息。它們收集協定各方所傳送的消息,并試圖對它們進行密碼分析。而主動攻擊可能有更多的目的。攻擊者可能對擷取消息感興趣,也可能降低系統性能,破壞已有的消息,或者獲得非授權的資源存取。
好的密碼系統的全部安全性隻與密鑰有關,與算法沒有任何關系。
對稱密碼算法存在下面的問題:
1,密鑰必須秘密地配置設定,它們比任何加密的消息更有價值,因為知道了密鑰就意味着知道了所有消息。對于遍及世界的加密系統,這可能是令人沮喪的任務,需經常派信使将密鑰傳遞到目的地。
2,如果密鑰被洩露了(被偷竊,猜出來,被逼迫交出來,受賄等),那麼Eve就能用該密鑰去解密所有傳送的消息,也能夠假裝是協定中的一方,産生虛假消息去愚弄另一方。
3,假設網絡中每對使用者使用的不同的密鑰,那麼密鑰總數随着使用者數的增加迅速增加。n和使用者的網絡需要n(n-1)/2個密鑰。例如,10個使用者互相通信需要45個不同的密鑰,100個使用者需要4950個不同的密鑰。這個問題可以通過将使用者數量控制在較小數目來減輕,但這并不總是可能的。
單向函數(one-way function)的概念是公開密鑰密碼的中心。盡管它本身并不是一個協定。
陷門單向函數(trapdoor one-way function)是有一個秘密陷門的一類特殊的單向函數,它在一個方向上易于計算而反方向卻難于計算。但是如果你知道那個密碼,你也能很容易在另一個方向上計算出這個函數。也就是說,已知x,易于計算f(x);而已知f(x),卻難于計算x。然而,有一些秘密消息y,一旦給出f(x)和y,就很容易計算x。
散列函數就是把可變長度輸入串(叫做預映射,pre-image)換轉成固定長度(經常變短)輸出串(叫做散列值,hash-value)的一種函數。
消息驗證碼(Message Authentication Code,MAC)也叫資料驗證碼(DAC),它是帶有秘密密鑰的單向散列函數。
公開密鑰密碼學:從公開密鑰很難推斷出私人密鑰。持有公開密鑰的任何都可加密消息,但卻不能解密。隻有持有私人密鑰的人才能解密。
在現實世界中,公開密鑰算法不會替代對稱算法。公開密鑰算法不用來加密消息,而用來加密密鑰。這樣做有兩個理由:
1,公開密鑰算法比對稱算法慢,對稱算法一般比公開密鑰算法塊1000倍。
2,公開密鑰密鑰系統對選擇明文攻擊是脆弱的,
把公開密鑰密碼用于密鑰配置設定,解決了很重要的密鑰管理問題。
簽名為什麼會引人注目呢?
1,簽名是可信的,簽名使檔案的接收者相信簽名這是慎重地在檔案上簽字的
2,簽名不可僞造。簽名證明是簽字者而不是其他人慎重地在檔案上簽字的
3,簽名不可重用的。簽名是檔案的一部分,不法之徒不可能将簽名移到不同的檔案上,
4,簽名的檔案是不可改變的。在檔案簽名後,檔案不能改變。
5,簽名是不可抵賴的。簽名和檔案是實體的東西。簽名者事後不能聲稱他沒有簽過名。
使用對稱密碼系統和仲裁者對檔案簽名-----這種方法在理論上這種協定或許是可行的,單實際上不能很好的運轉
使用公開密鑰密碼系統對檔案簽名
基本協定很簡單:
1,Alice用他的私人密鑰對檔案加密,進而對檔案簽名
2,Alice将簽名的檔案傳給Bob
3,Bob用Alice的公開密鑰解密檔案,進而驗證簽名
檔案簽名和時間标記
是以,數字簽名經常包括時間标記。
使用公開密鑰密碼系統和單向散列函數對檔案簽名
1,Alice産生檔案的單向散列值
2,Alice用他的私人密鑰對散列值加密,由此對檔案簽名。
3,Alice将檔案和簽名的散列值送給Bob
4,Bob用Alice發送的檔案産生檔案的單向散列值,然後用數字簽名算法對散列值進行運算,同時用Alice的公開密鑰對簽名的散列值解密。如果簽名的散列值與自己産生的散列值比對,簽名就是有效的。
有時簽名過程也叫做“用私人密鑰加密”,驗證過程也叫做“用公開密鑰解密”。
采用單向散列函數,很容易實作多重簽名:
1,Alice對檔案的散列簽名
2,Bob對檔案的散列簽名
3,Bob将他的簽名交給Alice
4,Alice把檔案、他的簽名和Bob的簽名發給Carol。
5,Carol驗證Alice和Bob的簽名
帶加密的數字簽名
通過把公開密鑰密碼和數字簽名結合起來,能夠産生一個協定,可把數字簽名的真實性和加密的安全性結合起來。想象你媽媽寫的一封信:簽名提供了原作者的證明,而信封提供了秘密性。
1,Alice用她的私人密鑰對消息簽名:Sa(M)。
2,Alice用Bob的公開密鑰對簽名的消息加密,然後發送給Bob:Eb(Sa(M));
3,Bob用他的私人密鑰解密:Db(Eb(Sa(M)))=Sa(M)
4,Bob用Alice的公開密鑰驗證并且恢複消息:Va(Sa(M))=M;