Gentoo Logo

GnuPG Gentoo 使用者指南

內容:

1.  介紹

您可以在這篇指南中得到什麼?

這篇指南假設您對公開金鑰密碼、加密、以及數位簽章很熟悉。如果不是,請先跳到 Public Key Cryptography 或閱讀 GnuPG handbook 的第二章再回來。

這篇指南將教導您如何安裝 GnuPG、如何建立自己的鑰匙對、如何將鑰匙加入鑰匙鍊、 如何將公開金鑰放至金鑰伺服器,以及如何 (簽章/加密)/(驗證/解密) 您傳送/收 到的訊息。您也會學到如何將本機電腦的檔案加密,讓別人不能隨意閱讀它們的內容。

注意: 因為這篇是中文翻譯,所以提供 gpg 的中文對照介面 (雖然我不喜歡在文字介面看中 文)。若您對中文介面有疑問,可以 export LC_ALL="POSIX" 切換至英文介 面。有些動作我懶得作的,請自己消化...

安裝需要的軟體

最基本的,您必須先 emerge gnupg,如果您需要有個可以用 GnuPG 的郵件用 戶端,您可以使用 pine (emerge pinepgp)、mutt (emerge mutt)、 Mozilla/Netscape Mail、evolution (evolution 是以 GNOME 來模仿 Microsoft Outlook 的 MUA)、和 KDE 自己的 KMail (KMail 是 kdepim 套件的一部份)。

如果您使用 KDE,那麼 Kgpg 應該會很討人喜愛。這個小程式讓您建立鑰匙對 、匯入 ASCII 鑰匙、對匯入的鑰匙簽名、匯出鑰匙、以及其他一些功能。

2.  產生您的金鑰並且將它加入公開鑰匙鍊

建立您的金鑰

要建立您的金鑰,請執行 gpg --gen-key。您第一次執行的時候,它會建立幾個目 錄;再執行一次即可建立鑰匙:

原始碼 2.1: 鑰匙產生的過程

(中文:)
%  gpg --gen-key
gpg (GnuPG) 1.2.4; Copyright (C) 2003 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.

請選擇妳要使用的金鑰種類:
   (1) DSA 和 ElGamal (預設)
   (2) DSA (僅能簽署用)
   (4) RSA (僅能簽署用)
妳要選哪一個?1
(英文:)
%  gpg --gen-key
gpg (GnuPG) 1.0.7; 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.

Please select what kind of key you want:
   (1) DSA and ElGamal (default)
   (2) DSA (sign only)
   (4) ElGamal (sign and encrypt)
   (5) RSA (sign only)
   Your selection? 1

您可以在這裡選擇金鑰的種類。大部份的使用者會選預設的 DSA 和 ElGamal。然後是金鑰 的長度,記得數字越大越好,但是不要用超過 2048 bit 的 DSA/ElGamal 金鑰。一般來說 ,1024 對加簽/加密 e-mail 已經很夠用了。

在長度之後,您要選金鑰的保存期限。在這裡越小越好,但是一般使用者可以選永不過期或 一至二年的期限。

原始碼 2.2: 選擇金鑰長度

(中文:)
DSA 金鑰對會有 1024 位元。
關於產生一副新的 ELG-E 金鑰對。
      最起碼的金鑰尺寸是  768 位元
        預設的金鑰尺寸是 1024 位元
    建議的最大金鑰尺寸是 2048 位元
妳想要用多大的金鑰尺寸? (1024) 2048
妳所要求的金鑰尺寸是 2048 位元
請指定這把金鑰的有效期限是多久。
         0 = 金鑰不會過期
      <n>  = 金鑰在 n 天後會過期
      <n>w = 金鑰在 n 週後會過期
      <n>m = 金鑰在 n 月後會過期
      <n>y = 金鑰在 n 年後會過期
金鑰的有效期限是多久? (0) 0
Key 完全不會過期
(英文:)
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       
Please specify how long the key should be valid.
         0 = key does not expire
 <n>= key expires in n days
 <n>w = key expires in n weeks
 <n>m = key expires in n months
 <n>y = key expires in n years
 Key is valid for? (0) 0
Key does not expire at all

現在您可以輸入一些有關個人的資訊。如果您想將公開金鑰傳送給別人,則您可以在這 裡使用真正的郵件位置。

原始碼 2.3: 輸入個人資訊

(中文:)
以上正確嗎? (y/n) y

妳需要一個使用者 ID 來辨識妳的金鑰;這個軟體會用真實姓名、
註釋和電子郵件地址組合成使用者 ID 如下:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

真實姓名: Victor Tseng
電子郵件地址: palatis@gentoo.tw
註釋: Palatis
妳選擇了這個使用者 ID :
    "Victor Tseng (Palatis) <palatis@gentoo.tw>"

變更姓名(N) 、註釋(C) 、電子郵件地址(E)或確定(O)/退出(Q)? O
妳需要一個密碼串來保護妳的私鑰。

請輸入密碼串:
(英文:)
Is this correct (y/n)? y
                        
You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: John Doe
Email address: john@nowhere.someplace.flick
Comment: The Real John Doe
You selected this USER-ID:
"John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O 
You need a Passphrase to protect your secret key.    

Enter passphrase: 

現在輸入兩次您的鑰匙密碼。用個難被破解的密碼是個好主意。如果某個人得到了您的 私密金鑰並且破解了您的密碼,他就可以用您的名義簽章,而且大家都會認為那 "真的是您簽的名"。

然後,GnuPG 會產生您的密碼。移動滑鼠或在背景撥放 mp3 等等可以加速處理過程, 因為這些動作會製造隨機的資料。

產生撤回的認證

重要: 這個步驟非常重要,而且您應該現在馬上做。

在您建立一組鑰匙之後應該馬上建立撤回認證。這允許您在某些麻煩事 (某人取得了您的私 密金鑰/密碼) 發生的時候撤回這付鑰匙。

原始碼 2.4: 產生撤回認證

(中文:)
%  gpg --list-keys
/home/tblanku/.gnupg/pubring.gpg
--------------------------------
pub  1024D/93F3B82A 2004-06-14 Victor Tseng (Palatis) <palatis@gentoo.tw>
sub  2048g/93458851 2004-06-14

%  gpg --output revoke.asc --gen-revoke 93F3B82A

sec  1024D/93F3B82A 2004-06-14   Victor Tseng (Palatis) <palatis@gentoo.tw>

要為這把金鑰建立一份撤銷憑證嗎? y
請選擇撤銷的原因:
  0 = 未指定原因
  1 = 金鑰已經被洩漏了
  2 = 金鑰被代換了
  3 = 金鑰不再被使用了
  Q = 取消
(也許妳會想要在這裡選擇 1 )
妳的決定是甚麼? 1
請輸入選用的描述;以空白列結束:
> 我被入侵了!有人已經偷了我的金鑰。
>
撤銷原因: 金鑰已經被洩漏了
我被入侵了!有人已經偷了我的金鑰。
這樣可以嗎? y

妳需要下列使用者的密碼串,纔能解開私鑰:
"Victor Tseng (Palatis) <palatis@gentoo.tw>"
1024 位元 DSA ID 93F3B82A 的金鑰,建立於 2004-06-14

已強迫使用 ASCII 封裝過的輸出。
已建立撤銷憑證。

請把這個檔案搬移到另一個妳能夠將之藏起來的媒介上;
如果有人能夠取得這份憑證的話,那麼他也能夠讓妳的
金鑰無法繼續使用。把這份憑證列印出來再藏到別的地
方也是很好的方法,以免妳的儲存媒介損毀而無法讀取。
但是千萬小心:妳的機器上的列印系統可能會在列印過
程中把這些資料暫存在某個其他人也能夠看得到的地方!
(英文:)
%  gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

%  gpg --output revoke.asc --gen-revoke 75447B14

sec  1024D/75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhere.someplace.flick>

Create a revocation certificate for this key? y
Please select the reason for the revocation:   
  0 = No reason specified
  1 = Key has been compromised
  2 = Key is superseded
  3 = Key is no longer used
  Q = Cancel
(Probably you want to select 1 here)
Your decision? 1
Enter an optional description; end it with an empty line:
> Someone cracked me and got my key and passphrase
>
Reason for revocation: Key has been compromised
Someone cracked me and got my key and passphrase
Is this okay? y

You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

ASCII armored output forced.
Revocation certificate created.

Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution:  The print system of
your machine might store the data and make it available to others!

gpg --list-keys 指令會列出您的公開鑰匙鍊。您可以使用它來查看您可以建 立撤回認證的鑰匙 ID。現在是個把所有 .gnupg 目錄以及它們的撤回認證 (ASCII 鎧甲 revoke.asc) 複製到其他安全的媒體 (您放在保險櫃的磁碟片或光碟片上) 的好機會。注意 revoke.asc 可以撤銷您的金鑰並且讓它們以後不能再 被使用。

注意: 如果您有數個 e-mail 地址而您想要使用同一把鑰匙,您可以執行 gpg --edit-key YOUR_ID 然後使用 adduid 指令。它會問您的名稱、電子郵件以及您會使用的 第二個 ID 的註解。

匯出金鑰

想匯出您的鑰匙,您可以輸入 gpg --armor --output john.asc --export john@nowhere.someplace.flick。您幾乎總是可以使用鑰匙的 ID 或某些可以指出 鑰匙的資訊 (在這裡我們使用電子郵件地址)。現在他可以把 john.asc 這把公開金 鑰傳送給他的朋友,或是放在某個大家都可以安全拿到的地方。

匯入金鑰

想在公開鑰匙鍊中加入檔案,您必須先匯入它,然後檢查金鑰的指紋。在您確認了指紋 之後您應該核對它。

注意: 您應該小心的核對這些金鑰。這是公開金鑰編碼的弱點之一。

現在我們會加入 Luis Pinto (我一個朋友) 的公開金鑰到我們的公開鑰匙鍊。在打電 話問到她的金鑰指紋以後,我將把指紋根和使用 fpr 指令產生的指紋比對 。因為這個金鑰是可靠的,所以我將它加入公開鑰匙鍊。同時,Lius 的鑰匙會在 2003-12-01 過期,所以他問我要不要在過期的同時讓我的加簽過期。

注意: 譯桉:我加入 benny 的金鑰作為示範 :)

原始碼 2.5: 匯入以及加簽金鑰

(中文:)
%  gpg --import bennyc_at_gentoo_org.asc
gpg: 金鑰 DB8FF979: 公鑰 "Benny Chuang (BennyC) <bennyc@gentoo.org>" 已被匯入
gpg: 總共被處理的數量: 1
gpg:                已匯入: 1
%  gpg --list-keys
/home/tblanku/.gnupg/pubring.gpg
--------------------------------
pub  1024D/93F3B82A 2004-06-14 Victor Tseng (Palatis) <palatis@gentoo.tw>
sub  2048g/93458851 2004-06-14

pub  1024D/DB8FF979 2003-09-12 Benny Chuang (BennyC) <bennyc@gentoo.org>
sub  2048g/1D151A92 2003-09-12

%  gpg --edit-key bennyc@gentoo.org
gpg (GnuPG) 1.2.4; Copyright (C) 2003 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: 正在檢查信任資料庫
gpg: 正在檢查深度 0 簽署=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
pub  1024D/DB8FF979  製造於: 2003-09-12 使用期限: 永遠不過期 信任: -/-
sub  2048g/1D151A92  製造於: 2003-09-12 使用期限: 永遠不過期
(1). Benny Chuang (BennyC) <bennyc@gentoo.org>

指令> fpr
pub  1024D/DB8FF979 2003-09-12 Benny Chuang (BennyC) <bennyc@gentoo.org>
 主鑰指紋: B635 00E4 723A A22B CCD3  00C4 53CD 3411 DB8F F979

指令> sign

pub  1024D/DB8FF979  製造於: 2003-09-12 使用期限: 永遠不過期 信任: -/-
 主鑰指紋: B635 00E4 723A A22B CCD3  00C4 53CD 3411 DB8F F979

     Benny Chuang (BennyC) <bennyc@gentoo.org>

妳有多謹慎檢查正要簽署的金鑰確實屬於上面那個人的名字呢?
如果妳不知道這個問題的答案,請輸入「0」。

   (0) 我不作答。  (預設)
   (1) 我根本沒有檢查過。
   (2) 我隨意檢查過了。
   (3) 我非常小心地檢查過了。

Your selection? (enter '?' for more information): 3
妳真的確定要簽署這把金鑰
用妳的金鑰: "Victor Tseng (Palatis) <palatis@gentoo.tw>" (93F3B82A)

我非常小心地檢查過這把金鑰了。

真的要簽署嗎? y

妳需要下列使用者的密碼串,纔能解開私鑰:
"Victor Tseng (Palatis) <palatis@gentoo.tw>"
1024 位元 DSA ID 93F3B82A 的金鑰,建立於 2004-06-14


指令> check
uid  Benny Chuang (BennyC) <bennyc@gentoo.org>
sig!3       DB8FF979 2003-09-12   [自我簽章]
sig!3       93F3B82A 2004-06-14   Victor Tseng (Palatis) <palatis@gentoo.o
(英文:)
%  gpg --import luis.asc
gpg: key 462405BB: public key imported
gpg: Total number processed: 1
gpg:               imported: 1
%  gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@student.dei.uc.pt>
uid                            Luis Pinto <lmpinto@dei.uc.pt>
sub  4096g/922175B3 2002-12-01 [expires: 2003-12-01]

%  gpg --edit-key lmpinto@dei.uc.pt
gpg (GnuPG) 1.0.7; 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: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
sub  4096g/922175B3  created: 2002-12-01 expires: 2003-12-01
(1)  Luis Pinto <lmpinto@dei.uc.pt>
(2). Luis Pinto <lmpinto@student.dei.uc.pt>

Command> fpr
pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@dei.uc.pt>
             Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB
     
Command> sign
Really sign all user IDs? y
                           
pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
             Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB

     Luis Pinto <lmpinto@dei.uc.pt>
     Luis Pinto <lmpinto@student.dei.uc.pt>

This key is due to expire on 2003-12-01.
Do you want your signature to expire at the same time? (Y/n) Y
How carefully have you verified the key you are about to sign actually belongs
to the person named above?  If you don't know what to answer, enter "0".

   (0) I will not answer. (default)
   (1) I have not checked at all.
   (2) I have done casual checking.
   (3) I have done very careful checking.

   Your selection? 3
Are you really sure that you want to sign this key
with your key: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

I have checked this key very carefully.

Really sign? y
              
You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

Command> check
uid  Luis Pinto <lmpinto@dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe
uid  Luis Pinto <lmpinto@student.dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe

3.  與金鑰伺服器交換鑰匙

傳送鑰匙至金鑰伺服器

現在您有了自己的鑰匙,將它傳送到世界性的金鑰伺服器大概是個好主意。世界上有很 多金鑰伺服器並且會自動在它們之間交換金鑰。在這裡我們將把 Luis 的鑰匙送到 pgp.mit.edu 伺服器。這使用 HTTP,所以如果您需要使用 HTTP 代理伺服器別忘了先 設定它 (export http_proxy=http://proxy_host:port/)。傳送金鑰的指令 是:gpg --keyserver pgp.mit.edu --keyserver-options honor-http-proxy --send-key john@nowhere.someplace.flick。如果您不需要使用 HTTP 代理伺服 器,則您可以拿掉 --keyserver-options honor-http-proxy 的部份。

您也可以傳送其他您簽過名的鑰匙到金鑰伺服器。我們可以將 Luis Pinto's 的鑰匙送至金 鑰伺服器。這樣的話,某個信任您金鑰的人可以使用您信任 Luis 的鑰匙的簽章。

從金鑰伺服器取得鑰匙

現在我們將找尋 Gustavo Felisberto 的金鑰並將它加入 John Doe 的鑰匙鍊 (只是為了確 定您有注意到 Gustavo Felisberto 是寫了這篇指南的人 :) )。

原始碼 3.1: 從金鑰伺服器尋找金鑰

%  gpg --keyserver pgp.mit.edu --keyserver-options honor-http-proxy --search-keys humpback@felisberto.net
gpg: searching for "humpback@felisberto.net" from HKP server pgp.mit.edu
Keys 1-5 of 5 for "humpback@felisberto.net"
(1)Gustavo Felisberto (apt-get install anarchy) <humpback@felisberto.net> 1024
  created 2002-12-06, key B9F2D52A
(2)Gustavo Felisberto <humpback@altavista.net> 1024
  created 1999-08-03, key E97E0B46
(3)Gustavo A.S.R. Felisberto <humpback@altavista.net> 1024
  created 1998-12-10, key B59AB043
(4)Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
  created 1998-08-26, key 39EB133D
(5)Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
  created 1998-06-14, key AE02AF87
  Enter number(s), N)ext, or Q)uit >1
gpg: requesting key B9F2D52A from HKP keyserver pgp.mit.edu
gpg: key B9F2D52A: public key imported
gpg: Total number processed: 1
gpg:               imported: 1

如您從伺服器回應看到的,我傳送了好些個金鑰到伺服器。可是我目前只使用 B9F2D52A。現在 John Doe 可以取得這把鑰匙並且信任地將它簽章。

4.  和文件一起使用

加密以及簽名

讓我們假設您現在想送份檔案給 Lius。您可以將它加密、簽名、或又加密又簽名。加密表 示只有 Luis 能夠開啟它。而簽章表示這份檔案真的是您建立的。

接下了的三個命令會幫您做這些事,加密、簽名、和又加密又簽名。

原始碼 4.1: 檢查檔案中的金鑰並將它解碼

%  gpg --output doc.gpg --encrypt --recipient lmpinto@dei.uc.pt doc_to_encrypt
%  gpg --output doc.gpg --sign --recipient lmpinto@dei.uc.pt doc_to_sign
%  gpg --output doc.gpg --encrypt --sign --recipient lmpinto@dei.uc.pt doc_to_encrypt_and_sign

這會建立二進位的加密檔。如果您想要建立 ASCII 檔案,請在命令前面加上 --clearsign 選項。

解密以及驗證簽名

設想您取得了一篇給您的加密文件,將它解密的指令是 gpg --output document --decrypt encrypted_doc.gpg。這會將文件解密並且檢查簽章 (如果有的話)。

進階功能

GnuPG 還有一些不錯的進階功能。讓我們在 ~/.gnupg/gpg.conf 這個檔 案中找出他們!

原始碼 4.2: ~/.gnupg/gpg.conf

% keyserver x-hkp://pgp.mit.edu
% keyserver-options auto-key-retrieve include-disabled include-revoked

找到上面兩行並取消他們的註解。這樣的話,每當 GnuPG 需要檢查簽名卻無法在本機 找到對方的金鑰的時候,會自動向 pgp.mit.edu 詢問並嘗試從那裡下載。

另一個指令則是 gpg --refresh-keys。它會自動向上面定義的金鑰伺服器更新 公開金鑰,例如查詢撤回認證,新的 id,新的金鑰簽名等等。這個動作應該每個月 作個 1~2 次,這樣某個人撤回他的金鑰的時候您可以馬上察覺。

5.  GnuPG 介面

關於電子郵件簽名

您使用 GnuPG 中 95% 以上的時間,大概都是在加簽/加密/驗證簽名/解密電子郵件。 這也是為什麼這個小節在最前面。

要使用 GnuPG 加簽/加密某封電子郵件有兩個方法,新方法跟老方法 :)。在老方法中 ,訊息會以純文字顯示。附件跟特殊格式都不會被驗證/解密。以下是個用老方法加 簽的訊息:

原始碼 5.1: 一個純文字簽名

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Test message

-----BEGIN PGP SIGNATURE-----
Version: PGPfreeware 6.5.8 for non-commercial use

iQA/AwUBP8461jMX0745gR7AEQIEOwCg011GbufXO3ED3FkLWXmfzg7xm1cAoJD0
0EU3Kd2EKNCqataEqM5qjpPs
=LchZ
-----END PGP SIGNATURE-----

這種訊息在今日的世界已經落伍了,現在多得是美妙的圖形介面以及看的懂 html 的電 子郵件用戶程式。

為了解決這個問題,我們加了個新的 MIME (多用途網際網路郵件擴展 - Multipurpose Internet Mail Extensions)。它在電子郵件中多加了一個欄位,告訴用戶端訊息的全 部內容是否有簽名或加密。問題並不是每種郵件用戶端都支援它,甚至有些用戶端 會整個爛掉,例如 Microsoft 的 Outlook 就是不支援的用戶端中最有名的一個。

Kgpg

kgpg 是個很好的 GNUPG 圖形化界面。在主視窗中,您可以直接貼上您想要簽名或加密 的文字,而您可以直接貼上想要解密的 ASCII 格式加密文字。


圖示 5.1

Fig. 1: kgpg main window

在這個 kgpg 主視窗中您可以看見一個貼滿了 ASCII 格式的加密檔案。您可以在這裡將它 解密 (您必須提供您的密碼),將其他檔案加密,貼上要簽名的文字...


圖示 5.2

Fig. 2: kgpg key manage window

現在您可以看到金鑰管理視窗。從這裡我們看到了 John Doe 的好鑰匙。兩把從 Gustavo 和 Luis 來的認證的鑰匙,以及從 Daniel Robbins 得到尚未信任的鑰匙 (我還沒打電話給 他確認指紋 :) )。

Seahorse

Seahorse 似乎想成為 Gnome 桌面環境的 GnuPG 圖形化介面。這個軟體以驚人的速度 發展,不過目前還是缺少一些在 Kgpg 或指令介面的重要功能。

Mozilla Enigmail

Mozilla 從 1.0 版以後有附上 Enigmail,一個設定簡單的郵件用戶端插件。您只要去 Preferences -> Privacy & Security -> Enigmail,並且在那裡輸入您金鑰的 e-mail 位置就可以了。

附上沒有認證的 pgp 或 gpg 簽章的郵件會以一支斷掉的筆標註,其他有優良簽章的會看起 來像一支完好無缺的筆。Enigmail 還有從金鑰伺服器取得鑰匙的功能,不過如果有發生問 題它會秀出一則非常詭異的訊息 (您還記得怎麼使用文字指令吧?)。

KMail

重要: KMail 1.7 之後,你需要作一系列 步驟 來設定 KMail 的 GnuP。如果你是用 KMail 1.7 請依照那個指南。

Kmail 也很好設定。我將會貼上幾張表示該怎樣設定它的圖。基本上您必須告訴 KMail 要 使用 GPG 以及要用那把金鑰簽名。


圖示 5.3: kmail identity options OpenGPG key

Fig. 3


圖示 5.4: kmail security options OpenPGP

Fig. 4


圖示 5.5: kmail security options Crypto Plugins

Fig. 5

Sylpheed-Claws

這是我所使用的電子郵件用戶端程式。即使信箱再大它還是非常快,擁有幾乎 您想得到所有郵件用戶端該有的功能,並且與 gpg 有很好的結合。唯一的問題是它 不支援舊的 PGP 簽名,所以當您收到那種郵件的時候必須手動驗證簽名。

要再 Sylpheed-Claws 中使用您的 gpg 金鑰,請至 "帳戶設定" 中的 "隱私" 頁,並 且選擇您要用來加密的金鑰。大部份的使用者應該都會使用預設的金鑰。

6.  公開金鑰加密

基本公開金鑰加密

基本的公開金鑰加密步驟是由 Whitfield Diffie 及 Martin Hellman 於 1976 提出的 。在我第一次在同一個句子中聽到 "公開金鑰" 以及 "加密" 這兩個詞的時候,我 覺得那根本是不可能的事情。在那個時候根本沒有網際網路這種東西 (其實有啦, 但是我沒有用),所以我跑去圖書館找有關加密的資料。我必須提一下那時候我十六 歲,所以圖書館管理員驚奇的看著我,並給了我一本寫給小朋友、關於替換加密的書 (以某個字母代替另一個的加密法,例如有名的 Caesar Cypher 或 ROT-13 (Tragbb Ebpxf, naq lbh xabj vg vf tbbq orpnhfr lbh ner ernqvat guvf qbp.)。 (若您不知道之前 那句英文在幹麼,請 emerge rotix))。我感到蠻沮喪的,並且開始尋找更 多資訊。有個數學加在家裡真好,當我跟他們聊天的時候,進入了嶄新的世界!

現在,一點點數學觀念:

原始碼 6.1: 數學基礎

定義:

1- "質數" 是只能被 1 以及自己整除的正整數 (除了之後餘數為 0)。
前 8 個質數是 1、2、3、5、7、11、13、17

理論 (不在此證明)
1- 任何非質數的正整數都可以化為兩個以上質數的乘積,而且是唯一的組合。
4=2*2
6=2*3
8=2*4=2*2*2
10=2*5
12=2*6=2*2*3

"事實":
1- 數學上,兩個大數相乘是很簡單的。
2- 找出某個正整數的質因數並不是那麼簡單。

如果給您個數字 35 並且告訴您那是兩個質數的乘積,您可以簡單的找出那兩個質數是 5 跟 7。但若我告訴您 1588522601 也是,您可能會花許多時間 (或 CPU 週期) 找出它是 49811*31891。當這個數字真的非常大的時候,這項工作就變成 "時間上不可能"。所以 ,現在我舉出一個很大的兩個質數相乘的數字,我可以保證除了我以外沒有其他人 會知道。

這就是今天的公開金鑰認證 (PKC - Public Key Cryptography) 的實作方法。舉個 (不真實的) 例子,我告訴所有人一個數字,而某人會使用他來加密資料給我。每個 都可以看到加密之後的資料,不過我是唯一一個知道解密捷徑的人。其他人必須先 分解那個大數字,然後才能讀取裡面的訊息,而在 "事實上" 那是個不可能在短時 間內達成的任務 (使用現有的方法跟目前世界上最快的電腦大概需要幾千年來解密) 。在這個例子中,那兩個大質數是我的 "私密金鑰,而那個非質數則是 "公開金鑰"。

實際上這不是 100% 正確,但是這能讓新手比較好理解。您可以從 Diffie-Hellman 協定中的 hack.gr 中找到一些資訊。想要更多資訊的話, 請去圖書館找 Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone 所著的 "Handbook of Applied Cryptography" 這本書,它的免費版本可以在上面的網址找到。

有個問題是,如果您加密了某個訊息給我,但是您遺失了原本未加密的訊息,則您無法 從已加密的版本還原。

簽名

我們已經知道對方有我的公開金鑰之後,要怎麼送給我加密過的訊息。但是我該如何得 知這篇訊息的作者真的是那個人?換句話說:在我收到您寄給我的電子郵件之後, 我該怎麼知道那真的是您寄的,而不是由其他假扮成您的人寄的?

記得我說過 PKC 並沒有我之前說的那麼簡單?基本的作法是,在您加密要送出給我的 訊息之後使用您自己的私密金鑰簽名。所以當我收到這個訊息之後,我可以先使用 您的公開金鑰檢驗,然後使用我自己的私鑰來解密。如您所見,我們無法在我上面 設定的狀況下套用這個動作。

還有一件事情很重要,您不需要在簽名之前先把訊息加密。例如您想建立一則所有人都 可以看的訊息,不過有您的簽名。當訊息中任何一個字元被變更的時候,其他人可 以檢查出來。

金鑰伺服器以及簽名的金鑰

但是,假設直到您傳送訊息給我之前,我並沒有您的通訊方式。我要怎麼取得您的公開 金鑰,以及我該怎麼知道那真的是您的公開金鑰?

公開金鑰伺服器就是為了解決這個問題而設立的。當您建立金鑰對 (公鑰以及私鑰) 之 後,您將公鑰傳送至伺服器。接著所有人都可以從那裡取得您的公鑰。這解決了找 鑰匙的問題,但是我該怎麼知道那真的是您的公鑰?為了了解這個問題,您必須先搞懂 "金鑰簽名" 這個技術:

"金鑰簽名" 是指,若我有另外某個人的公開金鑰,而我清楚知道那真的是那個 人的金鑰 (他是我某個朋友,是我真實世界中認識的某個人... 等等。) 我可以將 這個金鑰加簽並傳送至伺服器,這表示我告訴全世界:「這個公鑰真的是這個人的 。」。這樣的話,擁有我金鑰的人可以利用對我金鑰的信任來信任其他金鑰。

這似乎蠻混亂的,讓我們來看看這個實際的例子:

讓我們假設三個人:John、Mary、跟 Lisa。John 是 Mary 的好友,但是不認識 Lisa ;Lisa 是 Mary 的好友但是不認識 John。某日 Lisa 送了一則簽名訊息給 John,則 John 會至公開金鑰伺服器取得 Lisa 的公鑰並檢驗這則訊息。若一切都那麼美好,John 會看到撰寫訊息的人就是打造了這付鑰匙的人。但是我要怎麼知道打造這付鑰匙的人真的是 Lisa 本人?

接著,John 發現這付公鑰上有 Mary 的簽名,由於他已經有 Mary 的公鑰並且他信任 Mary 的公鑰,所以他可以知道 Mary 信任這付鑰匙,由於他信任 Mary,所以他信任這付鑰 匙。最後,John 可以確定 Lisa 真的是這封訊息的作者。

您現在已經準備好繼續閱讀此指南了,請回到第一章 繼續學習如何使用 gpg

7.  最後的想法以及榮譽榜

一些問題

我有些把照片放進金鑰的問題。檢查您使用的版本,如果您使用 GnuPG 1.2.1-r1 或以 上,那應該不會有什麼問題。比較舊的版本也許有問題,而且大部份的伺服器不喜 歡附了照片的鑰匙。

最新版的 gnupg 不支援 gpg --send-keys 指令,它本來是用來將您鑰匙鍊中 所有金鑰傳送至伺服器的指令。

這篇文章還缺什麼?

gpg 是個非常複雜的工具,它可以讓您做到許多這裡沒有提到的事情。這篇文 件是為了那些 GnuPG 新手寫的。要得到更多資訊,您應該查閱 GnuPG 網站

我沒有介紹例如 pgp4pinegpgpineevolution 以及也許一些 Windows 工具之類的東西。也許以後會陸續增加。

榮譽榜

John Michael Ashley 的 GnuPG Handbook 寫 的非常美妙。對新手來說是很好的參考書。

逼著我重寫這篇文章的 Swift (Sven Vermeulen)。

所有 #gentoo-doc 團隊中的人。

追蹤我隱私的 Tiago Serra。



列印

最後更新 2005年 2月 5日

這份文件的原始版本已不再被維護

大綱: 這篇指南教您怎麼使用 GnuPG - 一個安全的加密工具。

Gustavo Felisberto
Author

John P. Davis
Editor

Sven Vermeulen
Editor

【Palatis】
Translator

Benny Chuang
Translator,Reviewer

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Online Kredit Index
Copyright 2001-2009 Gentoo Foundation, Inc. Questions, Comments? Contact us.