備隱私優(yōu)先自動(dòng)化工具實(shí)踐)
1. 項(xiàng)目緣起當(dāng)“無(wú)處不在的伙伴”從概念走向現(xiàn)實(shí)最近在折騰一個(gè)挺有意思的小項(xiàng)目我給它起了個(gè)名字叫“Zaboo”。這個(gè)名字聽(tīng)起來(lái)有點(diǎn)怪對(duì)吧其實(shí)它源于一個(gè)很簡(jiǎn)單的想法我們每天在不同設(shè)備、不同場(chǎng)景下切換處理信息、完成任務(wù)但數(shù)據(jù)和體驗(yàn)總是被割裂。手機(jī)上的聊天記錄電腦上找不到客廳電視上看的視頻回到臥室想接著看又得重新搜索進(jìn)度。我們總在說(shuō)“無(wú)縫體驗(yàn)”但現(xiàn)實(shí)往往是“處處有縫”。Zaboo的初衷就是想成為那個(gè)“無(wú)處不在的伙伴”。它不是另一個(gè)獨(dú)立的App也不是一個(gè)龐大的云平臺(tái)而是一個(gè)輕量級(jí)的、能嵌入到你現(xiàn)有數(shù)字生活各個(gè)角落的“智能副手”。想象一下你在電腦上寫(xiě)文檔時(shí)可以隨口問(wèn)它某個(gè)數(shù)據(jù)它立刻從你手機(jī)剛瀏覽過(guò)的網(wǎng)頁(yè)里找到答案并粘貼過(guò)來(lái)或者你在通勤路上用手機(jī)聽(tīng)播客回到家對(duì)智能音箱說(shuō)“接著放”客廳的音響就能無(wú)縫接上。Zaboo要做的就是消除這些設(shè)備與場(chǎng)景之間的“縫”讓信息和服務(wù)跟著“你”走而不是被禁錮在某個(gè)硬件或應(yīng)用里。這個(gè)想法聽(tīng)起來(lái)有點(diǎn)宏大甚至像某些科技巨頭的生態(tài)愿景。但我的出發(fā)點(diǎn)很務(wù)實(shí)不做底層操作系統(tǒng)不搞封閉生態(tài)而是利用現(xiàn)有設(shè)備的開(kāi)放接口和協(xié)議做一個(gè)“連接器”和“協(xié)調(diào)者”。它的核心價(jià)值在于“輕”和“巧”——輕到幾乎無(wú)感巧在能理解你的上下文并做出恰當(dāng)反應(yīng)。接下來(lái)我就詳細(xì)拆解一下我是如何一步步把“Zaboo”這個(gè)想法落地的包括技術(shù)選型的糾結(jié)、架構(gòu)設(shè)計(jì)的核心思路、開(kāi)發(fā)中踩過(guò)的坑以及它最終能幫你解決哪些具體的麻煩。2. 核心定位Zaboo不是什么以及它究竟是什么在動(dòng)手之前明確邊界比盲目堆砌功能更重要。市面上有太多“智能助手”從Siri、Google Assistant到各家手機(jī)廠商的自帶工具它們功能強(qiáng)大但也往往伴隨著隱私擔(dān)憂(yōu)、生態(tài)壁壘和“為了智能而智能”的臃腫感。Zaboo必須走一條不同的路。2.1 與主流智能助手的本質(zhì)區(qū)別首先Zaboo不追求“全知全能”。它不是一個(gè)需要你喚醒、并用自然語(yǔ)言進(jìn)行復(fù)雜對(duì)話的通用AI。它的交互是情境式的、被動(dòng)的或者說(shuō)是“響應(yīng)式”的。比如它不會(huì)主動(dòng)問(wèn)你“今天天氣怎么樣”但當(dāng)你正在電腦前規(guī)劃周末徒步并打開(kāi)了地圖軟件時(shí)Zaboo可能會(huì)在你屏幕一角安靜地顯示徒步路線的天氣預(yù)警因?yàn)檫@個(gè)信息與你當(dāng)前的“上下文”活動(dòng)規(guī)劃徒步應(yīng)用地圖軟件高度相關(guān)。它的智能體現(xiàn)在對(duì)上下文的感知和信息的精準(zhǔn)投遞而非復(fù)雜的對(duì)話理解。其次Zaboo堅(jiān)持“數(shù)據(jù)不離境”原則。所有關(guān)于你設(shè)備狀態(tài)、應(yīng)用使用記錄、臨時(shí)剪貼板內(nèi)容等上下文數(shù)據(jù)只在你的設(shè)備之間通過(guò)端對(duì)端加密的方式同步絕不經(jīng)過(guò)中央服務(wù)器進(jìn)行意圖分析或畫(huà)像構(gòu)建。它的“大腦”是分布式的存在于你信任的設(shè)備群組中。這雖然增加了同步邏輯的復(fù)雜度但換來(lái)了絕對(duì)的隱私掌控感這也是它能成為“伙伴”而非“監(jiān)視者”的信任基礎(chǔ)。2.2 Zaboo的核心能力模型那么Zaboo具體能做什么我將其核心能力歸納為三點(diǎn)跨設(shè)備上下文感知、輕量級(jí)自動(dòng)化流程、以及隱私優(yōu)先的數(shù)據(jù)同步??缭O(shè)備上下文感知這是Zaboo的“眼睛”和“耳朵”。它通過(guò)各設(shè)備客戶(hù)端以守護(hù)進(jìn)程或后臺(tái)服務(wù)形式運(yùn)行收集非敏感元數(shù)據(jù)例如“設(shè)備A正在運(yùn)行‘Visual Studio Code’編輯的文件路徑是XXX”“設(shè)備B的Chrome瀏覽器當(dāng)前激活標(biāo)簽頁(yè)的URL是YYY”“設(shè)備C手機(jī)的地理位置顯示正在通勤地鐵上”。這些元數(shù)據(jù)在設(shè)備間加密同步共同構(gòu)建起一個(gè)關(guān)于“你當(dāng)前在做什么”的動(dòng)態(tài)圖譜。輕量級(jí)自動(dòng)化流程這是Zaboo的“手”?;谏舷挛膱D譜你可以設(shè)置一些簡(jiǎn)單的“如果…就…”規(guī)則。例如“如果[設(shè)備A: VSCode活躍]且[設(shè)備B: Chrome活躍且URL包含‘stackoverflow.com’]則[在設(shè)備A的VSCode側(cè)邊欄顯示設(shè)備B的Stack Overflow頁(yè)面摘要]”。這些規(guī)則由用戶(hù)自定義邏輯簡(jiǎn)單清晰不涉及復(fù)雜的AI推理強(qiáng)調(diào)的是“剛好需要時(shí)剛好出現(xiàn)”。隱私優(yōu)先的數(shù)據(jù)同步這是Zaboo的“神經(jīng)網(wǎng)絡(luò)”。它使用像“WebRTC數(shù)據(jù)通道”這樣的點(diǎn)對(duì)點(diǎn)技術(shù)在設(shè)備間直接建立加密連接傳輸上下文元數(shù)據(jù)和極小的、用戶(hù)明確指令同步的數(shù)據(jù)如一條文本、一個(gè)鏈接。密鑰由用戶(hù)主設(shè)備生成并管理同步網(wǎng)絡(luò)可以是局域網(wǎng)也可以是互聯(lián)網(wǎng)打洞直連確保數(shù)據(jù)流不經(jīng)過(guò)任何中轉(zhuǎn)服務(wù)器。所以Zaboo的本質(zhì)是一個(gè)運(yùn)行在你個(gè)人設(shè)備網(wǎng)絡(luò)上的、去中心化的上下文感知與自動(dòng)化工具。它像一個(gè)數(shù)字世界里的“貼心副駕”知道你各個(gè)“座駕”設(shè)備的狀態(tài)并在你需要時(shí)默默幫你遞上合適的“工具”信息或服務(wù)。3. 技術(shù)架構(gòu)深潛如何實(shí)現(xiàn)“輕”而“韌”的跨設(shè)備同步實(shí)現(xiàn)上述愿景技術(shù)架構(gòu)是關(guān)鍵。目標(biāo)很明確低功耗、高響應(yīng)、跨平臺(tái)至少覆蓋Windows、macOS、iOS、Android、點(diǎn)對(duì)點(diǎn)加密同步。經(jīng)過(guò)多輪選型與原型驗(yàn)證我最終確定了以“Rust核心層 平臺(tái)原生UI層 Libp2p網(wǎng)絡(luò)層”為主體的混合架構(gòu)。3.1 為什么選擇Rust作為核心邏輯層跨平臺(tái)客戶(hù)端如果為每個(gè)平臺(tái)都用原生語(yǔ)言重寫(xiě)核心邏輯同步、加密、規(guī)則引擎那將是維護(hù)的噩夢(mèng)。需要一個(gè)能編譯到所有目標(biāo)平臺(tái)、且性能與資源占用俱佳的語(yǔ)言。Go和Rust是主要候選。Go的并發(fā)模型和開(kāi)發(fā)效率很誘人但其運(yùn)行時(shí)GC、更大的二進(jìn)制文件在移動(dòng)端尤其是iOS后臺(tái)常駐場(chǎng)景下可能成為“電量殺手”。Rust雖然學(xué)習(xí)曲線陡峭但零成本抽象、無(wú)運(yùn)行時(shí)和精細(xì)的內(nèi)存控制能確保核心守護(hù)進(jìn)程以極低的資源占用常駐內(nèi)存可控制在20MB以下在后臺(tái)安靜運(yùn)行。這對(duì)于一個(gè)需要7x24小時(shí)監(jiān)聽(tīng)上下文變化的服務(wù)來(lái)說(shuō)至關(guān)重要。我使用tokio異步運(yùn)行時(shí)來(lái)處理所有I/O和事件驅(qū)動(dòng)邏輯效率非常高。核心層我稱(chēng)之為zaboo-core用Rust編寫(xiě)它暴露出一套清晰的FFI外部函數(shù)接口給上層UI。它包含了上下文收集器通過(guò)平臺(tái)特定的API在Rust中通過(guò)cfg條件編譯實(shí)現(xiàn)獲取設(shè)備、應(yīng)用、網(wǎng)絡(luò)狀態(tài)。規(guī)則引擎一個(gè)輕量級(jí)的、基于AST抽象語(yǔ)法樹(shù)的規(guī)則解析與匹配器。用戶(hù)定義的規(guī)則被編譯成簡(jiǎn)單的字節(jié)碼引擎持續(xù)比對(duì)上下文流與規(guī)則條件觸發(fā)時(shí)執(zhí)行對(duì)應(yīng)動(dòng)作。加密與同步模塊集成libp2p負(fù)責(zé)設(shè)備發(fā)現(xiàn)、點(diǎn)對(duì)點(diǎn)連接建立、數(shù)據(jù)加密傳輸。這是整個(gè)系統(tǒng)最復(fù)雜的一部分。3.2 點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)同步的實(shí)戰(zhàn)Libp2p與NAT穿透讓設(shè)備在復(fù)雜的家庭網(wǎng)絡(luò)或移動(dòng)網(wǎng)絡(luò)下自動(dòng)發(fā)現(xiàn)并直連是最大挑戰(zhàn)之一。我選擇了Libp2p這個(gè)模塊化的P2P網(wǎng)絡(luò)棧而不是從頭實(shí)現(xiàn)。設(shè)備發(fā)現(xiàn)在局域網(wǎng)內(nèi)我們使用mDNS協(xié)議設(shè)備上線后廣播自己的存在其他Zaboo客戶(hù)端能自動(dòng)發(fā)現(xiàn)。對(duì)于廣域網(wǎng)我引入了一個(gè)極簡(jiǎn)的“ rendezvous server” rendezvous 服務(wù)器。這個(gè)服務(wù)器只負(fù)責(zé)交換設(shè)備的Peer ID和公網(wǎng)地址信息不傳輸任何用戶(hù)上下文或數(shù)據(jù)。設(shè)備啟動(dòng)時(shí)向這個(gè)服務(wù)器注冊(cè)自己的信息并獲取已信任設(shè)備列表的連接信息隨后便嘗試建立直接的P2P連接。服務(wù)器代碼開(kāi)源用戶(hù)可以自行部署徹底打消隱私顧慮。NAT穿透這是P2P的經(jīng)典難題。Libp2p內(nèi)置了基于libp2p-webrtc-star初期和更先進(jìn)的libp2p-circuit-relay中繼等穿透方案。在實(shí)際測(cè)試中大部分家庭路由器支持UPnP或PMP能成功打洞直連。對(duì)于對(duì)稱(chēng)型NAT等嚴(yán)格網(wǎng)絡(luò)環(huán)境我們會(huì)嘗試通過(guò)已成功直連的第三方設(shè)備進(jìn)行中繼。關(guān)鍵是要設(shè)置好超時(shí)和降級(jí)機(jī)制優(yōu)先直連失敗后嘗試中繼同時(shí)保證所有通信都是端到端加密的即使走中繼中繼節(jié)點(diǎn)也無(wú)法解密數(shù)據(jù)。數(shù)據(jù)同步協(xié)議定義了一套簡(jiǎn)單的基于Protobuf的二進(jìn)制協(xié)議。消息主要分兩類(lèi)1上下文廣播設(shè)備狀態(tài)變化時(shí)向所有已連接設(shè)備廣播加密的上下文更新頻率可調(diào)非實(shí)時(shí)2指令傳輸當(dāng)規(guī)則觸發(fā)需要跨設(shè)備執(zhí)行某個(gè)動(dòng)作如“發(fā)送文本到剪貼板”時(shí)發(fā)送一條端到端加密的指令消息。所有消息都帶有序列號(hào)和設(shè)備ID防止重放攻擊和確保順序。3.3 各平臺(tái)客戶(hù)端實(shí)現(xiàn)策略桌面端Windows/macOS/LinuxUI層使用各平臺(tái)原生框架如WinUI 3/SwiftUI/GTK調(diào)用zaboo-core的FFI。核心作為后臺(tái)服務(wù)Windows Service/LaunchDaemon/systemd安裝并運(yùn)行。UI主要負(fù)責(zé)規(guī)則配置、狀態(tài)查看和授權(quán)管理。移動(dòng)端iOS/Android這是挑戰(zhàn)最大的地方。iOS對(duì)后臺(tái)常駐進(jìn)程限制極嚴(yán)。解決方案是將zaboo-core編譯為iOS靜態(tài)庫(kù)嵌入主App。核心功能被封裝為多個(gè)Background App Refresh任務(wù)和PushKit用于網(wǎng)絡(luò)喚醒來(lái)驅(qū)動(dòng)。我們只在系統(tǒng)允許的短暫后臺(tái)時(shí)間內(nèi)執(zhí)行關(guān)鍵的同步和規(guī)則檢查。Android端相對(duì)寬松可以設(shè)置一個(gè)前臺(tái)服務(wù)來(lái)維持核心進(jìn)程運(yùn)行但同樣需要精細(xì)優(yōu)化功耗。這套架構(gòu)保證了核心邏輯的一致性與高性能同時(shí)尊重了各平臺(tái)的生態(tài)與限制。開(kāi)發(fā)過(guò)程中Rust的強(qiáng)類(lèi)型安全和libp2p的模塊化設(shè)計(jì)雖然初期增加了復(fù)雜度但在后期調(diào)試和跨平臺(tái)適配時(shí)避免了無(wú)數(shù)潛在的詭異Bug。4. 從零搭建一個(gè)Zaboo規(guī)則以“編碼時(shí)快速參考”為例光講架構(gòu)太抽象我們來(lái)看一個(gè)具體場(chǎng)景并手把手創(chuàng)建一個(gè)Zaboo規(guī)則。假設(shè)你是一名開(kāi)發(fā)者經(jīng)常遇到在電腦設(shè)備A上寫(xiě)代碼需要參考手機(jī)設(shè)備B上剛查過(guò)的文檔或Stack Overflow回答。4.1 場(chǎng)景分析與規(guī)則定義沒(méi)有Zaboo時(shí)你的流程可能是拿起手機(jī) - 找到瀏覽器 - 找到標(biāo)簽頁(yè) - 閱讀 - 試圖記住 - 放下手機(jī) - 回到電腦輸入。效率低下且容易打斷思路。Zaboo的目標(biāo)是當(dāng)你手機(jī)瀏覽器正在訪問(wèn)技術(shù)文檔或Stack Overflow時(shí)你的電腦IDE如VSCode能自動(dòng)在側(cè)邊欄或一個(gè)懸浮窗顯示該頁(yè)面的核心內(nèi)容摘要比如問(wèn)題描述和最高贊回答方便你快速瞟一眼。我們需要定義一條規(guī)則條件IF[設(shè)備B手機(jī): 瀏覽器應(yīng)用在前臺(tái)]且[當(dāng)前網(wǎng)頁(yè)URL包含 ‘stackoverflow.com/questions/’]。動(dòng)作THEN[獲取該網(wǎng)頁(yè)的標(biāo)題和首個(gè)回答的摘要]-[加密發(fā)送到設(shè)備A電腦]-[在設(shè)備A的VSCode界面旁以非侵入方式展示]。4.2 規(guī)則配置界面與底層實(shí)現(xiàn)在Zaboo的桌面端配置界面你可以通過(guò)一個(gè)簡(jiǎn)單的可視化編輯器來(lái)創(chuàng)建這條規(guī)則選擇觸發(fā)設(shè)備從你的設(shè)備列表里選擇“我的iPhone”。添加上下文條件選擇“應(yīng)用狀態(tài)” - “應(yīng)用等于 ‘Safari’ 或 ‘Chrome’”再添加“網(wǎng)頁(yè)URL” - “包含 ‘stackoverflow.com/questions/’”。選擇執(zhí)行設(shè)備選擇“我的MacBook”。定義執(zhí)行動(dòng)作選擇“顯示通知”或“注入側(cè)邊欄面板”需要對(duì)應(yīng)IDE插件支持。對(duì)于內(nèi)容選擇“獲取網(wǎng)頁(yè)信息”并勾選“標(biāo)題”和“首答摘要”。點(diǎn)擊保存后這條規(guī)則會(huì)被編譯成一份JSON配置同步到所有設(shè)備。zaboo-core中的規(guī)則引擎會(huì)加載它。4.3 核心動(dòng)作的拆解“獲取網(wǎng)頁(yè)摘要”這是技術(shù)關(guān)鍵點(diǎn)。我們無(wú)法、也不應(yīng)該在手機(jī)端運(yùn)行一個(gè)完整的瀏覽器引擎去解析頁(yè)面。我的實(shí)現(xiàn)方案是在手機(jī)端當(dāng)規(guī)則條件滿(mǎn)足zaboo-core會(huì)通過(guò)一個(gè)輕量級(jí)的、無(wú)頭headless的JavaScript執(zhí)行環(huán)境在iOS上使用JavaScriptCoreAndroid使用V8隔離環(huán)境向當(dāng)前瀏覽器標(biāo)簽頁(yè)注入一段腳本通過(guò)移動(dòng)端自動(dòng)化測(cè)試框架如ios-driver或Android UiAutomator的輔助功能接口需用戶(hù)授權(quán)。這段腳本極其簡(jiǎn)單只執(zhí)行document.title和document.querySelector(‘.js-post-body’).innerText針對(duì)Stack Overflow的DOM結(jié)構(gòu)來(lái)獲取文本內(nèi)容并進(jìn)行簡(jiǎn)單的截?cái)嗪颓謇砣缫瞥嘤嗫瞻追?。獲取到的純文本被立即加密通過(guò)之前建立的P2P通道發(fā)送到電腦端。電腦端的zaboo-core收到后解密數(shù)據(jù)并通過(guò)本地進(jìn)程間通信IPC通知VSCode插件。插件收到后在編輯器側(cè)邊欄創(chuàng)建一個(gè)臨時(shí)面板將摘要內(nèi)容渲染出來(lái)。整個(gè)過(guò)程中網(wǎng)頁(yè)內(nèi)容從未離開(kāi)過(guò)你的設(shè)備手機(jī)端獲取的只是你當(dāng)前屏幕上的公開(kāi)文本電腦端也只是展示。沒(méi)有數(shù)據(jù)上傳到任何第三方服務(wù)器進(jìn)行“摘要生成”。4.4 避坑指南移動(dòng)端網(wǎng)頁(yè)內(nèi)容獲取的權(quán)限與穩(wěn)定性這是開(kāi)發(fā)中踩坑最多的地方iOS的“圍墻花園”iOS對(duì)應(yīng)用間交互限制極嚴(yán)。直接讀取Safari或其他瀏覽器內(nèi)容幾乎不可能。我們最終依賴(lài)的是“輔助功能”權(quán)限。用戶(hù)需要在系統(tǒng)設(shè)置中為Zaboo開(kāi)啟輔助功能權(quán)限。這雖然增加了一步設(shè)置但它是蘋(píng)果官方允許的、用于無(wú)障礙場(chǎng)景的合法接口。通過(guò)輔助功能API我們可以獲取當(dāng)前前臺(tái)應(yīng)用的窗口信息如果識(shí)別出是瀏覽器再進(jìn)一步嘗試獲取其WebView的內(nèi)容。注意此功能必須明確告知用戶(hù)用途且用戶(hù)主動(dòng)開(kāi)啟絕對(duì)透明。Android的碎片化不同品牌手機(jī)對(duì)后臺(tái)應(yīng)用獲取前臺(tái)信息的限制不同。除了輔助功能還需要結(jié)合UsageStatsManager使用情況統(tǒng)計(jì)來(lái)更可靠地判斷前臺(tái)應(yīng)用。對(duì)于獲取網(wǎng)頁(yè)內(nèi)容同樣需要輔助功能權(quán)限。測(cè)試時(shí)需要覆蓋主流品牌機(jī)型確保規(guī)則觸發(fā)邏輯的穩(wěn)定性。性能與電量?jī)?yōu)化規(guī)則觸發(fā)不能過(guò)于頻繁。我們?cè)O(shè)置了防抖機(jī)制當(dāng)手機(jī)瀏覽器URL變化時(shí)不會(huì)立即觸發(fā)而是等待用戶(hù)停止操作例如滾動(dòng)停止2-3秒后才執(zhí)行內(nèi)容獲取和同步。這大大減少了不必要的處理節(jié)省了電量。通過(guò)這個(gè)具體的例子你可以看到Zaboo的規(guī)則不是魔法而是一系列精心設(shè)計(jì)的、尊重平臺(tái)規(guī)則和用戶(hù)隱私的自動(dòng)化步驟的串聯(lián)。5. 安全與隱私設(shè)計(jì)信任是“伙伴”關(guān)系的基石對(duì)于一個(gè)需要深度接觸設(shè)備上下文的應(yīng)用安全與隱私不是功能而是生命線。Zaboo的設(shè)計(jì)從頭到尾貫徹了“最小權(quán)限”和“端到端加密”原則。5.1 權(quán)限最小化與透明化Zaboo在各平臺(tái)申請(qǐng)的權(quán)限都是完成功能所必需的最低限度并且每個(gè)權(quán)限都有清晰的解釋本地網(wǎng)絡(luò)權(quán)限用于mDNS設(shè)備發(fā)現(xiàn)。輔助功能權(quán)限用于讀取瀏覽器內(nèi)容以實(shí)現(xiàn)規(guī)則移動(dòng)端。配置時(shí)會(huì)用最大字體重申“此權(quán)限僅用于讀取您指定的、當(dāng)前屏幕上的網(wǎng)頁(yè)文本以實(shí)現(xiàn)跨設(shè)備信息同步。我們不會(huì)記錄或上傳這些內(nèi)容?!蓖ㄖ獧?quán)限用于在規(guī)則觸發(fā)時(shí)顯示提示。后臺(tái)刷新/運(yùn)行權(quán)限用于維持P2P連接和規(guī)則監(jiān)聽(tīng)。所有權(quán)限都可以隨時(shí)在系統(tǒng)設(shè)置中關(guān)閉關(guān)閉后相關(guān)功能將無(wú)法使用應(yīng)用會(huì)給出友好提示。5.2 端到端加密的實(shí)現(xiàn)細(xì)節(jié)所有設(shè)備間同步的數(shù)據(jù)都使用libp2p內(nèi)置的noise協(xié)議進(jìn)行加密并在此基礎(chǔ)上應(yīng)用層還增加了一層使用ChaCha20-Poly1305算法的加密。密鑰管理采用“主設(shè)備”模式用戶(hù)首次在一個(gè)設(shè)備上安裝Zaboo并創(chuàng)建身份時(shí)會(huì)生成一對(duì)Ed25519長(zhǎng)周期身份密鑰和一組用于加密的對(duì)稱(chēng)密鑰。當(dāng)你要添加一個(gè)新設(shè)備如手機(jī)時(shí)需要在主設(shè)備如電腦上操作。主設(shè)備生成一個(gè)一次性的配對(duì)二維碼其中包含一個(gè)臨時(shí)的、加密的連接令牌。新設(shè)備掃描二維碼與主設(shè)備建立臨時(shí)安全通道交換各自的公鑰并協(xié)商出后續(xù)通信的長(zhǎng)期共享密鑰。這個(gè)配對(duì)過(guò)程完全在本地完成不經(jīng)過(guò)任何服務(wù)器。此后兩臺(tái)設(shè)備的所有通信都使用協(xié)商出的密鑰進(jìn)行端到端加密。即使我們的 rendezvous 服務(wù)器被攻破攻擊者也只能看到一些匿名的Peer ID和IP地址無(wú)法解密任何實(shí)際傳輸?shù)纳舷挛幕驍?shù)據(jù)內(nèi)容。5.3 數(shù)據(jù)生命周期與本地存儲(chǔ)所有上下文數(shù)據(jù)如“設(shè)備A運(yùn)行XX應(yīng)用”只在內(nèi)存中保留很短時(shí)間默認(rèn)5分鐘用于規(guī)則匹配。匹配完成后即被丟棄不會(huì)持久化到本地?cái)?shù)據(jù)庫(kù)。唯一的持久化數(shù)據(jù)是用戶(hù)配置的規(guī)則列表和設(shè)備信任關(guān)系。這些數(shù)據(jù)也使用設(shè)備本地生成的密鑰進(jìn)行加密后存儲(chǔ)。我們的服務(wù)器 rendezvous server設(shè)計(jì)為“無(wú)狀態(tài)”不存儲(chǔ)任何用戶(hù)數(shù)據(jù)每次重啟后所有連接信息清空。6. 實(shí)際應(yīng)用場(chǎng)景拓展不止于開(kāi)發(fā)雖然以開(kāi)發(fā)者場(chǎng)景為例但Zaboo的規(guī)則引擎是通用的可以創(chuàng)造出許多提升效率的用法閱讀接力在手機(jī)上看一篇長(zhǎng)文坐上地鐵打開(kāi)iPadZaboo自動(dòng)將文章鏈接和滾動(dòng)位置同步到iPad的瀏覽器打開(kāi)即續(xù)讀。臨時(shí)剪貼板增強(qiáng)在電腦上復(fù)制一段文字走到廚房的智能平板前可以直接粘貼。這不同于系統(tǒng)級(jí)云剪貼板Zaboo的同步更快局域網(wǎng)內(nèi)近乎實(shí)時(shí)且歷史記錄只在你設(shè)備間暫存不留存在云端。媒體播放接力在客廳用電視盒子看視頻暫停后回到臥室對(duì)手機(jī)說(shuō)“在手機(jī)上繼續(xù)播放”Zaboo識(shí)別上下文控制手機(jī)上的播放器APP從相同時(shí)間點(diǎn)開(kāi)始播放需要播放器APP支持API。專(zhuān)注模式聯(lián)動(dòng)當(dāng)電腦端開(kāi)啟“深度工作”模式時(shí)自動(dòng)同步到手機(jī)將手機(jī)設(shè)置為勿擾模式并過(guò)濾掉非重要通知。這些場(chǎng)景的實(shí)現(xiàn)都依賴(lài)于那個(gè)簡(jiǎn)單的“IF-THEN”規(guī)則引擎和強(qiáng)大的跨設(shè)備上下文感知能力。你可以根據(jù)自己的工作流組合出無(wú)數(shù)種自動(dòng)化可能。開(kāi)發(fā)Zaboo的過(guò)程是一個(gè)不斷在理想與現(xiàn)實(shí)、功能與隱私、便捷與功耗之間尋找平衡點(diǎn)的過(guò)程。它沒(méi)有用到多么高深莫測(cè)的AI技術(shù)更多的是對(duì)現(xiàn)有平臺(tái)接口的創(chuàng)造性組合和對(duì)P2P網(wǎng)絡(luò)的扎實(shí)應(yīng)用。它讓我深信真正的“智能”不一定是龐然大物也可以是這種精巧、透明、完全受控于用戶(hù)的小工具。如果你也厭倦了設(shè)備間的割裂感并且愿意為了更高的自主權(quán)和隱私控制權(quán)而接受一點(diǎn)點(diǎn)前期的配置復(fù)雜度那么自己動(dòng)手搭建或關(guān)注此類(lèi)工具會(huì)是一個(gè)非常值得投入的方向。未來(lái)的迭代我計(jì)劃探索更直觀的規(guī)則可視化編輯以及如何與更多的開(kāi)源工具和智能家居標(biāo)準(zhǔn)如Matter進(jìn)行集成讓這個(gè)“無(wú)處不在的伙伴”能連接更廣闊的數(shù)字世界。