密碼學


密碼學

符號說明:

D(K,Y)     用密鑰K和對稱算法解密密文Y

D(PRa,Y)     用A的私鑰PRa和非對稱算法解密密文Y

D(PUa,Y)     用A的公鑰PRa和非對稱算法解密密文Y

E(K,X)     用密鑰K和對稱算法加密明文X

E(PRa,,X)    用A的私鑰和對稱算法加密明文X

E(PUa,X)    用A的公鑰和對稱算法加密明文X

K        密鑰

PRa        用戶A的私鑰

PUa        用戶A的公鑰

C        密文

P        明文

 

 

gcb(a,b)    表示a和b的最大公因子

OSI安全框架

安全攻擊:分為被動攻擊和主動攻擊。被動攻擊包括非授權閱讀消息、文件以及流量分析。主動攻擊包括對消息或文件的篡改以及拒絕服務等。

安全機制:安全機制是一種處理過程(或實現該處理過程的設備),用來檢測、阻止攻擊或者從攻擊狀態恢復為正常狀態。安全機制的例子有加密算法、數字簽名和認證協議。

安全服務:安全服務包括認證、訪問控制、數據保密性、數據完整性、非否認性以及可用性。

 

 

密碼算法和協議的4個領域

對稱加密:用於加密任意大小的數據塊或數據流的內容,包括消息、文件、加密密鑰和口令。

非對稱加密:用於加密小的數據塊,如加密密鑰或數字簽名中使用的Hash函數值

數據完整性算法:用於保護數據塊(例如一條消息)的內容免於修改。

認證協議:有許多基於密碼算法的認證方案,用來認證實體的真實性。

 

 

對稱密碼模型

對稱加密方案有5個基本成分

明文:原始可理解的消息或數據,是算法的輸入

加密算法:加密算法對明文進行各種代替和變換

密鑰:密鑰也是加密算法的輸入。密鑰獨立於明文和算法。算法根據所用的特定密鑰而產生不同的輸出。算法所用的確切代替和變換也依靠密鑰。

密文:作為算法的輸出,看起來完全隨機而雜亂的消息,依賴於明文和密鑰。對於給定的消息,不同的密鑰產生不同的密文,密文看上去是隨機的數據流,並且其意義是不可理解的。

解密算法:本質上是加密算法的逆運算。輸入密文和密鑰,輸出原始明文。

 

注:發送者和接收者必須在某種安全的形式下獲得密鑰並且必須保證密鑰安全。如果有人發現該密鑰,而且知道相應的算法,那么就能解讀使用該密鑰加密的所有通信。

 

對稱密碼體制模型

 

 

密碼編碼學系統具有的三個獨立特征

替換明文為密文的運算類型:所有的加密算法都基於兩個原理:替換和置換。代替是將明文中的每個元素(如位,字母,位組或字母組等)映射成另一個元素;置換是將明文中的元素重新排列。上述運算的基本要求是不允許有信息丟失(即所有的運算時可逆的)。大多數密碼體制,也稱為乘積密碼系統,都使用多層代替和置換。

所用的密鑰數:如果發送方和接收方使用相同的密鑰,這種密碼就稱為對稱密碼、單密鑰密碼、秘密鑰密碼或傳統密碼。如果發收雙方使用不同的密鑰,這種密碼就稱為非對稱密碼、雙鑰或公鑰密碼。

處理明文的方法:分組密碼每次處理輸入的一組元素,相應的輸出一組元素。流密碼則是連續的處理輸入元素,每次輸出一個元素。

 

 

 

古典加密方法

代替技術

Caesar密碼:對字母表中的每個字母,用它之后的第k個字母來代替。

加密算法:C = E(k,P) = (p+k) mod 26

解密算法:P = D(k,C) = (C-k) mod 26

單表代替密碼: 對於Caesar密碼允許任意代替。26個字母的任意置換,有26!的可能密鑰。為每一條消息用一個字母表(給出從明文字母到密文字母的映射)加密。該加密很容易通過統計的方法進行破解,有兩種主要的方法可以減少代替密碼里明文結構在密文中的殘留度:一種是對明文中的多個字母一起加密,另一種是采用多表代替密碼。

Playfair密碼:把明文中的雙字母音節作為一個單元並將其轉換成密文的"雙字母音節"

Hill密碼:該加密算法將m個連續的明文字母替換成m個密文字母,這是由m個線性方程決定,在方程中每個字母被指定為一個數值(a=0,b=1,….,z=25)。例如m=3,系統可以描述為:


用行向量和矩陣表示如下:

這里C和P是長度為3的行向量,分為代表密文和明文,K是一個3*3矩陣,代表加密密鑰。運行按模26執行。

用一般術語,Hill密碼系統可以表示如下:

同Playfair密碼相比,Hill密碼的有點是完全隱藏了單字母頻率特性。實際上,Hill用的矩陣越大,所隱藏的頻率信息就越多。因此,一個3*3的Hill密碼不僅隱藏了單字母的頻率性,還隱藏了雙字母的頻率性。雖然Hill密碼足以抗唯密碼攻擊,但是容易被已知明文攻擊破解

多表代替加密:對簡單單表代替的改進方法是在明文消息中采用不同的單表代替。這種方法一般稱之為多表代替密碼。所有這些方法都有以下的共同特征:1.采用相關的單表代替規則集。2.密鑰決定給定變換的具體規則。

Vigenere密碼:假設明文序列為

密鑰序列

其中典型的是m<n,密碼序列

計算如下

密鑰第一個字母模26加到明文的第一個字母,接着是第二個字母,以此類推,直到前m個明文處理完畢。對於第二組的m個明文,重復使用密鑰字母。繼續該過程,直到所有的明文序列被加密完。加密過程的一般方程式是

解密過程一般方程式

Vernam密碼:提供了一種與明文毫無統計關系,且與它一樣長的密鑰。其運算基於二進制而非字母。該體制可以簡明地表述為

密文是通過對明文和密鑰的逐位異或而成的。根據異或運算的性質,解密過程為

一次一密:一種對Vernam密碼的改進方案,從而達到了最完善的安全性。使用與消息一樣長且無重復的隨機密鑰來加密消息,另外,密鑰只對一個消息進行加解密,之后丟棄不用。每一條消息都需要一個與其等長的新密鑰。一次一密提供了完全的安全性,但是在實際中一次一密存在兩個基本的難點:1.產生大規模隨機密鑰有實際困難。2.更令人擔憂的是密鑰的分配和保護。

置換技術:對明文進行置換,這種密碼稱為置換密碼。最簡單的例子是柵欄技術,按照對角線的順序寫出明文,而按行的順序讀出作為密文。一個更復雜的方案是把消息一行一行地寫成矩形塊,然后按列讀出,但是把列的次序打亂。列的次序就是算法的密鑰。

輪轉機密碼系統:輪轉機的基本原理如下圖所示,輪轉機包括一組相互獨立的旋轉圓筒,電脈沖可以通過它。每個圓筒有26個輸入引腳和26個輸出引腳。內部連線使每一個輸入僅同唯一一個輸出連接。

 

隱寫術:有兩種方法可用來隱藏明文信息。隱寫術,它可以隱藏信息的存在:而密碼學則是通過對文本信息的不同轉換而實現信息的對外不可讀。

 

分組密碼和數據加密標准

分組密碼是一種加/解密方案,它將輸入的明文分組當做一個整體處理,輸出一個等長的密文分組。許多分組都采用Feistel結構,這樣的結構由許多相同的輪函數組成。每一輪中,對輸入數據的一半進行代替,接着用一個置換交換數據的兩個等分部分。擴展初始的密鑰使得每一輪中使用不同的子密鑰。直到最近,DES一直是應用最為廣泛的加密算法,它體現了經典的Feistel結構。DES使用64位的分組和56位的密鑰。差分分析和線性分析是兩種重要的密碼分析方法。DES對這兩種工具具有很強的免疫性。

DES (Data Encryption Standard): 數據加密標准

AES (Advanced Encryption Standard): 高級加密標准

流密碼與分組密碼:流密碼每次加密數據流的一位或一個字節。古典流密碼的例子有密鑰自動生成的Vernam密碼。位流必須以算法程序的方式實現,從而雙方都可以生產具有密碼學意義的位流。位流發生器是一個由密鑰控制的算法,它必須產生在密碼學意義上講是強壯的位流。現在,兩個只需要共享生成密鑰,則各自可以生產密鑰流。

    分組密碼是將一個明文分組作為整體加密並且通常得到的是與明文等長的密文分組。典型的分組大小是64位或128位。同流密碼一樣,兩個用戶要共享一個對稱加密密鑰。

一般來說,分組密碼的應用范圍比流密碼要廣泛。絕大部分基於網絡的對稱密碼應用使用的是分組密碼。

Feistel密碼結構的設計動機:分組密碼作用於n位明文分組上,而產生n位密文分組。共有個不同的明文分組,且由於加密是可逆的(即可以解密),每一個明文分組將唯一對應一個密文分組。這樣的變換稱為可逆變換,或非奇異變換。所以,如果我們限定在可逆映射上,不同變換的總數是!個。從實現和運行的角度來看,采用大規模分組的任意可逆代替密碼(即理想分組密碼)是不可行的。因為對於這樣的變換,映射本身就是密鑰。本質上,它就是決定所有可能映射中某一個映射的密鑰。一般地,對於n位的代替分組密碼,密鑰的規模是。Feistel指出我們所需要的是對理想分組密碼體制的一種近似體制而已。

Feistel密碼:Feistel建議使用乘積密碼的概念來逼近理想分組密碼。乘積密碼是指依次使用兩個或兩個以上的基本密碼,所得結果的密碼強度將強於所有單個密碼的強度。這種方法的本質是開發一個分組密碼,密鑰長為k位,分組長為n位,采用個變換,而不是理想分組密碼的!個可用變換。特別地,Feistel建議使用這樣的密碼:該種密碼交替的使用代替和置換。代替和置換的定義如下:

代替:每個明文元素或元素組被唯一地替換為相應的密文元素或元素組。

置換:明文元素的序列被替換為該序列的一個置換。也就是說,序列中沒有元素被添加,刪除或替換,但序列中元素出現的順序改變了。

混淆與擴散:擴散就是指使明文的統計特征消散在密文中,這可以通過讓每個明文數字盡可能地影響多個密文數字獲得,等價於說每個密文數字被許多明文數字影響。每一個分組密碼都是明文分組到密文分組的變換,而這個變換又是依賴於密鑰的。擴散的方法是盡可能地使明文和密文間的統計關系變得復雜,以挫敗推到出密鑰的企圖。另一方面,混淆則是盡可能使密文和加密密鑰之間的統計關系更加復雜以阻止攻擊者發現密鑰。

Feistel密碼結構: 下圖描述了Feistel結構,加密算法的輸入是長為2w位的明文分組和密鑰K。明文分組被分為等長的兩部分:和。這兩半數據經過n輪迭代后組合成密文分組。第i輪迭代的輸入和來自於上輪迭代的輸出;而輸入的子密鑰是由整個K推導出的。一般地,不同於K,也互不相同。每輪迭代都有相同的結構。代替作用在數據的左半部分。它通過用輪函數F作用於數據的右半部分后,與左半部分數據進行異或來完成。每輪迭代的輪函數是相同的,但是輸入的子密鑰是不同的。換一種說法,F是w位長的右半分組以及y位長的子密鑰的函數,輸出w位的值:F(,)。代替之后交換數據的左右兩半完成置換。

Feistel解密算法:Feistel密碼的解密過程本質上與加密過程一致。其規則如下:將密文作為算法的輸入,但是逆序使用使用子密鑰。也就是說第一輪使用,第二輪使用,直到最后一輪使用。這是一個很好的特點,因為我們不需要分別實現加密和解密兩個算法。每輪的解密過程中間值與加密過程中間值左右互換的結果是相同的。第一輪的輸入應等於加密過程第32輪輸出左右不分互換的值。證明如下:

因此我們有=和=,所以解密過程的第一輪輸出為||,正是加密過程第16輪輸入左右部分互換的值。對於其他各輪也是如此。我們把它表示成一般形式。對於第i輪加密算法:

又可寫為

為了幫助說明前面的概念,看一個特別的例子並且關注加密的第15輪,對應於解密的第二輪。假設每一階段的分組長度為32位(分為兩個16位),密鑰長度為24位。假設第14輪加密后的中間分組是DE7F03A6。那么=DE7F,=03A6。同時假設=12DE52。

 

 

數據加密標准:DES(Data Encryption Standard,DES) 數據加密標准。DES采用了64位的分組長度和56位密鑰長度。它將64位的輸入經過一系列變換得到64位輸出。解密則使用了相同的步驟和相同的密鑰。

DES加密:對於任意的加密方案,總有兩個輸入:明文和密鑰。DES的明文長為64位,密鑰長為56位。明文的處理經過了三個階段。首先,64位的明文經過初始置換而重新排列。然后進行16輪相同函數的作用,每輪作用都有置換和代替。最后一輪迭代的輸出有64位,它是輸入明文和密鑰的函數。其左半部分和右半部分互換產生預輸出。最后預輸出再被與初始置換互逆的置換產生64位的密文。除了初始和末尾的置換,DES的結構與Feistel密碼的結構完全相同。右半部分給出了使用56位密鑰的過程。首先,密鑰經過一個置換后,再經過循環左移和一個置換分別得到各輪的子密鑰用於各輪的迭代。每輪的置換函數都一樣,但是由於密鑰的循環移位使得各輪子密鑰互不相同。

初始置換表:

 

每輪變換的詳細過程:64位數據的左右兩個部分作為獨立的32位數據,分別記為L和R。在經典的Feistel密碼中,每輪變換的整個過程可以寫為下面的公式:

每一輪長48位,R是32位。首先將R用上圖的擴展表c擴展為48位,其中有16位是重復的。這48位與異或,所得結果再用一個代替函數作用產生32位的輸出,再用表d定義的置換進行作用后輸出。

代替函數由8個S盒來組成,每個S盒都輸入6位,輸出4位。這些變換參見表3.3,其解釋如下:盒輸入的第一位和最后一位組成一個2進制數,用來選擇S盒4行代替值中的一行,中間4位用來選擇16列中的某一列。行列交叉處的十進制轉化為二進制之后可得到4位二進制數。

密鑰的產生:算法輸入64位密鑰,密鑰各位分別標記為1到64。如果表3.4a中沒有陰影的部分,也就是每行的第8個位被忽略。首先用標志為置換選擇1的表作用。所得56位密鑰分別為兩個28位數據和。每輪迭代中,和分別循環左移一位或兩位,具體左移位數參見表3.4d。移位后的值作為下一輪的輸入。它們同時也作為置換選擇2的輸入,將產生一個48位的輸出作為函數F(,)的輸入。

DES解密: Feistel密碼的解密算法與加密算法是相同的,只是子密鑰的使用次序相反。

雪崩效應:明文或密文的微小改變將對密文產生很大的影響,是任何加密算法需要的一個好性質。特別地,明文或密鑰的某一位發生變化會導致密文的很多位發生變化。這被稱為雪崩效應。如果相應的改變很小,可能會給分析者提供縮小搜索密鑰或明文空間的渠道。

 

高級加密標准

要點:AES是一種分組密碼,用以取代DES的商業應用。其分組長度為128位,密鑰長度為128位、192位或256位。

AES未采用Feistel結構。每輪由4個單獨的運算組成:字節代替,置換,有限域上的算術運算,以及與密鑰的異或運算。

AES是一個對稱分組密碼算法,旨在取代DES成為廣泛使用的標准。與公鑰密碼如RSA相對,AES以及大多數對稱密碼的結構都很復雜。

有限域算術:AES中的所有運算都是在8位的字節上進行的。特別地,加減乘除算術都是在有限域GF()上進行的。本質上,一個域就是一個集合,在該集合內,我們可以進行加減乘除運算,結果不離開集合。除法遵循規則a/b=a()。一個有限域(具有有限個元素)的例子是集合,其中p是一個素數,且其內的運算時模p進行的。

所有的加密算法,包括對稱的和非對稱的,都用到了整數的算術運算。如果算法用到了除法,我們需要用到定義在域上的算術。這是因為除法需要沒有給非零元素有一個乘法逆元。出於習慣和實現的效率考慮,給定整數的位數,我們希望使用具有該位長度的所有整數,而不浪費一些位模式。即我們希望使用0到內的所有整數,其剛好是一個n位的字。遺憾的是這些整數的集合在模算術下並不是一個域。例如,整數2在內沒有乘法逆元。也就是說不存在b使得2b mod 。有一種方法可以定義含有個元素的有限域,該域被稱為GF()。考慮所有次數小於等於n-1,系數為0,1的多項集合S。因此,每一個多項式具有如下形式:

其中每個取值0或1,集合S內共有個元素。對於n=3,集合內的8個多項式為

定義合適的算術運算,則每一個這樣的集合S都是一個有限域。定義由如下各項組成。

  1. 該運算遵循嗲書基本規則中的普通多項式運算規則及如下兩條限制
  2. 系數運算以2為模,這和XOR是一樣的
  3. 如果乘法運算的結果是次數大於n-1的多項式,那么必須用某個次數為n的不可約多項式m(x)進行約化,即用m(x)去除並取余式。對於多項式f(x),這個余數可表示為r(x)=f(x) mod m(x)。一個多項式m(x)稱為不可約多項式,當且僅當該多項式不能標識為次數小於m(x)的次數的兩個多項式的乘積。

例如,為了構造GF(),我們需要選擇次數為3的不可約多項式。加法等價於各項的對位異或。GF()內的一個多項式可以由它的二元系數唯一表示。因此,GF()內的每個多項式可以由n位的數來表示。加法由兩個n位的數進行對位異或來實現。對於乘法,GF()內的數乘以2可以先左移,然后根據條件異或上一個常數。乘上一個大數可以重復運用該規則。總結一下,AES在8位的字節上運算。兩個字節的加定義為對位異或操作。兩個字節的乘定義為有限域GF()內的乘法,其中不可約多項式為

AES總體結構:明文分組的長度為128位即16字節,密鑰長度可以為16,24或32字節(128,192或256位)。根據密鑰的長度,算法被稱為AES-128,AES-192,AES-256。加密和解密算法的輸入是一個128位分組。這個分組被復制到state數組,並在加密或解密的各個階段被修改。圖5.2(a)描述了這些操作。

同樣的密鑰也被描述為字節的方陣。這個密鑰接着被擴展為密鑰字陣列。圖5.2(b)展示了128位密鑰的擴展。每個字是4個字節,128位密鑰最終擴展為44字序列。

矩陣中字節是按照列進行排序的。所以,加密算法的128位明文分組輸入的前4個字節被按順序放在了in矩陣的第一列,接着4個字節放在了第二列,等等。相似地,擴展密鑰的前四個字節(形成了一個字)被放在w矩陣的第一列。

密碼由N輪組成,其中輪數依賴於密鑰長度:16字節密鑰是10輪,24字節密鑰對應12輪,32節密鑰對應14輪。前N-1輪由4個不同的變換組成:字節代替、行移位、列混淆和輪密鑰加密。最后一輪僅包含桑變換,而在第一輪的前面有一個起始地單變換(輪密鑰加),可以視為0輪。每一輪變換輸入一個或多個,並輸出一個的矩陣。圖5.1說明每輪的輸出是一個的矩陣,最后一輪的輸出為密文。同樣,密鑰擴展函數產生N+1輪密鑰,它們是互不相同的矩陣。每一輪密鑰作為每輪的的輪密鑰加變換的一種輸入。

 

 

 

圖5.3更加詳細地展示了AES密碼,指明了每輪的變換順序,並展示了相應的解密函數。

  1. AES結構的一個顯著特征是它不是Feistel結構。在經典的Feistel結構,數據分組中的一半被用來修改數據分組中的另一半,然后交換這兩部分。AES算法未使用Feistel結構,而是在每一輪都使用代替和混淆將整個數據分組作為一個單一的矩陣處理。
  2. 輸入的密鑰被擴展成由44個32位字所組成的數組w[i]。從圖5.3中可以看出,每輪有四個不同的字(128位)作為該輪的輪密鑰。
  3. 由四個不同的階段組成,包括一個置換和三個代替:
    字節代替:用一個S盒完成分組的字節到字節的代替。

    行移位:一個簡單的置換

    列混淆:利用域GF()上的算術特征的一個代替

    輪密鑰加:當前分組和擴展密鑰的一部分進行按位XOR

  4. 算法結構非常簡單。對加密解密操作,算法又輪密鑰加開始,接着執行9輪迭代運算,每輪都包含所有4個階段的代替,接着是第10輪的三個階段。
  5. 僅僅在輪密鑰加階段中使用密。由於這個原因,該算法以輪密鑰加開始,以輪密要加結束。如果將其他不需要密鑰的運算用於算法開始或結束的階段,在不知道密鑰的情況下就能計算其逆,故不能增加算法的安全性。
  6. 輪密鑰加實質上是一種Vernam密碼形式,就其本身是不是不難破譯的。而另外三個階段一起提供了混淆,擴散以及非線性共嗯那個。因這些階段沒有涉及密鑰,故就它們自身而言,並未提供算法的安全性。我們可把該算法視為一個分組的XOR加密(輪密鑰加),接着對這個分組混淆(其他的三個階段),再接着又是XOR加密,如此交替執行。這種方式非常有效且非常安全。
  7. 每個階段均可逆。對字節代替、行移位和列混淆,在解密算法中用與它們對應的逆函數。輪密鑰加的逆就是用同樣的輪密鑰和分組相異或,其原理就是。
  8. 同大多數分組密碼一樣,解密算法按逆序方式利用了擴展密鑰。然而,AES的解密算法和加密算法並不一樣。這是由AES的特定結構所決定的。
  9. 一旦將所有的四個階段求逆,很容易證明解密函數的確可以恢復原來的明文。圖5.3中加密和解密流程在縱向上是相反的。在每個水平點上(如圖中由破折號組成的線),state數組在加密和解密函數中是一樣的。
  10. 加密和解密過程的最后一輪均只包含三個階段。這是由AES的結構所決定的,而且也是密碼算法可逆性所要求的。

 

 

AES的變換函數

字節代替變換:正向和逆向變換。被稱為字節代替的正向字節代替變換是一個簡單的查表操作。AES定義了一個S盒,它是由個字節組成的矩陣,包含了8位所能表示的256個數的一個置換。state中每個字節按照如下的方式映射為一個新的字節:把該字節的高4位作為行值,低4位作為列值,以這些行列值作為索引從S盒的對應位置取出元素作為輸出。例如,十六進制數{95}所對應的S盒的行值是9,列值是5,S盒中在此位置的值是{2A}。相應地{95}被映射為{2A}。

行移位變換:下圖描述了正向行一位變換stage的第一行保持不變。把state的第二行循環左移一個字節state的第三行循環左移兩個字節。state的第四行循環左移三個字節。行移位變換的一個例子如下:

逆向行移位變換將state中的后三行執行相反方向的移位操作,如第二行向右循環移一個字節,其他行類似。

列混淆變換:列混淆變換的正向列混淆變換對每列獨立進行操作。每列中的每個字節被映射為一個新值,此值由該列中的4個字節通過函數變換得到。這個變換可由下面基於state的矩陣乘法表示:

輪密鑰加變換:正向的和逆向變換。在輪密鑰加變換中,128位的state按位與128位的輪密要XOR。如圖5.5(b)所示,該操作可以視為state的一列中四個字節與輪密鑰的一個字進行列間的操作:我們也能將其視為字節級別的操作。

例子中第一個矩陣式state,第二個矩陣是輪密鑰。逆向輪密鑰加變換是和正向輪密鑰加變換一樣的,因為異或操作是其本身的逆。

基本原理:輪密鑰加變換非常簡單,卻能影響state中的每一位。密鑰擴展的復雜性和AES的其他階段運算的復雜性,確保了該算法的安全性。

AES的密鑰擴展

密鑰擴展算法:AES密鑰擴展算法的輸入值是4個字(16字節),輸出是一個由44個字組成(176字節)的一維線性數組。這足以為初始輪密鑰加階段和算法中其他10輪中的每一輪提供4字的輪密鑰。

對w數組中下標為4的倍數的元素采用了更復雜的函數來計算。圖5.9闡明了如何計算擴展密鑰,其中使用符號g來表示這個復雜函數。函數g由下述子功能組成:

  1. 字循環的功能是使一個字中的4個字節循環左移一個字節,即將輸入字[]
  2. 字代替利用S盒對輸入字中的每個字節進行字節代替
  3. 步驟1和步驟2的結果再與輪常量Rcon[j]相異或。

基本原理:Rinddael的開發者設計了密鑰擴展算法來防止已有的密碼分析攻擊。使用與輪相關的輪常量是為防止不同輪的密鑰產生方式上的對稱性或相似性。

  1. 知道密鑰或輪密鑰的部分位不能計算出輪密鑰的其他位。
  2. 它是一個可逆的變換[即知道擴展密鑰中任何連續的Nk個子能夠重新產生整個擴展密鑰(Nk是構成密鑰所需的字數)]
  3. 能夠在各種處理器上有效地執行。
  4. 使用輪常量來消除對稱性。
  5. 將密鑰的差異性擴散到輪密鑰中的能力;即密鑰的每個位能影響到輪密鑰的許多位。
  6. 足夠的非線性以防止輪密鑰的差異完全由密鑰的差異所決定。
  7. 易於描述。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

附相關數學知識

置換

 

有限元素的集合S的置換是S的所有元素的有序排列,且每個元素只出現一次。例如,如果S={a,b,c},則S有6個置換:

abc acb bac bca cab cba

一般具有n個元素的集合有n!個置換

數論

分數mod:

1.找到一個整數P使得1/m+p=(1+p*m)/m,使得整數(1+p*m)是n的倍數,也即(1+p*m)mod n=0。

2.問題轉化為1/m ≡ -p mod n,此時只要求得 –p mod n 的值就可以了。

例:

1/3 mod 7= ?; 1/3+2=7/3; -2 mod 7=5, 也就是1/3 mod 7= 5;

如果(a mod n)=(b mod n) 則我們稱整數a 和 b 是模n同余的。可以表示為ab (mod n)

 

 

修改的Euclid算法:

擴展的Euclidd算法:

一般的可以證明對於兩個給定的整數a和b,ax+by的最小整數等於gcd(a,b)

擴展Euclid算法去計算(x,y,d)

現在可以通過移項得到

同樣,從i-1和i-2行,可得到值

代入式(4.8)

然而,我們已經假設

因此

總結計算過程如下:

 

群、環和域

群:群G,有時記為{ G , },是定義了一個二元運算的集合,這個二元運算可表示為 G中每一個序偶(a,b)通過運算生成G中的元素(a b),並滿足一下公理:
(A1)
封閉性:如果ab都屬於G,則a b也屬於G

(A2)結合律:對於G中任意元素a,b,c,都有a ( b c ) = ( a b ) c

(A3)單位元:G中存在一個元素e,對於G中任意元素a,都有a e = e a = a成立

(A4)逆元:對於G中任意元素a,G中都存在一個元素,使得下式成立:

如果一個群的元素是有限的,則該群稱為有限群,並且群的階就等於群眾元素的個數。否則稱該群為無限群。

一個群如果還滿足一下條件,則稱為交換群:

(A5)交換律:對於G中任意的元素a,b,都有a b = b a

循環群:我們在群中定義求冪運算為重復運用群眾的運算,如。而且我們定義作為單位元;並且,其中是a在群內的逆元素。如果群G中的每一個元素都是一個固定元素a(aG)的冪(k為整數),則稱群G是循環群。我們認為元素a生成了群G,或者說a是群G的生成元。循環群總是交換群,它可能是有限群或無限群。

eg:整數的加法群是一個無限循環群,它由1生成。在這種情況下,冪被解釋為用加法合成的,因此n1n次冪。

: R,有時記為{R,,},是一個有兩個二元運算的集合,這兩個二元運算分別稱為加法和乘法,且對於R中的任意元素a,b,c滿足以下公理。

(A1~A5)R關於加法是一個交換群;也就說,R滿足從A1A5的所有原則。對於此種情況下的加法群我們用0表示其單位元,-a表示a的逆元。

(M1)乘法的封閉性:如果ab都屬於R,則ab也屬於R

(M2)乘法的結合律:對於R中的任意元素a,b,c,a(bc)=(ab)c成立。

(M3)分配律:對於R中的任意元素a,b,c,下面兩個式子總成立:

本質上說,環就是一個集合,我們可以在其上進行加法,減法和乘法而不脫離該集合。實數上所有n階方陣的集合關於加法和乘法構成一個環。

環如果滿足以下條件,則稱為交換環。

(M4)乘法的交換律:對於R中任意元素a,b,ab=ba成立。

完整環是滿足以下公理的交換環:

(M5)乘法單位元:在R中存在元素1,使得對於R中的任意元素a,有a1=1a=a成立。

(M6)無零因子:如果有R中有元素a,b,ab=0,則必有a=0b=0

將普通加法和乘法運算下的整數集合(包括整數、負數和0)記為S,則S是一個整環。

域:F,有時記為{F,,},是有兩個二元運算的集合,這兩個二元運算分別稱為加法和乘法,且對於F中的元素a,b,c滿足以下公里:

(A1-M6)

(M7)乘法逆元:對於F中的任意元素a(除0以外),F中都存在一個元素使得下式成立:

=1

本質上說,域就是一個集合,我們可以在其上進行加法,減法,乘法和除法而不脫離該集合。除法又按以下規則來定義:

有理數集合,實數集合以及復數集合都是我們熟悉的域的例子。需要指出的是,所有整數的集合並不是一個域,因為並不是集合中所有的元素都有乘法逆元;實際上,整數集合中只有元素1-1有乘法逆元。

 

有限域GF(p)

階為的有限域一般記為GF() , GF代表Galois域,以第一位研究有限域的數學家的名子命名。

階為P的有限域:給定一個素數p,元素個數為p的有限域GF(p)被定義為整數{0,1,…,p-1}的集合,其運算為模p的算術運算。

若n為素數,中所有的非零整數都與n互素,因此中所有非零整數都有乘法逆元。

因為w和p互素,如果我們用w乘以的所有元素,得出的剩余類是中所有元素的另一種排列。因此,恰好只有一個剩余類值為1。因而,中有這樣的整數,當它乘以w,得余數1。這個整數就是w的乘法逆元,記為,所以其實是一個有限域。

在GF(p)中求乘法逆元:如果a和b互素,則b有模a的乘法逆元。也就是說,如果gcd(a,b)=1,那么b有模a的乘法逆元。即對於正整數b<a,存在<a使。如果a是素數並且b<a,則顯然a和b互素,且其最大公因子為1。運用擴展的Euclid算法很容易計算。

擴展Euclid算法如下:

現在,如果gcd(a,b)=1,自由ax+by=1。我們有如下式子

然而,如果by mod a =1,則y=。因此如果gcd(a,b)=1,則通過Euclid算法可以獲得b的乘法逆元。更一般地,對於任意的n,擴展Euclid算法可以用於求取內的乘法逆元。如果運用擴展Euclid算法於方程nx+by=d,並且得到d=1,則。

多項式運算:只討論單變元多項式,且可把多項式運算分為三種。

使用代數基本規則的普通多項式運算。

系數運算是模P運算的多項式運算,即系數在GF(p)中。

系數在GF(p)中,且多項式被定義為模一個n次多項式m(x)的多項式運算。

系數在中的多項式運算:多項式的系數是域F的元素。我們稱其為域F上的多項式。這種情況下,容易看出這樣的多項式集合是一個環,稱為多項式環。也就是說,如果我們把每個不同的多項式視為集合中的元素,這個集合就是一個環。

有限域GF():在有限域中不會用模算術,因為那樣不能構成域。將使用多項式算術來構造我們需要的域。

多項式模運算:設集合S由域上次數小於等於n-1的所有多項式組成。每一個多項式具有如下形式:

其中,在集合{0,1,…..,p-1}上取值。S中共有個不同的多項式。

如果定義了合適的運算,那么沒有給這樣的集合S都是一個有限域。定義由如下幾條組成:

該運算遵循代數基本規則中的普通多項式運算規則及如下兩條限制。

系數運算以P為模,即遵循有限域上的運算規則。

如果乘法運算的結果是次數大於n-1的多項式,那么必須將其除以某個次數為n的即約多項式m(x)並取余式。對於多項式f(x),這個余數可表示為r(x)=f(x) mod m(x)。

和簡答模運算類似,多項式模運算也有剩余類集合的概念。設m(x)為n次多項式,則模m(x)剩余類集合有個元素,其中每個元素都可以表示成一個m次多項式(m<n)

以m(x)為模的剩余類[x+1]由所有滿足a(x)(x+1) (mod m(x))的多項式a(x)組成。也就是說,剩余類[x+1]中的所有多項式a(x)滿足等式a(x) mod m(x) = x+1。

求乘法逆元:擴展Euclid算法則可以用來求一個多項式的乘法逆元。

加法:多項式加法是將相應的系數分別相加,而對於上的多項式,加法其實就是異或(XOR)運算。所以,GF()中的兩個多項式加法等同於按位異或運算。

乘法:一般地,在GF()上對於n次多項式P(x),有。

生成元:階為q的有限域F的生成元是一個元素,記為g,該元素的前q-1個冪構成了F的所有非零元素,即域F的元素為0,,,,…..,。考慮由多項式f(x)定義的域F,如果F內的一個元素b滿足f(b)=0,則稱b為多項式f(x)的根。最后,可以證明一個不可約多項式的根g是這個不可約多項式定義的有限域的生成元。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM