DSA-数据签名算法(理论)
一、歷史
??1991年8月,NIST(Nation Institute of Standards and Technology,美國國家標準技術研究所)提出了數字簽名算法(DSA)用于他們的數字簽名標準(DSS)中。
DSA是算法,DSS是標準。標準采用算法,算法是標準的一部分。
??但是NIST的通告引起了大量譴責,這些譴責的政治性多于學術性。許多已經取得RSA算法專利許可權的大型軟件公司也站出來反對DSS,他們已經投入大量的資金來實現RSA算法,他們當然不希望這些資金白白流失。
??1994年5月19日,該標準最終頒布。
二、DSA算法的描述
??DSA是Schnorr和ElGamal簽名算法的變形,該算法的安全性依賴于計算模數的離散對數的難度。
DSA簽名中的公開密鑰:
| q | 160位長,并與 p-1 互素的因子(可以在一組用戶中共享) |
| g | g=h(p-1)/q mod p,其中 h 小于 p-1 并且 h(p-1)/q mod p > 1 |
| y | y=gx mod p (一個p位的數) |
在標準最初版本中,p的長度固定為512位,這引起了許多批評,之后NIST改變了它。
DSA簽名中的私人密鑰:
DSA簽名算法中的簽名過程:
| r(簽名)= (gk mod p) mod q |
| s(簽名) = (k-1 ( H(m)+xr ))mod q |
DSA簽名算法中的驗證過程:
| u1 = (H(m)×w)mod q |
| u2 = (rw) mod q |
| v = ((gu1 × yu2) mod p) mod q |
| 如果 v=r ,則簽名被驗證 |
對消息m簽名時:
(1)Alice產生一個的隨機數 k,k<q。
(2)Alice產生:
???????r = (gk mod p) mod q
???????s = (k-1 ( H(m)+xr ))mod q
其中,r 和 s 就是她的簽名,她將它們發給 Bob。
(3)Bob通過計算來驗證簽名:
???????w = s-1 mod q
???????u1 = (H(m)×w) mod q
???????u2 = (rw) mod q
???????v = ((gu1 × yu2) mod p) mod q
如果, v=r,則簽名有效。
過程:
三、 DSA的素數的產生
NIST在【1154】中推薦了一種產生素數 p 和q 的方法,其中 q 能整除 p-1。
素數 p 為 L 位,介于 512~1024 位,是 64 的倍數。
素數 q 為 160 位。
設 L-1=160n+6
(1)選取一個至少 160 位的任意序列,稱為 S。設 g 是 S 的位長度。
(2)計算 U=SHA(S)⊕ SHA((S+1)mod 2g),SHA是安全散列算法
(3)將U的 最高位 和 最低位 置為 1 形成 q
(4)檢驗 q 是否是素數
(5)如果 q 不是素數,則回到(1)
(6)設 C=0,N=2
(7)對 k=0,1,·······,n,令Vk = SHA((S+N+k)mod 2g )
(8)令W=V0 + 2160V1+······+2160(n-1)Vn-1 + 2160n(Vn mod 2b),W為整數,且X=W+2L-1。注意 X 是 L 為長的數。
(9)令p=X-((X mod 2q)-1)。注意 p 同余1 模 2q。
(10)若 p<2L-1,轉到(13)步
(11)檢測 p 是否為素數
(12)如果 p 是素數,轉到(15)步
(13)令C=C+1,N=N+n+1
(14)如C=4096,轉到第(1)步;否則,轉到第(7)步
(15)將用于產生 p 和 q 的 S 和 C 值保存起來
在文獻【1154】中,變量S稱為“種子”,C稱為“計數”,N稱為“偏差”
單向散列函數SHA的使用能防止他人在背后做手腳。
這樣做的安全性比RSA高,在RSA中,素數是秘密保存的。某人可能產生假素數或容易分解的特殊形式的素數,除非你知道私人密鑰,否則你不知道這一點。而這里,即使你不知道私人密鑰,你也可以確信 p 和 g 是隨機產生的。
四、DSA的安全性
512位的DSA不能提供長期的安全性,但是1024位可以。
五、攻擊k
??每個簽名都需要一個新值 k,并且該值必須是隨機選擇的。
??如果 Eve 恢復了 Alice 用來簽名消息的 k,她就可以恢復 Alice 的私人密鑰 x (目前我還不清楚怎么恢復的?,有知道的可以評論我一下哈,Thanks?(・ω・)ノ)。如果Eve獲得了使用同一個 k 簽名的兩個消息,即使她不知道 k 的任何情況,也可以恢復 x 。擁有了 k ,Eve 就可以產生 Alice 的簽名。在DSA實現中,一個好的隨機數發生器對系統安全是至關重要的。
補充:可以使用DSA函數進行 ElGamal加密 和 RSA加密。
總結
以上是生活随笔為你收集整理的DSA-数据签名算法(理论)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 连接打印机
- 下一篇: seo三部曲之关键词策略