為文件貼防偽標(biāo)簽 Ubuntu文件數(shù)字簽名應(yīng)用
在《Ubuntu系統(tǒng)中如何對(duì)文件進(jìn)行加密傳輸》一文中,我們?yōu)榇蠹抑v解了網(wǎng)絡(luò)傳輸過程中,如何對(duì)文件進(jìn)行加密的方法。但是在實(shí)際應(yīng)用中,文件的傳輸還會(huì)碰到其他問題,例如如何確認(rèn)收到的文件不是偽造的?又如何知道發(fā)來(lái)的文件不是竄改過的呢?而類似的問題,就需要利用另外一項(xiàng)技術(shù)——數(shù)字簽名來(lái)解決。
提示:“數(shù)字簽名”是一種采用公鑰加密算法對(duì)電子信息進(jìn)行簽名的方法。對(duì)一個(gè)文件進(jìn)行數(shù)字簽名和校驗(yàn)的過程可簡(jiǎn)單地描述為:文件發(fā)送方首先依據(jù)某種摘要算法生成發(fā)送文件的一組摘要信息(特征信息),并用自己的私鑰對(duì)其進(jìn)行加密(即“簽名”)形成簽名文件,然后將原文件和簽名文件一起發(fā)給接收方。接收方首先按算法計(jì)算出原文件的摘要信息,并用發(fā)送者提供的公鑰解密簽名文件,同時(shí)得到另外一個(gè)摘要信息,通過對(duì)兩個(gè)摘要信息的比對(duì)就可以確認(rèn)文件信息是否完整正確,這就是“校驗(yàn)”。
本文介紹基于Ubuntu Desktop 9.10(i386),采用GNOME集成桌面環(huán)境。并設(shè)定有兩臺(tái)主機(jī)Host1和Host2,具有相同的用戶賬號(hào)(為敘述方便,用戶名和密碼相同)。
步驟一、在Host1上對(duì)文件進(jìn)行簽名
在主機(jī)Host1中,假設(shè)當(dāng)前用戶目錄下有一個(gè)文件“abc.txt”,下面我們?cè)贜autilus文件瀏覽器中選中該文件并點(diǎn)擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“簽署”項(xiàng),則彈出“選擇簽署者”對(duì)話框(如圖1所示),在“簽署消息的密鑰”欄選擇用戶“testuser”對(duì)應(yīng)的私鑰。點(diǎn)擊“確定”按鈕,則彈出“批準(zhǔn)密碼存取”對(duì)話框,確定后就會(huì)在當(dāng)前登錄用戶的目錄下生成文件“abc.txt.sig”,該文件就是“abc.txt”的簽名文件。
選擇對(duì)用戶的私鑰
下面,我們將原文件“abc.txt”和簽名文件“abc.txt.sig”一起發(fā)送到Host2主機(jī)中。以使用“scp”命令進(jìn)行操作為例。
在“應(yīng)用程序→附件”下找到“終端”項(xiàng),點(diǎn)擊并打開一個(gè)GNOME終端窗口,在終端窗口中輸入命令“scp abc.* testuser@Host2:~/.”,命令成功執(zhí)行后,即可復(fù)制上述兩個(gè)文件到Host2主機(jī)中相應(yīng)的用戶目錄下。
步驟二、在Host2上對(duì)文件進(jìn)行校驗(yàn)
接收到Host1上用戶傳輸過來(lái)的文件“abc.txt”和“abc.txt.sig”后,如何確認(rèn)“abc.txt”文件來(lái)源的合法性及其完整性呢?這就需要對(duì)其進(jìn)行校驗(yàn)。下面我們以使用“gpg”命令為例對(duì)其進(jìn)行校驗(yàn)。
首先,校驗(yàn)工作需要用到發(fā)送方,即主機(jī)Host1用戶的公鑰,因而首先要在主機(jī)Host2中導(dǎo)入Host1用戶的公鑰(詳細(xì)過程可參見《Ubuntu系統(tǒng)中如何對(duì)文件進(jìn)行加密傳輸》)。
然后,在主機(jī)Host2中,對(duì)導(dǎo)入的公鑰進(jìn)行簽署操作。
運(yùn)行Seahorse密鑰管理器程序,在出現(xiàn)的“密碼和加密密鑰”窗口的“其他密鑰”標(biāo)簽頁(yè),點(diǎn)選導(dǎo)入的密鑰所在的行并點(diǎn)擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“簽署密鑰”項(xiàng),在出現(xiàn)的“簽署密鑰”對(duì)話框中點(diǎn)擊“簽署”按鈕,即可完成對(duì)導(dǎo)入公鑰的簽署操作。
接下來(lái),打開一個(gè)GNOME終端窗口并輸入命令:“gpg ——verify abc.txt.sig”,在輸出結(jié)果中,如果看到“gpg:完好的簽名,來(lái)自于……”開頭的行,那么則表明文件是完整的且來(lái)源是合法的。
提示:如果導(dǎo)入的公鑰沒有被簽署,即Host2上的用戶沒有確認(rèn)該公鑰的合法性,雖然依然可以用“gpg”命令來(lái)校驗(yàn)接收到的文件,但會(huì)給出類似“警告:這把密鑰未經(jīng)受信任的授權(quán)驗(yàn)證”這樣的警告信息(如圖2所示)。
簽署操作必不可少
通過校驗(yàn)信息,我們就可以確認(rèn)接收的文件是否被竄改,而通過查看發(fā)送方的個(gè)人信息,則可以確認(rèn)文件的來(lái)源是否合法,從而確認(rèn)對(duì)方身份。
雙保險(xiǎn) 加密與數(shù)字簽名組合使用
在本文中,我們并沒有對(duì)文件進(jìn)行加密處理,而只是進(jìn)行了數(shù)字簽名操作,盡管這樣文件接收方能夠確認(rèn)文件來(lái)源的合法性和數(shù)據(jù)的完整性,但文件本身并沒有得到很好的保護(hù),依然存在數(shù)據(jù)泄露等風(fēng)險(xiǎn)。因而在實(shí)際應(yīng)用中,一般都是將加密和數(shù)字簽名技術(shù)結(jié)合起來(lái)使用。
結(jié)合《Ubuntu系統(tǒng)中如何對(duì)文件進(jìn)行加密傳輸》中介紹的文件加密傳輸方法,在Nautilus文件瀏覽器中選中某個(gè)文件進(jìn)行加密時(shí),在“選擇收件人”對(duì)話框的下方還有一項(xiàng)“簽署消息的密鑰”,其后列出的是用戶可用的私鑰,如果選擇了某個(gè)用戶私鑰,則對(duì)文件進(jìn)行加密處理的同時(shí)也進(jìn)行了數(shù)字簽名操作。而接收方接收到文件后,就可以用自己的私鑰來(lái)解密文件,再用發(fā)送方的公鑰來(lái)校驗(yàn)文件,從而進(jìn)一步確保文件的安全性和完整性。
【編輯推薦】