PGP 小註解

PGP [1] 是 pretty Good Privacy 的縮寫, 我們可以用 PGP 幫我們的文件 (含信件) 加密或是驗證. 如果大家收到一個 .PGP 的檔案, 這個文件應該是用對方的 key 和你的 public key 所加密的. 因為你已經把 public key 給過對方, 那麼收到 .PGP 時也不會太意外.  如果對用法上不熟, 可以參考 [2].

有一種加密方式是把整封信加密, 此時很有趣地, 看到 .pgp, 解開之後發現是信上的 logo 而已. 真正信件的內容是穿上 ASCII armor [3] 形式的亂碼. 例如:

—–BEGIN PGP MESSAGE—–
Version: 10.3.2 (Build 15238)
Comment: This message is confidential
Charset: utf-8

vp5hQ3ROXrZ7KVeyDlb3yD2/cmZbznGTN7Rowt2LOuec4CjcOlRB/q3XaalhoXnj

—–END PGP MESSAGE—–

ASCII Armor 的用意是避免 binary 形式傳檔案時, 剛好出現不應該出現的 pattern, 而造成 gateway 的問題, 或是被當作病毒等等. 因此用 binary to textual 逐 byte 轉成 ASCII code. 此外, 根據 [4], DOS/UNIX 的換行符號通常都可以被自動克服.

這時候, 明眼人都看得出來這段文字就是 PGP 檔案. 所以把  —–BEGIN PGP MESSAGE—– 到 —–END PGP MESSAGE—– 剪下來, 貼到一個新的檔案上, 然後存成一個檔案, 就可以解密它.

我用 Kleopatra [5] 試驗的結果, 只要不是存成 .PGP 檔, 沒有附檔名, 甚至 rename 成 .ZIP 檔或是 .out 檔, Kleopatra 都能將它正確解密, 並且生出 XXX.out 檔. 不過存成 .PGP 檔就不行了. 至於用 GoAnyWhere Open PGP Studio [6] 去解 ASCII Armor, 還沒有成功過.

使用 Kleopatra 容易遇到一個小問題, 第一次可以正常使用. 如果當掉了, 第二次就會開不起來, 抱怨找不到 libkleo.dll. 本來以為它是被防毒軟體誤殺. 想不到是這個軟體的烏龍. 到 Kleopatra 圖示點右鍵, 選 “內容", 把開始位置的 “C:Program Files (x86)GNUGnuPGbin" 砍掉 bin 就 OK 了. 這個 bug 被報了兩年, 據說到 2016/4/8 的版本才解掉 [7].

[REF]

  1. 良好隱私密碼法
  2. 文件認證——Pretty Good Privacy (PGP) 簡介與應用
  3. ASCII-Armor 這個 link 很好, 但是點進去要等一段時間廣告.
  4. Line Breaks in OpenPGP ASCII armor
  5. https://www.gpg4win.org/
  6. http://www.goanywheremft.com/products/openpgp-studio
  7. Bug 333535 – System Error on initialisation – libkleo.dll is missing