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