RSA Lib Chapter 2 Cryptography (RSA實驗室 第二章,密碼學)
第二章 密碼學
這章簡述了密碼學及相關領域,是下一章的背景工作。
2.1 密碼學工具
2.1.1 什麼是公鑰演算法?
在傳統的密碼學中,訊息的傳送者和接收者知道和使用相同的金鑰;傳送者使用金鑰加密訊息,接收者使用相同的金鑰解密訊息。這個方法被成為金鑰演算法或者對稱演算法。主要的挑戰是使得傳送者和接收這確定金鑰並且不讓其它任何人知道。如果它們處在分離的物理座標,它們必須相信一個載體,電話系統,或者其它的中間傳輸系統來防止金鑰的洩漏。在互動中偷聽到金鑰的任何人,都可以讀取,修改,和使用金鑰加密,以及認證訊息。一般來說,金鑰的傳輸和儲存被成為金鑰管理;所有的演算法系統必須關注它們的金鑰管理問題。因為在金鑰加密系統中的所有金鑰必須保證安全,金鑰加密演算法經常很難實現金鑰管理,特別是有很多使用者的開放式系統。
為了解決金鑰管理的問題,Whitfield Diffie和mARTIN hELLMAN在1976年引入了公鑰演算法的概念。公鑰演算法有兩種主要用處,加密和數字簽名。在它們的系統中,每個人有一對金鑰,一個叫做公鑰,另一個叫做私鑰。公鑰是公開的,然而私鑰是祕密持有的。不許要傳送者和接收者共享安全資訊,所有的交流僅使用公鑰發起,私鑰永遠不會傳輸或共享。在這個系統中,它不再需要相信通訊的安全。只需要確認與公鑰繫結的使用者是在可信任路徑下的。任何人都可以只使用公共資訊傳送不同的訊息,但是訊息只能被私鑰解密。而且,公鑰演算法不僅僅用作加解密,業用做鑑權和其它不同的技術。
在一個公鑰演算法系統,私鑰總是在數學層面上和公鑰連結,因此,總是有可能使用從公鑰派生出來的私鑰來攻擊一個公鑰系統。典型的防禦這種攻擊的方法是,從公鑰派生私鑰儘可能的困難。比如,一些公鑰演算法系統被設計為從公鑰分散私鑰需要因式分解一個大數字,這種分解是很困難的,這就是RSA公鑰系統的原理。
加密
當Alice希望傳送一個安全的訊息給Bob,它在列表中查詢Bob的公鑰,使用它加密訊息,並且傳送掉。Bob使用它的私鑰解密訊息,並閱讀。監聽的人不能解密訊息。任何人都可以傳送一個加密的訊息給Bob,但只有Bob可以讀。(因為只有Bob有私鑰)
數字簽名
為了簽署一個訊息,Alic使用她的私鑰和訊息本身。輸出被稱為數字簽名,並被附加到訊息上。為了驗證簽名,Bob整理訊息,並且驗證使用Alice的公鑰解開簽名。如果結果是正確的,訊息沒被篡改。如果結果是錯誤的,簽名被篡改了。
一個正確的公鑰演算法的歷史由Diffie給出。
2.1.2 什麼是金鑰演算法?
金鑰演算法有時候被成為對稱演算法。它是演算法中比較傳統的形式,同一個金鑰可以用來加密和解密一個訊息。金鑰演算法不僅僅用作加密,業用作健全。這樣的技術被成為訊息認證碼(MACs).
金鑰演算法的主要問題是傳送者和接受者協議一個金鑰而不被其它任何人發現。這需要一個雙方都不怕監聽的方案。然而,金鑰演算法的優勢是比公鑰演算法快很多。金鑰演算法中最通常的技術是塊加密,流加密,和訊息認證碼。
2.1.3 公鑰演算法和金鑰演算法相比的優缺點?
公鑰演算法的主要優勢是增加了安全性和方便性:私鑰不許要傳輸或者共享給任何人。在金鑰系統中,一般來說,金鑰需要傳送,因為相同的金鑰在加密和解密中都需要。這是敵人在傳輸中獲取金鑰提供了機會。公鑰演算法的另一個主要優勢是它可產生不可抵賴的的數字簽名。通過金鑰演算法體系的認證需要共享一些祕密資訊,有時候還需要信任第三方體系。作為結果,傳送者可以抵賴之前的認證,聲稱共享的祕密被共享金鑰的另一方洩漏了。比如,Kerberos金鑰認證系統包含了一箇中央資料庫,儲存了所有使用者的金鑰的備份。一個對資料庫的攻擊,將廣受影響。另一方面,公鑰認證組織了這種型別的抵賴;每個使用者有責任保護他自己的私鑰不被洩漏。公鑰認證的這種屬性通常被成為不可抵賴性。
使用公鑰演算法實現加密的主要缺點是速度,大多數的金鑰加密方法都比當前的公鑰加密演算法顯著的塊。所以公鑰演算法和金鑰演算法可以一起使用來獲得兩者各自的優勢。對加密來說,最好的解決方案是組合公鑰和金鑰體系來獲得公鑰演算法的安全和金鑰演算法的速度優勢。這樣的協議被成為數字信封技術,在2.2.4中有詳細的描述。
即使使用者的私鑰不可獲得,公鑰演算法有時候也可能是脆弱的。一個身份認證的攻擊將允許攻擊者使用自己的公鑰,並將其繫結到別人的名字上,從而獲得資料。在一些情況下,公鑰演算法不是必須的,獨自使用私鑰演算法就足夠了。這些包括安全的金鑰傳輸可以發生的位置。例如,使用者之間的私有通訊。它業包含任何一個認證點知道和管理所有金鑰的情況,比如,一個選定的英航系統。因為認證方已經知道所有人的金鑰,沒有必要再使用公鑰和私鑰。然而,這樣的系統在使用者數量變的很大的時候,會變得越來越難維護;這在公鑰系統中則不會有任何限制。
公鑰演算法通常在單使用者環境下沒必要使用。例如,你想保證你私人檔案的加密,你可以使用金鑰加密演算法來實現,把你私人的密碼作為金鑰。通常,公鑰演算法更適用於開放的多使用者環境。
公鑰演算法不意味著取代金鑰演算法,但可以支援它,使得它更安全。公鑰技術首先使用在金鑰系統的金鑰建立階段;這個至今業是它的一個主要功能。金鑰演算法在我們過去的學習和工作中起到了重要的作用。一些過程中金鑰演算法使用使用塊加密和流加密。
2.1.4 什麼是塊加密?
塊加密是一種對稱金鑰加密演算法,將固定長度塊的明文資料轉化為相同長度的密文資料。這個轉化發生在使用者提供的金鑰的作用下。解密使用相同的金鑰實現相反的過程。固定的長度被成為塊長度,對多數塊加密,塊長度是64位元。在接下來的日子將會增加到128位元,因為過程越來越複雜了。
從數學背景來說:因為不同的明文塊對映我ibutongd密文塊(為了解密唯一),塊加密對所有可能的資訊提供了一個轉化方案。當我們使用一個塊演算法來加密一個特定長度的資料,我們使用不同的模式操作。為了有用,模式必須至少在加密中是安全和有效的。模式整合了基礎的塊操作並增加了屬性。標準的DES模式在FIPS 81和ANSI X3.106中定義。一個更通用的規範版本ISO92b整理了DES的4種模式。電子碼書(ECB),加密塊級聯(CBC),加密反饋(CFB),和輸出反饋(OFB)。關於塊演算法的更多資訊和其它的演算法可以在密碼學教科書中找到。
2.1.4.1 什麼是迭代塊加密
迭代塊加密演算法使用數輪加密加密明文。在每一輪中,使用一個子金鑰對資料實施相同的轉化。子金鑰集合通常是從使用者提供的金鑰通過特定的演算法分散出來的。子金鑰的集合被成為金鑰日程。迭代的輪數依賴於特定的安全等級以及效率的考慮。在大多數場景下,增加迭代的次數將為塊演算法增加安全等級,但是對一些演算法,迴圈的次數需要符合演算法的限制。Feistel演算法是迭代塊演算法的一個特定的類用來重複應用相同的轉化呼叫。Feistel加密有時候被成為類DES的演算法。
Feistel將金鑰分為兩組,採用異或和左右互換的方式操作。
2.1.4.2 什麼是ECB模式
每塊獨立運算,塊之間沒有關係。
2.1.4.3 什麼是CBC模式
上一塊運算的輸出作為扭轉變數,和下一塊的資料異或,作為下一個塊運算的輸入。並將結果直接輸出
2.1.4.4 什麼是CFB模式
上一個運算的輸出異或上一個運算的資料作為扭轉變數,作為下一個塊運算的輸入。並將結果異或當前輸入資料作為輸出。
2.1.4.5 什麼是OFB模式
上一個運算的輸出作為扭轉變數,作為下一個塊運算的輸入。並將結果異或下一塊資料作為當前輸入資料作為輸出。
2.1.5 什麼是流演算法
流演算法是一類對稱加密演算法。流演算法被設計為比塊演算法更快。塊演算法同通常操作大資料塊,流演算法一般操作明文的小單元,通常是位元級別的,這些小明文單元在傳輸和加密的時候經常是不同的。
流加密通常被成為密碼流。加密是結合金鑰流和明文的操作,通常是位元級別的XOR操作。金鑰流的生成可以和明文以及演算法無關,被成為自同步。通常流加密設計為同步的流演算法。
一次性填充,當前流演算法最關注的通常是理論上的一次性填充。一個一次性填充,有時候也叫做Vernam密碼板,使用隨機生成的位元串。金鑰流的位元數和明文訊息的位元數長度一致,即使攻擊者看到密文,它也只能猜到特定長度的明文。
2.1.6 什麼是雜湊函式
雜湊函式H是將輸入的m轉化並返回固定長度串(也被成為雜湊值h)的方法,h = H(m)。雜湊函式通常用來實現一些擴充套件的屬性,對雜湊函式基本的需求如下:
輸入可以是任何長度
輸出必須是固定長度
H(x)的計算是與給定的x相關的。
H(x)是單向的
H(x)是非碰撞的。
雜湊函式H如果難於反轉,就被成為單向的。難以反轉就意味著對給定的雜湊值h,從計算上難以發現輸入值x,滿足H(x) = h。如果給定一個訊息x,從計算上難以發現一個訊息y,使得H(x) = H(y),那麼H就可以稱為無碰撞的雜湊函式。
雜湊值標識著長訊息計算的縮影,這個值業被稱為訊息摘要。可以認為訊息摘要是某個大文件的數碼指紋。比如眾所周知的MD2,MD5和SHA。或許雜湊函式的主要作用在於訊息的數字簽名。因為雜湊函式比加密和數字簽名演算法塊的多,可以用來計算大文件的數字簽名或者完整性檢查。
2.1.7 什麼是訊息認證碼
訊息認證碼(MAC)是一個認證的標籤(也被叫做校驗),對訊息使用特定的認證方案,金鑰。和數字簽名不同,MAC計算和校驗都使用相同的金鑰,所以它只能用作內部校驗。有4種型別的MACs:
1.無安全條件。
2.基於雜湊函式。
3.基於流加密。
4.基於塊加密。
Simons和Stinson發表了一個無安全條件的,基於一次性填充的MAC計算。
Lai, Ruepple,和Woolven 發表了基於流演算法的MAC。在它們打算髮中,一個給定的流演算法用來分割訊息成為兩個子流,每個流都做LFSR,校驗碼是兩個LFSRs的最終狀態。
訊息認證碼業可以從塊演算法中獲得,DES-CBC MAC在美國和國際標準上廣泛使用。基本的原理就是使用DES CBC加密訊息,並且把密文中的最後一塊作為校驗碼輸出。
2.1.8 什麼是互動式證明和無認知證明?
通常意義上的互動式證明是兩方中的一方試圖對另外一方證明一個特定的事實,一方叫做證明者,另一方叫做驗證者。一個互動式證明通常採用挑戰-響應的協議,證明者和驗證者交換訊息,驗證者在協議最後輸出“接受”或者“拒絕”。從理論之外講,互動式認證通常被應用在演算法和電腦保安,比如身份識別和認證中使用。在這種情況下,目的通常是為了驗證驗證者的身份,比如驗證者的私鑰。
無認知證明,驗證者對要證實的事實本身沒有意識(除了正確本身),也不能從證明者身上學習。在無認知互動下,驗證者甚至之後都不知道如何向其它人證明。一個典型的無認知證明過程由一個驗證者的訊息承諾,以及驗證者的挑戰和驗證者的響應組成。過程可以被重複許多次。基於驗證者的所有輪的響應,驗證者來決定是否接受或者拒絕互動。
讓我們考慮一個著名的例子,叫做阿里巴巴的洞。Alice想向Bob證明她知道開啟R-S洞口的密碼,但是她不想把密碼告訴Bob。在這種前提下,Alice走到R-S門前,而Bob走到P點的位置等待。並在R或者S兩個方面叫Alice。如果Alice不知到密碼(比如“芝麻開門”)那麼她只有50%的機會從響應的口出來。Bob可以按他的意思重複很多次,直到他確認Alice知道密碼。不管互動重複多少次,Bob始終不知到密碼。
有很多的無認知和互動式協議在今天作為身份認證使用。Fiat-Shamir協議是第一個實踐的無認知協議,基於因式分解的難度實現。一個更通常的基於Fiat-Shamir協議的是Feige-Fiat-Shamir過程。Guillon和Quisquater進一步發展了Fiat-Shamir的協議,節省了記憶體的使用,增加了互動性。
依賴於互動式認證的身份標識方案通常轉化為數字簽名方案。
2.1.9 什麼是祕密共享方案
祕密共享的緣起是來自於金鑰管理,在一些情況下,一個金鑰往往需要提供來對很多重要的檔案訪問。如果這樣的金鑰丟失,那麼所有的重要檔案將變得不能訪問。祕密分享的基本想法就是把金鑰分成若干片給若干人保管,這些人中特定的組合可以一起恢復金鑰。
著名的問題(n,m)問題。大門有n個鑰匙孔,有m個人持有鑰匙,其中任何n個人都可以在一起開門,而任何n-1的人都打不開。
2.2 密碼學的簡單應用
2.2.1 什麼是隱私
隱私恐怕是密碼學最關注的應用。密碼學可以通過使用加密簡單的實現隱私。某人為了閱讀私有的資料,必須先解密。注意,有時候某些資訊不希望被任何人看到,在這種情況下,資訊必須使用反向不可逆的方式儲存。比如,典型的多使用者系統,沒有人希望其它人知道自己的密碼,通常密碼錶中儲存的是密碼的雜湊值,而不是密碼本身。這允許系統來驗證使用者密碼的有效性,而不儲存金鑰。
2.2.2 什麼是數字簽名,什麼是認證?
認證是一個人向人證明特定資訊的過程。通常人們希望驗證文件的作者,傳送者的身份,文件的時間,電腦使用者的身份認證等等。通過密碼學的數字簽名,可以達到以上的要求。文件的數字簽名是依賴於文件的內容和簽名者私鑰實現的。它一般通過使用一個雜湊函式和一個私鑰簽名函式來實現。但也有其它的實現。
每天,人們把它們的名字簽署到信件上,信用卡收條,和其它的文件上,來標識對內容的認可。它們的驗證者就是資料的發起者。這允許其他人通過簽名來驗證其它的訊息。然而,這是可以偽造的,因為人們可以把簽名從一個文件上移動下來放到另外的上面。數字簽名和手寫簽名都依賴於很難找到有倆人擁有相同的簽名。使用者通過每個人的唯一資訊使用公鑰演算法來計算數字簽名。當公鑰演算法作為加密演算法的時候,傳送者使用接受者的公鑰。當公鑰演算法使用計算數字簽名的時候,傳送者使用私鑰對文件的數字指紋進行加密。任何有他公鑰的人都可以進行校驗。
加入Alice想傳送一個簽名的文件給Bob。首先對訊息使用雜湊函式,產生一個訊息摘要。訊息摘要可以認為是訊息的短版本。事實上,雜湊函式的工作也包括把訊息降到指定的長度以內。為建立數字簽名,使用者對訊息摘要簽名並把它附在訊息上。Alice將加密的訊息摘要和訊息傳送給Bob,他可以選擇加密或者不加密。Bob收到訊息後,它必須使用相同的雜湊函式對訊息進行摘要,並用Alice的公鑰解密訊息摘要,對其進行比較。如果兩者相同,成功驗籤,否則為偽造,或者傳輸有錯誤。
這種型別的數字簽名有一個顯著的問題,Alice不僅僅對特定的訊息簽名,也對其它的可能訊息進行簽名。當兩個訊息的雜湊值相同,那麼成為一個碰撞。所以對多數數字簽名演算法,無碰撞的雜湊函式是必要的。從時間節省和其它的角度,使用雜湊函式比將原有訊息全部簽名更好。然而有一種叫做生日攻擊的攻擊基於這個事實:兩個有相同雜湊值的訊息比從雜湊值中恢復資料更容易。事實上,一群超過23人的團體,兩個或者更多的人有同一天生日的概率高達50%。
2.2.3 什麼是金鑰協商協議?
一個金鑰協商協議,也被叫做金鑰交換協議,是兩個或者更多方在金鑰加密體系協商使用金鑰的一系列步驟。這些協議允許人們在不安全的通道內自由的安全的共享金鑰,而不需要一個預先建立的安全通道的支援。
假如Alice和Bob希望使用一個金鑰演算法來安全通訊。它們首先需要覺得一個共享金鑰。取代Bob打電話給Alice來確定金鑰縮帶來的被監聽的風險,它們決定使用一個金鑰協商協議。通過使用金鑰協商協議,Alice和Bob可以在一個非安全的環境下交換金鑰。這個協議的一個例子是Diffie-Hellman金鑰協商。在許多場景下,公鑰演算法被金鑰協商協議所採用。另外一個使用的金鑰協商的例子是數字信封。
2.2.4 什麼是數字信封?
當使用金鑰演算法系統,使用者首先建立過程金鑰,也就是一個金鑰被用於一個訊息或者通訊過程。為了降低金鑰參與傳輸的風險。這是作為金鑰管理的問題。公鑰演算法提供了這個問題框架上的解釋方案被成為數字信封。
數字信封由使用金鑰加密的資料,和一個加密的金鑰組成。數字信封通常使用公鑰演算法加密金鑰。這不是必要的,Alice和Bob如果已經建立了金鑰,在數字信封中也可以使用金鑰來加密過程金鑰。
假設Alice想傳送一個訊息給Bob,使用金鑰演算法加密訊息,使用公鑰演算法傳輸加密金鑰。Alice選擇了一個金鑰,並且使用它加密訊息,然後使用Bob的公鑰加密金鑰。她傳送給Bob加密資料和加密金鑰。當Bob想要讀取訊息,需要用它的私鑰解密金鑰,然後用金鑰解密訊息。如果是一個多地址的傳輸,比如電子郵件,可以很簡單的擴充套件。如果Alice的訊息同時發給Bob和Carol,加密的訊息可以是相同的拷貝,但加密的金鑰是不同的。
這個技術用在經常切換金鑰的場合,經常切換金鑰有助於安全。
數字信封不僅僅解決金鑰管理問題,它們也提升了(相對於純公鑰系統加密)效率,而沒有降低安全性。增加的效率是通過使用金鑰演算法加密訊息帶來的。
數字信封技術是一個金鑰交換的方法,但是不是所有的金鑰交換都用數字信封。
2.2.5 什麼是身份認證
身份認證是一個人或者實體驗證另外一個人或者實體的過程。在我們日常生活中,我們通過物理特性來認證我們的家人,朋友和夥伴,比如聲音,臉或者其它的特質。這些特質成為生物識別,可以在計算機網路中通過特定的硬體使用。網路中的實體通常使用演算法方式互相認證。
一個身份認證方案允許Alice向Bob證明自己,而另外的人即便監聽業不能在後來假冒Alice。一個例子是無認知互動的身份認證。無認知互動允許人們通過它們特定的屬性表明自己。比如Alice可以解開魔方,並且想向Bob證明,而不給出解決方案。它們可以如下操作,Alice把模仿給Bob,Bob打亂魔方給Alice,Alice轉過身子,解開魔方交給Bob。因為Bob看到Alice解開了模仿,但是他不知到怎麼解決。這個想法依賴於每個人都有“魔方”和它的答案。系統的安全依賴於解開模仿的困難程度。在上面的例子中,如果Alice是唯一能解開魔方的人,那麼Bob就可以認定她是Alice了。原理是把每個人和唯一的東西關聯起來;有些只能那個人解決的問題。這可以有效的替代人們的臉或者聲音這種物理世界上唯一的屬性。驗證和身份認證是不同的。身份認證需要校驗者確定和其它實體的區別。然而驗證只需要當前實體的資訊,而且,身份認證必須被定義為給定實體的唯一標識,驗證並不需要唯一性。比如,有人登入到了一個非唯一標識的公共賬戶上,只需要知道共享密碼就好。它們被驗證作為使用者賬戶之一。進一步說,身份認證不再需要使用者通常意義的驗證了。
2.3 困難問題
2.3.1 什麼是困難問題?
公鑰演算法體系是基於一些很難解決的問題的基礎上。這種情況下的困難指的是特定問題的解決非常複雜。這些問題成為困難問題。最眾所周知的問題是因數分解,定理的論證和遊商問題。
這種問題有兩個主要的演算法關注的類 - P 和 NP。 很容易實現, P的問題可以在有限的時間內解決,然而NP的問題則很難在有限的時間內解決。NP的另外一個定義在附錄裡。任何一個問題都有可能處在P和NP狀態,但是我們不知到是否P = NP或者不等。例如,將兩個數相乘是P, 相乘的兩個數位元長度為k,複雜度為k^2。因式分解為NP,因為此類問題很難在特定時間解決。但是我們沒法證明N = NP。因為NP往往比較困難。
2.3.2 什麼是單向函式?
單向函式是數學意義的函式,從一個方向計算比較簡單,而另一個方向比較難。
2.3.3 什麼是因式分解問題。
將兩個素數相乘是很容易的,不過將結果反向推倒兩個素數是困難的。
這是RSA演算法的數學原理之一。使用者很難通過公鑰n反推因子p,q,進而獲得私鑰e。
2.3.4 什麼是當今使用的最好的因式分解方法?
...
2.3.5 因式分解能力有什麼可能的提高?
...
2.3.6 RSA因式分解的挑戰是什麼?
...
2.3.7 什麼是離散對數問題?
對特定的基數g和模數n,從指數x計算對數y是容易的 y = g^x mod n 。 而由對數y反向推導x是非常困難的。
這是RSA加密的數學原理之一。使用者很難通過簽名的資料反推私鑰。
2.3.8 什麼是當今使用的最好的離散對數方法?
...
2.3.9 什麼是離散對數問題理論突破的前景?
總體來說,很難。
2.3.10 什麼是橢圓曲線演算法?
ECC作為橢圓演算法,是基於近世代數和數論的橢圓曲線,原理就是通過兩個點的切線查詢與橢圓的交點是容易的,反之是困難的。
2.3.11 什麼是基於格子的加密演算法?
這個我也沒看懂...
2.3.12 其它的困難問題有哪些?
...
2.4 安全性分析
2.4.1 什麼是安全性分析?
安全性分析是加密演算法的反向操作:是科學的破解程式碼,解密密碼,打破認證方案,並且通常打破演算法協議。
為了設計一個強大的加密演算法或者加密協議,應該使用安全性分析來發現和修正弱點。這恰恰是為什麼提供給公眾監督的演算法更受到信任的原因。例如,DES已經作為公開演算法釋出多年了,並以此受到信任,然而skipjack作為安全演算法很長時間卻受到很少的信任。有一個基本的共識,演算法的安全性不依賴於演算法的祕密性。相反的,演算法應該公開,弱點應該被揭示出來。
不同的安全性分析的技術用來解密演算法系統被稱為攻擊。一些攻擊是通用的,另外一些則對應於特定的演算法體系。一些廣泛認知的攻擊手段在問題2.4.2中提到。
2.4.2 一些常見的安全性分析攻擊基本型別
安全性分析攻擊通常分為六個大類,以區分發起攻擊可能的演算法。列舉到這裡目錄中的攻擊手段以密碼分析的手段質量為順序。以安全性分析的困難程度反向順序。在所有情況下,密碼分析的目標都是為了在沒有擴充套件資訊的前提下解密解密新的密文片段。密碼分析的理想是獲得金鑰。
一個密文攻擊是分析演算法在沒有與它相關的明文密碼分析得到的密文樣本。這個資料相對是比較容易獲得的,但是一個成功的密文攻擊相對是困難的,需要獲得非常大量的密文樣本一個已知的銘文攻擊是在密碼分析得到的密文樣本和相應的明文。
選定明文攻擊是一種在密碼分析是能夠選擇一個明文的數量,然後獲得相應的加密密文。
一個自適應選擇明文攻擊是一種選擇明文攻擊的特殊情況,在密碼分析是能夠動態選擇明文樣品的,改變以前加密的結果,根據他或她的選擇。
一個選擇密文攻擊是一個在密碼分析者可能會選擇獲得相應的解密明文的密檔案和嘗試。這種型別的攻擊通常是最適用於公共金鑰密碼系統。
一個自適應選擇密文是上述攻擊的自適應版本。密碼分析,可以安裝在一個場景中,他有一塊解密硬體免費使用這種型別的攻擊,但無法從中提取解密金鑰。
注:安裝不僅對加密演算法的密碼分析攻擊可以,但也類似,對數字簽名演算法(見2.2.2),MACing的演算法(見2.1.7),偽隨機數發生器(見問題2.5.2)。
2.4.3 什麼是窮盡金鑰搜尋?
窮盡金鑰搜尋,或蠻力搜尋,嘗試每一個可能的金鑰反過來,直到正確的關鍵是確定的基本技術。為了確定正確的金鑰,可能有必要擁有明文和其相應的密文,如果明文一些識別CH aracteristic,密文單就足夠了。窮盡金鑰搜尋,可以安裝在任何加密的密碼弱點在關鍵的時間表(見2.1.4題)有時可以幫助改善窮盡金鑰搜尋攻擊的效率。
在技術和計算效能的進展將永遠窮盡金鑰搜尋攻擊越來越實際針對一個固定長度的金鑰。當DES(見3.2節)的設計,它被普遍認為窮盡金鑰搜尋對安全沒有在硬體上的一個巨大的金融投資[DH77]。然而,多年來,這樣的攻擊線將成為一個潛在的對手[Wie94]越來越有吸引力。窮盡金鑰搜尋的一個有用的文章,可以發現在1997年冬季發行CR97] CryptoBytes的。
窮盡金鑰搜尋,也可以在標準桌面工作站和個人電腦上執行的軟體。而DES的56位金鑰空間的窮盡搜尋將採取的最快的一般用途的電腦可今天數萬或數百年來,網際網路的發展已分割槽的金鑰空間,可能要利用一個分散式檢索上千臺機器和散發了大量的計算機的每個小部分。以這種方式和使用一個特別設計的超級計算機,DES金鑰確實打破於1999年1月在22小時內(見2.4.4問題)。
2.4.4 什麼是RSA金鑰挑戰?
RSA實驗室在1997年1月開始的RSA金鑰挑戰。挑戰的目標是量化的安全金鑰密碼提供各種規格的金鑰(見2.1.2題)。預計從這些比賽中獲得的資訊,研究人員和開發人員的價值,因為他們估計打擊窮盡金鑰搜尋演算法或應用的實力。
差分分析是一個攻擊型迭代分組密碼(見2.1.4.1問題上可以安裝墨菲[Mur90] FeAl合金的4(見3.6.7題)的攻擊,但他們首次推出的這些技術。後來改進和完善Biham和Shamir[BS91a[B S93b]誰使用他們攻擊DES差分分析(見3.2節)基本上是選定明文攻擊(見2.4.2題);重新在於分析演化的兩個,因為它們是根據相同的金鑰加密的相關明文之間的差異,通過仔細分析產品。可用的資料是,概率可以被分配到每一個可能的金鑰,並最終最有可能的關鍵是確定正確的。
鬆井和山岸[MY92]首先設計了線性密碼分析的對FEAL(見3.6.7問題)的攻擊。這是擴大由鬆井[Mat93] ATT ACK的DES(見3.2節)。線性密碼分析是已知明文攻擊(見2.4.2題),它採用了線性近似描述塊密碼的行為。給予足夠的明文和對應的密文對位有關的關鍵資訊,可以得到的,增加的資料量通常會給予更高的成功概率。
...
2.4.5 什麼是同步塊演算法最重要的攻擊手段?
...
2.4.6 針對雜湊函式的技術?
生日攻擊...
2.4.7 針對流演算法最主要的攻擊?
...
2.4.8 MAC演算法的最主要的攻擊?
...
2.5 演算法中需要支援的工具
2.5.1 什麼是素性測試?
素性測試是證明一個數是素數(大於1的整數是素數,如果它是隻能由自己和1整除)的過程。它是依賴祕密的素數,如RSA系統,密碼系統的金鑰生成過程中使用。概率素性測試是一個過程,證明了一個數字,是素數或者是素數的概率高。
為了產生一個素數,需要生成隨機數,並且測試素性,直到確認其中之一為素數。
通常建議使用概率素性測試,這樣比實際證實一個數是素數更快。可以用素性測試判斷是否一個數字是素數,並只有很小的可能有錯誤。
2.5.2 什麼是隨機數生成?
隨機數生成在演算法操作中使用的廣度很大,比如金鑰生成和挑戰回應過程。隨機數生成器是一個函式出書一系列的0或者1的點,下一個bit不能由上一個bit決定。然而真正的隨機數發生器在計算機上是很困難的,因為及栓劑是精確裝置。因此,如果相同的隨機數生成器執行兩次,將收到相同的結果。真正的隨機數發生器也在使用,不過他們很難構建。他們通常採用一些物理世界的特性作為輸入,比如放射性物質或者滑鼠的等待時間等。
因為這些困難,計算機上的隨機數生成通常使用偽隨機數生成。偽隨機數基於每個種子生成一系列表面上看起來符合描述的位元序列。偽隨機數生成器經常基於演算法函式比如塊演算法或者流演算法。例如使用DES。
這章簡述了密碼學及相關領域,是下一章的背景工作。
2.1 密碼學工具
2.1.1 什麼是公鑰演算法?
在傳統的密碼學中,訊息的傳送者和接收者知道和使用相同的金鑰;傳送者使用金鑰加密訊息,接收者使用相同的金鑰解密訊息。這個方法被成為金鑰演算法或者對稱演算法。主要的挑戰是使得傳送者和接收這確定金鑰並且不讓其它任何人知道。如果它們處在分離的物理座標,它們必須相信一個載體,電話系統,或者其它的中間傳輸系統來防止金鑰的洩漏。在互動中偷聽到金鑰的任何人,都可以讀取,修改,和使用金鑰加密,以及認證訊息。一般來說,金鑰的傳輸和儲存被成為金鑰管理;所有的演算法系統必須關注它們的金鑰管理問題。因為在金鑰加密系統中的所有金鑰必須保證安全,金鑰加密演算法經常很難實現金鑰管理,特別是有很多使用者的開放式系統。
為了解決金鑰管理的問題,Whitfield Diffie和mARTIN hELLMAN在1976年引入了公鑰演算法的概念。公鑰演算法有兩種主要用處,加密和數字簽名。在它們的系統中,每個人有一對金鑰,一個叫做公鑰,另一個叫做私鑰。公鑰是公開的,然而私鑰是祕密持有的。不許要傳送者和接收者共享安全資訊,所有的交流僅使用公鑰發起,私鑰永遠不會傳輸或共享。在這個系統中,它不再需要相信通訊的安全。只需要確認與公鑰繫結的使用者是在可信任路徑下的。任何人都可以只使用公共資訊傳送不同的訊息,但是訊息只能被私鑰解密。而且,公鑰演算法不僅僅用作加解密,業用做鑑權和其它不同的技術。
在一個公鑰演算法系統,私鑰總是在數學層面上和公鑰連結,因此,總是有可能使用從公鑰派生出來的私鑰來攻擊一個公鑰系統。典型的防禦這種攻擊的方法是,從公鑰派生私鑰儘可能的困難。比如,一些公鑰演算法系統被設計為從公鑰分散私鑰需要因式分解一個大數字,這種分解是很困難的,這就是RSA公鑰系統的原理。
加密
當Alice希望傳送一個安全的訊息給Bob,它在列表中查詢Bob的公鑰,使用它加密訊息,並且傳送掉。Bob使用它的私鑰解密訊息,並閱讀。監聽的人不能解密訊息。任何人都可以傳送一個加密的訊息給Bob,但只有Bob可以讀。(因為只有Bob有私鑰)
數字簽名
為了簽署一個訊息,Alic使用她的私鑰和訊息本身。輸出被稱為數字簽名,並被附加到訊息上。為了驗證簽名,Bob整理訊息,並且驗證使用Alice的公鑰解開簽名。如果結果是正確的,訊息沒被篡改。如果結果是錯誤的,簽名被篡改了。
一個正確的公鑰演算法的歷史由Diffie給出。
2.1.2 什麼是金鑰演算法?
金鑰演算法有時候被成為對稱演算法。它是演算法中比較傳統的形式,同一個金鑰可以用來加密和解密一個訊息。金鑰演算法不僅僅用作加密,業用作健全。這樣的技術被成為訊息認證碼(MACs).
金鑰演算法的主要問題是傳送者和接受者協議一個金鑰而不被其它任何人發現。這需要一個雙方都不怕監聽的方案。然而,金鑰演算法的優勢是比公鑰演算法快很多。金鑰演算法中最通常的技術是塊加密,流加密,和訊息認證碼。
2.1.3 公鑰演算法和金鑰演算法相比的優缺點?
公鑰演算法的主要優勢是增加了安全性和方便性:私鑰不許要傳輸或者共享給任何人。在金鑰系統中,一般來說,金鑰需要傳送,因為相同的金鑰在加密和解密中都需要。這是敵人在傳輸中獲取金鑰提供了機會。公鑰演算法的另一個主要優勢是它可產生不可抵賴的的數字簽名。通過金鑰演算法體系的認證需要共享一些祕密資訊,有時候還需要信任第三方體系。作為結果,傳送者可以抵賴之前的認證,聲稱共享的祕密被共享金鑰的另一方洩漏了。比如,Kerberos金鑰認證系統包含了一箇中央資料庫,儲存了所有使用者的金鑰的備份。一個對資料庫的攻擊,將廣受影響。另一方面,公鑰認證組織了這種型別的抵賴;每個使用者有責任保護他自己的私鑰不被洩漏。公鑰認證的這種屬性通常被成為不可抵賴性。
使用公鑰演算法實現加密的主要缺點是速度,大多數的金鑰加密方法都比當前的公鑰加密演算法顯著的塊。所以公鑰演算法和金鑰演算法可以一起使用來獲得兩者各自的優勢。對加密來說,最好的解決方案是組合公鑰和金鑰體系來獲得公鑰演算法的安全和金鑰演算法的速度優勢。這樣的協議被成為數字信封技術,在2.2.4中有詳細的描述。
即使使用者的私鑰不可獲得,公鑰演算法有時候也可能是脆弱的。一個身份認證的攻擊將允許攻擊者使用自己的公鑰,並將其繫結到別人的名字上,從而獲得資料。在一些情況下,公鑰演算法不是必須的,獨自使用私鑰演算法就足夠了。這些包括安全的金鑰傳輸可以發生的位置。例如,使用者之間的私有通訊。它業包含任何一個認證點知道和管理所有金鑰的情況,比如,一個選定的英航系統。因為認證方已經知道所有人的金鑰,沒有必要再使用公鑰和私鑰。然而,這樣的系統在使用者數量變的很大的時候,會變得越來越難維護;這在公鑰系統中則不會有任何限制。
公鑰演算法通常在單使用者環境下沒必要使用。例如,你想保證你私人檔案的加密,你可以使用金鑰加密演算法來實現,把你私人的密碼作為金鑰。通常,公鑰演算法更適用於開放的多使用者環境。
公鑰演算法不意味著取代金鑰演算法,但可以支援它,使得它更安全。公鑰技術首先使用在金鑰系統的金鑰建立階段;這個至今業是它的一個主要功能。金鑰演算法在我們過去的學習和工作中起到了重要的作用。一些過程中金鑰演算法使用使用塊加密和流加密。
2.1.4 什麼是塊加密?
塊加密是一種對稱金鑰加密演算法,將固定長度塊的明文資料轉化為相同長度的密文資料。這個轉化發生在使用者提供的金鑰的作用下。解密使用相同的金鑰實現相反的過程。固定的長度被成為塊長度,對多數塊加密,塊長度是64位元。在接下來的日子將會增加到128位元,因為過程越來越複雜了。
從數學背景來說:因為不同的明文塊對映我ibutongd密文塊(為了解密唯一),塊加密對所有可能的資訊提供了一個轉化方案。當我們使用一個塊演算法來加密一個特定長度的資料,我們使用不同的模式操作。為了有用,模式必須至少在加密中是安全和有效的。模式整合了基礎的塊操作並增加了屬性。標準的DES模式在FIPS 81和ANSI X3.106中定義。一個更通用的規範版本ISO92b整理了DES的4種模式。電子碼書(ECB),加密塊級聯(CBC),加密反饋(CFB),和輸出反饋(OFB)。關於塊演算法的更多資訊和其它的演算法可以在密碼學教科書中找到。
2.1.4.1 什麼是迭代塊加密
迭代塊加密演算法使用數輪加密加密明文。在每一輪中,使用一個子金鑰對資料實施相同的轉化。子金鑰集合通常是從使用者提供的金鑰通過特定的演算法分散出來的。子金鑰的集合被成為金鑰日程。迭代的輪數依賴於特定的安全等級以及效率的考慮。在大多數場景下,增加迭代的次數將為塊演算法增加安全等級,但是對一些演算法,迴圈的次數需要符合演算法的限制。Feistel演算法是迭代塊演算法的一個特定的類用來重複應用相同的轉化呼叫。Feistel加密有時候被成為類DES的演算法。
Feistel將金鑰分為兩組,採用異或和左右互換的方式操作。
2.1.4.2 什麼是ECB模式
每塊獨立運算,塊之間沒有關係。
2.1.4.3 什麼是CBC模式
上一塊運算的輸出作為扭轉變數,和下一塊的資料異或,作為下一個塊運算的輸入。並將結果直接輸出
2.1.4.4 什麼是CFB模式
上一個運算的輸出異或上一個運算的資料作為扭轉變數,作為下一個塊運算的輸入。並將結果異或當前輸入資料作為輸出。
2.1.4.5 什麼是OFB模式
上一個運算的輸出作為扭轉變數,作為下一個塊運算的輸入。並將結果異或下一塊資料作為當前輸入資料作為輸出。
2.1.5 什麼是流演算法
流演算法是一類對稱加密演算法。流演算法被設計為比塊演算法更快。塊演算法同通常操作大資料塊,流演算法一般操作明文的小單元,通常是位元級別的,這些小明文單元在傳輸和加密的時候經常是不同的。
流加密通常被成為密碼流。加密是結合金鑰流和明文的操作,通常是位元級別的XOR操作。金鑰流的生成可以和明文以及演算法無關,被成為自同步。通常流加密設計為同步的流演算法。
一次性填充,當前流演算法最關注的通常是理論上的一次性填充。一個一次性填充,有時候也叫做Vernam密碼板,使用隨機生成的位元串。金鑰流的位元數和明文訊息的位元數長度一致,即使攻擊者看到密文,它也只能猜到特定長度的明文。
2.1.6 什麼是雜湊函式
雜湊函式H是將輸入的m轉化並返回固定長度串(也被成為雜湊值h)的方法,h = H(m)。雜湊函式通常用來實現一些擴充套件的屬性,對雜湊函式基本的需求如下:
輸入可以是任何長度
輸出必須是固定長度
H(x)的計算是與給定的x相關的。
H(x)是單向的
H(x)是非碰撞的。
雜湊函式H如果難於反轉,就被成為單向的。難以反轉就意味著對給定的雜湊值h,從計算上難以發現輸入值x,滿足H(x) = h。如果給定一個訊息x,從計算上難以發現一個訊息y,使得H(x) = H(y),那麼H就可以稱為無碰撞的雜湊函式。
雜湊值標識著長訊息計算的縮影,這個值業被稱為訊息摘要。可以認為訊息摘要是某個大文件的數碼指紋。比如眾所周知的MD2,MD5和SHA。或許雜湊函式的主要作用在於訊息的數字簽名。因為雜湊函式比加密和數字簽名演算法塊的多,可以用來計算大文件的數字簽名或者完整性檢查。
2.1.7 什麼是訊息認證碼
訊息認證碼(MAC)是一個認證的標籤(也被叫做校驗),對訊息使用特定的認證方案,金鑰。和數字簽名不同,MAC計算和校驗都使用相同的金鑰,所以它只能用作內部校驗。有4種型別的MACs:
1.無安全條件。
2.基於雜湊函式。
3.基於流加密。
4.基於塊加密。
Simons和Stinson發表了一個無安全條件的,基於一次性填充的MAC計算。
Lai, Ruepple,和Woolven 發表了基於流演算法的MAC。在它們打算髮中,一個給定的流演算法用來分割訊息成為兩個子流,每個流都做LFSR,校驗碼是兩個LFSRs的最終狀態。
訊息認證碼業可以從塊演算法中獲得,DES-CBC MAC在美國和國際標準上廣泛使用。基本的原理就是使用DES CBC加密訊息,並且把密文中的最後一塊作為校驗碼輸出。
2.1.8 什麼是互動式證明和無認知證明?
通常意義上的互動式證明是兩方中的一方試圖對另外一方證明一個特定的事實,一方叫做證明者,另一方叫做驗證者。一個互動式證明通常採用挑戰-響應的協議,證明者和驗證者交換訊息,驗證者在協議最後輸出“接受”或者“拒絕”。從理論之外講,互動式認證通常被應用在演算法和電腦保安,比如身份識別和認證中使用。在這種情況下,目的通常是為了驗證驗證者的身份,比如驗證者的私鑰。
無認知證明,驗證者對要證實的事實本身沒有意識(除了正確本身),也不能從證明者身上學習。在無認知互動下,驗證者甚至之後都不知道如何向其它人證明。一個典型的無認知證明過程由一個驗證者的訊息承諾,以及驗證者的挑戰和驗證者的響應組成。過程可以被重複許多次。基於驗證者的所有輪的響應,驗證者來決定是否接受或者拒絕互動。
讓我們考慮一個著名的例子,叫做阿里巴巴的洞。Alice想向Bob證明她知道開啟R-S洞口的密碼,但是她不想把密碼告訴Bob。在這種前提下,Alice走到R-S門前,而Bob走到P點的位置等待。並在R或者S兩個方面叫Alice。如果Alice不知到密碼(比如“芝麻開門”)那麼她只有50%的機會從響應的口出來。Bob可以按他的意思重複很多次,直到他確認Alice知道密碼。不管互動重複多少次,Bob始終不知到密碼。
有很多的無認知和互動式協議在今天作為身份認證使用。Fiat-Shamir協議是第一個實踐的無認知協議,基於因式分解的難度實現。一個更通常的基於Fiat-Shamir協議的是Feige-Fiat-Shamir過程。Guillon和Quisquater進一步發展了Fiat-Shamir的協議,節省了記憶體的使用,增加了互動性。
依賴於互動式認證的身份標識方案通常轉化為數字簽名方案。
2.1.9 什麼是祕密共享方案
祕密共享的緣起是來自於金鑰管理,在一些情況下,一個金鑰往往需要提供來對很多重要的檔案訪問。如果這樣的金鑰丟失,那麼所有的重要檔案將變得不能訪問。祕密分享的基本想法就是把金鑰分成若干片給若干人保管,這些人中特定的組合可以一起恢復金鑰。
著名的問題(n,m)問題。大門有n個鑰匙孔,有m個人持有鑰匙,其中任何n個人都可以在一起開門,而任何n-1的人都打不開。
2.2 密碼學的簡單應用
2.2.1 什麼是隱私
隱私恐怕是密碼學最關注的應用。密碼學可以通過使用加密簡單的實現隱私。某人為了閱讀私有的資料,必須先解密。注意,有時候某些資訊不希望被任何人看到,在這種情況下,資訊必須使用反向不可逆的方式儲存。比如,典型的多使用者系統,沒有人希望其它人知道自己的密碼,通常密碼錶中儲存的是密碼的雜湊值,而不是密碼本身。這允許系統來驗證使用者密碼的有效性,而不儲存金鑰。
2.2.2 什麼是數字簽名,什麼是認證?
認證是一個人向人證明特定資訊的過程。通常人們希望驗證文件的作者,傳送者的身份,文件的時間,電腦使用者的身份認證等等。通過密碼學的數字簽名,可以達到以上的要求。文件的數字簽名是依賴於文件的內容和簽名者私鑰實現的。它一般通過使用一個雜湊函式和一個私鑰簽名函式來實現。但也有其它的實現。
每天,人們把它們的名字簽署到信件上,信用卡收條,和其它的文件上,來標識對內容的認可。它們的驗證者就是資料的發起者。這允許其他人通過簽名來驗證其它的訊息。然而,這是可以偽造的,因為人們可以把簽名從一個文件上移動下來放到另外的上面。數字簽名和手寫簽名都依賴於很難找到有倆人擁有相同的簽名。使用者通過每個人的唯一資訊使用公鑰演算法來計算數字簽名。當公鑰演算法作為加密演算法的時候,傳送者使用接受者的公鑰。當公鑰演算法使用計算數字簽名的時候,傳送者使用私鑰對文件的數字指紋進行加密。任何有他公鑰的人都可以進行校驗。
加入Alice想傳送一個簽名的文件給Bob。首先對訊息使用雜湊函式,產生一個訊息摘要。訊息摘要可以認為是訊息的短版本。事實上,雜湊函式的工作也包括把訊息降到指定的長度以內。為建立數字簽名,使用者對訊息摘要簽名並把它附在訊息上。Alice將加密的訊息摘要和訊息傳送給Bob,他可以選擇加密或者不加密。Bob收到訊息後,它必須使用相同的雜湊函式對訊息進行摘要,並用Alice的公鑰解密訊息摘要,對其進行比較。如果兩者相同,成功驗籤,否則為偽造,或者傳輸有錯誤。
這種型別的數字簽名有一個顯著的問題,Alice不僅僅對特定的訊息簽名,也對其它的可能訊息進行簽名。當兩個訊息的雜湊值相同,那麼成為一個碰撞。所以對多數數字簽名演算法,無碰撞的雜湊函式是必要的。從時間節省和其它的角度,使用雜湊函式比將原有訊息全部簽名更好。然而有一種叫做生日攻擊的攻擊基於這個事實:兩個有相同雜湊值的訊息比從雜湊值中恢復資料更容易。事實上,一群超過23人的團體,兩個或者更多的人有同一天生日的概率高達50%。
2.2.3 什麼是金鑰協商協議?
一個金鑰協商協議,也被叫做金鑰交換協議,是兩個或者更多方在金鑰加密體系協商使用金鑰的一系列步驟。這些協議允許人們在不安全的通道內自由的安全的共享金鑰,而不需要一個預先建立的安全通道的支援。
假如Alice和Bob希望使用一個金鑰演算法來安全通訊。它們首先需要覺得一個共享金鑰。取代Bob打電話給Alice來確定金鑰縮帶來的被監聽的風險,它們決定使用一個金鑰協商協議。通過使用金鑰協商協議,Alice和Bob可以在一個非安全的環境下交換金鑰。這個協議的一個例子是Diffie-Hellman金鑰協商。在許多場景下,公鑰演算法被金鑰協商協議所採用。另外一個使用的金鑰協商的例子是數字信封。
2.2.4 什麼是數字信封?
當使用金鑰演算法系統,使用者首先建立過程金鑰,也就是一個金鑰被用於一個訊息或者通訊過程。為了降低金鑰參與傳輸的風險。這是作為金鑰管理的問題。公鑰演算法提供了這個問題框架上的解釋方案被成為數字信封。
數字信封由使用金鑰加密的資料,和一個加密的金鑰組成。數字信封通常使用公鑰演算法加密金鑰。這不是必要的,Alice和Bob如果已經建立了金鑰,在數字信封中也可以使用金鑰來加密過程金鑰。
假設Alice想傳送一個訊息給Bob,使用金鑰演算法加密訊息,使用公鑰演算法傳輸加密金鑰。Alice選擇了一個金鑰,並且使用它加密訊息,然後使用Bob的公鑰加密金鑰。她傳送給Bob加密資料和加密金鑰。當Bob想要讀取訊息,需要用它的私鑰解密金鑰,然後用金鑰解密訊息。如果是一個多地址的傳輸,比如電子郵件,可以很簡單的擴充套件。如果Alice的訊息同時發給Bob和Carol,加密的訊息可以是相同的拷貝,但加密的金鑰是不同的。
這個技術用在經常切換金鑰的場合,經常切換金鑰有助於安全。
數字信封不僅僅解決金鑰管理問題,它們也提升了(相對於純公鑰系統加密)效率,而沒有降低安全性。增加的效率是通過使用金鑰演算法加密訊息帶來的。
數字信封技術是一個金鑰交換的方法,但是不是所有的金鑰交換都用數字信封。
2.2.5 什麼是身份認證
身份認證是一個人或者實體驗證另外一個人或者實體的過程。在我們日常生活中,我們通過物理特性來認證我們的家人,朋友和夥伴,比如聲音,臉或者其它的特質。這些特質成為生物識別,可以在計算機網路中通過特定的硬體使用。網路中的實體通常使用演算法方式互相認證。
一個身份認證方案允許Alice向Bob證明自己,而另外的人即便監聽業不能在後來假冒Alice。一個例子是無認知互動的身份認證。無認知互動允許人們通過它們特定的屬性表明自己。比如Alice可以解開魔方,並且想向Bob證明,而不給出解決方案。它們可以如下操作,Alice把模仿給Bob,Bob打亂魔方給Alice,Alice轉過身子,解開魔方交給Bob。因為Bob看到Alice解開了模仿,但是他不知到怎麼解決。這個想法依賴於每個人都有“魔方”和它的答案。系統的安全依賴於解開模仿的困難程度。在上面的例子中,如果Alice是唯一能解開魔方的人,那麼Bob就可以認定她是Alice了。原理是把每個人和唯一的東西關聯起來;有些只能那個人解決的問題。這可以有效的替代人們的臉或者聲音這種物理世界上唯一的屬性。驗證和身份認證是不同的。身份認證需要校驗者確定和其它實體的區別。然而驗證只需要當前實體的資訊,而且,身份認證必須被定義為給定實體的唯一標識,驗證並不需要唯一性。比如,有人登入到了一個非唯一標識的公共賬戶上,只需要知道共享密碼就好。它們被驗證作為使用者賬戶之一。進一步說,身份認證不再需要使用者通常意義的驗證了。
2.3 困難問題
2.3.1 什麼是困難問題?
公鑰演算法體系是基於一些很難解決的問題的基礎上。這種情況下的困難指的是特定問題的解決非常複雜。這些問題成為困難問題。最眾所周知的問題是因數分解,定理的論證和遊商問題。
這種問題有兩個主要的演算法關注的類 - P 和 NP。 很容易實現, P的問題可以在有限的時間內解決,然而NP的問題則很難在有限的時間內解決。NP的另外一個定義在附錄裡。任何一個問題都有可能處在P和NP狀態,但是我們不知到是否P = NP或者不等。例如,將兩個數相乘是P, 相乘的兩個數位元長度為k,複雜度為k^2。因式分解為NP,因為此類問題很難在特定時間解決。但是我們沒法證明N = NP。因為NP往往比較困難。
2.3.2 什麼是單向函式?
單向函式是數學意義的函式,從一個方向計算比較簡單,而另一個方向比較難。
2.3.3 什麼是因式分解問題。
將兩個素數相乘是很容易的,不過將結果反向推倒兩個素數是困難的。
這是RSA演算法的數學原理之一。使用者很難通過公鑰n反推因子p,q,進而獲得私鑰e。
2.3.4 什麼是當今使用的最好的因式分解方法?
...
2.3.5 因式分解能力有什麼可能的提高?
...
2.3.6 RSA因式分解的挑戰是什麼?
...
2.3.7 什麼是離散對數問題?
對特定的基數g和模數n,從指數x計算對數y是容易的 y = g^x mod n 。 而由對數y反向推導x是非常困難的。
這是RSA加密的數學原理之一。使用者很難通過簽名的資料反推私鑰。
2.3.8 什麼是當今使用的最好的離散對數方法?
...
2.3.9 什麼是離散對數問題理論突破的前景?
總體來說,很難。
2.3.10 什麼是橢圓曲線演算法?
ECC作為橢圓演算法,是基於近世代數和數論的橢圓曲線,原理就是通過兩個點的切線查詢與橢圓的交點是容易的,反之是困難的。
2.3.11 什麼是基於格子的加密演算法?
這個我也沒看懂...
2.3.12 其它的困難問題有哪些?
...
2.4 安全性分析
2.4.1 什麼是安全性分析?
安全性分析是加密演算法的反向操作:是科學的破解程式碼,解密密碼,打破認證方案,並且通常打破演算法協議。
為了設計一個強大的加密演算法或者加密協議,應該使用安全性分析來發現和修正弱點。這恰恰是為什麼提供給公眾監督的演算法更受到信任的原因。例如,DES已經作為公開演算法釋出多年了,並以此受到信任,然而skipjack作為安全演算法很長時間卻受到很少的信任。有一個基本的共識,演算法的安全性不依賴於演算法的祕密性。相反的,演算法應該公開,弱點應該被揭示出來。
不同的安全性分析的技術用來解密演算法系統被稱為攻擊。一些攻擊是通用的,另外一些則對應於特定的演算法體系。一些廣泛認知的攻擊手段在問題2.4.2中提到。
2.4.2 一些常見的安全性分析攻擊基本型別
安全性分析攻擊通常分為六個大類,以區分發起攻擊可能的演算法。列舉到這裡目錄中的攻擊手段以密碼分析的手段質量為順序。以安全性分析的困難程度反向順序。在所有情況下,密碼分析的目標都是為了在沒有擴充套件資訊的前提下解密解密新的密文片段。密碼分析的理想是獲得金鑰。
一個密文攻擊是分析演算法在沒有與它相關的明文密碼分析得到的密文樣本。這個資料相對是比較容易獲得的,但是一個成功的密文攻擊相對是困難的,需要獲得非常大量的密文樣本一個已知的銘文攻擊是在密碼分析得到的密文樣本和相應的明文。
選定明文攻擊是一種在密碼分析是能夠選擇一個明文的數量,然後獲得相應的加密密文。
一個自適應選擇明文攻擊是一種選擇明文攻擊的特殊情況,在密碼分析是能夠動態選擇明文樣品的,改變以前加密的結果,根據他或她的選擇。
一個選擇密文攻擊是一個在密碼分析者可能會選擇獲得相應的解密明文的密檔案和嘗試。這種型別的攻擊通常是最適用於公共金鑰密碼系統。
一個自適應選擇密文是上述攻擊的自適應版本。密碼分析,可以安裝在一個場景中,他有一塊解密硬體免費使用這種型別的攻擊,但無法從中提取解密金鑰。
注:安裝不僅對加密演算法的密碼分析攻擊可以,但也類似,對數字簽名演算法(見2.2.2),MACing的演算法(見2.1.7),偽隨機數發生器(見問題2.5.2)。
2.4.3 什麼是窮盡金鑰搜尋?
窮盡金鑰搜尋,或蠻力搜尋,嘗試每一個可能的金鑰反過來,直到正確的關鍵是確定的基本技術。為了確定正確的金鑰,可能有必要擁有明文和其相應的密文,如果明文一些識別CH aracteristic,密文單就足夠了。窮盡金鑰搜尋,可以安裝在任何加密的密碼弱點在關鍵的時間表(見2.1.4題)有時可以幫助改善窮盡金鑰搜尋攻擊的效率。
在技術和計算效能的進展將永遠窮盡金鑰搜尋攻擊越來越實際針對一個固定長度的金鑰。當DES(見3.2節)的設計,它被普遍認為窮盡金鑰搜尋對安全沒有在硬體上的一個巨大的金融投資[DH77]。然而,多年來,這樣的攻擊線將成為一個潛在的對手[Wie94]越來越有吸引力。窮盡金鑰搜尋的一個有用的文章,可以發現在1997年冬季發行CR97] CryptoBytes的。
窮盡金鑰搜尋,也可以在標準桌面工作站和個人電腦上執行的軟體。而DES的56位金鑰空間的窮盡搜尋將採取的最快的一般用途的電腦可今天數萬或數百年來,網際網路的發展已分割槽的金鑰空間,可能要利用一個分散式檢索上千臺機器和散發了大量的計算機的每個小部分。以這種方式和使用一個特別設計的超級計算機,DES金鑰確實打破於1999年1月在22小時內(見2.4.4問題)。
2.4.4 什麼是RSA金鑰挑戰?
RSA實驗室在1997年1月開始的RSA金鑰挑戰。挑戰的目標是量化的安全金鑰密碼提供各種規格的金鑰(見2.1.2題)。預計從這些比賽中獲得的資訊,研究人員和開發人員的價值,因為他們估計打擊窮盡金鑰搜尋演算法或應用的實力。
差分分析是一個攻擊型迭代分組密碼(見2.1.4.1問題上可以安裝墨菲[Mur90] FeAl合金的4(見3.6.7題)的攻擊,但他們首次推出的這些技術。後來改進和完善Biham和Shamir[BS91a[B S93b]誰使用他們攻擊DES差分分析(見3.2節)基本上是選定明文攻擊(見2.4.2題);重新在於分析演化的兩個,因為它們是根據相同的金鑰加密的相關明文之間的差異,通過仔細分析產品。可用的資料是,概率可以被分配到每一個可能的金鑰,並最終最有可能的關鍵是確定正確的。
鬆井和山岸[MY92]首先設計了線性密碼分析的對FEAL(見3.6.7問題)的攻擊。這是擴大由鬆井[Mat93] ATT ACK的DES(見3.2節)。線性密碼分析是已知明文攻擊(見2.4.2題),它採用了線性近似描述塊密碼的行為。給予足夠的明文和對應的密文對位有關的關鍵資訊,可以得到的,增加的資料量通常會給予更高的成功概率。
...
2.4.5 什麼是同步塊演算法最重要的攻擊手段?
...
2.4.6 針對雜湊函式的技術?
生日攻擊...
2.4.7 針對流演算法最主要的攻擊?
...
2.4.8 MAC演算法的最主要的攻擊?
...
2.5 演算法中需要支援的工具
2.5.1 什麼是素性測試?
素性測試是證明一個數是素數(大於1的整數是素數,如果它是隻能由自己和1整除)的過程。它是依賴祕密的素數,如RSA系統,密碼系統的金鑰生成過程中使用。概率素性測試是一個過程,證明了一個數字,是素數或者是素數的概率高。
為了產生一個素數,需要生成隨機數,並且測試素性,直到確認其中之一為素數。
通常建議使用概率素性測試,這樣比實際證實一個數是素數更快。可以用素性測試判斷是否一個數字是素數,並只有很小的可能有錯誤。
2.5.2 什麼是隨機數生成?
隨機數生成在演算法操作中使用的廣度很大,比如金鑰生成和挑戰回應過程。隨機數生成器是一個函式出書一系列的0或者1的點,下一個bit不能由上一個bit決定。然而真正的隨機數發生器在計算機上是很困難的,因為及栓劑是精確裝置。因此,如果相同的隨機數生成器執行兩次,將收到相同的結果。真正的隨機數發生器也在使用,不過他們很難構建。他們通常採用一些物理世界的特性作為輸入,比如放射性物質或者滑鼠的等待時間等。
因為這些困難,計算機上的隨機數生成通常使用偽隨機數生成。偽隨機數基於每個種子生成一系列表面上看起來符合描述的位元序列。偽隨機數生成器經常基於演算法函式比如塊演算法或者流演算法。例如使用DES。
相關文章
- RSA Lib Chapter 1 -- Introduction (RSA實驗室 第一章,密碼學介紹)APT密碼學
- RSA加密原理&密碼學&HASH加密密碼學
- iOS逆向(1)-密碼學(RSA)iOS密碼學
- IOS 逆向開發(一)密碼學 RSAiOS密碼學
- 現代密碼-公鑰密碼RSA密碼
- hust 密碼學課設 rsa引數d密碼學
- [密碼學複習]Cryptography密碼學
- Pycrypto與RSA密碼技術筆記密碼筆記
- 【論文閱讀筆記】-針對RSA的短解密指數的密碼學分析(Cryptanalysis of Short RSA Secret Exponents)筆記解密密碼學
- 基於RSA的WEB前端密碼加密方案Web前端密碼加密
- RSA 數學原理
- python中rsa的RSAPython
- python實現aes加密解密,RSA簽名和驗籤,RSA加密解密,並呼叫介面Python加密解密
- linux中ssh使用rsa免密碼登入方法Linux密碼
- 密碼學中的RSA演算法與橢圓曲線演算法密碼學演算法
- RSA公鑰回密演算法原理演算法
- RSA加密加密
- JAVA/PHP/C#版RSA驗籤JavaPHPC#
- 【筆記】【THM】Introduction to Cryptography(密碼學簡介)筆記密碼學
- RSA加密解密原理深度剖析(附CTF中RSA題型實戰分析)加密解密
- 使用SSH RSA key免密碼登入Linux伺服器密碼Linux伺服器
- RSA演算法之學習演算法
- RSA加密解密示例程式碼加密解密
- java RSA 解密Java解密
- RSA入門
- javascript RSA 加密JavaScript加密
- LUC_RSA
- 谷歌絕密實驗室裡的祕密谷歌
- 達芬奇密碼 第二章(2)密碼
- 寫給開發人員的實用密碼學(七)—— 非對稱金鑰加密演算法 RSA/ECC密碼學加密演算法
- PHP RSA2 簽名演算法PHP演算法
- java/php/c#版rsa簽名以及java驗籤實現JavaPHPC#
- RSA加密與解密加密解密
- C# RSA 加密C#加密
- RSA演算法演算法
- RSA加密檔案加密
- RSA的傻瓜原理
- [譯]RSA Tool Help