Signal协议

**Signal 協定**（英語：Signal Protocol，以前稱為 **TextSecure 協定**）是一種非互聯的加密協定，可被用於為語音呼叫、視訊呼叫和即時訊息對談提供端到端加密 。該協定由 Open Whisper Systems 於 2013 年開發，並首先在開源的 TextSecure 應用中被引入，後來其更新為 Signal。幾個閉源應用也聲稱實現了該協定，例如 WhatsApp 聲稱其用此協定加密了「全球十億多人」的對話。Facebook Messenger 聲稱提供其提供 Signal 協定作為可選的加密通訊方式，Skype 亦聲稱將此用於私人對話。

該協定結合了雙棘輪演算法、前置金鑰和三次橢圓曲線迪菲 - 赫爾曼金鑰交換（3-DH）握手，並使用 Curve25519、AES-256 和 HMAC-SHA256 演算法作為密碼學原語。

## 歷史

Signal 協定的開發由 Trevor Perrin 和馬克西・馬林史派克於 2013 年開始。該協定的第一個版本 TextSecure v1 基於不留記錄即時通訊（OTR）系統。 

2014 年 2 月 24 日，Open Whisper Systems 推出了 TextSecure v2 ，其之後被遷移到 Axolotl Ratchet 演算法中。 Axolotl Ratchet 的設計基於 OTR 引入的臨時金鑰交換。 這帶來了對非同步通信（離線訊息）的支援。除了離線訊息，其還具有更好的彈性，並且更容易支援與多個參與者的對話。Axolotl Ratchet 是以極度瀕危的水生動物墨西哥鈍口螈命名 ，它具有非凡的自我修復能力。開發者以此寓意暗示該演算法會在破壞對談金鑰後自動使攻擊者無法存取後續訊息的明文。

該協定的第三個版本 TextSecure v3 對加密原語和有線協定進行了一些更改。2014 年 10 月，波鴻魯爾大學的研究人員發表了對 TextSecure v3 的分析。在眾多發現中，他們提出了對該協定的未知金鑰共享攻擊，但總體來說，他們發現它是安全的。

在 2016 年 3 月，開發人員將協定重新命名為 Signal 協定。他們還將 Axolotl Ratchet 重新命名為雙棘輪演算法，以更好地區分棘輪協定和完整的通訊協定。 

截至 2016 年 10 月，Signal 協定仍是基於 TextSecure v3，但做出了一些額外的密碼學改進。2016 年 10 月，來自英國牛津大學、澳大利亞昆士蘭科技大學和加拿大麥馬士達大學的研究者發布了一份針對此協定的分析，認為該協定是密碼學可靠的。

## 屬性

該協定提供機密性、完整性、認證加密、參與者一致性、目標驗證、前向保密性 、未來保密性、因果關係保留、訊息不可連結性、訊息否認、參與否認和非同步通訊的特性。但它不提供匿名性保留，並且需要伺服器來中繼訊息和儲存公鑰。 

Signal 協定還支援端到端加密的群聊。 群聊協定是通過成對雙棘輪和多播加密來實現的。 除了一對一協定提供的屬性外，群聊協定還提供說話者一致性、亂序彈性、丟棄訊息彈性、計算性平等，信任平等、子組訊息傳遞以及可收縮和可延伸的成員資格支援。

### 認證

為了進行身分驗證，使用者可以通過外部信道手動比較公鑰指紋 。 這使使用者可以驗證彼此的身分並避免中間人攻擊。 一個實現還可以選擇採用對首次使用的信任，以便在使用者的金鑰更改時通知使用者。

### 元資料

Signal 協定不會阻止公司保留有關使用者何時以及與誰通信的資訊。 因此，訊息傳遞服務提供商選擇如何處理此資訊可能會存在差異。Signal 的隱私權政策規定，Signal 伺服器僅保留接收者的識別碼，以便傳輸訊息。 2016 年 6 月，馬克西・馬林史派克告訴 _The Intercept_ ：「Signal 伺服器儲存的與元資料最接近的資訊是每個使用者最後一次連接到伺服器的時間，並且此資訊的精度是天，而不是基於小時 ，分鐘或者秒的。」

2018 年 10 月，Signal Messenger 宣布已在 Signal 中實現 「密封發件人」功能，該功能通過隱藏發件人的識別碼來進一步減少 Signal 伺服器可存取的元資料量。 發件人的身分會在每封郵件中傳達給收件人，並使用伺服器沒有的金鑰進行加密。如果發件人在收件人的聯絡人中或有權存取其設定檔，則將自動完成此操作。使用者還可以啟用一個選項，以接收來自非接觸者和無權存取其訊號設定檔的人的「密封發件人」訊息。

## 使用情況

Open Whisper Systems 首先在其 TextSecure 應用程式中引入了該協定。隨後，他們將名為 RedPhone 的加密語音呼叫應用程式合併到 TextSecure 應用程式中，並將其重新命名為 Signal。RedPhone 使用 ZRTP 對其呼叫進行加密。 在 2017 年 3 月，Signal 轉換為基於 WebRTC 的新呼叫系統，該系統還引入了視訊呼叫的功能。Signal 的新呼叫系統同樣使用 Signal Protocol 進行端到端加密。 

2014 年 11 月，Open Whisper Systems 宣布與 WhatsApp 建立合作關係，通過將 Signal 協定整合到每個 WhatsApp 客戶端平台中來提供端到端加密。Open Whisper Systems 表示，他們已經將該協定整合到最新的 Android WhatsApp 客戶端中，不久之後將支援其他客戶端，以及組訊息和金鑰驗證特性的支援。 2016 年 4 月 5 日，WhatsApp 和 Open Whisper Systems 宣布已完成為 WhatsApp 上的任何形式的通信添加端到端加密的功能，並且使用者現在可以驗證彼此的金鑰。 2017 年 2 月，WhatsApp 宣布了一項新功能 WhatsApp Status，該功能同樣使用 Signal 協定來保護其內容。

2015 年 9 月，歌德塔推出了一個新的訊息傳遞應用程式，稱為「安全聊天」，它使用了 Signal 協定。 但 G Data 於 2018 年 5 月停止服務。 

2016 年 9 月，Google 發布了一款名為 Allo 新通訊應用，該應用程式具有可選的無痕模式，該模式使用 Signal 協定進行端到端加密。 2019 年 3 月，Google 終止了 Allo，轉而支援其 Android 上的 Messages 應用程式。 2020 年 11 月起，Messages 開始使用 Signal 協定進行端到端加密。

2016 年 10 月， Facebook 在 Facebook Messenger 中部署了一種稱為「加密對話」的可選模式，該模式使用 Signal 協定提供端到端加密。 

2018 年 1 月，Open Whisper Systems 和微軟宣布將 Signal 協定支援添加到稱為私有對話的可選 Skype 模式中。 

## 影響

Signal 協定對其他密碼協定也有影響。Viber 在 2016 年 5 月表示，他們的加密協定是客製化實現的，但它與 Signal 協定使用相同的概念。 Forsta 的開發人員表示，他們的應用程式使用 Signal 協定的客製化實現。 

Signal 協定引入的雙棘輪演算法已被其他協定採用。OMEMO 是由即時通信應用 Conversations 引入的 XMPP 擴充協定（英語：XMPP Extension Protocol），並在 2016 年 12 月被 XMPP 標準基金會 (XSF) 接受，代號為 XEP-0384 。Matrix 是一種開放通信協定，其中包括 OLM，該協定是一個庫，該庫通過雙棘輪演算法實現在聊天室內提供可選的端到端加密。Wire 的開發人員表示，他們的應用程式使用了雙棘輪演算法的客製化實現。

## 實現

Signal Messenger 在 GitHub 上以 GPLv3 許可發布並維護以下函式庫：

* libsignal-protocol-c：用 C 編寫的函式庫，具有 Apple App Store 其他許可權限。
* libsignal-protocol-java：用 Java 編寫的函式庫。
* libsignal-protocol-javascript：用 JavaScript 編寫的函式庫。

## 參見

* 即時通訊協定的比較
* 密碼庫比較

## 參考資料

## 外部連結

* Trevor Perrin 在 NorthSec 2015 上的演講 TextSecure 協定：現在和未來 （頁面存檔備份，存於網際網路檔案館） （影片）