Black Hat USA 2025 | Practical Attacks on Nostr, a Decentralized Censorship-Resistant Protocol
三句話摘要
研究團隊對去中心化社群協議 NOSTR 進行首次全面安全分析,揭露密碼學設計缺陷與客戶端實作漏洞可導致身份偽冒、加密訊息竄改與比特幣劫持。 強大的密碼演算法本身不足以保障安全——去中心化系統必須從協議規範層面強制規定簽名驗證義務、採用認證加密並嚴格分離金鑰用途,否則客戶端實作的任何一個疏漏都將成為全網的系統性風險。 簽名驗證普遍缺失:NOSTR 規範未強制要求服務器驗證簽名,導致許多客戶端直接跳過此步驟;一旦客戶端省略驗證,攻擊者可向任何人發送偽造身份的事件(貼文、個人資料),因為沒有後端兜底。
重點整理
重點- 1
簽名驗證普遍缺失:NOSTR 規範未強制要求服務器驗證簽名,導致許多客戶端直接跳過此步驟;一旦客戶端省略驗證,攻擊者可向任何人發送偽造身份的事件(貼文、個人資料),因為沒有後端兜底。
- 2
加密私訊的密文完整性為零:NIP-04 規範採用 ECDH 金鑰協商 + AES-CBC 加密,但 CBC 模式本身不提供完整性保護;攻擊者即使不知道金鑰,也能透過 bit-flipping 翻轉特定位元,將收款比特幣地址替換成自己的地址。
- 3
跨協議攻擊突破加密:研究者利用 NOSTR 的 Nsec 遷移協議(設備同步功能)取得明文與密文的配對,再結合 CBC 可延展性攻擊,構造出可控的加密訊息內容——這是設計層面將不同用途共用同一套金鑰所造成的根本缺陷。
- 4
鏈接預覽成為洩密 Oracle:接收端自動抓取 URL 預覽的功能會向攻擊者控制的伺服器發起請求;攻擊者透過逐位翻轉密文,觀察客戶端是否觸發預覽請求,即可逐字元還原加密 URL 中的 token 或完整明文內容,即便底層加密演算法本身安全無虞。
實用技巧與重點
乾貨- 數字與規模
- 分析客戶端數量:56 個潛在客戶端 + 9 個深度分析客戶端(含開源與商業)
- 發現漏洞數:7 個
- 展示攻擊技術數:8 種
- NOSTR 總用戶帳號數:超過 110 萬
- 協議規範(NIPs)
- NIP-01:基礎事件結構 + 密碼簽名定義
- NIP-04:加密私訊(ECDH 金鑰協商 + AES-CBC 加密)
- NIP-57:閃電網路微支付(Zap)
- Nsec Bunker / 遷移協議:多設備簽名同步
- 攻擊分類(三大類)
- 完整性破壞(Integrity Violation):偽造個人資料、繞過簽名驗證
- 機密性洩漏(Confidentiality Leakage):加密 DM 明文還原
- 微支付劫持(Micropayment Hijacking):替換比特幣地址
- 具體攻擊手法
- 工具:CBC bit-flipping(翻轉初始向量改寫明文)
- 工具:事件 ID 快取繞過(Cache Poisoning via same ID, different content)
- 工具:鏈接預覽作為 timing/response oracle(逐字元暴力破解)
- 跨協議:Nsec Bunker 協議 → 獲取明文+密文配對 → 注入偽造訊息
- 緩解措施
- 使用 MAC 或認證加密(Authenticated Encryption,如 AES-GCM)取代 AES-CBC
- 協議規範中明確要求客戶端執行簽名驗證(不僅分配,還要驗證)
- 不同用途(身份、訊息、區域)使用獨立金鑰(Key Separation)
- 客戶端必須驗證所有事件,包括來自已知服務器的內容
- 發表資訊
- 會議:IEEE S&P(Symposium on Security and Privacy)2025
- 機構:日本 NICT、北卡羅來納州立大學、芝加哥大學
結論
結論“強大的密碼演算法本身不足以保障安全——去中心化系統必須從協議規範層面強制規定簽名驗證義務、採用認證加密並嚴格分離金鑰用途,否則客戶端實作的任何一個疏漏都將成為全網的系統性風險。”
完整解析
詳細NOSTR 是一套以「去信任化」為核心設計理念的去中心化社群協議,用戶以公私鑰對作為唯一身份,不綁定任何服務器,任何人都能架設轉播節點(Relay)。正因如此,身份驗證的責任從服務器端完全轉移到客戶端,這雖帶來了抗審查的自由,卻也製造了一個龐大的攻擊面。來自日本 NICT 等機構的研究團隊決定系統性地審視這個協議在密碼學設計與客戶端實作兩個維度上的安全現況。
研究團隊分析了 56 個 NOSTR 客戶端並深入剖析其中 9 個,發現多數客戶端在接收事件時直接跳過簽名驗證。NOSTR 規範(NIP-01)定義了每個事件必須以私鑰簽名,但規範並未強制要求服務器拒絕未經驗證的事件——服務器做簽名檢查只是為了防止垃圾訊息,保護的是自身存儲,而非客戶端安全。因此,攻擊者可直接對中繼節點注入偽造事件,偽裝成任意用戶發布貼文或個人資料(例如替換比特幣收款地址),接收端客戶端若未驗證簽名則完全無法察覺。更複雜的情況是,即便客戶端實作了驗證邏輯,也可能因為事件 ID 快取機制而被繞過:攻擊者先讓受害者快取一個合法事件,再發送具有相同 ID 但竄改內容的偽造事件,快取命中後驗證函數直接回傳「已驗證」,跳過真正的密碼學檢查。
加密私訊(NIP-04)的問題源自協議設計層面的根本缺陷。NIP-04 採用 AES-CBC 加密,但 CBC 模式本身不提供密文完整性保護,這使得攻擊者在不知道金鑰的情況下,仍能透過翻轉初始向量中的特定比特,精確地操控解密後明文的對應位元——例如將「匯款給 Alice 的比特幣地址」改成攻擊者自己的地址。然而 CBC bit-flipping 的輸出是隨機可控但需要明文配合,因此研究者進一步利用跨協議攻擊:NOSTR 的設備遷移協議(Nsec Bunker)在兩台設備建立配對時,會以相同的會話金鑰加密非元數據(non-metadata),攻擊者可從中取得已知明文與密文的配對,再利用此配對向私訊通道注入偽造內容。
第三類攻擊將客戶端的鏈接預覽功能武器化。主流 NOSTR 客戶端(包含多個 iOS/Android app)在收到含 URL 的私訊後,會在本地自動向該 URL 發起 HTTP 請求抓取預覽元數據。攻擊者先取得加密密文,透過 CBC bit-flipping 將 URL 的網域部分從 `example.net` 翻轉為攻擊者控制的 `attacker.net`,而 URL 的秘密路徑部分(如會議邀請 token)在解密後仍保持原樣,並隨預覽請求原封不動地送到攻擊者伺服器。若攻擊者想還原更多明文,則可逐字元暴力猜測:假設訊息以 `https` 開頭,攻擊者對每個可能字元構造修改後的密文,觀察客戶端是否對特定伺服器發出預覽請求作為 oracle 訊號,即可逐步還原整段加密訊息——即便底層加密演算法本身完全安全也無法阻止此攻擊。
研究者在與開發者合作兩年後提出三項根本性建議:首先,協議規範(NIPs)必須明確要求客戶端進行簽名驗證,不只定義如何簽名,更要定義驗證義務;其次,不同用途必須使用獨立金鑰,身份金鑰與訊息加密金鑰不可混用;第三,加密私訊必須改用帶有完整性保護的認證加密(如 AES-GCM),徹底消除密文可延展性問題。研究者也特別指出,去中心化系統的修補困境在於沒有單一部署入口,修補需要數十個社群、數百個客戶端各自更新,這進一步強調「從設計階段就做對」的重要性。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

