余立強(qiáng)
摘要:運(yùn)用非對(duì)稱密鑰加密技術(shù)與數(shù)字摘要技術(shù)描繪出數(shù)字簽名技術(shù)的工作原理圖,使用Linux系統(tǒng)中的shell命令實(shí)現(xiàn)數(shù)字簽名技術(shù)中的創(chuàng)建私鑰、導(dǎo)出公鑰、私鑰簽名、公鑰校驗(yàn)等實(shí)踐操作,很好地展現(xiàn)了數(shù)字簽名技術(shù)實(shí)踐應(yīng)用的可操作性。
關(guān)鍵詞:Linux;數(shù)字簽名技術(shù);私鑰;公鑰
中圖分類號(hào):G642.0 ? ? 文獻(xiàn)標(biāo)志碼:A ? ? 文章編號(hào):1674-9324(2019)19-0103-02
數(shù)字簽名是一種電子簽章,類似寫在紙上的普通的物理簽名,在電子商務(wù)、電子政務(wù)等各類項(xiàng)目中得到廣泛的應(yīng)用。
一、基本概念
數(shù)字簽名技術(shù)由非對(duì)稱密鑰加密技術(shù)與數(shù)字摘要技術(shù)構(gòu)成,用于文件完整性驗(yàn)證,具有不可抵賴性。數(shù)字簽名只有信息的發(fā)送者才能產(chǎn)生、別人無法偽造的一串?dāng)?shù)字,這些數(shù)字同時(shí)也是對(duì)信息的發(fā)送者發(fā)送信息真實(shí)性的一個(gè)有效證明。
數(shù)字簽名技術(shù)工作原理如圖1所示。
在圖1中,發(fā)送方利用RSA加密算法創(chuàng)建私鑰,對(duì)原文用Hash算法得到信息摘要,輸出固定長度的哈希值。對(duì)信息摘要用私鑰和RAS加密算法進(jìn)行加密得到數(shù)字簽名。發(fā)送方利用私鑰導(dǎo)出公鑰,然后將數(shù)字簽名、原文和數(shù)字簽名三個(gè)文件發(fā)送給接收方。
接收方首先用與發(fā)送方一樣的哈希函數(shù)對(duì)接收到的原文計(jì)算出信息摘要,再用接收到的公鑰對(duì)數(shù)字簽名文件進(jìn)行解密,也得到一個(gè)信息摘要,然后判斷這兩個(gè)摘要是否相同,若相同,則接收方確認(rèn)該數(shù)字簽名是發(fā)送方的,原文也是無篡改的。反之,則數(shù)字簽名不可信,或原文有篡改。
二、Linux系統(tǒng)環(huán)境
(一)操作環(huán)境
在宿主機(jī)上安裝VMware虛擬機(jī)軟件,準(zhǔn)備1臺(tái)或2臺(tái)安裝CentOS 6.5版本以上的Linux系統(tǒng)的虛擬機(jī)。
(二)數(shù)字簽名操作
在Linux系統(tǒng)opensll命令可實(shí)現(xiàn)4種非對(duì)稱加密算法,包括DH、RSA、DSA和橢圓曲線算法(EC)。RSA算法既可以用于密鑰交換,也可以用于數(shù)字簽名。
OpenSSL實(shí)現(xiàn)了5種信息摘要算法,分別是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。這里主要用SHA信息摘要算法。
三、數(shù)字簽名操作過程
進(jìn)入Linux系統(tǒng)進(jìn)行操作:
(一)編輯原文件file.txt
創(chuàng)建原文件file.txt,可以是任意類型的文件,這里僅作演示,輸入命令:
#echo “This is a digital signature example.”>file.txt
(二)創(chuàng)建私鑰key.pri
1.創(chuàng)建私鑰。
#openssl genrsa –out key.pri –f4 2048
RSA加密算法產(chǎn)生的2048位私鑰,并使用F4作為公鑰的E參數(shù),將私鑰保存在文件key.pri中。
2.查看私鑰。
#openssl rsa –inform PEM –in key.pri –text
以PEM格式顯示私鑰的明文輸出密鑰參數(shù)。
(三)導(dǎo)出公鑰key.pub
1.導(dǎo)出公鑰。
#openssl rsa –inform PEM –outform PEM –in key.pri –out key.pub –pubout
用rsa的私鑰文件key.pri導(dǎo)出PEM格式的公鑰,保存在文件key.pub中。
2.查看公鑰。
#cat key.pub
或查看公鑰命令:
#openssl rsa –inform PEM –in key.pub –pubin –text
以PEM格式顯示公鑰的明文輸出密鑰參數(shù),得到與上面查看私鑰類似的顯示。
(四)私鑰簽名
1.方法1。參見圖1,進(jìn)行私鑰簽名操作:
(1)計(jì)算原文件的信息摘要。
#openssl dgst –sha256 –binary –out file1.sha256 file.txt
將原文件的信息摘要(hash值)保存在文件file1.sha256中。
(2)用私鑰key.pri簽名。
#openssl rsautl -out file1.sig –sign –inkey key.pri –in file1.sha256
用私鑰對(duì)信息摘要進(jìn)行非對(duì)稱加密算法加密簽名,產(chǎn)生簽名文件file1.sig。
2.方法2。對(duì)上面方法1的合成操作命令:
#openssl dgst –sha256 –out file2.sig –sign key.pri –keyform PEM file.txt
產(chǎn)生簽名文件file2.sig,并查看簽名文件file2.sig:
#od –v –An –t x1 file2.sig
注意,file1.sig與file2.sig的內(nèi)容是不相同的。
(五)公鑰校驗(yàn)
發(fā)送者將原文件file.txt、公鑰文件key.pub和簽名文件file.sig傳輸給接收者,接收者模擬驗(yàn)證操作。
與私鑰簽名相對(duì)應(yīng),接收者的公鑰校驗(yàn)的二種方法如下。
1.方法1。對(duì)照?qǐng)D1,接收方校驗(yàn)信息摘要的操作:
(1)由簽名文件計(jì)算信息摘要。
#openssl rsautl –out file2.rec –inkey key.pub –in file1.sig –pubin –verify
用公鑰解密收到的簽名文件file1.sig的hash值,即原文件file.txt的信息摘要(hash值),將結(jié)果保存到二進(jìn)制文件file2.rec中。
(2)查看file2.rec文件中的信息摘要。
#od –v –An –t x1 file2.rec
(3)計(jì)算接收到的原文件file.txt的信息摘要。
#openssl dgst –sha256 –binary –out file2.sha256 file.txt
在接收方計(jì)算收到的原文件file.txt的hash值,即信息摘要保存到文件file2.sha256中。
(4)查看file2.sha256的內(nèi)容。
#od –v –An –t x1 file2.sha256
比較file2.sha256文件與file2.rec文件中32個(gè)字節(jié)的內(nèi)容是完全一致的,即信息摘要是相同的,可以確認(rèn)接收到的原文件file.txt是無篡改、可信的。反之,則說明接收到的文件有篡改或不可信的。
2.方法2。對(duì)應(yīng)私鑰簽名方法2,用下面的命令進(jìn)行公鑰校驗(yàn):
#openssl dgst –sha256 –keyform PEM –verify key.pub –signature file2.sig file.txt
若顯示:Verified OK
則表示用公鑰校驗(yàn)簽名文件是正常的,即接收到的原文件是無篡改和可信的。
若顯示:Verification Failure
則表示接收到的文件有篡改或不可信的。
四、小結(jié)
在shell狀態(tài)下用openssl命令實(shí)現(xiàn)數(shù)字簽名技術(shù)的操作有助于對(duì)其工作原理的理解,方法1對(duì)應(yīng)圖1所示的工作原理,方法2是圖1的合成命令操作,在實(shí)際操作中更快、更有效。
參考文獻(xiàn):
[1]魯立,計(jì)算機(jī)網(wǎng)絡(luò)安全[M].機(jī)械工業(yè)出版社,2018,(01).
[2]百度.數(shù)字簽名[EB/OL].https://baike.baidu.com/item/數(shù)字簽名/212550?fr=aladdin
[3]百度.linux平臺(tái)數(shù)字簽名實(shí)現(xiàn)無示例[EB/OL].https://jingyan.baidu.com/article/6181c3e06a920f152ff1536e.html.