1. 程式人生 > 其它 >第八章 數字簽名技術

第八章 數字簽名技術

轉https://www.cnblogs.com/WittPeng/p/8978737.html

第八章 數字簽名技術

數字簽名概述

基本概念

  數字簽名技術一般分為帶仲裁和不帶仲裁的兩類。如果使用對稱金鑰進行數字簽名,則必須使用仲裁者,非對稱可以不帶仲裁。

  數字簽名可以實現不可否認性和訊息完整性認證(檢驗是否被篡改或偽造)

原理

  (P,S,K,Sig,Ver),P:金鑰生成演算法,S:簽名演算法,K:驗證算髮,Sign,Verify

過程簡圖

        

數字簽名的實現方案

基於RSA的簽名方案 金鑰生成演算法
  1. 選取兩個512位的大素數p和q,使得N(=pq)為1024位;
  2. 可得Φ(N)=(p-1)(q-1);
  3. 選取隨機整數e(1<e<Φ(N)),滿足gcd(e,Φ(N))=1;
  4. 計算d: d≡e-¹(mod Φ(N));
  5. 公鑰Pk=(n,e),私鑰為{d,Φ(N),p,q}。

這裡,先選擇e再確定d的原因是:加密的重要性大於解密的重要性。

簽名演算法
  1. 利用一個安全的Hash函式h來產生訊息摘要h(m);
  2. s≡h(m)d(mod n),s就是訊息m的簽名;
  3. 將(s,m)傳送給B。
驗證演算法
  1. 利用上述Hash函式生成h(m);
  2. 檢驗等式h(m)mod n≡se(mod n)是否成立,成立則簽名有效,否則簽名無效。
正確性
安全性
  1. 簽名時使用了Hash函式可以防止利用同態的偽造攻擊,有很好的抗攻擊性。
  2. RSA簽名方案存在簽名可重用的問題,同一訊息在不同時刻簽名不應是相同的。
基於離散對數的簽名方案 ElGamal簽名體制 金鑰生成演算法
  1. 選取一個1024位的大素數p;
  2. 選擇一個生成元g和隨機數x,計算y≡gx(mod p)

簽名者的公鑰是(p,g,y),私鑰是x。

簽名演算法 簽名者選取隨機數k,計算r≡gk(mod p),s≡[h(m)-xr]K-1(mod(p-1)),簽名為(r,s),其中h為安全的Hash函式
驗證演算法 計算h(m)後,驗證yxrs≡gh(m)(mod p)是否成立
正確性
安全性
  1. 隨機數k的選取和保管:首先k值不能洩露,否則簽名者的私鑰洩露;其次,k不能重複使用;最後,簽名者多次簽名的的多個k之間無關聯。
  2. 如果不使用Hash函式,則簽名方案容易受到偽造攻擊
Schnorr簽名體制 特點 簽名速度較快,簽名長度較短
金鑰生成演算法
  1. 選取兩大素數p(1024位)和q,q是p-1的大素因子且長度比p小得多;
  2. 選取一個生成元,且gq≡1(mod o),g≠1;
  3. 選取隨機數1<x<q,計算y≡gx(mod p),公鑰為(p,q,g,y),私鑰為x。
簽名演算法

簽名者選擇隨機數k,1≤k≤q-1,然後進行如下計算:

            r≡gk(mod p)

            e=h(m,r)

            s≡(xe+k)(mod q)

簽名為(e,s),其中h為安全的Hash函式。

驗證演算法 簽名接收者在收到訊息m和簽名(e,s)後,首先計算r1≡gsy-e(mod p),然後驗證e=h(e,r1),如果等式成立則簽名有效,否則無效。
正確性和安全性

安全性和ElGaml類似

DSA簽名體制 金鑰生成演算法
  1. 選取160bite的素數q,選擇512~1024bite的素數p,使得p-1能被q整除;
  2. 選擇g≡h(p-1)/q(mod p),h滿足1<h<p-1,且g>1;
  3. 選擇1~q之間的隨機數x作為私鑰,計算y≡gx(mod p),使用者的公鑰是(p,q,g,y)
簽名演算法 選取隨機數k,r=(gkmod p)mod q,s≡[h(m)+xr]k-1(mod q),其中h是SHA1的特定Hash函式
驗證演算法

收到m和簽名值(r,s)後,計算

  w≡s-1(mod q)

  u1≡h(m)w(mod q)

  u2≡rw(mod q)

  v=(gu1yu2mod p)mod q

比較v和r,相同則簽名有效,否則無效。

正確性
安全性 DSA是ElGamal的變形,因此安全性論述在此也同樣使用。還有一點是簽名演算法計算的s正好為0時,會產生1除以0的情況,必須放棄這個簽名。
三種簽名體制的對比
離散對數簽名體制
基於橢圓曲線的簽名方案 金鑰生成演算法

選擇E上一點G∈E,G的階為滿足安全要求的素數n,即nG=O。

選取一個隨機數d∈[1,n-1],計算Q使得Q=dG,那麼公鑰為(n,Q),私鑰為d。

簽名演算法
  1. 使用者隨機選取整數k∈[1,n-1],計算kG=(x,y),r≡x(mod n);
  2. 計算e=h(m);
  3. 計算s≡(e+rd)k-1(mod n),如果r=0或s=0,則另選隨機數k,重新執行上面的過程,訊息m的簽名為(r,s)。
驗證演算法
  1. 計算e=h(m);
  2. 計算u≡s-1e(mod n),v≡s-1r(mod n),(x1,y1)=uG+vQ,r1≡x1(mod n);
  3. 判斷r和r1的關係,相等則簽名有效,否則無效。
正確性
安全性

ECDSA安全性依賴於基於橢圓曲線的有限群上的離散對數難題,與RSA和有限域離散對數的數字簽名相比,在相同的安全強度條件下,有如下特點

      簽名長度短、金鑰儲存空間小,特別是用於儲存空間有限、頻寬受限、要求高速實現的場合。

特殊數字簽名

  • 代理簽名
  • 盲簽名
  • 群簽名
  • 不可否認簽名
  • 門限數字簽名
  • 多重數字簽名
  • ··· ··