加密和數位簽章作為保護資訊機密性、完整性和不可抵賴性的重要手段在各種資訊通信場合得到廣泛的應用。 目前,已有不少商業加密和數位簽章產品,比如商務軟體PGP(Pretty Good Privacy)。 另外,在開放原始碼庫中也有一些免費的加密和數位簽章軟體,其中最被認可的是GPG(GNU Privacy Guard)。 GPG是一個完全免費、原始程式碼公開,並且與PGP完全相容的軟體產品。 今天,GPG已經擁有眾多的企業和個人使用者。 在我國,由於資訊安全及隱私保護意識還比較薄弱,PGP或GPG在商業和個人使用者中的使用並不普遍。 隨著資訊安全及隱私帶來的問題甚至訴訟的增加,更多企業和個人開始把眼光投向安全問題的解決。 但是,由於非專業使用者對簽名和加密等概念的畏難情緒,GPG的應用還多局限于IT技術人員。 本文將對Linux環境下如何應用GPG進行講解,為企業和個人使用者應用GPG提供説明。 建立GPG環境GPG軟體作為用於加密和數位簽章的開放源碼工具,許多Linux發行版本本都自帶了該軟體。 在預設安裝的情況下,gpg會作為一個基本命令事先安裝好。 如果選用的Linux發行版本預設沒有安裝GPG,可以通過tar包或RPM包進行安裝,可從HTTP://www.gnupg.org/download/下載安裝包。 安裝過程比較簡單,這裡省略了。 判斷是否安裝有GPG的方法也很簡單。 直接在命令列下輸入「gpg -h」命令,如果系統已經安裝有GPG,就會顯示關於GPG用法的資訊。 確定Linux系統中已經安裝了GPG後,就可以開始下面加密和簽名的工作了。 生成金鑰使用者應用GPG,首先要有一對自己的金鑰。 所以,第一步就是產生一對金鑰。 gpg命令通過大量參數提供所需要的幾乎所有操作。 其中,參數「-gen-key」就是用來產生一對金鑰的。 在安裝了GPG的Linux系統上可以運行以下命令:#gpg --gen-key如果想對產生金鑰的操作進行一些個人化設置,還可以加上其它參數。 比如,要指定生成金鑰存放的位置,可以運行以下命令: #gpg --gen-key --homedir /mygnupg命令開始運行後,首先,會看到版本和路徑資訊如下: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 itunder certain conditions. See the file COPYING for details.gpg: /home/terry/.gnupg: directory createdgpg: new configuration file `/home/terry/.gnupg /gpg.conf' createdgpg: keyblock resource `/home/terry/.gnupg/secring.gpg': file open errorgpg: keyring `/home/terry/. gnupg/pubring.gpg' created隨後需要回答一系列問題,以説明產生一對金鑰。 首先遇到的問題是要求選擇金鑰使用的演算法: 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是數位簽章演算法,RSA和ElGamal是兩種不同原理的非對稱金鑰演算法。 通常可以選擇「1」,這樣生成的金鑰可以同時用作簽名和加密兩種用途。 接著,會要求選擇金鑰的長度: DSA keypair will have 1024 bits. About to generate a new ELG-E keypair.minimum keysize is 768 bitsdefault keysize is 1024 bitshighest suggested keysize is 2048 bitsWhat keysize do you want? (1024) 2048Requested keysize is 2048 bits這裡的金鑰長度有768、1024和2048位三種。 顯然,金鑰越長越安全,但太長又會影響使用的速度。 所以,可以根據不同的需要選擇適合的長度。 筆者的應用更重視安全性,所以選擇了最長的2048位金鑰。 另外,還需要設定金鑰過期的時間:Please specify how long the key should be valid.0 = key does not expire = key expires in n daysw = key expires in n weeksm = key expires in n monthsy = key expires in n yearsKey is valid for? (0) 1yKey expires at Sat 10 Sep 2005 01:48:07 PM CSTIs this correct (y/n)? y原則上,金鑰使用的頻率越高,金鑰有效的時間越長,被攻擊的可能性就越大。 所以,要根據應用的實際情況綜合考慮,確定一個適當的時間長度。 需要注意的是,金鑰要定期更換,建議絕對不要永遠使用同一對金鑰。 最後,需要輸入一些個人資訊,包括真實姓名、電子郵件地址等,用來識別金鑰,最好是如實填寫。 比如: Real name: Terry YuEmail address: terry@mykms.orgComment: for testYou selected this USER-ID:"Terry Yu (for test) "Chan ge (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o然後,必須輸入一個密碼。 密碼用來保護金鑰,沒有這個密碼,任何人都不能看到金鑰本身的內容。 密碼是在金鑰檔洩露後惟一的保密措施,它的最大敵人是暴力破解和字典攻擊。 所以,一定要選擇一個強壯的密碼,來有效地對抗這些攻擊。 密碼確定以後,系統開始運算: 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 g eneration; this gives the random number generator a better chance to gain enough entropy...+++++.+++++.+++++.+++++.. ++++++++++.++++++++++++++這時需要隨便地敲擊鍵盤或是移動滑鼠,以產生一些亂數,協助金鑰的順利生成。 注意,如果沒有以上動作,很可能最終不能產生金鑰。 系統運算完成後,會出現類似以下的資訊:gpg: /home/terry/.gnupg/trustdb.gpg: trustdb createdpublic 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 73B5sub 2048g/94BF182C 2004-09-29 [expires: 2005-09-29]pub 1024D/7234E374 2004-09-10 Terry Yu (for tes t) Key fingerprint = A58F D71A 28BA 499D 805B 588E 82FB CD0F 7234 E374sub 2048g/4907EA0A 2004-09-10 [expires: 2005-09-10]以 上資訊表示已經成功地為「Terry Yu」生成並簽名了一對金鑰,金鑰過期時間為「2005-09-10」。 在生成金鑰的同時,預設使用者目錄的.gnupg目錄中也存放了與該使用者相關的GPG配置及金鑰存儲檔。 這些檔控制了使用者的GPG環境,使用者不能直接修改這些檔,所有改動都將通過「gpg」命令實現。 查看金鑰 密匙生成後,可以隨時用以下命令查看。 查看所有金鑰: #gpg -list-key查看所有公開金鑰: gpg -list-public-key查看所有私密金鑰: gpg -list-secret-key列出所有簽名: gpg -list-sig匯出公開金鑰在非對稱加密體系中, 私密金鑰是由使用者保管,而公開金鑰是對外公開的。 使用者在生成金鑰組後,需要把其中的公開金鑰匯出到一個檔中,然後將其分發給其它使用者。 匯出公開金鑰的方法很簡單,通過gpg命令的「-export」參數就可完成。 為了使匯出檔是ASCⅡ編碼的,還需要加上參數「-a」。 比如,匯出Terry Yu ASCⅡ編碼的公開金鑰檔,可以使用以下命令:#gpg --export -a terry@mykms.org > terry.asc該命令最終生成ASCⅡ編碼的公開金鑰檔terry.asc如圖1。 498)this.width=498;' onmousewheel = 'javascript:return big(this)' src="HTTP://images.51cto.com/files/uploadimg/ 20051219/1123080.jpg">圖1 公開金鑰檔terry.asc分發公開金鑰 這個包含公開金鑰資訊的檔需要對外分發,可以通過各種方式將terry.acs檔分發給所有與使用者有資訊通信需求的人。 最簡單的分發方式是,將該檔放到互聯網上供人下載。 這種方式需要注意的問題是,所發佈公開金鑰檔的網站一定要是一個可以信賴的網站。 實際應用中,類似的做法很普遍。 比如,Red Hat的公開金鑰就是在它的官方網站上發佈的,任何人都可以下載獲得,並用來驗證Red Hat所發佈軟體的簽名的正確性。 導入公開金鑰作為使用者,也會收到別人的GPG公開金鑰,它們可能來自網站、電子郵件、FTP和目錄服務等,只要信任其來源,就可以將其導入自己的GPG環境,之後才可以與相應的人員進行基於GPG的各種應用。 導入公開金鑰的過程可以分為以下三步:1. 導入比如,Terry收到朋友Brian的公開金鑰檔brian.gpg,可以使用以下命令導入檔:#gpg --import terry.gpg2. 核對「指紋」 公開金鑰是可以偽造的。 James可以偽造一個Brian的公開金鑰,然後想辦法讓Terry得到。 如果Terry對收到的公開金鑰不加驗證,那麼他發給Brian的加密郵件就可能被James解密。 GPG的架構中並沒有一個PKI這樣的證書管理系統,GPG的公開金鑰信任是通過「Truth Web」實現的。 生成Terry公開金鑰的「指紋」: #gpg --fingerprint terry@mykms.orgpub 1024D/7234E374 2004-09-10 Terry Yu (for test) Key fingerprint = A58F D71A 28BA 499D 805B 588E 82FB CD0F 7234 E374sub 2048g/4907EA0A 2004-09-10 [expires: 2005-09-10]這個「指紋」是惟一的。 可以通過與對方核對「指紋」是否一致,來確定這個公開金鑰是否可信和合法。 3. 簽名 在成功導入,並確定這個公開金鑰是可以相任之後,要立即對這個公開金鑰進行簽名。 這樣,就可以驗證來自對方郵件的真實性了。 對公開金鑰進行簽名可以使用如下命令: #gpg --sing-key brian@mykms.org或者#gpg --edit-key name#command > sign檢查對方郵件,比如Brian的簽名: #gpg -- check-sigs brian@mykms.org現在,有了Brian簽名的公開金鑰,通過這個公開金鑰就可以和Brain進行非對稱加密通信了。 應用GPGGPG使用的是非對稱的金鑰體系,使用者擁有一對金鑰,包括一個公開金鑰和一個私密金鑰。 公開金鑰對外公佈,私密金鑰則由自己保存。 使用公開金鑰加密的資料可以用私密金鑰解密,同樣,使用私密金鑰加密的資料可以用公開金鑰解密。 非對稱的金鑰可以用來加密和做數位簽章。 當使用者關心資訊保密性時,使用加密功能;當使用者關注資訊完整性及不可抵賴性時,使用數位簽章功能;當使用者需要同時關注資訊的機密性、完整性及不可抵賴性時,可以將加密和數學簽名混合使用。 簡單瞭解這些密碼學概念後,就可以開始真正的應用實踐了。 1 2 下一頁>> 內容導航 給力(0票)動心(0票)廢話(0票)專業(0票)標題党(0票)路過(0票) 原文:如何應用GPG加密使您的資訊安全保障無憂(1) 返回網路安全首頁