- 論壇徽章:
- 0
|
GPG作為一個(gè)開源并且免費(fèi)的加密和數(shù)字簽名軟件已經(jīng)存在多年。它不但可以為企業(yè)、個(gè)人之間的重要信息提供加密保護(hù),還可以為出版的軟件、內(nèi)核等電子產(chǎn)品進(jìn)行數(shù)字簽名,防止產(chǎn)品被篡改,最大程度地保障信息安全。
加密和數(shù)字簽名作為保護(hù)信息機(jī)密性、完整性和不可抵賴性的重要手段在各種信息通信場(chǎng)合得到廣泛的應(yīng)用。目前,已有不少商業(yè)加密和數(shù)字簽名產(chǎn)品,比如商業(yè)軟件PGP(Pretty Good Privacy)。
另外,在開放源代碼庫(kù)中也有一些免費(fèi)的加密和數(shù)字簽名軟件,其中最被認(rèn)可的是GPG(GNU Privacy Guard)。GPG是一個(gè)完全免費(fèi)、源代碼公開,并且與PGP完全兼容的軟件產(chǎn)品。今天,GPG已經(jīng)擁有眾多的企業(yè)和個(gè)人用戶。
在我國(guó),由于信息安全及隱私保護(hù)意識(shí)還比較薄弱,PGP或GPG在商業(yè)和個(gè)人用戶中的使用并不普遍。隨著信息安全及隱私帶來的問題甚至訴訟的增加,更多企業(yè)和個(gè)人開始把眼光投向安全問題的解決。
但是,由于非專業(yè)用戶對(duì)簽名和加密等概念的畏難情緒,GPG的應(yīng)用還多局限于IT技術(shù)人員。本文將對(duì)Linux環(huán)境下如何應(yīng)用GPG進(jìn)行講解,為企業(yè)和個(gè)人用戶應(yīng)用GPG提供幫助。
建立GPG環(huán)境
GPG軟件作為用于加密和數(shù)字簽名的開放源碼工具,許多Linux發(fā)行版本都自帶了該軟件。在默認(rèn)安裝的情況下,gpg會(huì)作為一個(gè)基本命令事先安裝好。
如果選用的Linux發(fā)行版默認(rèn)沒有安裝GPG,可以通過tar包或RPM包進(jìn)行安裝,可從http://www.gnupg.org/download/下載安裝包。安裝過程比較簡(jiǎn)單,這里省略了。
判斷是否安裝有GPG的方法也很簡(jiǎn)單。直接在命令行下輸入“gpg -h”命令,如果系統(tǒng)已經(jīng)安裝有GPG,就會(huì)顯示關(guān)于GPG用法的信息。
確定Linux系統(tǒng)中已經(jīng)安裝了GPG后,就可以開始下面加密和簽名的工作了。
生成密鑰
用戶應(yīng)用GPG,首先要有一對(duì)自己的密鑰。所以,第一步就是產(chǎn)生一對(duì)密鑰。gpg命令通過大量參數(shù)提供所需要的幾乎所有操作。其中,參數(shù)“-gen-key”就是用來產(chǎn)生一對(duì)密鑰的。在安裝了GPG的Linux系統(tǒng)上可以運(yùn)行以下命令:
#gpg --gen-key
如果想對(duì)產(chǎn)生密鑰的操作進(jìn)行一些個(gè)性化設(shè)置,還可以加上其它參數(shù)。比如,要指定生成密鑰存放的位置,可以運(yùn)行以下命令:
#gpg --gen-key --homedir /mygnupg
命令開始運(yùn)行后,首先,會(huì)看到版本和路徑信息如下:
gpg (GnuPG) 1.2.1; Copyright (C) 2002 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
gpg: /home/terry/.gnupg: directory created
gpg: new configuration file `/home/terry/.gnupg/gpg.conf' created
gpg: keyblock resource `/home/terry/.gnupg/secring.gpg': file open error
gpg: keyring `/home/terry/.gnupg/pubring.gpg' created
隨后需要回答一系列問題,以幫助產(chǎn)生一對(duì)密鑰。首先遇到的問題是要求選擇密鑰使用的算法:
Please select what kind of key you want:
(1) DSA and ElGamal (default)
(2) DSA (sign only)
(5) RSA (sign only)
Your selection? 1
其中,DSA是數(shù)字簽名算法,RSA和ElGamal是兩種不同原理的非對(duì)稱密鑰算法。通?梢赃x擇“1”,這樣生成的密鑰可以同時(shí)用作簽名和加密兩種用途。
接著,會(huì)要求選擇密鑰的長(zhǎng)度:
DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
minimum keysize is 768 bits
default keysize is 1024 bits
highest suggested keysize is 2048 bits
What keysize do you want? (1024) 2048
Requested keysize is 2048 bits
這里的密鑰長(zhǎng)度有768、1024和2048位三種。顯然,密鑰越長(zhǎng)越安全,但太長(zhǎng)又會(huì)影響使用的速度。所以,可以根據(jù)不同的需要選擇適合的長(zhǎng)度。筆者的應(yīng)用更重視安全性,所以選擇了最長(zhǎng)的2048位密鑰。
另外,還需要設(shè)定密鑰過期的時(shí)間:
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0) 1y
Key expires at Sat 10 Sep 2005 01:48:07 PM CST
Is this correct (y/n)? y
原則上,密鑰使用的頻率越高,密鑰有效的時(shí)間越長(zhǎng),被攻擊的可能性就越大。所以,要根據(jù)應(yīng)用的實(shí)際情況綜合考慮,確定一個(gè)適當(dāng)?shù)臅r(shí)間長(zhǎng)度。需要注意的是,密鑰要定期更換,建議絕對(duì)不要永遠(yuǎn)使用同一對(duì)密鑰。
最后,需要輸入一些個(gè)人信息,包括真實(shí)姓名、電子郵件地址等,用來識(shí)別密鑰,最好是如實(shí)填寫。比如:
Real name: Terry Yu
Email address: terry@mykms.org
Comment: for test
You selected this USER-ID:
"Terry Yu (for test) "
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
然后,必須輸入一個(gè)密碼。密碼用來保護(hù)密鑰,沒有這個(gè)密碼,任何人都不能看到密鑰本身的內(nèi)容。密碼是在密鑰文件泄露后惟一的保密措施,它的最大敵人是暴力破解和字典攻擊。所以,一定要選擇一個(gè)強(qiáng)壯的密碼,來有效地對(duì)抗這些攻擊。
密碼確定以后,系統(tǒng)開始運(yùn)算:
We need to generate a lot of random bytes.
It is a good idea to perform some other action
(type on the keyboard, move the mouse, utilize the disks)
during the prime generation;
this gives the random number generator a better
chance to gain enough entropy.
..+++++.+++++.+++++.+++++..++++++++++.++++++++++++++
這時(shí)需要隨便地敲擊鍵盤或是移動(dòng)鼠標(biāo),以產(chǎn)生一些隨機(jī)數(shù),協(xié)助密鑰的順利生成。注意,如果沒有以上動(dòng)作,很可能最終不能產(chǎn)生密鑰。
系統(tǒng)運(yùn)算完成后,會(huì)出現(xiàn)類似以下的信息:
gpg: /home/terry/.gnupg/trustdb.gpg: trustdb created
public and secret key created and signed.
key marked as ultimately trusted.
pub 1024D/6AE573B5 2004-09-29 Terry Yu (for test)
Key fingerprint = 0D58 408E 344F BB7B AB95 D000 82B7 8324 6AE5 73B5
sub 2048g/94BF182C 2004-09-29 [expires: 2005-09-29]
pub 1024D/7234E374 2004-09-10 Terry Yu (for test)
Key fingerprint = A58F D71A 28BA 499D 805B 588E 82FB CD0F 7234 E374
sub 2048g/4907EA0A 2004-09-10 [expires: 2005-09-10]
以上信息表示已經(jīng)成功地為“Terry
Yu”生成并簽名了一對(duì)密鑰,密鑰過期時(shí)間為“2005-09-10”。在生成密鑰的同時(shí),默認(rèn)用戶目錄的.gnupg目錄中也存放了與該用戶相關(guān)的
GPG配置及密鑰存儲(chǔ)文件。這些文件控制了用戶的GPG環(huán)境,用戶不能直接修改這些文件,所有改動(dòng)都將通過“gpg”命令實(shí)現(xiàn)。
查看密鑰
密匙生成后,可以隨時(shí)用以下命令查看。
查看所有密鑰:
#gpg -list-key
查看所有公鑰:
gpg -list-public-key
查看所有私鑰:
gpg -list-secret-key
列出所有簽名:
gpg -list-sig
導(dǎo)出公鑰
在非對(duì)稱加密體系中,私鑰是由用戶保管,而公鑰是對(duì)外公開的。用戶在生成密鑰對(duì)后,需要把其中的公鑰導(dǎo)出到一個(gè)文件中,然后將其分發(fā)給其它用戶。
導(dǎo)出公鑰的方法很簡(jiǎn)單,通過gpg命令的“-export”參數(shù)就可完成。為了使導(dǎo)出文件是ASCⅡ編碼的,還需要加上參數(shù)“-a”。比如,導(dǎo)出Terry Yu ASCⅡ編碼的公鑰文件,可以使用以下命令:
#gpg --export -a terry@mykms.org > terry.asc
該命令最終生成ASCⅡ編碼的公鑰文件terry.asc如圖1。
![]()
圖1 公鑰文件terry.asc
分發(fā)公鑰
這個(gè)包含公鑰信息的文件需要對(duì)外分發(fā),可以通過各種方式將terry.acs文件分發(fā)給所有與用戶有信息通信需求的人。
最簡(jiǎn)單的分發(fā)方式是,將該文件放到互聯(lián)網(wǎng)上供人下載。這種方式需要注意的問題是,所發(fā)布公鑰文件的網(wǎng)站一定要是一個(gè)可以信賴的站點(diǎn)。實(shí)際應(yīng)用中,類似的做法很普遍。
比如,Red Hat的公鑰就是在它的官方網(wǎng)站上發(fā)布的,任何人都可以下載獲得,并用來驗(yàn)證Red Hat所發(fā)布軟件的簽名的正確性。
導(dǎo)入公鑰
作為用戶,也會(huì)收到別人的GPG公鑰,它們可能來自網(wǎng)站、電子郵件、FTP和目錄服務(wù)等,只要信任其來源,就可以將其導(dǎo)入自己的GPG環(huán)境,之后才可以與相應(yīng)的人員進(jìn)行基于GPG的各種應(yīng)用。導(dǎo)入公鑰的過程可以分為以下三步:
1.導(dǎo)入
比如,Terry收到朋友Brian的公鑰文件brian.gpg,可以使用以下命令導(dǎo)入文件:
#gpg --import terry.gpg
2.核對(duì)“指紋”
公鑰是可以偽造的。James可以偽造一個(gè)Brian的公鑰,然后想辦法讓
Terry得到。如果Terry對(duì)收到的公鑰不加驗(yàn)證,那么他發(fā)給Brian的加密郵件就可能被James解密。GPG的架構(gòu)中并沒有一個(gè)PKI這樣的證
書管理系統(tǒng),GPG的公鑰信任是通過“Truth Web”實(shí)現(xiàn)的。
生成Terry公鑰的“指紋”:
#gpg --fingerprint terry@mykms.org
pub 1024D/7234E374 2004-09-10 Terry
Yu (for test)
Key fingerprint = A58F D71A 28BA
499D 805B 588E 82FB CD0F 7234 E374
sub 2048g/4907EA0A 2004-09-10 [expires: 2005-09-10]
這個(gè)“指紋”是惟一的?梢酝ㄟ^與對(duì)方核對(duì)“指紋”是否一致,來確定這個(gè)公鑰是否可信和合法。
3.簽名
在成功導(dǎo)入,并確定這個(gè)公鑰是可以相任之后,要立即對(duì)這個(gè)公鑰進(jìn)行簽名。這樣,就可以驗(yàn)證來自對(duì)方郵件的真實(shí)性了。
對(duì)公鑰進(jìn)行簽名可以使用如下命令:
#gpg --sing-key brian@mykms.org
或者
#gpg --edit-key name
#command > sign
檢查對(duì)方郵件,比如Brian的簽名:
#gpg --check-sigs brian@mykms.org
現(xiàn)在,有了Brian簽名的公鑰,通過這個(gè)公鑰就可以和Brain進(jìn)行非對(duì)稱加密通信了。
應(yīng)用GPG
GPG使用的是非對(duì)稱的密鑰體系,用戶擁有一對(duì)密鑰,包括一個(gè)公鑰和一個(gè)私鑰。公鑰對(duì)外公布,私鑰則由自己保存。使用公鑰加密的數(shù)據(jù)可以用私鑰解密,同樣,使用私鑰加密的數(shù)據(jù)可以用公鑰解密。
非對(duì)稱的密鑰可以用來加密和做數(shù)字簽名。當(dāng)用戶關(guān)心信息保密性時(shí),使用加密功能;當(dāng)用戶關(guān)注信息完整性及不可抵賴性時(shí),使用數(shù)字簽名功能;當(dāng)用戶需要同時(shí)關(guān)注信息的機(jī)密性、完整性及不可抵賴性時(shí),可以將加密和數(shù)學(xué)簽名混合使用。
簡(jiǎn)單了解這些密碼學(xué)概念后,就可以開始真正的應(yīng)用實(shí)踐了。
對(duì)文件進(jìn)行加密和數(shù)字簽名
KDE中提供了圖形化的加密操作方法。比如,在KDE中對(duì)一個(gè)文件加密,只需在KDE文件管理器Konqueror中選中該文件,單擊右鍵選擇“Actions”中的“Encrypt File”就可以加密文件。加密后的文件以.asc結(jié)尾。
對(duì)于圖形方式的加密操作不多做介紹,下面將重點(diǎn)放在命令行操作方式上,介紹命令行下的各種文件加密和簽名的操作方法。
1.對(duì)文件進(jìn)行數(shù)字簽名
#gpg --clearsign policy.txt
You need a passphrase to unlock the secret key for
user: "test (test) "
1024-bit DSA key, ID ADD93830, created 2004-07-01
運(yùn)行以上命令,生成一個(gè)名為report.txt.asc的文件,該文件中除了原文件信息外還包含數(shù)字簽名信息。
2.驗(yàn)證文件的數(shù)字簽名
#gpg --verify policy.txt.asc
gpg: Signature made 2004年11月04日 星期四 15時(shí)58分07秒 UTC using DSA key ID ADD93830
gpg: Good signature from "test (test) "
以上命令運(yùn)行的結(jié)果顯示該簽名是正確的。
3.用指定的公鑰對(duì)文件加密
#gpg --encrypt -r terry@mykms.org report.txt
gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
gpg: next trustdb check due at 2005-09-10
運(yùn)行以上命令,使用自己的公鑰加密report.txt文件,生成加密文件report.txt.gpg。如果使用編輯軟件打開該加密文件,會(huì)發(fā)現(xiàn)它包含的是一些不可理解的字符和亂碼。
4.用私鑰對(duì)加密文件解密
#gpg --decrypt report.txt.gpg >report.txt
You need a passphrase to unlock the secret key for
user: "test1 (unclassfication) "
2048-bit ELG-E key, ID 33735683, created 2004-09-29
(main key ID 79EB3D97)
gpg: encrypted with 2048-bit ELG-E key, ID 33735683,
created 2004-09-29
"test1 (unclassfication) "
以上命令要求輸入對(duì)應(yīng)私鑰的保護(hù)口令才能成功解密,解密后的文件內(nèi)容被輸出到report.txt文件中。
5.用公鑰同時(shí)進(jìn)行文件簽名和加密
#gpg -se -r test@yahoo.com.cn report.txt
You need a passphrase to unlock the secret key for
user: "test (test) "
1024-bit DSA key, ID ADD93830, created 2004-07-01
以上命令要求輸入對(duì)應(yīng)私鑰的保護(hù)口令,輸入正確的口令后,簽名和加密成功完成。
這些都是應(yīng)用GPG簽名和加密文件的一些常用命令,更詳細(xì)的用法可以參考GPG的幫助文件。
對(duì)電子郵件進(jìn)行加密和數(shù)字簽名
實(shí)際上,GPG應(yīng)用最多的地方是在電子郵件的加密和數(shù)字簽名上。許多電子郵件客戶端軟件都支持PGP/GPG方式的加密及數(shù)字簽名。這里以Kmail為例,介紹如何設(shè)置Kmail,并利用Kmail發(fā)送加密及數(shù)字簽名的電子郵件。
Kmail
是KDE環(huán)境中的電子郵件客戶端,類似于Windows下的Outlook
Express。在選單中選擇“Settings→Configure-Kmail→Identites”,選定一個(gè)身份,單擊“Modify”進(jìn)行編
輯。選擇其中的“Advanced”標(biāo)簽頁(yè),可以看到類似圖2的界面。
![]()
圖2 Kmail的設(shè)置界面
其中,“OpenPGP Key”項(xiàng)是該身份所對(duì)應(yīng)的PGP或GPG密鑰,可以單擊“Change”按鈕從GPG環(huán)境中選擇對(duì)應(yīng)的密鑰對(duì)。
保存后,GPG的設(shè)置完成。試寫一封郵件,如圖3所示。圖中工具欄中凹下去的“鋼筆尖”圖標(biāo)表示此郵件使用了數(shù)字簽名,緊靠旁邊的鎖形圖標(biāo)表示加密,如果兩個(gè)圖標(biāo)都凹下去則表示同時(shí)使用了加密和數(shù)字簽名。
![]()
圖3 使用數(shù)字簽名的電子郵件
發(fā)送郵件時(shí),Kmail會(huì)要求給出對(duì)應(yīng)密鑰的保護(hù)口令,如圖4所示。
![]()
圖4 要求輸入密鑰保護(hù)口令
正確輸入保護(hù)口令后,會(huì)彈出一個(gè)確認(rèn)窗口,如圖5。
![]()
圖5 確認(rèn)窗口
確認(rèn)內(nèi)容無誤后,單擊“OK”按鈕,一封帶有數(shù)字簽名的電子郵件就成功發(fā)出。發(fā)送加密郵件,以及發(fā)送同時(shí)加密和數(shù)字簽名的郵件,方法都是類似的。
軟件包簽名驗(yàn)證
對(duì)于Red Hat等Linux發(fā)行商來說,他們常常會(huì)利用GPG對(duì)發(fā)布的軟件包進(jìn)行簽名。用戶可以通過驗(yàn)證軟件包的簽名來確保得到的軟件包沒有損壞,或者是被他人動(dòng)過手腳。
驗(yàn)證一個(gè)下載軟件包的GPG簽名可以按照以下步驟來進(jìn)行:
1.從網(wǎng)上下載或其它方式得到軟件發(fā)行商的公鑰,并將其導(dǎo)入自己的GPG環(huán)境中。
2.通過對(duì)比“電子指紋”來確認(rèn)公鑰,并對(duì)此公鑰進(jìn)行簽名。
3.使用以下命令來驗(yàn)證軟件包的GPG簽名:
#gpg --verify singaturefile.tar.gz taballpackage.gz
如果該軟件是RPM格式的,還可以使用如下命令來驗(yàn)證:
#rpm -Kv your.rpm
密鑰管理
前面介紹了GPG在加密和簽名兩方面的應(yīng)用,在應(yīng)用過程中用戶要認(rèn)真地對(duì)
待密鑰管理問題。GPG的密鑰采用的是信任機(jī)制,并沒有一個(gè)中心的PKI可以幫助發(fā)布和驗(yàn)證GPG用戶的公鑰。為了防止公鑰欺騙,保證公鑰的不可否認(rèn)性
(Non-repudiation),需要有一種機(jī)制來進(jìn)行管理。下面是一些有益的建議,可供參考。
◆ 備份好私鑰
一旦私鑰丟失或損壞,則無法打開以前加密的文件。并且,即使知道私鑰被他人濫用,也無法使自己的公鑰過期。有了私鑰的備份,就能有效地回避此類風(fēng)險(xiǎn)。
◆ 建立有過期保護(hù)的公鑰機(jī)制
萬(wàn)一私鑰丟失不能人工收回公鑰時(shí),公鑰也可以在預(yù)定時(shí)間后自動(dòng)過期。
◆ 為私鑰加上強(qiáng)口令保護(hù)
這樣,即使私鑰文件泄漏,還有口令保護(hù)。保護(hù)口令一定要有足夠的復(fù)雜度,才能有效地對(duì)抗暴力破解。
◆ 多重機(jī)制
在緊急情況下恢復(fù)密鑰要有多重控制。
◆ 使用版本控制軟件
使用版本控制軟件來收集和維護(hù)自己的公鑰庫(kù)。版本控制軟件可以有效地記錄歷史變更情況,保證公鑰庫(kù)的有條不紊。
小結(jié)
GPG作為一個(gè)開源并且免費(fèi)的加密和數(shù)字簽名軟件已經(jīng)存在多年。它不但可以為企業(yè)、個(gè)人之間的重要信息提供加密保護(hù),還可以為出版的軟件、內(nèi)核等電子產(chǎn)品進(jìn)行數(shù)字簽名,防止產(chǎn)品被篡改,最大程度地保障信息安全。
對(duì)于Linux用戶來說,對(duì)信息安全的要求相對(duì)更高,GPG更值得在Linux用戶中推廣和應(yīng)用。
本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u3/100692/showart_2149266.html |
|