談電子郵件和即時通訊
作者:macs
即時通訊(IM)到底能不能取代電子郵件?這是個很有意思的問題,已經(jīng)討論了很長的時間,但是也沒有結(jié)果。在這篇文章中,我來談?wù)勎业目捶ā?/p>
電子郵件和IM的架構(gòu)
郵件通過SMTP協(xié)議傳到發(fā)送方的服務(wù)器,之后發(fā)送方服務(wù)器把郵件發(fā)送至接收方服務(wù)器,接收方從服務(wù)器上用IMAP協(xié)議取回郵件。
電子郵件是去中心化的,用戶可以選擇不同的服務(wù)器,而且不同服務(wù)器的用戶之間可以通信。這種協(xié)議被成為聯(lián)邦式(federated)協(xié)議。
一般人談IM的時候,認為IM是中心化的,典型的例子有QQ、微信、Telegram、WhatsApp等等,但是除了這些之外,還有去中心化的IM.
去中心化的IM可以分為3種。
一種是類似IRC、MatterMost這類自托管服務(wù),服務(wù)可以運行在不同的服務(wù)器上,用戶可以用一個服務(wù)器上的服務(wù),但是不同服務(wù)器間的用戶不能直接通信。這類服務(wù)相對中心化服務(wù)的優(yōu)點是數(shù)據(jù)和用戶信息可以存放在一個用戶選擇的服務(wù)器上,避免大企業(yè)或監(jiān)控部門窺探用戶隱私,適合企業(yè)使用。
一種是和郵件類似的聯(lián)邦式服務(wù),XMPP和Matrix都是聯(lián)邦式的IM協(xié)議,比較接近現(xiàn)代IM的特點。
還有一種是P2P的服務(wù),如Tox和GNU Ring.P2P的服務(wù)雖然也有服務(wù)器,但它們是只用于幫助用戶發(fā)現(xiàn)其他用戶。一旦用戶找到通信的另一方,通信數(shù)據(jù)直接在通信雙方之間傳送,不經(jīng)過服務(wù)器。
郵件列表和群聊
之前提到的用法都是一對一的通信,沒有提到群聊的問題。這里簡單地談?wù)勲娮余]件和IM的群聊的特點。
電子郵件的群聊最為靈活,用戶可以指定多個收件人,還可以指定Reply-to字段讓接收方回復(fù)到特定地址,指定CC和BCC字段設(shè)置抄送。特別的,BCC字段可以對接收方隱藏發(fā)送方的其他收件人,當(dāng)然,這個前提是服務(wù)器不泄漏相關(guān)信息。通過在郵件中指定多個收件人,可以實現(xiàn)郵件的群聊,而且這個群聊沒有中心服務(wù)器,和Matrix的聊天室是一樣的。
電子郵件實現(xiàn)群聊的另一方式是郵件列表,郵件列表有中心服務(wù)器。郵件列表的使用方式和論壇類似,郵件列表有一個地址,用戶把郵件發(fā)送到郵件列表的地址,之后訂閱了郵件列表的用戶會收到列表中的新郵件。在郵件列表中回復(fù)郵件,相當(dāng)于論壇里面的回帖操作。從架構(gòu)上看,郵件列表和XMPP的MUC比較相似,聊天室在一個中心服務(wù)器上,這個服務(wù)器負責(zé)了所有消息的轉(zhuǎn)發(fā)。
而IM群聊的架構(gòu)基本上就分為以上兩類。聯(lián)邦式IM的聊天室——Matrix聊天室和XMPP MUC,在上文已經(jīng)提及。中心化IM的聊天室顯然也在中心服務(wù)器上,而P2P的IM協(xié)議的群聊則是完全地去中心化。
消息存儲
電子郵件的協(xié)議讓郵件服務(wù)器存儲所有的消息,除非用戶刪除或數(shù)據(jù)量超過了限制,這確保了用戶可以隨時收到消息。
早期的IM并不存儲消息。從即時通信的使用場景看,大多數(shù)消息也不需要長期存儲。但是現(xiàn)代IM都有消息存儲的特性。
Matrix協(xié)議的設(shè)計是讓服務(wù)器長期存儲消息,讓用戶可以獲取甚至搜索歷史消息,在多設(shè)備的情形下可以讓所有設(shè)備都看到歷史記錄(甚至是已加密的歷史記錄)。而XMPP的消息存檔(Message Archive Management, MAM)可以讓服務(wù)器存放一定量的消息,但不是長期存儲,主要還是用于少量的離線消息和應(yīng)對網(wǎng)絡(luò)不穩(wěn)定的情況。
至于P2P的IM協(xié)議,由于無服務(wù)器,存儲消息比較困難,而且離線消息也不易實現(xiàn)。
端到端加密
由于用戶越來越重視隱私,端到端加密是現(xiàn)代IM重點宣傳的特性之一。
電子郵件的主要的端到端加密方式是OpenPGP,它已經(jīng)用了很多年,現(xiàn)在仍然流行。OpenPGP使用公鑰加密和對稱密碼確保數(shù)據(jù)的保密性,用數(shù)字簽名確保數(shù)據(jù)的完整性和發(fā)送方驗證,數(shù)字簽名具有不可否認性。
由于OpenPGP的公鑰加密中,每次加密的加密密鑰都是收件人的公鑰,一旦對應(yīng)的私鑰泄漏或被破解,則所有用該密鑰加密的消息都會被解密。因此,也有黑客做有前向安全(forward secrecy)的郵件加密方案。 opmsg 和短信應(yīng)用 silence 是具有前向安全的郵件或類似通信方式的加密方案。
即時通信的端到端加密經(jīng)過了幾代發(fā)展。最早的OTR使用密鑰交換實現(xiàn)前向安全和未來安全(future secrecy),同時OTR提出IM的端到端加密應(yīng)當(dāng)在保證完整性的同時做到可否認,因此使用基于對稱密碼的消息驗證碼(Message Authentication Code, MAC),而不是數(shù)字簽名,來實現(xiàn)完整性。而SCIMP使用基于散列迭代的方式產(chǎn)生加密密鑰實現(xiàn)前向安全。Open Whisper Systems 將兩種密鑰產(chǎn)生方式結(jié)合,創(chuàng)造了 Double Ratchet 算法?,F(xiàn)代的端到端加密算法大多基于 Double Ratchet 算法。而端到端加密的可否認性從OTR單純使用對稱密鑰,到Open Whisper Systems的3DH,再到OTRv4的DAKE,在不斷地改進。
電子郵件和IM的用戶接口
電子郵件的一般用法是,用戶填寫收件方地址、主題和內(nèi)容,然后發(fā)送。電子郵件的用法比IM要靈活很多:
- 電子郵件可以按主題分類管理。當(dāng)然了,IM也可以,但是需要根據(jù)不同主題創(chuàng)建多個聊天室。
- 如果是討論一個領(lǐng)域下的多個主題,那么郵件列表很方便,IM則無法應(yīng)對一個群體討論中不斷有不同的人發(fā)起新主題的情況。郵件列表的消息歸檔更是IM很難做到的。
- 電子郵件可以很方便地指定多個收件人進行群發(fā),可以選擇性地讓收件人看到這封郵件的一部分收件人。這點IM做不到,同時開多個私聊的話,每個接收方都只能看到發(fā)送方;群聊的話,所有人都能看到參與討論的所有人,并且回復(fù)消息也是對群里所有人,而不能只回復(fù)給部分人。
但是電子郵件的靈活性,也使得操作更為復(fù)雜,對于簡短的消息,IM的發(fā)送比電子郵件要快。
有的郵件客戶端,通過設(shè)計一個用戶界面,使得電子郵件擁有類似IM的操作方式,并且讓用戶不必為了有IM的體驗而申請一個IM的帳號。
其他
從使用習(xí)慣上來看,雖然電子郵件和IM都能發(fā)送各種長度的消息,但是短消息通常使用IM,長消息或者不需要得到立即回復(fù)的消息通常使用郵件,并且郵件的寫法比較正式。
大多數(shù)即時通訊服務(wù)有聯(lián)系人/好友系統(tǒng),通過認證才能發(fā)送消息,這在一定程度上避免了垃圾郵件的問題。
使用建議
由于電子郵件的靈活性,我認為IM還不能取代電子郵件。同時,由于目前電子郵件服務(wù)的普遍部署,用戶通常使用中心化的IM服務(wù),在正式的工作中,用電子郵件也更合適。而IM的操作更加簡潔,它很適合簡短的交流,它可以作為電子郵件的一個很好的補充。
對于IM服務(wù)的選擇,我選擇聯(lián)邦式的XMPP和Matrix,它們都是開放協(xié)議,客戶端和服務(wù)器都有自由軟件實現(xiàn)。在公共聊天中,P2P的協(xié)議隱私性最好,但是沒有消息存儲,實用性不太好,可以作為一種聯(lián)系方式的補充。中心化服務(wù)中,Telegram有自由軟件客戶端,可以使用,但是有被封鎖和服務(wù)被強制關(guān)停的風(fēng)險。沒有自由軟件客戶端的IM不要使用。
端到端加密功能在現(xiàn)代的通信中越來越重要,無論是使用郵件還是任何一種IM,如果可能的話,在非公開聊天中盡量啟用端到端加密。即使不能及時驗證密鑰和用戶身份的對應(yīng)關(guān)系,使用端到端加密也能防止被動監(jiān)聽。