【正文】
求 8 數(shù)字簽名的產(chǎn)生可用加密算法或特定的簽名算法。為實現(xiàn)上述 3條性質(zhì),數(shù)字簽名應(yīng)滿足以下要求: ① 簽名的產(chǎn)生必須使用發(fā)方獨有的一些信息以防偽造和否認(rèn)。類似于手書簽名,數(shù)字簽名應(yīng)具有以下性質(zhì): ① 能夠驗證簽名產(chǎn)生者的身份,以及產(chǎn)生簽名的日期和時間。 這兩種欺騙在實際的網(wǎng)絡(luò)安全應(yīng)用中都有可能發(fā)生,例如在電子資金傳輸中,收方增加收到的資金數(shù),并聲稱這一數(shù)目來自發(fā)方。本章首先介紹數(shù)字簽名的基本概念和一些常用的數(shù)字簽名算法,然后介紹身份認(rèn)證協(xié)議、身份證明技術(shù)以及其他一些常用的密碼協(xié)議。 1. 數(shù)字簽名的基本概念 4 上一章介紹的消息認(rèn)證其作用是保護通信雙方以防第三方的攻擊,然而卻不能保護通信雙方中的一方防止另一方的欺騙或偽造。又如用戶通過電子郵件向其證券經(jīng)紀(jì)人發(fā)送對某筆業(yè)務(wù)的指令,以后這筆業(yè)務(wù)賠錢了,用戶就可否認(rèn)曾發(fā)送過相應(yīng)的指令。 ② 能用于證實被簽消息的內(nèi)容。 ② 簽名的產(chǎn)生應(yīng)較為容易。 1. 由加密算法產(chǎn)生數(shù)字簽名 利用加密算法產(chǎn)生數(shù)字簽名是指將消息或消息的摘要加密后的密文作為對該消息的數(shù)字簽名,其用法又根據(jù)是單鑰加密還是公鑰加密而有所不同。具體來說,就是 B執(zhí)行解密運算 Y=DK(X),如果 X是合法消息 M加密后的密文,則 B得到的 Y就是明文消息 M,否則 Y將是無意義的比特序列。 1. 由加密算法產(chǎn)生數(shù)字簽名 12 下面以 RSA簽名體制為例說明數(shù)字簽名的產(chǎn)生過程。 ② 簽名過程。 ? m odeM S n?1. 由加密算法產(chǎn)生數(shù)字簽名 14 由加密算法產(chǎn)生數(shù)字簽名又分為 外部保密方式和 內(nèi)部保密方式 ,外部保密方式是指數(shù)字簽名是直接對需要簽名的消息生成而不是對已加密的消息生成,否則稱為內(nèi)部保密方式。 1. 由加密算法產(chǎn)生數(shù)字簽名 15 2. 由簽名算法產(chǎn)生數(shù)字簽名 簽名算法的輸入是明文消息 M和密鑰 x,輸出是對 M的數(shù)字簽名,表示為 S=Sigx(M)。 1. 直接方式 直接方式是指數(shù)字簽名的執(zhí)行過程只有通信雙方參與,并假定雙方有共享的秘密鑰或接收一方知道發(fā)方的公開鑰。例如,要求每一被簽名的消息都包含有一個時戳(日期和時間)并要求密鑰丟失后立即向管理機構(gòu)報告。此時由于 A的存在, X無法對自己發(fā)出的消息予以否認(rèn)。 ② A→ Y: EKAY[IDX‖M‖EKXA[IDX‖H(M)]‖T]。 Y對收到的內(nèi)容解密后 ,將解密結(jié)果存儲起來以備出現(xiàn)爭議時使用。 Y相信 A只有在對 EKAY[IDX‖M‖EKXA[IDX‖H(M)]‖T]中的雜湊值及 X的簽名驗證無誤后才將之發(fā)給 Y。 例 2 簽名過程如下: ① X→ A: IDX‖EKXY[M]‖EKXA[IDX‖H(EKXY[M])]。A對 EKXA[IDX‖H(EKXY[M])]解密后通過驗證雜湊值以驗證 X的簽名,但始終未能讀取明文 M。這一問題可通過下例所示的采用公鑰加密技術(shù)的方法得以解決。 第①步中, X用自己的秘密鑰 SKX和 Y的公開鑰 PKY對消息加密后作為對 M的簽名,以這種方式使得任何第 3方(包括 A)都不能得到 M的明文消息。 首先,在協(xié)議執(zhí)行以前,各方都不必有共享的信息,從而可防止共謀。 DSS最初于 1991年公布,在考慮了公眾對其安全性的反饋意見后,于 1993年公布了其修改版。圖 2用于比較 RSA簽名和DSS簽名的不同方式。 這樣收方就得了兩個雜湊值,如果兩個雜湊值是一樣的,則認(rèn)為收到的簽名是有效的。驗證函數(shù)的輸出如果與收到的簽名成分 r相等,則驗證了簽名是有效的。算法描述如下: (1) 全局公開鑰 p:滿足 2L1p2L 的大素數(shù),其中 512≤L≤1024且L是 64的倍數(shù)。 (3) 用戶的公開鑰 y y≡gx mod p。計算 w≡(s′)1 mod q,u1≡[H(M′)w] mod q u2≡r′ w mod q,v≡[(gu1yu2) mod p] mod q 檢查 ,若相等,則認(rèn)為簽名有效。 數(shù)字簽名算法 DSA 45 DSA 安全性 ? 基于離散對數(shù),最初建議使用一個共同的 modulus p ;現(xiàn)在建議不同的工作組使用不同的 (p,q,g)。 1. 離散對數(shù)簽名體制 48 (2) 簽名的產(chǎn)生過程 對于待簽名的消息 m, A執(zhí)行以下步驟: ① 計算 m的雜湊值 H(m)。(見 171頁表 ) 1. 離散對數(shù)簽名體制 49 (3) 簽名的驗證過程 接收方在收到消息 m和簽名 (r, s)后,可以按照以下驗證方程檢驗: )( m o d)),(,( pygrT r u emsryV e r cba ???1. 離散對數(shù)簽名體制 50 2. ElGamal簽名體制 (1) 體制參數(shù) p:大素數(shù); g: Z*p的一個生成元; x:用戶 A的秘密鑰, x∈ RZ*p; y:用戶 A的公開鑰, y≡gx(mod p)。 ③ 計算 s≡(H(m)xr)k1(mod p1)。 因此 S = 9.() = 3 mod 10 ? 簽名是 (K=6,S=3)。 ③ 計算 s≡xe+k(mod q)。 4. NebergRueppel簽名體制 60 (2) 簽名的產(chǎn)生過程 對于待簽名的消息 m, A執(zhí)行以下步驟: ① 計算出 ,其中 R是一個單一映射,并且容易求逆,稱為冗余函數(shù)。 以 (e, s)作為對 m的數(shù)字簽名。 4. NebergRueppel簽名體制 62 ? ④ 計算 m′≡ve(mod p)。 q:大素數(shù), q|(p1),且 q≥2140; g1, g2:兩個與 q同長的隨機數(shù); x1, x2:用戶 A的秘密鑰,兩個小于 q的隨機數(shù); y:用戶 A的公開鑰, y≡gx11gx22(mod p)。 ④ 計算: s2≡(k2+ex2)(mod q)。 ③ 驗證: 其正確性可通過下式證明: 12( , ( , , ) , )Ve r y e s s m T rue e e?? ? ?1 2 1 1 2 2 1 2 1 21 2 1 2 1 2 1 2( m od ) ( m od ) ( m od )s s k e x k e x x e x e k kev g g y p g g g g p g g p? ? ? ?? ? ?5. Okamoto簽名體制 66 設(shè) n是一個大合數(shù),找出 n的所有素因子是一個困難問題,稱之為大數(shù)分解問題。 ② 隨機選取 t個介于 1和 n之間的數(shù) r1,r2,… ,rt,并對任何 j(1≤j≤t),計算 Rj≡r2j(mod n)。 1( m o d )ijk bj j iis r x n?? ?1. FiatShamir簽名體制 70