1. 程式人生 > 實用技巧 >不學點《近世代數》怎麼學好現代密碼學

不學點《近世代數》怎麼學好現代密碼學

本文首發於“合天網安實驗室" 作者:CNinja

本文涉及知識點實操練習-

密碼學原理

課程:密碼學原理(合天網安實驗室)

密碼學是研究如何隱密地傳遞資訊的學科。在現代特別指對資訊以及其傳輸的數學性研究,常被認為是數學和電腦科學的分支,和資訊理論也密切相關。密碼學是資訊保安等相關議題,如認證、訪問控制的核心。

目錄:

    • 前言:
    • 代數基本知識:
    • 群:
      • 迴圈群:
      • 加法迴圈群:
      • 有限迴圈群的生成元還具有以下性質:
    • 環:
    • 域:
    • 有限域:
    • 多項式環:
      • 不可約多項式:
    • 加密演算法:
    • 上的離散對數問題:
    • ElGamal演算法:
      • 計算離散對數的演算法:
    • Menezes-Vanstone橢圓曲線密碼體制
    • Diffie-Hellman演算法:
    • 橢圓曲線上的Diffie-Hellman演算法:
    • 橢圓曲線密碼體制
      • 1.有限域上的加法運算規則:
      • 有限域模p
      • 橢圓曲線的階
      • 2.ECC加密演算法描述:
  • 後記:

前言:


前面介紹了RSA公鑰加密演算法,而在公鑰加密體系中,另一類重要的加密體制是基於離散對數的難解性,如ECC橢圓曲線加密、Diffie-Hellman演算法、ElGamal演算法等。為了解決離散對數問題,我們需要先學習《近世代數》。

代數基本知識:


1.群
2.環
3.域
4.有限域GF()
5.多項式環

群:


定義:
設G是非空集合,若在G內定義一種代數運算,且滿足下列4個條件,則稱G(對運算)構成一個群:
(1) 封閉性:對任意的a,bG,恆有 abG;
(2) 結合律:對任意的a,b,cG,恆有 (ab)c = a(bc)
(3) 有單位元:存在eG,對任意的aG,有 ae=ea=a
(4) 每個元存在逆元:對任意aG,存在bG,使得 ab=ba=e,稱 b 為 a 的逆元。


其中運算可以是通常的乘法或者是加法。若為乘法,則稱G為乘法群,單位元記為1.若為加法,則稱G為加法群,單位元記為0。

一般情況下,記:

群 G 所含元素的個數,稱為該群的階。若群G含有有限個元素,則稱G為有限群,否則,為無限群。

若對群G中任何a,bG,有 ab = ba,則稱G為交換群或Abel群。

迴圈群:


定義:
設()是一個群如果群中存在一個元素,使得對群任意元素都存在一個整數,使得,則我們稱是一個迴圈群。元素是的一個生成元

加法迴圈群:


例:()是迴圈群,其中{0,1,2,3,4,5} ,為模6加法,其生成元為 1 或 5。

生成元的含義可以理解為:1或5的加法,可以實現群內所有的元素,如:5+5+.....+

5 mod 6 = 5,35 mod 6 = 5
10 mod 6 = 4,40 mod 6 = 4,
15 mod 6 = 3,45 mod 6 = 3
20 mod 6 = 2,50 mod 6 = 2
25 mod 6 = 1,55 mod 6= 1
30 mod 6 = 0,60 mod 6= 0


所以通過 生成元 5 的模6的加法,可以得到群內的所有元素,實現迴圈群。而 2,3,4不能作為生成元,是因為這些元素的模6加法並不能得到群內所有的元素,且並不是連續迴圈的數。

乘法迴圈群也是同樣的道理。

有限迴圈群的生成元還具有以下性質:


(元素的階):迴圈群(),為的一個生成元,1為的單位元,的階為,則:

環:


定義:
若集合R上定義了兩種二元運算:+(加法)及 x(乘法),且滿足下列4個條件,則稱R對這兩種運算構成了一個環,記為 (R,,):

(1) (R,)是一個Abel群,其恆等元為零元,用0表示。
(2) 對任何a,b,cR,有
(3)如果一個環(R,,)還滿足條件:對任意的a,bR,有,則稱環(R,,)為交換環。

域:


定義:
設是一個交換環,若中的所有的非零元素對乘法都存在逆元,則稱為一個域。如果一個域所包含的元素是有限的則稱此域是有限域,否則稱為無限域。有限域中所含元素的個數稱為有限域(R,,)的階。

有限域:


定義1:
有限域又常稱為Galois域,並以GF(q)或表示,其中q表示有限域的階。

定義2:
設、是兩個域,稱到的一個可逆對映為一個同構(對映),如果是保持運算的對映,即對任意的,有:,

定理3:
設是有限域,則有:
(1) 在同構的意義下,階與相同的有限域只有一個。同階的有限域必同構。
(2)有限域的階必為某個素數的冪.
(3) 設的階為,p是一個素數,則的任何一個子域的階為,其中m是n的因子。
(4) 記為有限域的所有非零元構成的集合,則關於乘法做成一個階為的迴圈群。因此,對所有的,有。這個群稱為的乘法群,乘法群的生成元稱為的本原元,共有個本原元。
(5) 設(其中)是一個有限域,則對任何及非負整數,有:

多項式環:


定義:
設是一個域,多項式,其中,。

若,稱n為該多項式的次數,稱為首項係數

對於域上的多項式的全體組成的集合記為。多項式的次數記為

設存在多項式與,滿足:

1.加法運算:
2.乘法運算:

容易驗證對這樣定義的多項式加法與乘法構成一個交換環,稱為多項式交換環。

不可約多項式:


設是上的一個次數大於零的多項式,如果它不能分解成兩個低次數的多項式的乘積,則稱是上的不可約多項式。

設是中的次不可約多項式,令為中所有次數小於的多項式的集合。

定義上的二元運算和如下:任取,

加密演算法:


ElGamal演算法
Menezes-Vanstone橢圓曲線密碼體制
Diffie-Hellman演算法
橢圓曲線上的Diffie-Hellman演算法
橢圓曲線加密ECC

上的離散對數問題:


上的離散對數問題是指對於迴圈群(p是一個素數),是群的生成元,對於任意的,尋找唯一 的整數()滿足:

我們把整數記為,並稱之為離散對數。

ElGamal演算法:


背景:ElGamal是建立在解有限乘法群上的離散對數問題的困難性基礎上的一種公鑰密碼體制。

演算法描述:
(1) 公開引數:取大素數,並取是乘法群{} 的一個生成元。

(2) 金鑰生成:隨機選取整數:並計算。

公開引數:和
公鑰:
私鑰:

(3) 加密運算:對於明文,選取隨機整數:,計算:


得到密文

(4) 解密運算:對於密文,用私鑰解密。

計算離散對數的演算法:

1.Shanks演算法
2.小步大步發(baby-step、giant-step)演算法
3.Pohlig-Hellman演算法
4.指數演演算法(index-calculus)

Menezes-Vanstone橢圓曲線密碼體制


背景:Menezes-Vanstone橢圓曲線密碼體制是ElGamal密碼體制在橢圓曲線上的模擬。

演算法描述:

(1) 公開引數:設是一個素數, E是有限域上的由方程表示的橢圓曲線,是相應的 Abel 群。G是中具有較大素數階的一個點。

(2) 生成金鑰:隨機選取整數:,計算。
是私鑰
是公鑰

(3) 加密運算:對任意明文,隨機選取一個整數:,使得,滿足與均為非零元素。並計算:



得到密文為

(4) 解密運算:

  1. 計算
  2. 計算
  3. 計算

即得明文為

Diffie-Hellman演算法:


背景:Diffie-Hellman演算法由Whitfield Diffie 和 Martin Hellman 提出,該演算法的安全性也是基於一般有限域上的離散對數問題的難解性。

演算法描述:

(1) 假設Alice和Bob之間要建立一個共享金鑰。Alice和Bob首先選定一個大素數,並選為乘法群中的一個生成元。

(2) Alice選取一個私鑰 a(整數):,計算。傳送A給Bob。

(3) Bob選取一個私鑰 b(整數):,計算。傳送B給Alice。

(4) Alice 計算
(5) Bob 計算

因為,Alice與Bob計算得到的是相同的。這樣的可以作為通訊的共享金鑰

由於與是保密的,所以即使攻擊者知道了、、、,也很難獲得 Alice 與 Bob 的共享金鑰。因為攻擊者要想獲得,則需要先解決離散對數問題或,而這是困難的。

橢圓曲線上的Diffie-Hellman演算法:


(1) Alice和Bob之間要建立一個共享金鑰。選取公共引數:取是某個素數冪,是上的橢圓曲線,是相應的 Abel 群,G 是中的一個具有較大素數階的點。

(2) Alice選取一個私鑰 a(整數):,計算。傳送A給Bob。

(3) Bob選取一個私鑰 b(整數):,計算。傳送B給Alice。

(4) Alice 計算
(5) Bob 計算

顯然 Alice 與 Bob 計算得到的是相同的:

即為 Alice 與 Bob 之間的共享金鑰。

橢圓曲線上的Diffie-Hellman金鑰交換演算法的安全性基於橢圓曲線上離散對數問題的難解性。

橢圓曲線密碼體制


1.有限域上的加法運算規則:


設是一個素數,那麼有限域上的橢圓曲線可以表示成方程:

  • 橢圓曲線,為素數,,()

這裡,滿足:

集合中的加法運算定義為:對任何,

  1. (為無窮遠點)

其中:

如果,則記,並稱為的負元。

一般地,我們將次記為,即次,同時,定義:(零元)

有限域模p


一個有限域是整數模的集合(integers mod p,p為素數),可表示為,,或者,一般用。

橢圓曲線的階

定義:一個群有多少個點叫做這個群的 “階” (order)

2.ECC加密演算法描述:

  • 點G稱為基點(base point)
  • 為私鑰
  • 為公鑰

其中,、為橢圓曲線上的點,為的階無窮大,為小於的整數。對於給定的和,根據加法法則,計算很容易。而基於離散對數的難解性,給定和,求則非常困難。

  1. 公開引數:Alice選取一條橢圓曲線,並選取橢圓曲線上的一點,作為基點G。
  2. 生成公鑰:Alice 選取一個私鑰,生成公鑰
  3. Alice 將和點K,G傳給使用者 Bob
  4. 加密運算:Bob 將明文編碼到上的一點,取一個隨機數。
  5. Bob 計算點和
  6. 使用者Bob將、傳給使用者 A 。
  7. 解密運算:Alice計算:,將 M 解碼就得到明文了。

(這裡:)

後記:

在學習ECC橢圓曲線加密等,基於離散對數難解性問題的加密演算法前。我們需要先掌握好《近世代數》的知識點。因為常見的橢圓曲線加密都是在有限域內實現的,首先得知道啥是"有限域"。下一篇我會給大家演示在實戰中的應用,所以基礎先要打好。文中有錯誤的地方,歡迎讀者留言指出