OPSEC52 / 第 6 週 — 語言環境與時區指紋
你可以透過一個乾淨的 Tor 出口節點連線,卻仍被你的時鐘釘死在某個地區。時區、語言、日期順序和數字格式,是一種多數人從沒想過要遮蔽的地區指紋——而最糟的情況不是洩漏它,而是洩漏一個與你 IP 互相矛盾的版本。一個乾淨出口配上一個上海時鐘,比完全不用 VPN 還要吵。
威脅模型: 瀏覽器與作業系統的語言環境訊號(時區、語言、日期/數字格式、貨幣)無論你用什麼 IP 都能為你定位;檔案、提交紀錄和電子郵件中的時間戳記帶著你真實的 UTC 偏移量;你的網路位置與機器語言環境不一致,把你標記為刻意規避者;以及某些平台在不揭露的情況下,悄悄以你的時區作為指紋辨識或分群的依據。
上週我們把瀏覽器當成一台關聯引擎,並將它拆成多個設定檔。四種把分艙重新合併的機制之一就是指紋辨識——而它最安靜的輸入來源並不是 canvas 或字型,而是你的時鐘和語言設定。你花錢買了 VPN、開了 Tor、拿到另一個國家的乾淨出口——然後你的機器卻對每個載入的頁面愉快地宣告 Asia/Shanghai、zh-CN,以及 2026/07/01 的日期格式。網路說一套,語言環境說另一套。這個矛盾,就是訊號。
為什麼你的時鐘和語言是地區指紋
四種語言環境訊號,不需要任何 cookie 就能洩漏你的地區:
- 時區。
Intl.DateTimeFormat().resolvedOptions().timeZone會回傳你確切的 IANA 時區(Asia/Shanghai、Europe/Moscow),而new Date().getTimezoneOffset()給出原始偏移量。不需要權限提示,也不需要 IP。 - 語言。
navigator.language、完整的navigator.languages清單,以及每個請求都會送出的Accept-Language標頭,會把你偏好的語言環境排序——通常細到地區變體。 - 日期與數字格式。
2026-07-01對比01/07/2026對比2026/07/01、小數點用逗號還是點、24 小時制還是 12 小時制、每週第一天——每一項都在縮小範圍。 - 貨幣與單位。 預設貨幣、公制對比英制、紙張大小(
A4對比Letter)都悄悄編碼了你是在哪裡被設定的。
單獨看,這些都很弱。但一旦搭配一個與它們互相矛盾的網路位置,它們就變強了——因為此時你不只是「某個地區 X 的人」,而是「某個正在隱藏地區 Y 的人」,那是一個小得多、也有趣得多的集合。
大家都忘記的時間戳記
瀏覽器是顯而易見的暴露面。陰險的那個是你離線產生的一切,它們會把你真實的 UTC 偏移量壓進你之後交給陌生人的檔案裡:
- Git 提交。 每一筆提交都記錄了作者日期連同你的時區偏移量(
+0800)。一個匿名倉庫,400 筆提交都帶著一致的+0800,等於告訴了你作者在哪裡睡覺。 - 照片(EXIF)。 相機時間戳記、偏移量,通常還有 GPS。任何東西離開你機器前先清掉。
- Office 與 PDF 文件。 建立/修改時間和作者時區都嵌在檔案中繼資料裡。
- 電子郵件
Date:標頭。 你的郵件用戶端把你的偏移量寫進每一封訊息。 - 檔案修改時間,存在於任何你分享的封存檔(
.zip、.tar)中。 - 螢幕截圖——狀態列裡的時鐘、角落的日期格式。
你把身分、電子郵件和瀏覽器都分艙了——然後在一個提交結尾洩漏了時區。
矛盾才是破綻
要修正的心智模型是:你的目標不是隱藏時區,而是讓它與你的掩護身分一致。 一個瀏覽器回報 UTC 的 Tor 使用者,看起來和其他所有 Tor 使用者一樣。一套「隱私」設定若透過瑞典連線卻回報 Asia/Shanghai 和 zh-CN,就製造了一個只為單一理由而存在的矛盾。一致性勝過隱藏。
這並非假設:時區作為鎖定依據
如果你想要平台確實會拿這點做文章的證據,它現在就正在出貨。目前的 Claude Code CLI(claude.exe,v2.1.159)中包含——可在已安裝的二進位檔中驗證——一段小程式:當工作階段透過第三方端點連線時(設定了 ANTHROPIC_BASE_URL)便會執行。它讀取你的系統時區,若為 Asia/Shanghai 或 Asia/Urumqi 就設定一個內部 cnTZ 旗標,並將你的代理主機名比對一份經過混淆(XOR + base64)的清單——內含中國企業網域與已知的 Claude 轉售鏡像服務——接著把這些位元以隱寫術方式編碼進注入系統提示的 Today's date is … 那一行的撇號字元裡,在四個視覺上相同的字形('、'、ʼ、ʹ)之間做選擇。對中國時區的工作階段,它還會把日期從 2026-07-01 改寫成 2026/07/01。
往好處想它的動機——那些轉售網域顯示這比較像是針對未經授權的 Claude 代理的濫用偵測,而非對一般使用者的監控。但對我們而言那不重要。機制本身就是教訓:你的時區就是那個觸發器。 一個多數人從不遮蔽、毫不起眼的設定,就足以在你毫無察覺、且無任何揭露的情況下把你分群。這正是本週的完整論點,由一個正在出貨的產品親身示範。
修正方法
- 把作業系統時鐘設為 UTC,用在做匿名工作的機器上,並讓瀏覽器繼承它。Tor Browser 本來就回報
UTC;別把它改回去。 - 使用標準化語言環境的瀏覽器。 Tor Browser 和 Mullvad Browser 會把
navigator.language正規化為en-US並偽裝時區,讓成千上萬使用者看起來一模一樣。別用設定回你真實語言環境的方式去「修正」它。 - 讓網路與語言環境一致。 若你的掩護是瑞典出口,你的時區和語言就不該大喊上海。要嘛匹配掩護,要嘛完全中性化(
UTC/en-US)。 - 在提交前先修好 git。
git config user.email你已經知道;時間也要中性化:用TZ=UTC git commit提交,或設定git config --global掛鉤來正規化作者/提交者日期。用git log --format='%ai'檢查現有倉庫。 - 分享前清掉中繼資料。
exiftool -all= file.jpg、文件用mat2,並在 UTC 時鐘下重新打包封存檔。 - 注意
Accept-Language標頭,別只顧 JS。它在每個請求都會送出;標準化瀏覽器會處理它,「加固過」的 Chrome 不會。
本週演練
- 在你的匿名層機器上把作業系統時鐘設為 UTC(或在指紋測試頁面驗證 Tor/Mullvad Browser 回報
UTC)。 - 稽核你匿名設定檔上的
navigator.language/Accept-Language——它應該顯示en-US,而非你的地區語言環境。 - 對任何匿名倉庫執行
git log --format='%ai',檢查你一直在廣播的時區偏移量;未來提交改用TZ=UTC。 - 把清除中繼資料(
exiftool、mat2)加進你的例行流程,用在任何離開你機器的檔案上——圖片、文件、封存檔皆然。 - 做一次矛盾檢查:你的 VPN/Tor 出口地區是否和你的時鐘、語言、日期格式互相矛盾?讓它們一致,或讓它們中性。
下週我們進入帳號與密碼這一層,密碼管理器會把這一切分艙變成你真正能長期執行的東西。在那之前:把時鐘設成 UTC,別再讓你的語言環境替你的位置旁白。
由 Cyber Satoshi 策展