貼給 AI 之前先遮蔽:Veil 如何做到「文字不離開瀏覽器」
資安與維運工作常見的一個情境:系統出了問題,你把一大段 log 複製下來,想請 AI 幫忙看。但那段 log 裡可能夾著主機名稱、IP、帳號、API 金鑰,甚至是客戶的個資。直接貼出去,等於把這些東西交給第三方。
Veil 就是為這個情境做的:把文字貼進來,敏感的值會立刻換成 [IP_1]、[HOST_3] 這樣的代號,你再把遮蔽後的版本貼給 AI。
同一個值,永遠是同一個代號
這是 Veil 跟「全部換成星號」的簡單遮蔽最大的差別。如果一個 IP 出現在 log 的五個地方,它每次都會變成同一個 [IP_1],所以 AI 仍然能看出「這五筆請求來自同一個來源」。保留關聯、隱藏身分,AI 才能真的幫你分析。
我也刻意不遮幾類東西:雜湊值(資安分析需要)、時間戳、版本號、Windows 系統路徑。遮太多會讓 log 失去分析價值,所以規則設計上也要避免誤判這些東西。
規則怎麼判斷
目前有 57 條種子規則,用正規表達式比對,一部分規則再搭配檢核碼驗證,降低誤判。你也可以建立私有字典,例如客戶名稱與人名,這些只有登入後才讀得到。另外,一個值被規則抓到之後,同一份文件裡其他地方出現同樣的值,也會一併遮成同一個代號。
最重要的設計:伺服器沒有任何接收文字的端點
我寫在專案規範裡的第一條原則是:使用者貼上的文字絕不離開瀏覽器。不可以新增任何接收文字、log 或遮蔽結果的 API,也不可以在前端用 fetch、sendBeacon 或圖片請求把它們送出去,連分析與錯誤回報都不行。
伺服器只做兩件事:提供規則,以及管理規則。遮蔽運算全部在瀏覽器裡完成,檔案也一樣。Veil 支援 Word、Excel、PowerPoint、有文字層的 PDF 與 Markdown,這些解析全部在瀏覽器內完成,不依賴第三方套件,也不會上傳。
「相信我」不夠,要讓你自己驗證
宣稱「不上傳」很容易,使用者沒有理由相信。所以我設計了三個可以自己檢查的方式:
- 打開網站,按 F12 切到 Network 分頁,貼上一段文字。你只會看到頁面載入時的規則請求,貼上之後不會有任何新請求。
- 回應標頭帶有
Content-Security-Policy: connect-src 'self',瀏覽器會自動擋掉任何送往其他網域的連線。 - 原始碼裡沒有任何接收文字的路由。
同樣的原則也延伸到第三方腳本:不引入任何 CDN、分析工具或外部字型,內容安全政策的 script-src 也維持 'self'。只要放進一個分析腳本,整個「不外傳」的承諾就不成立了。
這個工具的限制
它不是萬能的。正規表達式抓得到格式固定的東西(IP、金鑰、信用卡號),但抓不到「看起來像普通句子的機密」,例如一段描述客戶組織架構的文字。所以我把它定位成「降低風險的第一道防線」,貼出去之前,最後還是請你自己快速掃過一遍結果。
你可以直接到 Veil 載入範例文件試試,範例用的是完全虛構的資料。