2016年12月12日 星期一

電腦麻瓜也會用 mailvelope 加密保護電子郵件隱私及加上數位簽章

現代人都把 e-mail 放在雲端 (webmail)。 對英美的情治兼間諜單位 (NSA 跟 GCHQ) 來說, 這讓他們 「偷窺全球民眾通訊內容」 的工作變簡單了許多。 如果你不爽被監控的話, 就應該學會如何加密 e-mail。 小格的 gnupg 加密 一文點閱率意外地高; 但它畢竟是命令列, 比較不適合電腦麻瓜。 為了準備下學期在中興大學開的資安通識課, 最近找到 (適用於 chrome 及 firefox 的) 瀏覽器的擴充套件 mailvelop, 它採用 OpenPGP (當然也跟其他 PGP/GPG 軟體相容) 並且本身也是開放原始碼 ( github), 完全符合我的上課需求。

雖說這是麻瓜版的好用軟體, 還是請先粗略理解 非對稱式加密/解密 的觀念, 這樣才能看懂術語並且理解每個操作步驟的意義。 本文適合至兩三人同時操作, 以便測試互相寄信。 建議在你私人的電腦操作。 如果是在公共電腦實驗, 那麼必須知道你所產生的這組金鑰只適合實驗用, 因為別人可能有機會取得它, 進一步冒用你的身份。

已經從別處產生 pgp 金鑰 者, 可以直接跳到第三節, 從匯入金鑰開始做起。

[2021/3 補充] 2018/5 時, 資安專家提出破解加密 email 的方式, 並把它稱為 efail。 加密演算法本身並沒有問題, 可能會有問題的是呼叫加密演算法的 email 客戶端軟體。 還好 mailvelope 不受影響

一、 產生金鑰

安裝好之後, 在網址/工具列上會出現 mailvelope 的按鈕。 點它, 再點選 「選項」。 在 「密鑰管理」 頁籤底下, 有一個 「產生密鑰」 的功能。 填入你的中英文姓名 (看你希望世界如何稱呼你; 加上常用的公開暱稱也可)、 公開的電子郵件、 創造一串很強但又不必寫下即可記住的密碼 (當然不要只有三個字母)。 至於要不要把公鑰上傳到 mailvelope 伺服器? 對我來說, 我很樂意收到陌生人寄來的加密信件, 所以當然希望上傳讓大家找得到我的公鑰囉。 但如果你是在公用電腦 (例如電腦教室裡) 實驗, 那麼建議不要勾選, 以免別人真的誤拿這把 (不安全的) 金鑰寄信給你。 按下 「產生」 之後等一陣子, 你的金鑰就產生好囉!

進入 mailvelope 選單 準備產生金鑰 成功產生金鑰

如果你先前已經用 gnupg 產生自己的金鑰, 那麼可以在命令列上用 gpg --export -ao friends.txt 匯出所有朋友的公鑰, 裡面就會包含自己的公鑰, 再用 gpg --export-secret-keys -ao my-private-key.txt 自己的名字或信箱 匯出自己的私鑰, 最後再用「匯入密鑰」 功能, 把兩個檔案匯入 mailvelope。

二、 備份金鑰

如果是在私人電腦上很認真地產生了一對金鑰, 那麼一定要把這對金鑰備份起來。 公鑰的話, 除了上傳到 mailvelope 的伺服器之外, 還可以上傳 (submit) 到 ubuntumailvelopeMIT、 等等或是其他任何的 PGP Public Key Server 去。 至於私鑰, 當然不要放到任何伺服器上, 而是你自己要保管在很私密、 別人無法偷窺的地方。

講了半天, 公鑰跟私鑰到底在哪裡呢? 在 「密鑰管理」 分頁底下點 「顯示密鑰」, 會出現你所認得的所有金鑰清單。 因為你才剛開始用, 所以只有一對你剛剛產生的金鑰; 像我的清單裡則有一對舊的金鑰、 一對新的金鑰, 還有很多朋友的公鑰。 注意後者左邊的圖示只有一枝鑰匙 (公鑰)。

點選你的金鑰, 在 「匯出」 分頁底下點 「私密」, 顯示一大片亂碼, 這就是你的私鑰。 按 「儲存」, 並且把這個檔案收好。 用剪貼的也可以。 上下多出空白列沒關係。 同樣地, 若點 「公共」, 則會看到公鑰, 可以把它的內容直接貼到 MIT 的 submit 頁面去, 裡面已包含你的姓名及 e-mail 等等資訊。

管理金鑰 匯出私鑰

三、 跟朋友交換公鑰、 寄加密信件

把你的公鑰分享給朋友, 讓他可以寄信給你。 你自己拿到朋友的公鑰之後, 在 「密鑰管理」 分頁下的 「匯入密鑰」 裡, 可以從檔案或用剪貼的方式把朋友的公鑰加進你的金鑰清單。 另外, 已從別處產生金鑰的讀者, 也可以用 「匯入密鑰」 功能把自己原本就有的公鑰跟私鑰匯進來。

然後在 webmail 裡面撰寫新郵件, 會看到畫面上多了一個圖示。 如果不去理它, 直接開始打字, 那就是未加密的普通郵件。 如果點它, 而且收件人的 e-mail 呈現綠色, 那就表示 mailvelope 在你的金鑰清單裡找到他的 e-mail, 你可以開始打密函。 打完之後按 「加密」, mailvelope 的視窗消失, webmail 的原始視窗變成一堆亂碼, 就可以按 「寄出」 了。

寄信: 原始畫面 寄信: 加密前的明文 寄信: 加密後變成亂碼

要注意的是: 寄給別人的信, 一旦加密, 就再也回不來了! 因為 mailvelope 不會幫你備份原稿, 而你又沒有他的私鑰跟密碼。 所以 (1) 建議先在別的地方打草稿, 寫完再貼過來; 寄出後再把草稿刪掉。 萬一在 「加密」 之後、 「寄出」 之前反悔, 才有機會把草稿叫出來修改。 (2) 寄加密信件時, 同時副本一份給自己 -- 這樣你會同時收到一封亂碼, 但你有私鑰跟密碼可以解讀。 這封副本取代 「寄件備份」 的角色。 (因為原來的寄件備份根本是一堆沒用的亂碼。) mailvelope 預設本來就會幫你做這件事; 若不喜歡, 可從寄信畫面左下方的 「選項」 把它取消掉。

另外, 加了密的信件, google (或其他任何 webmail 服務也一樣) 看不懂, 所以沒辦法幫你搜尋。 長久下來, 想要從舊信裡搜尋資料, 會變成一件很麻煩的事。

在 mailvelope key server 上用 e-mail 搜尋收件人的公鑰 如果夠多臺灣人使用 GPG 加密 e-mail 並註冊其公鑰, 未來也可以到 MIT PGP Public Key ServerMailvelope Key Server 去, 用 e-mail 查詢收件人的公鑰。 (可惜的是, 目前沒辦法用中文查。) 事實上如果你使用 mailvelope 寄信, 而且對方已在 mailvelope key server 認證過 (下詳), 那麼不必搜尋, 直接在 webmail 裡打他的 e-mail, mailvelope 自動就會幫你找到他的公鑰。

四、 收信

收到別人寄加密信件給你時, 在沒有安裝 mailvelope 的電腦上, 看到的是一堆亂碼。 另一方面, 若你的瀏覽器已安裝 mailvelope, 那麼它會問你密碼 (就是先前產生金鑰匙所設定的密碼), 然後用你的密碼跟金鑰把它解成明文。

五、 認證

事實上如果剛剛你同意將金鑰上傳至 mailvelope key server, 那麼後來應該有收到一封來自那裡的加密信件。 當你將它解密, 就會看到一個網址, 點下去就認證成功了。 看一下網址列, (藏在加密信件裡的) 這個網址裡面有一小串亂碼, 用過一次就沒用了。 mailvelope key server 用它來確認你真的擁有 「剛剛所註冊的公鑰的另一半私鑰」。 但是頁面上的連結連到你的公鑰網址, 這個網址不論你有沒有通過認證, 都是固定存在而且公開的。

收到來自 mailvelope key server 的認證詢問信 解密 完成認證

六、 數位簽章

[2018/4/25]「數位簽章」 不是用筆在紙本上簽名, 然後掃描寄圖檔哦! 真正的數位簽章, 是用寄件人自己的私鑰處理信件內容、 產生一堆看似亂碼的東西, 然後收件人可以拿寄件人的公鑰來核對, 確認信件真的來自寄件人 (因為只有寄件人的私鑰能跟寄件人的公鑰配對)。 詳見 白話 「非對稱式加密/解密」

在你寄出的信件上簽名 簽章時需要自己的私鑰; 至於對方有沒有他自己的 pgp 金鑰都無所謂。 附圖是寄給沒有 pgp 金鑰的收件人 (臺北市政府) 時, 加上數位簽章的操作步驟:

  1. 填寫收件人 e-mail 。
  2. 點一下 mailvelope 的 icon。 Mailvelope 會抱怨沒有對方的公鑰, 信件無法加密。
  3. 開始寫信。
  4. 點一下左下角的 「選項」
  5. 勾選 「訊息以密鑰簽署
  6. 點右下方的 「只進行簽章」
  7. mailvelope 會詢問密碼。 敲完後即完成簽署。

在你的信件內文前面會多出一段 「BEGIN PGP SIGNED MESSAGE」; 在內文之後會多出一段看起來像是亂碼的東西, 以 「BEGIN PGP SIGNATURE」 起始、 以 「END PGP SIGNATURE」 終止。 收件人那頭, 如果他也有安裝 mailvelope, 而且如果他有你的公鑰, 那麼他的 mailvelope 就能夠幫他驗證這封信確實來自你。 如果你寄出之前, 手動更改 signature 當中任何一個 byte, 驗證就會失敗。

如果希望寄出去的每一封信件都加上數位簽章, 在 mailvelope 的 「選項」 底下的 「一般」 裡面可以這樣設定。

(這封信只是範例,我沒寄出啦~~ 我的戶籍又不在臺北市, 哈哈~)

七、 更多教學文

  1. 正體中文翻譯大大 jxtsai 所寫的 使用介紹
  2. 趨勢科技的 如何設定電子郵件加密?
  3. 中國禁聞網的 圖文使用說明
  4. 簡體字 详细纯小白向教程
  5. 翻墙问答: 如何替Gmail加密

3 則留言:

  1. 洪老師您好!

    很棒的文章!

    「資訊人權貴」URL 有問題, error message 如下:
    [Fiddler] DNS Lookup for "people.ofset.org" failed. System.Net.Sockets.SocketException 無法識別這台主機。

    回覆刪除
    回覆
    1. 謝謝提醒! 是哪一篇呢? 我這篇有解釋: https://ckhung0.blogspot.tw/2016/10/ofset.html 沒辦法批次修正網址,只能想到哪一篇才修正哪一篇囉。

      刪除
  2. 補上 「數位簽章」 一節

    回覆刪除

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。