古詩詞大全網 - 藝術簽名 - 想聽大家對於壹道密碼設計的數學建模題

想聽大家對於壹道密碼設計的數學建模題

公鑰密碼又稱為雙鑰密碼和非對稱密碼,是1976年由Daffy和Hellman在其“密碼學新方向”壹文中提出的,見劃時代的文獻:

W.Diffie and M.E.Hellman, New Directrions in Cryptography, IEEE Transaction on Information Theory, V.IT-22.No.6, Nov 1976, PP.644-654

單向陷門函數是滿足下列條件的函數f:

(1)給定x,計算y=f(x)是容易的;

(2)給定y, 計算x使y=f(x)是困難的。

(所謂計算x=f-1(Y)困難是指計算上相當復雜,已無實際意義。)

(3)存在δ,已知δ 時,對給定的任何y,若相應的x存在,則計算x使y=f(x)是容易的。

註:1*. 僅滿足(1)、(2)兩條的稱為單向函數;第(3)條稱為陷門性,δ 稱為陷門信息。

2*. 當用陷門函數f作為加密函數時,可將f公開,這相當於公開加密密鑰。此時加密密鑰便稱為公開鑰,記為Pk。 f函數的設計者將δ 保密,用作解密密鑰,此時δ 稱為秘密鑰匙,記為Sk。由於加密函數時公開的,任何人都可以將信息x加密成y=f(x),然後送給函數的設計者(當然可以通過不安全信道傳送);由於設計者擁有Sk,他自然可以解出x=f-1(y)。

3*.單向陷門函數的第(2)條性質表明竊聽者由截獲的密文y=f(x)推測x是不可行的。

Diffie和Hellman在其裏程碑意義的文章中,雖然給出了密碼的思想,但是沒有給出真正意義上的公鑰密碼實例,也既沒能找出壹個真正帶陷門的單向函數。然而,他們給出單向函數的實例,並且基於此提出Diffie-Hellman密鑰交換算法。這個算法是基於有限域中計算離散對數的困難性問題之上的:設F為有限域,g∈ F是F的乘法群F*=F\{0}=<g>。並且對任意正整數x,計算gx是容易的;但是已知g和y求x使y= gx,是計算上幾乎不可能的。這已問題稱為有限域F上的離散對數問題。公鑰密碼學種使用最廣泛的有限域為素域FP.

對Diffie-Hellman密鑰交換協議描述:Alice和Bob協商好壹個大素數p,和大的整數g,1<g<p,g最好是FP中的本原元,即FP*=<g>。p和g無須保密,可為網絡上的所有用戶***享。

當Alice和Bob要進行保密通信時,他們可以按如下步驟來做:

(1)Alice送取大的隨機數x,並計算

X=gx(mod P)

(2)Bob選取大的隨機數x?,並計算X ? = gx ?(mod P)

(3)Alice將X傳送給Bob;Bob將X ?傳送給Alice。

(4)Alice計算K=(X ?)X(mod P);Bob計算K ? =(X) X ?(mod P),易見,K=K ? =g xx ?(mod P)。

由(4)知,Alice和Bob已獲得了相同的秘密值K。雙方以K作為加解密鑰以傳統對稱密鑰算法進行保密通信。

註:Diffie-Hellman密鑰交換算法擁有美國和加拿大的專利。

3 RSA公鑰算法

RSA公鑰算法是由Rivest,Shamir和Adleman在1978年提出來的(見Communitions of the ACM. Vol.21.No.2. Feb. 1978, PP.120-126)該算法的數學基礎是初等數論中的Euler(歐拉)定理,並建立在大整數因子的困難性之上。

將Z/(n)表示為 Zn,其中n=pq; p,q為素數且相異。若

Z*n?{g∈ Zn|(g,n)=1},易見Z*n為 ? (n)階的乘法群,且有 g ? (n)?1(mod n),而 ? (n)=(p-1)(q-1).

RSA密碼體制描述如下:

首先,明文空間P=密文空間C=Zn.(見P175).

A.密鑰的生成

選擇p,q,p,q為互異素數,計算n=p*q, ? (n)=(p-1)(q-1), 選擇整數e使(? (n),e)=1,1<e<? (n)),計算d,使d=e-1(mod ? (n))),公鑰Pk={e,n};私鑰Sk={d,p,q}。

註意,當0<M<n時,M? (n) =1(mod n)自然有:

MK? (n)+1?M(mod n), 而ed ? 1 (mod ? (n)),易見(Me)d ? M(mod n)

B.加密 (用e,n)明文:M<n 密文:C=Me(mod n).

C.解密 (用d,p,q)

密文:C 明文:M=Cd(mod n)

註:1*, 加密和解密時壹對逆運算。

2*, 對於0<M<n時,若(M,n) ≠ 1,則M為p或q的整數倍,假設M=cp,由(cp,q)=1 有 M? (q) ? 1(mod q) M ? (q) ? (p) ? 1(mod q)

有M? (q) = 1+kq 對其兩邊同乘M=cp有

有M? (q)+1=M+kcpq=M+kcn於是

有M? (q)+1 ? M(mod n)

例子:若Bob選擇了p=101和q=113,那麽,n=11413, ? (n)=100×112=11200;然而11200=26×52×7,壹個正整數e能用作加密指數,當且僅當e不能被2,5,7所整除(事實上,Bob不會分解φ(n),而且用輾轉相除法(歐式算法)來求得e,使(e, φ(n)=1)。假設Bob選擇了e=3533,那麽用輾轉相除法將求得:

d=e -1 ? 6597(mod 11200), 於是Bob的解密密鑰d=6597.

Bob在壹個目錄中公開n=11413和e=3533, 現假設Alice想發送明文9726給Bob,她計算:

97263533(mod 11413)=5761

且在壹個信道上發送密文5761。當Bob接收到密文5761時,他用他的秘密解密指數(私鑰)d=6597進行解密:57616597(mod 11413)=9726

註:RSA的安全性是基於加密函數ek(x)=xe(mod n)是壹個單向函數,所以對的人來說求逆計算不可行。而Bob能解密的陷門是分解n=pq,知? (n)=(p-1)(q-1)。從而用歐氏算法解出解密私鑰d.

4 RSA密碼體制的實現

實現的步驟如下:Bob為實現者

(1)Bob尋找出兩個大素數p和q

(2)Bob計算出n=pq和? (n)=(p-1)(q-1).

(3)Bob選擇壹個隨機數e(0<e< ? (n)),滿足(e, ? (n))=1

(4)Bob使用輾轉相除法計算d=e-1(mod ? (n))

(5)Bob在目錄中公開n和e作為她的公開鑰。

密碼分析者攻擊RSA體制的關鍵點在於如何分解n。若分

解成功使n=pq,則可以算出φ(n)=(p-1)(q-1),然後由公

開的e,解出秘密的d。(猜想:攻破RSA與分解n是多項式

等價的。然而,這個猜想至今沒有給出可信的證明!!!)

於是要求:若使RSA安全,p與q必為足夠大的素數,使

分析者沒有辦法在多項式時間內將n分解出來。建議選擇

p和q大約是100位的十進制素數。 模n的長度要求至少是

512比特。EDI攻擊標準使用的RSA算法中規定n的長度為

512至1024比特位之間,但必須是128的倍數。國際數字

簽名標準ISO/IEC 9796中規定n的長度位512比特位。

為了抵抗現有的整數分解算法,對RSA模n的素因子

p和q還有如下要求:

(1)|p-q|很大,通常 p和q的長度相同;

(2)p-1 和q-1分別含有大素因子p1和q1

(3)P1-1和q1-1分別含有大素因子p2和q2

(4)p+1和q+1分別含有大素因子p3和q3

為了提高加密速度,通常取e為特定的小整數,如EDI國際標準中規定 e=216+1,ISO/IEC9796中甚至允許取e=3。這時加密速度壹般比解密速度快10倍以上。 下面研究加解密算術運算,這個運算主要是模n的求冪運算。著名的“平方-和-乘法”方法將計算xc(mod n)的模乘法的數目縮小到至多為2l,這裏的l是指數c的二進制表示比特數。若設n以二進制形式表示有k比特,即k=[log2n]+1。 由l≤ k,這樣xc(mod n)能在o(k3)時間內完成。(註意,不難看到,乘法能在o(k2)時間內完成。)

平方-和-乘法算法:

指數c以二進制形式表示為:

c=

Xc=xc0×(x2)c1×…×(x2t-1)ct-1

預計算: x2=xx

x4=x22=x2x2

.

.

.

x2t-1 =x2t-2*x2t-2

Xc計算:把那些ci=1對應的x2i全部乘在壹起,便得xc。至

多用了t-1次乘法。請參考書上的177頁,給出計算

xc(mod n)算法程序:

A=xc c=c0+c12+..+ct-12t-1= [ct-1,....,c1,c0]2

5 RSA簽名方案

簽名的基本概念

傳統簽名(手寫簽名)的特征:

(1)壹個簽名是被簽文件的物理部分;

(2)驗證物理部分進行比較而達到確認的目的。(易偽造)

(3)不容易忠實地“copy”!!!

定義: (數字簽名方案)壹個簽名方案是有簽署算法與驗

證算法兩部分構成。可由五元關系組(P,A,K,S,V)來刻化:

(1)P是由壹切可能消息(messages)所構成的有限集合;

(2)A是壹切可能的簽名的有限集合;

(3)k為有限密鑰空間,是壹些可能密鑰的有限集合;

(4)任意k ∈K,有簽署算法Sigk ∈ S且有對應的驗證算法Verk∈V,對每壹個

Sigk:p A 和Verk:P×A {真,假} 滿足條件:任意x∈ P,y∈ A.有簽名方案的壹個簽名:Ver(x,y)= {

註:1*.任意k∈K, 函數Sigk和Verk都為多項式時間函數。

2*.Verk為公開的函數,而Sigk為秘密函數。

3*.如果壞人(如Oscar)要偽造Bob的對X的簽名,在計算上是不可能的。也即,給定x,僅有Bob能計算出簽名y使得Verk(x,y)=真。

4*.壹個簽名方案不能是無條件安全的,有足夠的時間,Oscar總能偽造Bob的簽名。

RSA簽名:n=pq,P=A=Zn,定義密鑰集合K={(n,e,p,q,d)}|n=pq,d*e?1(mod ?(n))}

註意:n和e為公鑰;p,q,d為保密的(私鑰)。對x∈P, Bob要對x簽名,取k∈K。Sigk(x)? xd(mod n)?y(mod n)

於是

Verk(x,y)=真 x?ye(mod n)

(註意:e,n公開;可公開驗證簽名(x,y)對錯!!也即是否為Bob的簽署)

註:1*.任何壹個人都可對某壹個簽署y計算x=ek(y),來偽造Bob對隨機消息x的簽名。

2*.簽名消息的加密傳遞問題:假設Alice想把簽了名的消息加密送給Bob,她按下述方式進行:對明文x,Alice計算對x的簽名,y=SigAlice(x),然後用Bob的公開加密函數eBob,算出

Z=eBob(x,y) ,Alice 將Z傳給Bob,Bob收到Z後,第壹步解密,

dBob(Z)=dBobeBob(x,y)=(x,y)

然後檢驗

VerAlice(x,y)= 真

問題:若Alice首先對消息x進行加密,然後再簽名,結果

如何呢?Y=SigAlice(eBob(x))

Alice 將(z,y)傳給Bob,Bob先將z解密,獲取x;然後用

VerAlice檢驗關於x的加密簽名y。這個方法的壹個潛在問

題是,如果Oscar獲得了這對(z,y),他能用自己的簽名來

替代Alice的簽名

y?=SigOscar(eBob(x))

(註意:Oscar能簽名密文eBob(x),甚至他不知明文x也能做。Oscar傳送(z,y ?)給Bob,Bob可能推斷明文x來自Oscar。所以,至今人麽還是推薦先簽名後加密。)

6.EIGamal方案

EIGamal公鑰密碼體制是基於離散對數問題的。設P

至少是150位的十進制素數,p-1有大素因子。Zp為有限域,

若α為Zp中的本原元,有Zp* =<α>。若取β∈Zp*=Zp\{0},

如何算得壹個唯壹得整數a,(要求,0≤a≤ p-2),滿足

αa=β(mod p)

將a記為a=logαβ

壹般來說,求解a在計算上是難處理的。

Zp*中的Egamal公鑰體制的描述:設明文空間為P=Zp*,密文空

間為C=Zp*×Zp*,定義密鑰空間K={(p, α,a, β )|β=αa(mod p)}

公開鑰為:p, α ,β

秘密鑰(私鑰):a

Alice 取壹個秘密隨機數k∈ Zp-1,對明文x加密

ek(x,k)=(y1,y2)

其中, y1=αk(mod p),y2=xβk(mod p)

Bob解密,

dk(y1,y2)=y2(y1α)-1(mod p)

註:1*.容易驗證y2(y1α)-1=x(αa)k(αka)-1=x !!

2*.利用EIGamal加密算法可給出基於此的簽名方案:

Alice 要對明文x進行簽名,她首先取壹個秘密隨機數k作

為簽名

Sigk(x,k)=(? , ? )

其中 ?=αk(mod p), ?=(x-a? )k-1(mod p-1)

對x, ?∈Zp*和? ∈ Zp-1,定義Verk(x, ?,?)=真等價於

β?α?=αx(mod p)

要說明的是,如果正確地構造了這個簽名,那麽驗證將

是成功的,因為

β?α?= αa? αk? (mod p)= αa?+k? (mod p)

由上面知道, ?=(x- a?)k-1(mod p-1)可以推出

k?=x- a?(mod p-1)有a?+k?x(mod p)

所以 β ?= αx (mod p)

該簽名方案已經被美國NIST(國家標準技術研究所)確定為簽名標準(1985)。

有關RSA方面的內容,請訪問網址:

www.RSAsecurity.com