跳轉到

加密暫存區(實驗)

這是開發用的實驗頁,留著量機制、試新東西。給讀者用的工具是我的準備清單,機制與限制的說明在什麼是 passkey。

一個用 passkey 解鎖的本機加密儲存。建立時產生一把資料金鑰,放進 passkey 的 user.id,之後在任何有這把 passkey 的裝置上驗證一次就能解開。不必記密語。

這一頁是實驗,內容暫時只有一個文字欄位。真正要放的是 checklist 那類讀者主動打開才看的東西。

它怎麼運作

資料金鑰是 32 個隨機位元組,那正好也是一把 age 私鑰的長度,所以直接拿來加密,輸出是標準 age 檔。金鑰放在 passkey 的 user.id 裡,每次驗證時原樣回傳,任何 provider、任何裝置都一樣。實驗頁量的就是這件事。

密文存在這台裝置的 IndexedDB。解鎖之後金鑰只留在記憶體,分頁關掉就沒了。

一把鑰匙服務兩件事

建立時同時要求 PRF 擴充。拿得到的話,這把鑰匙也能給本機檔案加密用,那邊選 passkey 模式時挑同一把就好。反過來也成立:在鑰匙頁建的鑰匙,到這裡按「用我已有的鑰匙開」就能直接用,不必再建第二把,密碼管理器裡只會有一筆。

PRF 拿不到不算失敗,暫存區走的是 user.id 那條,跟 PRF 無關。iPhone 配第三方密碼管理器就是這種情況,建出來的鑰匙只給暫存區用。

PRF 的秘密是建立當下由 authenticator 產生的,所以在哪裡建立決定了這把鑰匙有沒有那個能力,之後換到支援的裝置也補不回來。想要兩種能力都有,在電腦上建第一把(Bitwarden 的瀏覽器擴充、Windows Hello、Mac 都可以),或者在 iPhone 上選 iCloud 鑰匙圈。

跟站上檔案加密的差別

本機檔案加密的 passkey 模式走 WebAuthn 的 PRF 擴充,保證是「就算密碼管理器的 vault 洩漏,也無法算出金鑰」。代價是 iPhone 配第三方密碼管理器拿不到 PRF。

這一層改把金鑰放進 user.id,任何支援 passkey 的環境都能用,代價是金鑰跟著 credential 存在 vault 裡,能解開 vault 的人就能解開這裡的資料。兩種取捨各有適合的東西,所以是兩套並存而不是互相取代。

備援金鑰

沒有 WebAuthn 的環境(例如 Tor Browser)只剩備援私鑰這條路,passkey 全丟了也一樣。建立時可以產生一把,公鑰會被加進收件人,私鑰只顯示一次,自己存進密碼管理器。

用備援私鑰解開是唯讀的,看得到內容也匯得出去,改不了。資料金鑰在 passkey 裡,備援那條路拿不到它。

換一台裝置

passkey 有同步(Bitwarden、iCloud 鑰匙圈)的話,那台裝置直接解得開。不同步的環境要另外處理,那部分還沒做。

匯出的是標準 age 檔,可以自己搬到另一台裝置匯入。