DSA签名
DSA簽名
- 【實驗?zāi)康摹?/li>
- 【實驗環(huán)境】
- 【實驗預(yù)備知識點】
- 【實驗內(nèi)容】
- 【實驗步驟】
- 【實驗思考題】
【實驗?zāi)康摹?/h1>
1、了解DSS標(biāo)準(zhǔn);
2、了解DSA數(shù)字簽名的原理;
3、驗證DSA的簽名及簽名驗證過程。
【實驗環(huán)境】
假定有用戶A需要將一段信息進行DSA簽名后發(fā)送給B。先定義DSA算法的運行參數(shù),生成DSA算法所需的公私鑰對,用戶A先對消息進行簽名,然后消息與簽名均發(fā)送給用戶B,用戶B再利用A的公鑰加以驗證。
完成本實驗需要使用密碼學(xué)教學(xué)軟件,在D:\Release\bin目錄下打開Crypto軟件。
【實驗預(yù)備知識點】
DSA(Digital Signature Algorithm)簽名算法是由美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST, National Institute of Standards and Technology)提出的一個關(guān)于數(shù)字簽名的美國聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS, Federal Information Processing Standard)。該標(biāo)準(zhǔn)在1991年8月提出,1993以FIPS 186被采用,作為數(shù)字簽名(DSS, Digital Signature Standard)的一部分。
公鑰、私鑰生成:
分為兩部分,首先約定算法的一些參數(shù),然后為各個用戶生成公私鑰。
算法參數(shù):
1、選定一個哈希函數(shù)H,最初為SHA-1,現(xiàn)在SHA-2也可以使用。函數(shù)輸出有可能需要截短到密鑰對的長度。
2、選定密鑰的長度L、N。密鑰長度決定了加密可靠度。最近的標(biāo)準(zhǔn)FIPS 186-3指定長度應(yīng)該為:(1024,160), (2048,224), (2048,256), and (3072,256)
3、選取N位長度的一個質(zhì)數(shù)q。N長度必須小于或等于哈希函數(shù)H輸出長度。
4、選取L位長度的一個質(zhì)數(shù)p,并滿足(p-1)%q=0。
5、選取一個整數(shù)g,g是滿足等式q^g%p=1的最小整數(shù)。g可以用公式g = h^((p–1)/q)%p得到,h為任意整數(shù),只要1 < h < p?1,h通常選為2,但如果g的結(jié)果為1時,需要再選一個其它數(shù)。
(p, q, g)構(gòu)成公用的算法參數(shù)。
公、私鑰生成:
1、選取任意整數(shù)x, 0 < x < q
2、計算 y = g^x%p
3、公鑰為(p, q, g, y),私鑰為x
生成簽名:
1、生成隨機數(shù)k,0 < k < q
2、計算r = g^k%p%q,如果r=0,重新選取k
3、計算s=(H(m)-xr)(k^(-1))%q,H為哈希函數(shù),m為待簽名數(shù)據(jù),如果s=0,重新選取k
4、(r, s)構(gòu)成簽名
驗證簽名:
1、驗證:0<r<q,0<s<q
2、計算w = (s^(-1))%q
3、計算u1 = H(m)w%q
4、計算u2 = rw%q
5、計算v = (((gu1)*(yu2))%p)%q
6、如果v=r則簽名有效。
隨機數(shù)k的選取很重要,如果不夠隨機,或者即使其中幾位為泄露,也足夠使DSA被攻破。
【實驗內(nèi)容】
數(shù)字簽名標(biāo)準(zhǔn)(DSS)由NIST公布,該標(biāo)準(zhǔn)能夠使接收者能夠驗證數(shù)據(jù)的完整性和數(shù)據(jù)發(fā)送者的身份而制定,所采用的算法稱為DSA算法,也稱為DSA簽名。
【實驗步驟】
(1). 自選DSA算法的運行參數(shù),確定公私鑰對;
(2). 輸入待簽名的明文信息m;
(3). 點擊簽名按鈕,觀察簽名信息r,s;
(4). 驗證簽名過程中隨機數(shù)的作用;
(5). 點擊簽名驗證按鈕,觀察簽名驗證結(jié)果;
(6). 修改m’以及簽名r’,s’;
(7). 點擊簽名驗證按鈕,驗證簽名正確性。
操作說明
為便于手工驗證DSA簽名,本演示程序的素數(shù)p不超過1000的小素數(shù),同時待簽名的明文也為不超過1000的十進制整數(shù),直接對明文進行簽名。
系統(tǒng)包含兩個按鈕:簽名和驗證。分別完成對輸入信息的簽名和驗證。
(1)進入DSA演示程序
點擊教學(xué)軟件中的非對稱密碼算法的DSA 簽名,系統(tǒng)隨機選擇符合要求的素數(shù)p,屏幕顯示類似下圖。
圖 1DSA簽名實驗演示界面
(2) 選擇參數(shù)
分別點擊第二個(素數(shù)q)和私鑰x下拉框。
完成DSA的基本參數(shù)的確定
圖 2完成DSA的基本參數(shù)的確定
(3)簽名
輸入十進制整數(shù)形式的消息m后,按下簽名按鈕,生成簽名r和s。
圖 3生成簽名r和s
再次點擊簽名按鈕,可以發(fā)現(xiàn)隨著隨機數(shù)的變化,簽名值也發(fā)生變化。
圖 4簽名值隨著隨機數(shù)變化而變化
(4) 驗證簽名
簽名正確性的驗證取決于r’’是否與r’相等。點擊驗證按鈕,顯示驗證成功的信息。
圖 5驗證簽名
(5)修改
修改m’后,點擊驗證,出現(xiàn)驗證失敗信息。
圖 6修改m’,驗證失敗
修改r’后,點擊驗證,出現(xiàn)驗證失敗信息。
圖 7修改r’,驗證失敗
修改s’后,點擊驗證,出現(xiàn)驗證失敗信息。
圖 8修改s’,驗證失敗
【實驗思考題】
1、 DSA簽名的數(shù)學(xué)背景是什么?
答:數(shù)字簽名算法(DSA)是使數(shù)字簽名依賴于數(shù)學(xué)概念的聯(lián)邦信息處理標(biāo)準(zhǔn)之一,或者可以說模冪運算的公式和離散對數(shù)問題,用于在該算法中對數(shù)字進行數(shù)字加密。數(shù)字簽名是根據(jù)數(shù)據(jù)和僅由簽名者或簽名者知道的秘密密鑰計算出的密碼值。
DSA(Digital Signature Algorithm,數(shù)字簽名算法,用作數(shù)字簽名標(biāo)準(zhǔn)的一部分)是公開密鑰算法,它不能用作加密,只用作數(shù)字簽名。DSA使用公開密鑰,為接受者驗證數(shù)據(jù)的完整性和數(shù)據(jù)發(fā)送者的身份。它也可用于由第三方去確定簽名和所簽數(shù)據(jù)的真實性。DSA算法的安全性基于解離散對數(shù)的困難性,這類簽字標(biāo)準(zhǔn)具有較大的兼容性和適用性。
2、 DSA簽名為什么可使用Hash函數(shù)?
答:Hash 算法也是現(xiàn)代密碼體系中的一個重要組成部分。由于非對稱算法的運算速度較慢,所以在數(shù)字簽名協(xié)議中,單向散列函數(shù)扮演了一個重要的角色。對 Hash 值,又稱"數(shù)字摘要"進行數(shù)字簽名,在統(tǒng)計上可以認(rèn)為與對文件本身進行DSA數(shù)字簽名是等效的。
DSA結(jié)合使用了非對稱加密技術(shù)與哈希算法來實現(xiàn),它包含兩種互補的運算:一個用于數(shù)字簽名的簽署,另一個用于數(shù)字簽名的驗證。簽名和驗簽的過程一般由啟用 PKI 的應(yīng)用程序完成,首先由數(shù)據(jù)的發(fā)送方用哈希算法生成數(shù)據(jù)的哈希值,然后用自己的私鑰將這個哈希值加密形成數(shù)字簽名,將它與數(shù)據(jù)一起加密發(fā)送給接收方;接收方進行解密獲得數(shù)據(jù)和數(shù)字簽名后,用發(fā)送方的公鑰對數(shù)字簽名進行解密,如果成功解密,即證明了發(fā)送方的身份;對數(shù)字簽名解密得到數(shù)據(jù)的哈希值之后,數(shù)據(jù)的接收方對數(shù)據(jù)用相同的哈希算法生成另一個哈希值,然后將這兩個哈希值進行比較,如果兩者相同,則證明這塊數(shù)據(jù)極有可能在傳輸期間沒有被篡改。因此,DSA簽名可使用Hash函數(shù)。
總結(jié)
- 上一篇: [单片机芯片]CH32V203的USB1
- 下一篇: 国服黑色沙漠批量小号登陆入会签到工具