gpg 數位簽章

01首先到終端機設定gpg建立環境
$ gpg
gpg: `/home/egret/.gnupg' 目錄已建立
gpg: 新的設定檔 `/home/name/.gnupg/gpg.conf' 被建立了
gpg: 警告: 在 `/home/name/.gnupg/gpg.conf' 裡的選項於這次執行期間並沒有被啟用
gpg: `/home/name/.gnupg/secring.gpg' 鑰匙圈已建立
gpg: `/home/name/.gnupg/pubring.gpg' 鑰匙圈已建立
按Ctrl+c完成鑰圈環境的建立

---------------------------
02建立自己的 gpg <Key ID>
$ gpg --gen-key
選(1) RSA 和 RSA (預設)
選4096
選5y 選合宜的期限是困難的...
事後延長期限的方法
http://www.g-loaded.eu/2010/11/01/change-expiration-date-gpg-key/

建議用護照正式英文名,以便Key signing party時和外國人當面驗證護照
填email 找選一個安全可靠,又可以公開的電子信箱
建議在註解 (comment) 加正式漢字名,以便party 時當面驗證身份證件
再檢查是否筆誤,按o確定
加密碼保護,如果以後密碼忘了,無解

請任意打字以產生大量隨機位元組,成功時出現如下這段,請Ctrl+Shift+c 另檔儲存起來

pub   4096R/7B0CXX0A 2013-08-20 [到期: 2013-08-27]
      金鑰指紋 = 2021 22BC B4E6 8BE9 F0D9  1A93 69C2 EB7E 7B0C XX0A
uid                  英文名 (漢字名) <name@gmail.com>
sub   4096R/9C025F01 2013-08-20 [到期: 2013-08-27]

現在您的<Key ID>就是7B0CXX0A 請記下來,最好連金鑰指紋也一起記下來,建議同一把金鑰應該要有一個以上的UID,可以執行 gpg --edit-key <Key ID> 然後使用 adduid 指令,以增加第二個UID。

------------------------------------
03將<Key ID>送到 keyserver pgp.mit.edu
$ gpg --keyserver pgp.mit.edu --send-keys <Key ID>

--------------------
04檢查<Key ID>是否上傳成功
直接用瀏覽器開 http://pgp.mit.edu
試以漢字名/英文名/email 來搜尋, 看看 key 有沒有上傳成功了

-----------------------------------
05signing-party
公鑰可以任意發送給別人,但不能任意信任別人的公鑰,所以party時應要求對方出示身份證證明。

如果無法確定Party主持人會事先準備所有參加者的正確FingerPrint
或可將自己的FingerPrinit印出來或記起來,再帶到現場檢查交換

$ sudo apt-get install signing-party
$ gpg-key2ps <Key ID> > signing-party.ps
接著將 signing-party.ps 印出來,檢查確認後裁成名條,再將這些名條帶去現場交換
可惜這支程式無法印出UTF-8編碼漢字(有誰可以改良一下?)

-------------------------------------------
06Party後不要直接把簽好的金鑰回傳到伺服器,而是要由對方自己去上傳那已經簽署過的金鑰
請先另外設定好文字模式下ssmtp的寄信方法
$ sudo apt-get install signing-party #如果在05時己安裝則省略
$ caff #建立caff環境
$ caff <A君Key ID> #簽證A君的<Key ID>
這樣就會自動從網路上面取得A君的公鑰, 然後進入 gpg command mode
如果確定要簽證這位A君就執行
Command> sign
Command> save
就會自動發一封信並且附加.asc檔寄給A君
因為Party時可以在會場確認雙方的姓名證件,但是無法驗證電子郵件。
經由caff寄送的方式,可以確保驗證電子郵件。

設定文字模式下ssmtp的寄信方法
sudo apt-get install ssmtp

然後
sudo gedit /etc/ssmtp/ssmtp.conf 加入
AuthUser=user.name@gmail.com
AuthPass=password
FromLineOverride=YES
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES

之後就可以用Command Line指令來寄信
請用如下之指令去檢查信箱確認是否正常運作
$ echo "This is a test mail.信件內文" | mail -s "test mail信件主旨" 收信者mailname@gmail.com

作業完時要記得將AuthPass=password 的密碼移除,以保護信箱安全

----------------------------------------
07如果別人也用caff簽證我的公鑰,我會收到一封信附加一個.asc檔如下:
0xE9EC46F5A547F31E.1.signed-by-0xD5CA9B04F2C423BC.asc
檔名的前段是自己的<Key ID>,後段是對方的<Key ID>

將.asc的簽證檔加進金鑰圈中
$ gpg --import < 0xE9EC46F5A547F31E.1.signed-by-0xD5CA9B04F2C423BC.asc

將自己的己被簽證過Key 回傳到Keyserver
$ gpg --send-keys <Key ID>

然後查看目前的金鑰圈的狀態,看目前 <Key ID> 被誰簽過
$ gpglist <Key ID>

如果收到的只是一個signedkey.msg 而不是.asc檔時---無解,目前我沒有找到方法,請大家幫忙找解答方法,或許只能請對方再找另一台電腦再重簽一次

------------------------------------------
08如果某人簽了我的公鑰,而且我也在signing-party時確認過他的身份,我應該也要用自己的私鑰去簽他的公鑰,
因為如果大家都這麼作時,PGP信任網將會更完備。

如果有多把私鑰,指定要用哪一把私鑰Caff時也要同步修改~/.caffrc
$ sudo gedit ~/.caffrc去確認
                       CONFIG{'owner'} = 'name';
                       CONFIG{'email'} = 'mailname@gmail.com';
                       CONFIG{'keyid'} = [ qw{0BBD30E3B6A93879} ];

其他可能有用的指令
$ gpg --list-keys
$ gpg --search-keys <Key ID> 找尋並匯入
$ gpg --fingerprint <Key ID> 印出金鑰指紋
$ gpg --recv-keys <Key ID> 匯入別人的公鑰
$ gpg --refresh-keys 同步金鑰伺服器上的金鑰

-------------------------------------------------------------
09或許應該馬上預先建立撤回認證檔,這將允許在私鑰洩漏時發生的時候撤回這付金鑰圈。
$ gpg --output revoke.asc --gen-revoke <Key ID>

把所有 .gnupg 目錄以及它們的撤回認證 (ASCII 鎧甲 revoke.asc) 複製到其他安全的媒體
注意 revoke.asc 可以撤銷金鑰並且讓以後無法再被使用。

將撤回認證檔加進金鑰圈中
gpg --import revoke.asc

正式上傳到何服器來註銷公鑰
gpg --keyserver pgp.mit.edu --send-keys <Key ID>

-----------------------------------------
10從這台電腦上移除金鑰
# gpg --list-key 檢查確認
# gpg --delete-secret-keys <Key ID> 先移除私鑰
# gpg --delete-key <Key ID> 再移除公鑰
# gpg --list-key 檢查確認
公鑰不必備份,因為可以從私鑰中產生的。

沒有留言: