跳至內容
返回 Nymchat

知識庫 與人交談

抗量子加密

Nymchat 用戶之間的私人訊息和群組聊天可以加密,以便 即使量子電腦問世,今天記錄它們對攻擊者來說也沒有什麼好處。

它解決的問題

普通 Nostr 加密 — NIP-44, 這是什麼 私人訊息群聊 建立在 - 有兩半。那一半 實際上打亂文本(ChaCha20、HMAC-SHA256、HKDF)對於量子來說表現得很好 電腦。同意密鑰的一半則不同意。

該關鍵協議是 secp256k1 上的橢圓曲線 Diffie-Hellman,與比特幣使用的數學相同。 Shor 的演算法徹底解決了這個問題。任何針對公鑰運行它的人都可以恢復 私鑰,以及該金鑰產生的每個共享秘密。

現在收穫,稍後解密

這並不是量子電腦出現時才出現的問題。對手夠多 儲存可以記錄加密流量 今天,坐在上面,多年後解密。 你現在發送的任何當時仍然重要的內容都已經暴露了。這就是具體的 攻擊此功能失敗。

它是如何運作的

Nymchat 完全不更動 NIP-44 訊息格式。它原本使用的金鑰協議 保持不變;在其外圍增加了一個第二個、獨立的金鑰協議。因此,每條訊息會有兩次金鑰交換 而不是一次:

  • 標準 secp256k1 ECDH,和以前一樣;
  • ML-KEM-768,後量子演算法 NIST 標準化為 FIPS 203。 它的安全性依賴格子問題,而肖爾演算法沒有觸及這一點。

這兩者是 分層,而非混合訊息完全按照以往的方式使用 NIP-44 加密,接著該已完成的密文會再次封裝在後量子層內——即使用 ML-KEM 共用金鑰作為金鑰的 ChaCha20-Poly1305。發送者的金鑰、接收者的金鑰、封裝密文以及接收者的 ML-KEM 金鑰皆作為上下文 (context) 綁定於該派生過程中,因此無法將其中一層從一次交換中提取並重放至另一次交換中。

像 X-Wing 或 Signal 的 PQXDH 這樣的組合器(combiner)會將兩個秘密混合成一個密鑰。Nymchat 則不然,其原因在於實務而非密碼學考量:混合需要原始的 ECDH 輸出,而瀏覽器擴充功能或遠端簽署器永遠不會交還該輸出 —— 它返回的是已完成的密文,而這正是將密鑰保存在應用程式無法觸及之處的核心目的。分層(Layering)機制使 NIP-44 保持完整,並由任何持有身分密鑰的對象(包括簽署器)生成,因此這些登入行為是普通的參與者,而非被排除在外者。

重要屬性無論如何都相同:結果是 至少與較強的一半一樣強解讀訊息意味著必須穿透這兩層。如果格密碼學(lattice cryptography)被證明比預期的還要脆弱,破解 ML-KEM 僅能剝離外層,並留下現有的 NIP-44 在底層。如果 secp256k1 被量子電腦攻破,內層會開啟,但外層仍不會。攻擊者必須同時破解這兩者。

每個訊息都會進行新的後量子交換,因此恢復一條訊息的密鑰即可揭示 與其他人無關。

後量子部分需要它自己的金鑰,而該金鑰的來源決定了 整件事是否有價值。它是刻意地 不是 從...推導出來 你的 nsec. 一台破解了古典部分的量子電腦會找回你的 nsec 從您的公鑰,以及任何從中衍生出的內容 nsec 透過一個 發佈的公式產生的結果是 — 一次破解即可開啟兩把鎖。因此 Nymchat 生成一個獨立的 後量子程式碼 對於每個帳戶,一次,來自隨機 沒有任何公開值會揭露的位元組。其讀取內容為 nympq1… 並坐在你的 nsec 在您的 Nym 詳細資訊中,以相同的方式顯示並複製。它不是密碼,也不是第二次登入:它是您可以保存的金鑰材料,正如同... nsec.

沒有什麼可以打開的

這不是一個設定。後量子加密就是 Nymchat 與 Nymchat 對話的方式。 與普通加密一樣,它與其他一切通信的方式也是如此。它自動適用於 與其他 Nymchat 用戶的每條私人訊息和群聊。

設定 › 隱私與安全性會顯示其是否處於啟用狀態,以及 目前影響了多少您的聯絡人,但僅作為資訊顯示 — 並沒有 開關。

無論你以哪種方式登入,這都能運作。使用瀏覽器擴充功能 (NIP-07) 或遠端簽署者 (NIP-46) 登入,永遠不會將你的身份密鑰交給應用程式,而這正是使用它們的核心目的——而且也沒必要交給它。加密的兩個部分是分開處理的:你的簽署者負責它一直以來所做的部分,而應用程式則利用它直接持有的恢復碼來處理後量子部分。擴充功能和遠端簽署者登入在雙向溝通中都是普通的參與者。設定中的狀態行會顯示適用於你的資訊。

您現有的任何內容都不受影響。您歷史紀錄中的每一條訊息在所有裝置上都保持可讀,僅需您的... nsec, 與先前完全相同,並在帳戶存續期間保持不變。什麼需要... nympq1… 復原碼是從現在起所產生的抗量子資料:即新訊息,以及隨之同步的設定與存檔。

因此,裝置必須先持有該代碼才能開啟那些,而現在新增裝置需要多一個額外的步驟。在新裝置的同一個面板中,您貼上... nympq1… 來自已擁有該程式碼之裝置的程式碼。它是每個裝置一次,而非每次登入一次。那個步驟並非我們未能消除的阻礙:一個能自動傳送到新裝置的程式碼,必須透過普通訊息傳送過去,而該訊息正是此功能旨在阻止的攻擊者正在攔截的對象。這個步驟正是保護機制之所以真實有效的原因。

應用程式會產生 nympq1… 給你的代碼,因此無需選擇, 也無需發明。 查看或編輯 Nym 的詳細資訊,然後 揭露此匿名者的私鑰與恢復碼. 它就位於您的 nsec, 搭配同樣的顯示與複製按鈕。你完全不需要考慮 這件事,直到你增加第二台裝置的那天。

未連結的裝置在此期間不會被鎖定。它會繼續讀取所有使用舊加密方式編寫的內容並保持正常發送,一旦您完成連結,它就會回溯並開啟先前無法讀取的抗量子訊息。延遲連結不會導致任何資料遺失。

您的其他裝置

第二台裝置需要兩件事:最新版本的應用程式,以及 nympq1… 代碼。一個舊版本仍可繼續運作——它並未被切斷——但它無法讀取目前的格式,因此雖然它仍保留在帳戶中,您為自己保留的副本會回退到它能讀取的舊版本。一台尚未連結的最新裝置會讀取您的舊紀錄並要求輸入代碼。兩者都無法告知我們它的存在,這就是為什麼這是一則通知,而不是由我們為您偵測到的事項。

你和誰一起得到它

雙方都需要它。每個 Nymchat 用戶端都會發佈一個小型、經簽名且會過期的公告來說明這一點,並在擁有時包含其後量子密鑰。持有對方的有效公告,是促使應用程式與其進行更強密鑰交換的原因。這裡沒有可以干預的協商過程:密鑰要麼存在,要麼不存在;且由於公告是由其作者簽名的,替換密鑰必須經過偽造,而不僅僅是單純地提供。

掌控中繼器的攻擊者會做什麼 可以 做法是隱瞞公告,使發送者永遠看不到金鑰,並退回到常規加密。這點值得明確指出。其代價是這些訊息將失去後量子保護;它無法使內容變得無法讀取,也無法強迫你接受不屬於你的金鑰。客戶端會詢問多個中繼站,因此要抑制公告,必須控制所有的中繼站。

那些公告會持續一週,並在你使用 App 時每天自動更新。如果你離開的時間超過一週,你的公告就會失效,在此期間你會被視為一般的 Nostr 用戶:在此空檔期間發送給你的訊息將使用常規加密方式,而非抗量子加密方式。訊息仍會送達,你也可以正常閱讀——而且你之前收到的任何內容都不會受到影響。重新開啟 App 會重新發布你的公告,且更強大的加密方式會自動恢復。無需進行任何重新操作。

其他人都像以前一樣繼續工作。 Bitchat 使用者及任何 其他 Nostr 客戶端接收標準 NIP-17, 保持不變。當你傳送訊息給 Nymchat 以外的人時,不會有任何功能受損。

後量子資訊 取代 標準的而不是與它一起發送。 發送兩者都是毫無意義的:攻擊者只會破壞較弱的副本。

副本寄至 也獲取它 - 您的其他設備讀取的內容, 它背後的存檔以及您的同步設置,它們以相同的方式傳輸並攜帶您的 對話列表、群組密鑰和訊息歷史記錄。將其中任何一個保留在舊的上 加密會使它們成為您儲存的最弱的東西:任何破解的人都可以讀取 今天的密碼學,無論訊息本身被多麼仔細地密封。

保持 Bitchat 的可讀性

Bitchat 無法讀取 Nymchat 的訊息格式,因此歷史上 Nymchat 發送了第二份副本 以 Bitchat 格式向任何可能使用它的人發送的每條訊息 — 對於某人來說 你從未收到過訊息,指的是所有人。

上述公告使這種猜測變得不必要。如果有人發表了一篇文章,那麼他們就是 運行 Nymchat,因此 Bitchat 副本將被刪除,僅發送更強的訊息。如果他們 沒有,什麼都沒有改變:他們仍然接收兩種格式,和以前一樣,所以什麼都沒有 您發送的內容可能會變得不可讀,因為應用程式對某人使用的客戶端猜測錯誤。

與加密本身一樣,這是自動的並且無需設定。

為什麼不只是從公共活動中猜測

Nymchat 可以從公共管道活動中推斷誰在運行什麼,並且它會發現 人們早點。但這種推論有時是錯誤的,這裡錯誤意味著 向某人發送一條訊息,他們的應用程式無法打開,沒有錯誤,也無需重試。已發表 公告有作者簽名,無法偽造,所以用它來代替。

在群聊中

群組訊息已針對每個成員單獨加密,因此群組可以混合使用這兩種類型 免費 - 客戶支援的成員獲得更強的加密,其餘的獲得 標準的,無論哪種方式,小組都可以正常工作。

因此,只有在以下情況下,群組訊息才會被標記為抗量子的: 每一個 會員 就這樣收到了。即使一份副本使用了標準交換,該副本也具有相同的 訊息,因此整個訊息僅受到其最弱副本的保護。該應用程式說 「對 10 個成員中的 8 個具有量子抗性」而不是四捨五入。

群聊也保留了他們的 輪換一次性鑰匙,隱藏群組中的成員 來自觀看接力賽的任何人。這種保護不受影響並且完全按照原來的方式工作。

閱讀徽章

每一則私訊和群組訊息都攜帶著一個微小的 在 掛鎖旁邊。點擊任一標記可說明其顯示內容。

標記意義
掛鎖誰發送的——簽名是否與聲稱的作者相符。
抗量子。雙方各自持有其自身的後量子密碼,且此訊息的每一份副本皆使用了混合交換。
虛線盾牌部分具抗量子特性 — 一則僅部分成員收到受保護副本的群組訊息。由於其他人持有相同的文本,整體而言請將該訊息視為傳統加密。
帶刪除線的盾牌非量子抗性。標準的 NIP-44 加密 — 仍為端對端加密,且在今日除了參與者之外,任何人都無法解讀。
無護盾非加密訊息。公開頻道貼文在設計上於轉發器上是可讀取的,因此不適用加密標記。

盾牌總是出現在加密訊息上,並在答案為「否」時明確表示。標誌缺失會具有歧義——它可能同樣代表「不具備抗量子能力」、「此版本過舊」或「指示器故障」——而一個無法與故障指示器區分的安全指示器,等於沒有提供任何資訊。

它位處掛鎖旁而非取代它,因為兩者回答的是不同的問題, 且一則訊息可以僅具備其中之一 —— 具備抗量子特性卻來自未經驗證的 發送者,或者經過驗證卻僅使用傳統加密。

較舊的訊息會永久保留被劃掉的盾牌。 在雙方都採用抗量子構建之前發送的任何內容,都是使用傳統交換方式加密的,且該密文已存在於轉發節點上——事後無法重新加密。這正是此次升級在未來將要封堵的「先收集、後解密」風險,因此顯示該標記是誠實的說明,而非錯誤。

它不做什麼

這可以保護 內容 您的訊息。它並不能使每一個部分 Nostr 是量子證明的,並且值得精確地了解其中的差異。

  • 簽名仍然是 secp256k1。 Nostr 身分與 Schnorr 簽署 相同的曲線。已經擁有一台可用量子電腦的對手可以偽造一個 即時簽名並冒充某人。混合交換停止的是閱讀 記錄的流量-機密性,而不是身分驗證。
  • 沒有前向安全性。 這兩個金鑰都是長效的:NIP-44 衍生 其金鑰自你的 nsec, 且後量子層會封裝至您...背後的 ML-KEM 金鑰 nympq1… 程式碼。每條訊息都經過全新的封裝,因此一條訊息的密鑰無法開啟下一條 — 但最終持有那些長期密鑰的人可以讀取他們曾記錄過的所有內容,而不僅僅是隨後的內容。這就是 即將過期的訊息 減少,這就是為什麼此功能旨在針對「先收集,後解密」,而非針對被盜取的金鑰。
  • 元資料不變。 中繼仍然看到事件被發送到 一把鑰匙,以及大概的時間。這是由 禮品包裝和一次性鑰匙,不是由 這個。
  • Bluetooth mesh 未涵蓋。 一則傳遞過來的訊息 網格 在 Noise XX 會話中傳輸,這是一種強大的現行加密技術,但採用的是傳統金鑰交換——因此,即使是在兩個 Nymchat 用戶之間,也不具備後量子層。徽章反映了這一點:透過網狀網路傳送的消息不會被標記為具備量子抗性。若要在該處添加此功能,意味著必須更改握手程序本身,這需要兩端節點同時進行,且在沒有中繼節點可供回退的情況下,同時還要保持 Bitchat 的可讀性。
  • 您的復原碼是另一件需要妥善保存的東西。 是以...開始 nympq1 而你將會在...中找到它 你的 Nym 詳細資訊,在與您的...相同的面板中 nsec — 點選您的 nym,然後點選「顯示此 nym 的私鑰與復原碼」。您的 nsec 它本身並不會重建您的後量子金鑰 —— 這正是它之所以有效的原因 —— 因此,如果沒有任何裝置持有該代碼,而您也沒有任何副本,那麼封裝在其中的內容將無法再次開啟。沒有重設機制,也無人可以詢問。請將它儲存在您儲存您的...之處 nsec.
  • 它無法保護對方的行為。 收件人仍然可以截圖, 複製或保留訊息。

這與 Signal 在其後量子升級中採取的立場相同:修復金鑰交換 現在,因為這是攻擊者可以追溯操作的部分,並將簽名視為 標準趕上時的單獨問題。

檢查工作

ML-KEM 實作正針對官方進行測試 測試向量 NIST 發佈 為了 FIPS 203, 因此,它是根據標準本身進行檢查,而不僅僅是針對自身。 網頁應用程式和行動應用程式還必須遵循一組共享的測試向量,這正是 確保其中一方所撰寫的訊息能被另一方讀取的保證。

兩者都是 開 源 根據 AGPL-3.0,且該 Web 應用程式的建置是可重現的 — 參閱 驗證建置.

深入探討: Nymchat 中的後量子金鑰協商 — 一份關於 ML-KEM 金鑰如何在沒有目錄的情況下進行分發、結合兩種金鑰交換的確切構造,以及被否決的設計的技術白皮書。