Inborn
ZH-HANT
取得 Inborn

如何證明一個 AI 應用程式什麼都沒送出

你不必讀一行程式碼,就能確認一個應用程式什麼都沒送出:用作業系統和你的網路本來就給你的工具,從外面看著它。飛航模式、Android 權限清單、iOS 的 App 隱私權報告、應用程式自己的位元組計數器,還有防火牆,合起來會顯示一個應用程式建立的每一條連線。它們無法告訴你的,是這些程式碼在你沒測到的情況下會做什麼。

檢查一:飛航模式

把每一個無線電關掉,然後照常使用應用程式。如果它照樣以同樣的速度回答,答案裡就沒有任何一部分來自伺服器。這是最快的測試,而且對聊天應用程式來說幾乎是決定性的:需要伺服器的應用程式,沒有伺服器就假裝不出全速回覆。它排除不掉的是:一個先離線運作、之後才上傳記錄的應用程式,所以後面還有四項檢查。

檢查二:Android 權限清單

除非應用程式在 manifest 裡宣告 android.permission.INTERNET,否則 Android 不會讓它開啟網路連線,而那份 manifest 已經烤進你安裝的安裝檔裡。打開 Play 商店頁面,接著「關於這個應用程式」,再到「應用程式權限」。如果沒有「完整的網路存取權」,這個應用程式根本連不上網路。那不是開發者的承諾,而是作業系統強制執行的限制,你也可以自己對已安裝的套件或 APK 確認:

adb shell dumpsys package com.inbornapp.mobile | grep INTERNET
aapt2 dump permissions inborn.apk

這是清單上最強的一項檢查,因為它是唯一證明「不存在」而不只是觀察「沒看到」的檢查。

檢查三:iOS 的 App 隱私權報告

「設定」、「隱私權與安全性」、「App 隱私權報告」。iOS 會記錄每個應用程式在過去七天內聯絡過的每一個網域,而且做記錄的是作業系統,不是應用程式。會和伺服器通訊的應用程式,不管承不承認,這裡都會有資料列。有一點值得知道:你自己啟動的模型下載是真實的連線,也會出現,所以應用程式在抓任何東西之前,都該先說出主機名稱。

檢查四:應用程式自己的計數器

有些應用程式會把作業系統以行程為單位的位元組計數器攤開給你看。這些數字來自系統,不是應用程式自己的帳本,所以應用程式沒辦法一邊送資料一邊回報零。送出位元組在整個安裝期間都維持在零,是很強的訊號。把它當成方便,而不是證明,因為把數字畫在畫面上的終究還是應用程式。

檢查五:防火牆

把應用程式放在 Android 的 NetGuard、macOS 的 Little Snitch 或 LuLu,或 Windows 防火牆後面,然後看什麼東西會來要權限。用了好幾天都沒有東西出現,是一般使用者最接近持續監控的做法。它也是這裡唯一在更新之後還能繼續有效的檢查。

這些全部都證明不了什麼

三件事。它證明不了某個建置來自某一份原始碼樹,那需要任何人都能逐位元重建的建置流程,而擁有這種流程的應用程式非常少。它證明不了程式碼做的事就是它看起來在做的事,那需要原始碼。它也證明不了有獨立第三方檢查過,那需要委託稽核。任何告訴你某個隱私宣稱已經「通過驗證」的人,都該說得出他指的是這三件裡的哪一件。用上面這些檢查去測其他裝置內 AI 應用程式的結果,整理在同一張表裡。

Inborn 對這三件事的立場是寫下來的,不是暗示的:原始碼公開給人閱讀與建置,但不得再散布;外界沒有人能從它逐位元重建我們的二進位檔;我們也沒有委託過稽核。真正成立的是檢查一到五的全部內容,而你今天下午就能把它們全部跑過一遍。完整清單,以及任何位元組何時會離開一個 Inborn 安裝的完整說明,都在證明頁

下一篇AI 為什麼應該在你的裝置上執行 · 如何挑選裝置內 AI 模型