星期四, 3月 17, 2005

簽署/加密信件

緣由


通常在使用 E-Mail 的時候,有兩件事我們會有安全上的考量:

  1. 讓收件的人確定是我本人寄出的郵件。

  2. 別人寄給我的信可以用「我的方式」加密,而且只有我能解密。


底下我將會使用 Thunderbird 這套 mail client 來當例子,來介紹如何 簽署/加密 信件。

首先對於我要介紹的加密系統作點簡單的解釋。我們要採用的加解密模式是使用 key-pair policy,也就是我會有兩把 keys,其一為 public key,另一把為 private key。public key 是要公告給大家知道的,而 private key 必須將它保護起來。你的加密程式會把你要加密的東西和指定的 key 做一些運算後,產生新的輸出,這個輸出可能是加密或簽署過的文件。

當我們要簽署文件時,我們是使用 private key 來做簽署,這樣擁有你 public key 的人就可以使用它來驗證這份簽署的有效性,因為只有你自己擁有這把 private key,如此才能保證簽署的人就是你自己。而如果別人寄給你的信想加密的話,他可以用你的 public key 加密後再寄出,然後你就能用自己的 private key 解開這份加密後的文件。要注意的是,這些情況要成立,public key 跟 private key 比需是相互對應的。

所以,我們現在需要一個加密程式,然後再產生自己專屬的 key-pait 。

GnuPG


我們將會用 OpenPGP 這個加密系統來做加密,我選擇使用 Gnu 的實作版本--GnuPG來當我的加密程式。你可以下載別人作好的 binary 程式回來使用,不過我這裡會介紹抓原始檔回來編譯的方法(如果你不熟悉終端機的操作,就下載 binary 回來用吧)。

到 http://www.gnupg.org/download/index.html 下載最新的 source 回來,然後做下列指令:
# tar zxvf gnupg-<version>.tar.gz
# cd gnupg-<version>
# ./configure
# make
# sudo make install clean

這樣應該就可以順利把 gnupg 裝好了。

產生 Key-pair


在終端機下執行 gpg --gen-key ,然後它會問你以下問題:

請選擇妳要使用的金鑰種類:
(1) DSA 和 Elgamal (預設)
(2) DSA (僅能簽署用)
(5) RSA (僅能簽署用)
妳要選哪一個? 1

因為我們要產生 key-pair,所以我們選擇 1


DSA 金鑰對會有 1024 位元長.
ELG-E 金鑰的長度可能介於 1024 位元和 4096 位元之間.
妳想要用多大的金鑰尺寸? (2048) 4096

這裡我們就產生所支援的最長位元,位元愈大雖然資料量變大,但是也更加安全。

請指定這把金鑰的有效期限是多久.
0 = 金鑰不會過期
= 金鑰在 n 天後會過期
w = 金鑰在 n 週後會過期
m = 金鑰在 n 月後會過期
y = 金鑰在 n 年後會過期
金鑰的有效期限是多久? (0)

這裡是詢問你 key-pair 的使用期限,如果你要一直使用同一套 key-pair 的話就選 0

確定了之後,它會要你輸入真實姓名及 E-Mail 帳號:

妳需要一個使用者 ID 來辨識妳的金鑰; 這個軟體會用真實姓名,
註釋和電子郵件地址組合成使用者 ID 如下: "Ke-Huan Lin (Jedi) "

真實姓名: abcde
電子郵件地址: abcde@fg.hi
註釋:
妳選擇了這個使用者 ID:
"abcde "

變更姓名(N), 註釋(C), 電子郵件地址(E)或確定(O)/退出(Q)? o

然後按下 o ,它會要求你輸入一個密碼保護你的 private key:

妳需要一個密語來保護妳的私鑰.

請輸入密語:

接著它就會開始製作金鑰。(4096 bits 可能會有點久)完成時會顯示:

gpg: 金鑰 9FB16F65 已被標記成徹底信任了
公鑰和私鑰已經被建立及簽署了.

gpg: 正在檢查信任資料庫
gpg: 3 個勉強信任以及 1 個完全信任是 PGP 信任模型的最小需求
gpg: 深度: 0 有效: 1 已簽署: 0 信任: 0-, 0q, 0n, 0m, 0f, 1u
pub 1024D/9FB16F65 2005-03-17
金鑰指紋 = 5B0A 562A DB9A C9F6 58E7 954C 0919 B9D5 9FB1 6F65
uid abcde
sub 4096g/23D35AD9 2005-03-17


使用 Thunderbird 來作簽署或加密


首先,我們必須為 Thunderbird 安裝 Enigmail 這個 extension,這樣它才能支援 OpenPGP 的加密系統。

裝好之後我們就要設定一下 Enigmail, 到選單列的 Enigmail -> Preferences 來設定,這裡我們只需要將
GnuPG executable path 設定成 /usr/local/bin/gpg 就可以了。

當我們開始寫信時,會有個 OpenPGP 的選項,如果你是第一次使用,它會要求你選擇 key-pair,如果上述的步驟你都沒有問題的話,你就可以找到你剛產生的 key-pair 而選擇它。我們可以選擇我們要 Sign(簽署)或是 Encrypt(加密)這封信件,如果我們要簽署信件時,選擇 Sign message 就可以了,然後當你信件打完之後,它會要求你輸入 private key 的密碼(別忘了你是用 private key 加密),如此便會寄出簽署過的文件。(你可以把 Enigmail 的 Auto decrypt and verify 的選項關掉,看看寄出什麼樣的東西)

至於加密文件,如果你沒有別人的 public key,你用自己的 public key 加密是沒有意義的(因為這樣只有你自己能解密),如果要匯入別人的 public key,通常大家會以一個純文字檔的方式釋出,當你拿到這個檔案時,就可以到終端機下輸入

# gpg --import < 檔案名

這樣就可以匯入別人的 public key,你也就可以使用它來加密。如果你要輸出你的 public key ,就使用下列指令:

# gpg -a --export > 檔案名

然後你就可以散佈這個檔案,讓別人能用你的 public key 來加密信件寄給你。注意:只有簽署的信件是沒有加密的,所以只會在本文下方加上數位簽章(只能由你的 public key 來驗證);而加密的文件則是一堆亂碼,必須要用 private key 才能解開。

對應 Sign(簽署)的動作叫作 Verify(驗證),而對應 Encrypt(加密)的動作叫作 Decrypt(解密)。

基本的簽署/加密方式就介紹到這裡,剩下的就讓大家自己去試囉。

星期三, 3月 02, 2005

FreeBSD 5 日誌 (2)

以下公開幾個我的設定檔及常用的軟體:
  1. ~/.xinitrc (使用 wrapper 進 X 時的script)
    #!/bin/sh
    scim -d
    gnome-session


  2. ~/.vimrc (用 vim 時的設定)
    set termencoding=utf-8
    set encoding=utf-8
    set fileencodings=big5,utf-8,gbk,euc-jp,euc-kr,utf-bom,iso8859-1
    autocmd BufNewFile,BufRead w3mtmp* set fileencoding=utf-8

    syn on
    set showcmd
    set ruler
    set history=50


  3. ~/.cshrc (用 /bin/tcsh 的環境設定)
    set prompt = '%n@%m %~%# '
    set dspmbyte = utf8
    alias ls 'ls -wG'
    alias irssi 'irssi -c irc.seed.net.tw -n ericsk'
    alias telnet 'telnet -8'

    setenv LANG zh_TW.UTF-8
    setenv LC_CTYPE zh_TW.UTF-8
    setenv XMODIFIERS "@im=SCIM"
    setenv GTK_IM_MODULE xim


  4. office 軟體:我目前是用 /usr/ports/editors/gnome2-office
    word processing 就是 AbiWord
    data sheet 就是 Gnumeric
    看 pdf 的話,其實 /usr/ports/graphics/gpdf 還不錯用

  5. terminal 我是用 gnome-terminal, 支援分頁也支援 M7N

  6. web/mail 當然就是 /usr/ports/www/firefox 跟 /usr/ports/mail/thunderbird 啦

  7. 看電影, avi格式等等就用 /usr/ports/multimedia/vlc
    rmvb 就用 /usr/ports/multimedia/linux-realplay

  8. 聽音樂, /usr/ports/multimedia/beep-media-player
    是以 xmms 為 base, 但我覺得比 xmms 還好用

  9. 純文字編輯, gedit 就夠強了,也支援一些語言語法高亮度顯示。

  10. Messenger就用 /usr/ports/net/gaim 囉~