重要的訊息該怎麼傳?用「端到端加密」

我現在每天都使用即時通訊軟體,我想你也一樣。當我們的日常活動從線下轉移到線上,我們在乎的東西也逐漸數位化。以往放在抽屜裡的信件和照片,現在都變成在傳訊軟體和雲端上。這個轉變導致我們必須重新考慮兩件事:一、怎麼保存資料,避免丟失?二、怎麼讓私密資料不讓外人看到?

第一個問題看似簡單,解答就是「備份」。不過,一旦考慮實作,備份卻極為複雜,很難有一個萬全的方法,以後有機會再另外寫一篇。

這裡想談的,是私密資料的保密方法。

何必加密?

有些人說:「我沒有不可告人的祕密。」確實,這世界上也許真有坦蕩蕩的大丈夫,晚上睡覺不關家門、在外講電話都開擴音、對任何人都坦誠以待;不過,在都市中我還真沒見過這樣的人。就算真的有吧,由於通訊是雙方的事,你自己雖然不在意,但跟你對話的人恐怕不至於那麼坦然。為了別人的薄臉皮,你好歹也得幫忙加個密。

更多時候,「沒有不可告人的祕密」的意思是「我的資料不重要」。

你真正在乎的東西,自然會想辦法保護,也會在受威脅的時候,為它上個鎖。人類從有私有財產開始就這麼做了。現在的情形是,還有許多人認為數位的東西不是東西,或認為其價值不高,所以不當一回事。這其實也沒什麼不妥,不重要的東西就隨便處理吧,丟掉就丟掉了,被人利用就拿去用吧。沒什麼可惜的。

再說,對隱私的保護,每個人各有標準,可重視也可看輕。只要你自己不覺得被侵犯,也就罷了。不過,如果因為不熟悉工具的使用方法,而導致重要的資料意外流出,那可就划不來。因此,如果你認為自己傳出的資料很重要,那麼加密就是自然而然的行為。

也有些人單純就是偏執。Facebook上照片的tag自然是一律得經過批准才能發佈;私人通訊更期望只有收訊方能看到,就算是提供服務的業者(像是Apple、Facebook、Line、WhatsApp等)、政府機關等不相干的人士,最好想看都看不到。

偏執如我,與其問「為什麼加密」不如問「為什麼不加密」。就算沒有什麼事情想要隱藏,我也不想讓別人知道自己說話有多無聊。

數位加密的困難

就算決定加密,但實際上要做到卻也沒那麼簡單。

在實體世界,私密信件可能會附加火漆(或稱封蠟),再由信任的人負責運送。在網路世界,負責運送的人往往是一家商業公司。不論哪一種方法,這都代表你必須暫時將私密信件交到第三者的手裡。

不過,網路與實體不同的是,實體信只有你手寫的那麼一封,而數位訊息卻可能同時存在好幾個地方。舉例來說,當你用手機送出一條訊息,你的手機也會顯示「已傳送的訊息」。這是第一處。

接下來,訊息會傳至服務方的伺服器作為中繼。伺服器就像是郵局一樣,幫你確認收訊人,再負責把訊息傳送至對方的手機中。這時,伺服器往往會保留一分訊息。這是第二處。

最後,收訊人的手機響起,收到訊息。這是第三處。

一個訊息至少存在三個地方,若是中繼站轉存的點不只一處,那就還有更多。這代表你不能只考慮自己和對方的手機夠不夠安全,因為只要伺服器被侵入,你的祕密訊息依然會被盜取。一切努力都成了枉然。

好在,有密碼學家幫我們提出了解決方案:端到端加密(end-to-end encryption)

端到端加密

所謂端到端加密,就是從我這端到你那端,只有我們兩端看得到。在傳輸的途中,訊息都是經過加密的。

簡單地說,我們可以把它理解為虛擬的「鎖頭」[1]與「鑰匙」[2]

首先,我用手機下載一個傳訊軟體,並採用它的端到端加密服務。這時候,手機中的軟體會幫我設計一個專屬於我的鎖頭,以及一把能夠開啟這個鎖頭的鑰匙。鎖頭的模板會上傳到雲端,供大家使用;而唯一一把鑰匙就會存在我的手機裡。

當你想要傳送一個私密訊息給我,你的手機就會自動到雲端上下載一個我的鎖頭。接著,你把寫好的私密訊息利用這個鎖頭上鎖,另外加上一個身分證明章,再經由服務商傳遞給我。

我收到之後,就可以使用唯一一把鑰匙開鎖,同時確認寄件人確實是你,再讀取其中的訊息。

反過來,當我要回訊息給你的時候,我也必須先上雲端去下載專屬於你的鎖頭,才能傳送加密訊息給你。

如此一來,這個訊息就算在傳輸的過程中被攔截,有心人士也難以解密;由於鑰匙只有一把,儘管訊息存在伺服器上,服務方也無法看懂訊息的內容。

實際上的加密技術自然更為複雜,例如最廣為使用的,是由Whitfield Diffie與Martin Hellman開發的D-H密鑰交換技術。不過,大致上可以這麼理解。

越來越多通訊軟體提供端到端加密的服務,像是iMessageWhatsApp、Line的Letter Sealing(取「火漆」的意思)、Telegram的Secret Chat等,任君選用。

端到端加密就萬無一失嗎?

不過,端到端加密也不是就沒有漏洞。

如果服務提供方想在伺服器搞鬼,也不是不可能做到。例如,當你要求A君的「鎖頭」時,伺服器可以提供給你另一個假的鎖頭,讓第三方可以窺看你的訊息內容,接著把你的訊息另外以正確的鎖頭加密,再傳遞給A君。神不知鬼不覺。

雖然這麼說,但服務提供方通常沒有刻意調換鎖頭的動機,尤其是以聲譽擔保、不斷強調用戶安全與隱私的公司。舉兩個近期的例子,為了用戶隱私,不惜對抗FBI的Apple;以及有膽懸賞30萬美元,請高手破解自己系統的Telegram。

保護隱私本就不是容易的事,在網路上難度又更高。技術能力不足的一般人不可能憑一己之力辦到。也就是說,雖然保護的是不願交給他人的資料,但終究我們還是得靠別人的技術達成。

既然我們終歸得相信誰,那麼選擇值得相信的人就變成重要的工作。有的公司會將產品的原始代碼公開,讓第三方可以判斷是否有缺陷。有的公司則以較高的道德標準自許。比起發聲強調用戶權益的公司,那些在爭端四起時保持沈默的公司就顯得可疑。

最重要的是,每個用戶最好主動去了解自己所使用的產品,盡量避免掉入陷阱。

竊賊就在你身邊

寫了許多傳訊時的加密方法,但對一般人來說,真正的安全漏洞通常出在自己的裝置上。手機不設密碼直接能打開,或是密碼設得太好猜(1111、1234、生日),這些才是會讓你的帳號被盜、資料流失的最大主因。

此外,不該忽略的是,真正的竊賊很可能就在你身邊。擔心子女的父母、愛吃醋的伴侶、一起聚餐的好友、手機店的老闆,以及你那張複雜難解的人際關係網中的毒蜘蛛們。

畢竟,比起不認識的陌生人,這些人更有偷看你手機訊息的動機吧。

不過,那就沒有我置喙的餘地了。


  1. 密碼學稱之為公鑰(public key) ↩︎

  2. 密碼學稱之為私鑰(private key) ↩︎