1. 程式人生 > >應用密碼學之從零開始③-密碼學的數學基礎其一

應用密碼學之從零開始③-密碼學的數學基礎其一

html 使用 數據結構 密碼學 運行 狀態 機器 加法 加密

本文作者:i春秋簽約作家——黑照

前文筆者介紹了應用密碼學下傳統密碼、現代密碼對稱和非對稱算法的作用和簡介。傳統密碼原理簡單,筆者幾乎沒有計算,在現代密碼學裏面的非對稱加密沒有進行哪怕一位的加密計算過程因為不管是加、乘、異或還是位置變化都難度不大,從本文開始筆者將要介紹部分密碼學中的數學原理、數據結構與算法原理。

1)基礎運算

加、減、乘、異或和模運算

這個部分除了異或運算以外基本上小學生都知道,其中模運算就是小學學的取余數,因為之前介紹過密碼學只進行自然數計算,不涉及小數,所以在模運算中加法、減法暢通無阻,互為逆運算,乘法不一定有乘法逆,但是在有限域中恒有乘法逆。關於有限域的概念即將介紹。

為了方便而不用公式編輯器現在文章做如下定義:

數學上+為加號,-為減號,*為乘號。模運算為a mod b,其中a是被除數,b是除數,結果為余數。A^B為A異或B,A^^B為A的B次方。

例1:計算6-7mod 8和6+7mod 8

6-7mod8 =-1+8mod8=7 6+7mod8=13-8mod8=5

2)位運算

位運算是計算機發展之處就有的運算,分別為和運算、乘運算、非運算、異或、同或等等。因為密碼學的原因,筆者只介紹模二運算和異或。

模二運算是不進位的計算,其余原理和普通加減乘無差異。如普通加法中二進制數3為11,加1得4二進制表示為100,這個計算是大家都知道的,但是在模二加法裏面11+01=10.

異或運算是密碼學裏面很常見的計算,計算規則一樣沒有進位,計算規則為不同的兩數(只有0和1)異或為1,相同的兩個數異或為0.即1^0=1 1^1=0 0^1=10^0=0

例2 計算1001異或1100

1001

1100

0101

3)軟件和硬件

學習過C或者C++的應該知道在C和C++中不同的整數範圍能夠表示不同的數的大小,而在Java中因為和平臺無關,所以數的大小進一步規定死了。如C語言中int的範圍是一個字,在16位機上為2字節,32位機為4字節,64位機上為8字節。Java中int不管是多少位機器,只要能運行Java虛擬機,長度永遠為32位,4字節。而在加密和破譯密碼時成本永遠是需要考慮的重要因素。

通常來說硬件速度比軟件快,GPU的速度比CPU快,而電路級的運算速度比芯片速度還要快。不過軟件的特點是容易修改,靈活,幾乎沒有成本,而硬件的特點是速度快,價格高。

因為密碼具有重要價值,所以密碼機多為單獨使用,國內有使用X86體系的網絡安全設備,包括密碼機。但實際情況是為了破解價值100萬價值的密碼哪怕花50萬元造一臺密碼機也是允許的。

4)群、環、域和有限域的概念

PS:關於該節概念較為抽象,雖然一般非數學系不會學習,但是計算機系還會要學習的,概念在離散數學教程裏面有。而相傳BY復試考過這個概念。不過以下概念不重要,建議直接跳到有限域區域進度閱讀。

表示一個擁有滿足封閉性結合律、有單位元逆元 二元運算的 代數結構

封閉性是指運算閉合,元素計算後依舊在集合內。數學定義如下:

給定一個非空集合S 和一個函數F : S X S -> S,則稱 F 為在 S 上之二元運算(binaryoperation),或稱(S,F) 具有彩色文字封閉性(closure)。

結合律是指滿足加法結合律和乘法結合律。

單位元是指如集合中有特殊元素e(幺元)滿足如下性質:

元素a和幺元發生計算,結果依舊為元素a,如a⊕e= e⊕a =a.

逆元給定任意一個集合中的元素a,存在集合中的另一個元素b,使得a⊙b=b⊙a=e;。

以一個例子結束關於群的概念,如非負有理數組成了一個群,運算符合為加法,其中滿足封閉性(任意兩個非負有理數的加法依舊是非負有理數),滿足加法結合律,有單位元1,有乘法逆元(該數的倒數)。非負有理數及加法運算構成了一個群。

(Ring)是一類包含兩種運算(加法和乘法)的代數系統,是現代代數學十分重要的一類研究對象。

雖然概念比較抽象,剛才群的概念中可以只定義一種代數運算,而中有兩種代數運算並且限定為加法和乘法。

再舉個例子,如全體自然數集合Z和加法乘法構成一個環,(自然數數一樣有無限多個),其中任意兩個整數A和B,進行計算,不管是加還是乘結果必然落在集合Z內。這個集合和運算組成了環。

的概念:一組元素的集合,以及在集合上的四則運算,構成一個域。其中加法和乘法必須滿足交換、結合和分配的規律。加法和乘法具有封閉性,即加法和乘法結果仍然是域中的元素。

有限域是僅含有限多個元素的域。

概念:最簡單的有限域是整數環Z 模一個素數p得到的余環Z/(p),由p個元素0,1,…,p-1組成,按模p相加和相乘。

越解釋概念越多並且很晦澀,不過密碼學用到的代數結構相對簡單。

而剛才的有限域的概念是指集合F={a,b,…n},對F的元素定義了兩種運算:“+”和“*”,並滿足以下3個條件,

·F1:F的元素關於運算“+”構成交換群,設其單位元素為0。

·F2:F除{0}以外的元素關於運算“*”構成交換群。即F中元素排除元素0後,關於*法構成交換群。

·F3:分配律成立,即對於任意元素a,b,c∈F,

恒有

a*(b+c)=(b+c)*a=a*b+a*c

p是素數時,可證F{0,1,2,…,p-1},在modp意義下,關於求和運算“+”,及乘積“*”,構成了域。F域的元素數目有限時稱為有限域。

5)不可約多項式

關於數學概念介紹如上,可能大家看的雲裏霧裏,下面舉個實際的例子,如在上一章介紹了AES使用有限域進行計算,並且AES中使用模二運算,所以在這裏進位就失去了作用,具體怎麽起作用呢?見下面的介紹。

該部分引用自知乎,感謝劉博士的回答。

密碼學中模數為大質數或者大質數的冪。問題是模8裏面4和6怎麽辦?多項式x如何起作用。

前面講到了為什麽要模質數,但為什麽要模質數的冪呢?質數的冪顯然不可能是質數啊!舉個例子2是一個質數,8是2的冪,但顯然8不是一個質數。模數為質數冪時,我們定義的運算⊙並不是整數上的乘法,而是多項式上的乘法。

【不支持外鏈圖片,請上傳圖片或單獨粘貼圖片】

設置模數為2,多項式為3階,滿足條件的多項式有8個:
這些多項式中,哪些是不可約多項式呢?

【不支持外鏈圖片,請上傳圖片或單獨粘貼圖片】

【不支持外鏈圖片,請上傳圖片或單獨粘貼圖片】

【不支持外鏈圖片,請上傳圖片或單獨粘貼圖片】

其它2個多項式,就是不可約多項式了。

找到不可約多項式有什麽用呢?我們把不可約多項式設置成“模數”,把各個系數看成集合中的“元素”,把運算⊙定義成多項式乘法,我們就得到了一個群!

【不支持外鏈圖片,請上傳圖片或單獨粘貼圖片】

【不支持外鏈圖片,請上傳圖片或單獨粘貼圖片】

6)一次一密及隨機序列

在香農博士的那篇文章中除了給出了攻擊傳統密碼的方式之外他也給出了應對辦法,使用一次一密進行加密。一次一密的原理很簡單,就是采用近似隨機的字符串對明文直接進行異或運算,當然解密的一方也需要使用相同的密鑰,這樣的加密方法被稱為是一次一密。在不考慮密鑰的安全性的情況下這個方案是很安全的。明文和密鑰具有相同的長度,明文中可能具有一定的統計學信息。但是因為密鑰是隨機生成的,所以明文的每一位被變換成為0或者1的概率也是均等的,所以得到的密文不可能被破解,因為即使有了足夠數量的密文樣本,每個字符的出現概率都是相等的,每任意個字母組合出現的概率也是相等的。這種方法被稱為“一次一密”。

一次一密的加密方案近似流密碼,而歷史上流密碼也被搞定過,這個就不得不提到RC4和wep無線加密方案了。在無線路由器中大家都有一個wep的加密方案,信息安全專家建議大家不要使用這種方式。因為雖然RC4的流密碼算法本身沒有缺陷,但是因為密鑰周期過短,所以即使不知道隨機序列的初始狀態,在一個周期之後自然也就有了相應的排列組合,並且按照異或加密的原則,兩次異或之後就為原文,所以密鑰的隨機序列很重要。

以上就是傳統密碼體系中的數學部分,下一部分將進入非對稱密碼數學基礎。再下一章之後開始處理壇友說的量子密碼。

應用密碼學之從零開始③-密碼學的數學基礎其一