php中 使用dsa算法,DSA加密算法解析
DSA加密算法是Schnorr和ElGamal簽名算法的變種,被美國NIST作為DSS(DigitalSignature Standard)。它是一種公開密鑰算法,用作數字簽名。DSA加密算法使用公開密鑰,為接受者驗證數據的完整性和數據發送者的身份,它也可用于由第三方去確定簽名和所簽數據的真實性。
信息交流中,接收方希望收到的信息未被竄改(信息完整性),還希望接收到的信息確由自己認定的發送方所發(信息來源有效性),那么接收方和發送方就可以約定,共同使用DSA加密算法來實現。
算法中應用了下述參數:
p:L bits長的素數。L是64的倍數,范圍是512到1024;
q:p - 1的160bits的素因子;
g:g = h^((p-1)/q) mod p,h滿足h < p - 1, h^((p-1)/q) mod p > 1;
x:私鑰。x為一個隨機或偽隨機生成的整數,其值滿足0
y:公鑰。y=powm(g,x,p)。
注意:
1、整數p,q,g可以公開,也可以僅由一組特定用戶共享。
2、私鑰x和公鑰y稱為一個密鑰對(x,y),私鑰只能由簽名者本人獨自持有,公鑰則可以公開發布。密鑰對可以在一段時間內持續使用。
簽名產生過程如下:
1. P產生隨機數k,k < q;
2. P計算 r = ( g^k mod p ) mod q
s = ( k^(-1) (H(m) + xr)) mod q
簽名結果是( m, r, s )。
3. 驗證時計算 w = s^(-1)mod q
u1 = ( H( m ) * w ) mod q
u2 = ( r * w ) mod q
v = (( g^u1 * y^u2 ) mod p ) mod q
若v = r,則認為簽名有效。
DSA加密算法的安全性:
DSA加密算法主要依賴于整數有限域離散對數難題,素數P必須足夠大,且p-1至少包含一個大素數因子以抵抗Pohlig &Hellman算法的攻擊。M一般都應采用信息的HASH值。DSA加密算法的安全性主要依賴于p和g,若選取不當則簽名容易偽造,應保證g對于p-1的大素數因子不可約。
重要特點:兩個素數公開
DSA是基于整數有限域離散對數難題的,其安全性與RSA相比差不多。DSA的一個重要特點是兩個素數公開,這樣,當使用別人的p和q時,即使不知道私鑰,你也能確認它們是否是隨機產生的,還是作了手腳。
小知識之公開密鑰:
公開密鑰也稱為非對稱密鑰,每個人都有一對唯一對應的密鑰:公開密鑰(簡稱公鑰)和私人密鑰(簡稱私鑰),公鑰對外公開,私鑰由個人秘密保存;用其中一把密鑰加密,就只能用另一把密鑰解密。
總結
以上是生活随笔為你收集整理的php中 使用dsa算法,DSA加密算法解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 替换.DATA的COOKIE突破GS
- 下一篇: 【知识整理】Vue里用v-html解析一