BlindPost BlindPost ← 所有文章
English简体中文繁體中文

你的帳號怎麼換手機 —— 不經過我們的伺服器

你買了一台新手機。你想把 messaging app 搬過去,帶上聊天紀錄、聯絡人、群組,所有東西

如果你用 WhatsApp:在新手機上裝好 → 輸手機號 → 收簡訊 → app 從 Meta 的伺服器把你的帳號歷史(以及越來越多的端到端加密訊息)拉下來。你的資料在遷移過程中繞了一遍第三方 —— 傳輸是加密的,但 metadata(什麼時候上傳、多大、是哪個帳號)暴露,而那個加密 blob 在他們的雲上停留你完成設定所需要的整段時間

如果你用 Signal:體驗更友好一些 —— 掃 QR code 綁定新手機,新裝置透過 Signal 的中繼跟舊裝置認證。舊訊息預設不遷移;想要的話走另一個獨立的備份-還原流程,用一組單獨生成的口令。

BlindPost 跟兩者都不一樣。你的新手機和舊手機直接透過本機 Wi-Fi 連線,建立一條封死的端到端加密通道,它們之間互傳你的帳號材料我們的伺服器全程看不到遷移這件事發生你的身分、金鑰、聊天歷史,沒有任何一位元組經過我們的基礎設施

下面講講這是怎麼做到的。

資料走的那條路

  1. 同一個網路。兩台手機要在同一區域網路 —— 家裡 Wi-Fi、手機熱點,任何能讓兩台裝置直接互通的地方都行。(不能跨網際網路遷移。遷移設計上就是「手對手」操作:兩台手機你都得在場。)
  2. QR 握手。新手機顯示一個 QR code,裡面是一次性的握手資料。舊手機掃一下。兩台裝置用剛剛交換的內容,在它們之間臨時建立一條封死的端到端加密通道 —— 這次遷移專用的金鑰,跟你的帳號金鑰獨立,用一次就丟
  3. 預檢 (preflight check)。帳號材料開始轉移之前,兩台用戶端做一系列短的驗證 —— 確認它們確實能看到對方、確認沒有第三方插進來、確認新裝置狀態準備好接收。任何一步看起來不對,遷移在資料動之前就中止
  4. 封閉通道傳輸。你的身分金鑰、當前和歷史 prekey、你所在每一個群組的群金鑰、本機聊天歷史,全部在這條點對點通道裡從舊手機流向新手機。用剛才交換的遷移金鑰端到端加密。除了區域網這一段,所有東西都不上公網
  5. 校驗+收尾。新手機校驗「收到的」跟「應該收到的」一致,把自己標記為帳號的當前活躍裝置。舊手機問你要不要清空自己(或者保留為副裝置 —— 你定)。

整個流程幾秒到幾分鐘,看你帳號有多大(純帳號資訊幾秒,帶幾年訊息歷史和媒體附件可能一兩分鐘)。

我們的伺服器在這個過程中看到什麼

幾乎什麼都看不到

QR code 內容我們看不到(只在兩台手機之間短暫存在)。兩台裝置之間的封閉通道我們看不到(是區域網 TCP 連線,根本沒到我們這邊)。傳了什麼我們看不到(全部走那條本機通道,不上我們這兒)。我們甚至看不到「有沒有發生過遷移」 —— 新裝置的下一次連線看起來跟「舊裝置做了一次軟體升級」完全一樣,沒法區分

跟「雲備份」模式對照:WhatsApp 那邊,即便開了端到端加密備份,Meta 的伺服器還是持有你聊天歷史的一個加密 blob。他們知道這個 blob 多大、什麼時候上傳、你有這麼個東西。blob 是只能用你的金鑰解的,但**「它的存在和它的 metadata」全暴露**。BlindPost 這邊,這種 blob 在我們這邊不存在。位元組是在你掌控的兩台裝置之間直接走的。

代價

兩個真實的限制:

我們聽過這個請求 —— 「你們能不能加一個可選的、opt-in 的加密雲備份?」 —— 我們持續婉拒可選功能往往會因為細小的 UX 引導慢慢變成預設且一旦「雲備份」這個東西存在,伺服器端就必須有支撐它的資料結構那一刻,整套「架構式隱私」的故事就塌成了「承諾式隱私」(見另一篇)。我們寧可讓遷移變成一次手對手、你有意識地做一次、自己定時的操作。

你得到的

一次你親眼能看到發生的遷移 —— 兩台手機擺在你面前、兩塊螢幕都顯示進度、它們在資料動之前先驗證對方。沒有第三方看到這場操作;任何入侵也還原不出「那些從沒經過的東西」

我們在別的文章講過的整套隱私架構,如果背後掛著一個雲備份,那些努力會被一個側信道全部抵消「不經過伺服器的遷移」是讓整套架構保持誠實的那一塊

立即體驗 BlindPost