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 date=20201112000826 ：用C编写的函数库，具有Apple App Store其他许可权限。 -  libsignal-protocol-java date=20201121073134 ：用Java编写的函数库。 -  libsignal-protocol-javascript date=20201112015236 ：用JavaScript编写的函数库。 

**参见**
  Comparison of instant messaging protocols-  Comparison of cryptography libraries

**参考资料**

**外部链接**
 Trevor Perrin在NorthSec 2015上的演讲 TextSecure协议：现在和未来 date=20190217115020  （视频）