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月，谷歌終止了 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協議：現在和未來 （影片）

## 基本資料

- is stack：no
- 用途：端到端加密通信
- 開發者：Signal基金會
- 原型：OTR, Silent Circle Instant Messaging Protocol
- 施影響於：OMEMO, Matrix
- osilayer：應用層