DSA数字签名算法
DSA數字簽名算法
美國國家標準與技術研究所(NIST)發布的聯邦信息處理標準FIPS? 186,稱為數字簽名算法(DSA)。DSA最初提出于1991年,1993年根據公眾對其安全性的反饋意見進行了一些修改,1996年又稍作修改。2000年發布了該標準的擴充版,及FIPS 186-2,隨后在2009年更新為FIPS 186-3,在2013年更新為FIPS? 186-4。這個最新版本還包括基于RSA和橢圓曲線密碼的數字簽名算法。
下圖是用DSA產生數字簽名和用RSA產生數字簽名的這兩種方法的對比
?
分析:
- 在RSA方法中,Hash函數的輸入值時要簽名的消息,輸出值是定長Hash碼,用發送方的私鑰PR將該hash碼加密形成簽名,然后發送其消息和簽名。接收方收到消息后,計算hash碼。接收方用發送方的公鑰PU對簽名進行解密,如果計算出的Hash碼與解密出的結果相同,則認為簽名是有效的。因為只有發送方擁有私鑰,所以只有發送方能產生有效的簽名
- 在DSA方法中,也使用了hash函數,它產生的hash碼和為此次簽名產生的隨機數k作為簽名函數的輸入,簽名函數依賴于發送方的私鑰PR和一組參數PU,這些參數為一組通信伙伴所有,我們可以認為這些參數構成全局參數PU。簽名由兩部分組成,標記為s和r。接收方對于接收到的消息產生hash碼,這個hash碼和簽名一起作為驗證函數的輸入,驗證函數依賴于全局公鑰和發送方公鑰,該發送方公鑰同發送方私鑰組成密鑰對。若認證函數的輸出等于簽名中的r成分,則簽名有效。簽名函數保證只有擁有私鑰的發送方才能產生有效的簽名。
- 對比:RSA與DSA安全性能差不多,但是DSA有兩個素數公開,因此,當使用別人的p和q時,即使不知道公鑰,仍能確定它們是否隨機產生還是做了手腳,但是RSA則不行。
?
數字簽名算法
下圖歸納總結了DSA算法,其中有三個公開參數為一組用戶所共有。選擇一個N位的素數q;然后選擇一個長度在512-1024間且滿足q能整除(p-1)的素數p;最后選擇形為的g,其中h是1到p-1間的整數,使得g>1.
DSA的公開參數的選擇與Schnorr簽名方案完全一樣
? ? ? 選定這些參數后,每個用戶選擇私鑰并產生公鑰。私鑰x的選擇必須是隨機或偽隨機選擇的、位于1到q-1之間的數。由計算出公鑰。由給定的x計算y比較簡單,而由給定的y確定x則在計算上是不可行的,因為這是求y的以g為低的模p的離散對數
? ? ? 要進行簽名,用戶需計算兩個量r和s。r和s是公鑰(p,q,g)、用戶私鑰x、消息的hash 碼H(M)和附加整數k的函數,其中k是隨機或偽隨機產生的,且k對每次簽名是唯一的。
? ? ? 令為接收方收到的M,r,s,接收方用圖上公式進行驗證。接收方計算值v,它是公鑰(p,q,g)、發送方公鑰、接收到的消息的hash碼的函數。若v與簽名中的r相同,則簽名是有效的
下圖描述了DSA算法的簽名和驗證函數
?
上圖所示的算法有這樣一個特點:接收端的驗證依賴于r,但是r卻根本不依賴于消息,它是k和全局公鑰的函數。k模p的乘法逆元傳給函數f1,f1的輸入還包含消息的hash碼和用戶私鑰,函數的這種結構使接收方可利用其收到的消息和簽名、他的公鑰以及全局公鑰來恢復r
?
?
?
?
?
?
?
?
?
總結
- 上一篇: GPS 定位管理车辆系统
- 下一篇: 计算机视觉领域 CCF重要期刊/国际会议