Staging — 僅供部落格預覽。
跳至主要內容

共用密碼 ≠ 主密碼

排程中

閱讀時間 7 分鐘 作者 NT²

若共用內容能用解鎖保管箱的同一機密開啟,那就不是交接,而是遠端解鎖一切。NT² 把這些邊界分開。

共用密碼 ≠ 主密碼

主張:共用酬載使用不同的機密

當你解鎖 NT² Vault 時,主密碼會派生本機保管箱金鑰。該金鑰包裝項目與附件靜態儲存時的內容加密金鑰。它是解鎖工作階段內,這座保管箱在這台裝置上的根。

當你對外**共用(Share)**某樣東西時,出現另一個問題:收件人收到的封包,該用什麼機密開啟?

答案絕不能是主密碼。

對於加密連結與 .nt2share 檔案,NT² 會要求共用密碼——你為那次交接選定的機密。收件人輸入它來解密共用封包。該密碼絕不會變成保管箱解鎖機密,保管箱解鎖機密也絕不會變成共用密碼。

對於送給安全聯絡人的保管箱對保管箱傳遞,根本沒有共用密碼。加密依附綁定於對等關係的金鑰。收件人已解鎖的保管箱可以開啟封包;只靠猜測字串的陌生人不能。

主張只有一句,但爆炸半徑很大:共用是為「共用形狀」的邊界加密,不是為保管箱的解鎖根加密。

限制:一個機密不得代表兩種權力

密碼管理器與「安全共用」產品常為了方便而模糊機密。使用者已經記得一把強密碼。把它重用到連結上,感覺少記一件事。產品文案有時把每種機密都叫「密碼」,於是誘發錯誤心智模型:既然我打了密碼才開啟保管箱,也許同一把密碼也能開啟我送出去的東西。

那種塌縮會創造任何交接都不該授予的權力。

若共用內容能用主密碼開啟,知道共用就等於知道保管箱。 承包商透過連結收到一次性 API key,不該因此獲得對寄件人整座保管箱的離線攻擊候選。被轉寄的連結不該變成解鎖用的猜密碼套件。會計師只需要一次揭露,不該帶走可測試寄件人本機儲存根機密的材料。

若保管箱能用共用密碼解鎖,產品就把監管關係倒置了。 共用機密本應可拋棄:通話時口述、走另一個管道傳送、事後忘記。主密碼本應長壽,且極少傳輸。教人把長壽機密打進公開解密頁——或打進別人持有的檔案——等於把交接變成遠端解鎖練習。

若同一個 KDF 標籤同時餵給保管箱 AES 與共用封包,金鑰可能被誤換。 密碼實作會重用原語:PBKDF2、HKDF、AES-GCM。若沒有清楚的網域分隔,「好心」的重構可能用保管箱派生金鑰加密共用,或以共用派生金鑰包裝保管箱材料。獨立標籤能避免意外交叉使用編譯成安全缺陷。

若共用密文在未經「接受」的情況下變成已儲存的保管箱項目,共用就變成靜默匯入。 加密邊界不只關乎金鑰,也關乎明文何時成為持久的保管箱狀態。收件匣中的待處理封包還不是資產。「接受」才是收件人選擇重新加密進自己保管箱信封的時刻。

因此這項限制是雙向的。對外共用不得鑄造解鎖權力;對內接收不得在沒有明確動作時鑄造保管箱寫入。兩者都依賴把共用機密當成獨立的加密邊界。

設計:Mode A、B、C 開不同的門

NT² 的共用介面涵蓋多種信任形狀。密碼學對應形狀,而不是單一「加密後送出」路徑。

模式誰能開啟機密/金鑰材料典型傳遞
A — 保管箱對保管箱對等金鑰與封包相符的保管箱ECDH → HKDF → AES-GCM(保管箱對保管箱標籤);由寄件人保管箱金鑰 DID 簽署盲中繼、QR 或帶內傳遞;在收件匣暫存直到接受
B — 加密連結同時擁有連結共用密碼的人共用密碼 → PBKDF2 → AES-GCM(共用連結標籤)託管密文;在 https://se.nt2.me/share/… 開啟,無需保管箱帳號
C — .nt2share 檔案同時擁有檔案共用密碼的人與 Mode B 相同的共用連結密碼學使用者通道:USB、AirDrop、下載——再經收件匣或獨立匯入
flowchart LR
  subgraph unlock [保管箱解鎖]
    MP[主密碼]
    VK[保管箱 AES 金鑰]
    MP -->|僅本機 PBKDF2| VK
  end
  subgraph modeA [Mode A]
    Peer[Peer DID 金鑰協定]
    V2V[保管箱對保管箱 AES-GCM]
    Peer --> V2V
  end
  subgraph modeBC [Mode B 與 C]
    SP[共用密碼]
    SL[共用連結 AES-GCM]
    SP -->|PBKDF2 共用標籤| SL
  end
  VK -.->|永不當作共用機密| SP
  VK -.->|只包裝本機 CEK| Local[項目與附件信封]

整張表貫穿三項性質。

網域分隔。 保管箱解鎖、保管箱對保管箱封包,以及共用連結封包,使用不同的 KDF/金鑰協定標籤。為某一目的派生的金鑰不能解密另一目的。共用可在適當時重用保管箱金鑰階層作為熵來源,但標籤會防止把共用金鑰當成保管箱 AES 金鑰,或反向混用。

伺服器上只有密文。 當 Mode A 或 Mode B 用邊緣做傳遞時,服務儲存不透明 blob 與非敏感中繼資料(識別符、到期、撤銷狀態)。它不會收到主密碼、共用密碼或明文字段。盲傳遞不是保管箱解鎖。

新鮮 IV 與明確的接受。 每次 AES-GCM 加密都使用新鮮的初始化向量。抵達另一座保管箱的 Mode A 封包,會以加密信封坐在收件匣,直到收件人接受。接受會解密,再重新加密進收件人自己的每物件信封——與一般項目相同的信封模式,而不是寄件人保管箱金鑰的第二份副本。

Mode B 與 Mode C 刻意共用同一套密碼敘事。差異在傳遞:帶到期的 URL,對上使用者攜帶的檔案。兩者仍要求不是主密碼的共用密碼。沒有 NT² 保管箱的收件人可在瀏覽器開啟連結;有保管箱的收件人可經收件匣匯入 .nt2share,且永遠不必知道寄件人的解鎖機密。

Mode A 拒絕密碼片語模型,因為信任關係不同。你不是把可拋棄機密交給陌生人,而是對已知的保管箱身份定址。互惠的安全聯絡人設定,會綁定用於驗證的保管箱金鑰 DID,以及用於加密的 Peer DID 材料。封包封緘於該對等關係。開啟它需要收件人已解鎖的保管箱——不是你也用來解鎖自己保管箱的字串。

取捨:更多機密,更窄的爆炸半徑

把共用機密與解鎖機密分開,會付出產品與操作清晰度的成本。

使用者必須學會兩種習慣。主密碼留在擁有保管箱的裝置上。共用密碼依交接選定,盡可能走第二管道傳送,並當成可拋棄。這比「重用我的保管箱密碼」多打一些字。卻也是唯一能避免洩漏的交接變成整座保管箱攻擊候選的習慣。

支援與行銷用語必須精準。把兩種機密都叫「密碼」,故事又會塌回去。NT² 把解鎖根稱為主密碼,把交接機密稱為共用密碼,讓介面與說明強化邊界。工程師在測試中繼承同一套詞彙:共用流程必須拒絕用解鎖機密當封包金鑰。

Mode A 付出的是關係成本,而不是密碼片語成本。保管箱對保管箱需要安全聯絡人,互惠傳送還需要雙向信任。單向邀請不是完整的互惠 Mode A。那份摩擦是刻意的。加密給半已知對等方,比要求使用者完成關係——或對一次性外人改選 Mode B——更糟。

實作者要維護雙路徑。連結/檔案密碼學與保管箱對保管箱密碼學,不得共用會悄悄丟掉網域標籤的輔助函式。收件匣處理常式不得自動寫入資產。連結的寄件匣與 TTL 邏輯不得假設共用密碼存在伺服器端以便「忘記共用密碼」復原。沒有能重建封包金鑰的忘記共用密碼 email。若密碼遺失,交接以關閉失敗收場——與我們不能重設你的主密碼——刻意如此對解鎖的誠實相同,只是套用在較小的機密上。

我們接受這份複雜度,因為爆炸半徑保持誠實。遭入侵的共用密碼威脅的是該封包。遭入侵的主密碼威脅的是保管箱——而且絕不該為了讓第一個問題「比較容易」而被打進共用頁。中繼外洩暴露密文與中繼資料,而不是兩種機密的任一種。靜態信封加密仍限制「接受」最終寫入新項目時,單一 CEK 涵蓋保管箱的多少——見每個物件一把金鑰

我們拒絕什麼

我們拒絕用主密碼加密共用。 交接機密不得是解鎖根。把解鎖重用到共用,等於把收件人變成對寄件人保管箱的離線攻擊者。

我們拒絕用共用密碼解鎖保管箱。 可拋棄的交接機密不得變成對本機儲存的長壽監管。

我們拒絕保管箱 AES 與共用封包共用單一 KDF 網域。 獨立標籤避免保管箱金鑰與共用金鑰因意外或「簡化」而可互換。

我們拒絕把共用密文靜默匯入資產。 收件匣暫存封包。在新項目以收件人的信封存在之前,必須接受。

我們拒絕上傳主密碼或共用密碼以「在伺服器上協助解密」。 解密發生在客戶端。邊緣搬運盲 blob。

我們拒絕能從帳號所有權重建封包金鑰的「忘記共用密碼」復原。 Mode B/C 封包封緘於寄件人選定的密碼。遺失它就結束那次交接。它不構成鑄造由提供者持有的復原判定依據的理由。

這些拒絕會讓某些共用在人們重用機密或遺失機密時失敗。那種失敗,好過一次「成功」卻悄悄擴大了解鎖權力的共用。

結語:三種信任,一條硬邊界

共用密碼 ≠ 主密碼,是已有白話故事的密碼學半部:三種共用方式,三種信任帶到期的加密連結,以及信任層關於安全聯絡人信任何時該結束的篇章。可選雲端的身份仍是圍繞保管箱金鑰 DID 的挑戰-回應——見挑戰-回應,而非以 email 作為持有憑證——而不是也能重設解鎖的收件匣。

這條邊界說起來很小,守起來很大。解鎖開啟的是你的保管箱。共用密碼開啟的是一個封包。對等金鑰開啟的是一次定址交接。混淆這些門,就是零知識共用變成「包裝比較好看的遠端保管箱解鎖」的方式。

若你想要讓解鎖權力不走上線的共用路徑,探索 NT² Vault

最後更新 2026-09-05

相關故事