威脅模型
防得住什麼,防不住什麼
這頁把這本日記的安全界限全部攤開。信任應該建立在看得見的界限上,而不是形容詞上。
最後更新:2026-09-19
結構:三層怎麼運作
你的密語從不離開裝置。線上傳送的登入憑證是密語的雜湊(PH1),伺服器存放的是再雜湊一次的值(PH2)。兩層金鑰派生的演算法升級狀態(PH1/PH2 與包裹),見下方「KDF 升級狀態」一節;此節只講結構。日記內文則由另一把隨機產生的金鑰(noteKey)以 AES-GCM 加密,這把金鑰用你的密語包裹成加密包裹後上傳。解開內文需要 noteKey;解開 noteKey 需要你的密語。兩層各自獨立。
防得住的
資料庫外洩整個資料庫被拿走,能得到的只有密文、雜湊與加密包裹。沒有任何一欄是可讀的日記。內文的閱讀需要你的密語。登入用的雜湊值(PH2)在伺服器端再套一層 HMAC(金鑰=PH2_PEPPER,存放在資料庫之外的 secret 通道):所以「只洩資料庫」的離線猜測面被這層收口:猜你的密語必須同時拿到那把金鑰,而金鑰刻意與資料庫分開保存(備份已在離線面)。代價誠實列出:那把金鑰若遺失,整個平台將無法登入(已備份,遺失面在收案紀錄列出)。
被動的伺服器營運者以系統管理員身份瀏覽資料庫、讀取請求,看到的全部是密文。結構性不可讀。
自家好奇同上:我們的任何員工(現在是一個人)都無法從儲存層讀出內容。
AI 分析伺服器從頭到尾接觸不到明文,AI 分析、摘要、模型訓練在結構上不可能發生。
傳輸竊聽全程 TLS。即使傳輸被截聽,截到的也是密文。
身分傳喚沒有 email、沒有姓名、沒有付款資料在伺服器上。能證明「你是你」的,只有你腦中的密語;我們也無法替任何人證明。付款兌換後「此身份已付費」可能連結(詳見隱私政策「付費時的例外」)。目前付費已開放。
誠實的界限:惡意伺服器
誠實揭露
「伺服器結構上讀不了」這句話,只對被動的伺服器成立。如果營運者惡意,理論上可以送出竄改過的程式碼去摘取金鑰,或利用線上憑證嘗試猜測你的密語;密語夠強時,猜測在現實上不可行,但界限本身存在。緩解方式:加密層的程式碼公開(見〈公開驗證〉),任何人都可以用本頁的程式碼親手驗證行為;這能緩解、無法根除。需要對營運者完全零信任的寫作者,請使用純本地模式(零上傳)。
密語強度是唯一真閘門
登入憑證與金鑰包裹的升級狀態:見下方「KDF 升級狀態」。以下只講為什麼強度是唯一真閘門。
三腿至少過一:A. ≥12 字且 ≥3 類字元;B. ≥16 字且 ≥2 類;C. ≥24 字日常句(演算法評分過檢)。
另有弱密語拒絕清單(客戶端與伺服器雙側,兩代憑證形都擋)。一份 5 詞的隨機字串或一句 24 字的日常句子,對 Argon2id 派生的離線猜測已是實質的牆;「123456」式的密語則連閘門都過不了。
選用 PIN 時,金鑰包裹改由「密語與 PIN 合鑰」保護(新形為兩次 Argon2id 64 MiB 派生後合成;較早雙因子帳戶的 PIN 段是 PBKDF2 200 萬次迭代,下次登入後自動升級):就算密語外洩,沒有 PIN 依然解不開。綁定帳戶一律啟用「開啟時鎖定」:每次開啟需輸入 PIN,鎖定期間裝置上沒有未加密的解密金鑰(鎖定面的 PIN 封存刻意用 PBKDF2 60 萬次迭代,解鎖即時性優先);此設定只作用在單一裝置,綁定帳戶無法關閉(純本地模式不在此列)。舊帳戶在完成一次 PIN 設定(App 內強制引導)之前,裝置上仍短暫留有金鑰。
KDF 升級狀態
這頁提到的兩層金鑰派生,都走過一次演算法升級,兩條路徑的狀態集中在這裡說明。
登入憑證(PH1/PH2)自 2026-09-10 起由 Argon2id 派生(64 MiB、3 輪):較早帳戶在下次登入一次後自動完成升級,升級前仍是快速雜湊。
金鑰包裹包裹的金鑰派生走記憶體困難的 Argon2id(64 MiB、3 輪;2026-09 起的新綁定與自動升級),較早的包裹仍是 PBKDF2(60 萬次迭代),並在你下次登入成功後自動升級為 Argon2id,內文與金鑰零變動。
收斂動線2026-09-17 一次性全量過期 cutoff 前建立的登入憑證;其後,升級未完成的帳戶每次重新登入拿到的憑證最長 7 天(登入本身即觸發升級,升級後回復 180 天;此帽由新版 App 的雙欄登入承載,仍執行舊版單欄 App 的裝置,其請求形態伺服器無法分辨,憑證仍是 180 天,App 自動更新後即收緊)。「還停在快速雜湊」的登入狀態由「下次開啟 App」承載,不再依賴 180 天自然到期。
兩條升級都完成後,資料庫外洩的離線猜測面全程由 Argon2id 保護。過渡期升級未完成時的代價,由強制強度政策支付(見上節)。
防不住的
裝置被入侵解密後的內文、以及持有中的金鑰,會存在裝置記憶體與本機儲存。惡意軟體、共用裝置、被解鎖的手機,都不在模型能防的範圍。緩解:綁定帳戶一律啟用「開啟時鎖定」,金鑰以 PIN 加密封存,裝置儲存區不再留有可用的解密金鑰(舊帳戶在完成一次 PIN 設定之前除外);此閘防的是順手翻看,防不了惡意軟體。
伺服器送毒程式見上方「誠實的界限」。開源與可驗證是緩解,不是根除。離線支援由一個與頁面同源的小型 Service Worker 提供:它只快取程式本體(不含任何筆記與密語),快取的程式碼與頁面腳本同源同權,不是新增的攻擊面;原始碼可全文審讀,瀏覽器每次啟動會自動比對並更新,中毒版本會在下一次上線後自動被取代。
弱密語強度政策擋掉常見密語,但擋不掉「強制規則剛好過、實際卻被猜中」的極端組合。密語的強度最終由你決定。
密語與復原套件同失密語遺失且復原套件遺失時,設計上無法復原,也沒有客服重設。套件請抄在紙上離線保存。
未綁定裝置損壞純本地模式下,資料只存在裝置上;裝置遺失 = 字消失。這是零上傳的代價,使用時會明確告知。
2026-10-19 前建立分享的分享金鑰範圍此修復上線前建立的分享,包裹裡是帳戶主鑰:持有連結與分享密語的人可讀該主鑰加密的全部日記與附件,含該日期之後新寫者(主鑰永不輪換);在其取得對應密文的前提下,撤銷分享無法收回那把鑰。此修復上線後(約 2026-10-19,部署前已開啟的分頁需重新載入才拿到新碼),每篇分享改用一次性分享金鑰,只覆蓋該篇的快照。
剪貼簿與截圖復原套件顯示一次之後,剪貼簿同步、雲端截圖備份都是外洩面。紙本是最穩的容器。
我們刻意不做的
沒有後門、沒有「合法請求解密」程序(技術上不存在)、沒有埋點統計、沒有第三方腳本、沒有廣告生態系的任何掛點。這些不是缺失,是設計。
親手驗證
以上每一句都可以被檢查:〈公開驗證〉頁讓你貼上自己的加密備份,在你的瀏覽器裡本地解開,驗證「這串東西只有你的密語能開」;過程發出的網路請求為零。程式碼與資料格式的說明同樣在該頁。