DSA签名算法简介
目錄
DSA算法
密鑰生成
簽名生成
簽名驗證
正確性驗證
DSA安全性說明
DSA算法是Schnorr和ElGamal簽名算法的變種,被美國NIST作為DSS(Digital Signature Standard)。DSA使用公開密鑰,為接受者驗證數據的完整性和數據發送者的身份,也可用于由第三方去確定簽名和所簽數據的真實性。
信息交流中,接收方希望收到的信息未被竄改(信息完整性),還希望接收到的信息確由自己認定的發送方所發(信息來源有效性),那么接收方和發送方就可以約定,共同使用DSA加密算法來實現。
DSA算法
常見DSA參數(p、q、簽名)長度為:
- 1024? 160?????? 320
- 2048? 224?????? 448
- 3072? 256?????? 512
下面以1024位的DSA為例進行說明:
密鑰生成
?
簽名生成
對數據x散列后做簽名,簽名結果為一對整數(r, s)。
簽名驗證
?
正確性驗證
‘簽名生成’時的s為:
兩邊同乘s與k的逆,得到
由‘簽名驗證’時的2、3步替換得到:
兩邊同時做模p的指數運算得到:
有‘密鑰生成’時的步5替換得到:
兩邊分別模q得到:
由‘簽名生成’時的步2中r與‘簽名驗證’時的步4中v替換得到:
?
DSA安全性說明
DSA加密算法的安全性:
DSA加密算法主要依賴于整數有限域離散對數難題,素數P必須足夠大,且p-1至少包含一個大素數因子以抵抗Pohlig &Hellman算法的攻擊。
DSA加密算法的安全性主要依賴于p和d,若選取不當則簽名容易偽造,應保證d對于p-1的大素數因子不可約。
重要特點:兩個素數公開
DSA是基于整數有限域離散對數難題的,其安全性與RSA相比差不多。DSA的一個重要特點是兩個素數公開,這樣,當使用別人的p和q時,即使不知道私鑰,也能確認它們是否是隨機產生的,還是作了手腳。
?
總結
- 上一篇: 易语言 精易WEB浏览器拦截并且显示验证
- 下一篇: 问题解决:Docker之DOCKER_O