测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可证 | 自定义 |
发布最后发布 | 2015年12月 |
由Frederic Jacobs维护。
依赖 | |
25519 | ~> 2.0.1 |
HKDFKit | ~> 0.0.3 |
ProtocolBuffers | ~> 1.9.8 |
AxolotlKit是Axolotl协议免费的(自由意义上的)实现,用Objective-C编写。
在CocoaDocs上浏览API参考。
Axolotl正在审查中。所有审阅欢迎。一旦准备好了,将通过CocoaPods分发。
AxolotlKit旨在成为易于集成到现有项目中的即插即用库。
AxolotlKit足够抽象,可轻松集成到您的项目中。请参考文档或TextSecure示例,以正确实现所需的Objective-C存储协议。
Axolotl不像OTR,它旨在用于长期会话,需要存储密钥。AxolotlKit定义了存储类的接口(IdentityKeyStore.h
、PreKeyStore.h
、SessionStore.h
和SignedPreKeyStore.h
)。AxolotlKit对象符合NSSecureCoding
,为您提供了对象序列化以供数据库使用。
使用预密钥的概念来实现异步完美的前向安全性。预密钥由一个Curve25519公钥和一个唯一的ID组成,两者都由服务器存储。
在安装时,客户端生成一个签名的预密钥以及大量的未签名的预密钥,并将它们传输到服务器。
Axolotl协议是面向会话的。客户端建立一个“会话”,然后用于所有后续的加密/解密操作。一旦建立会话,就无需拆除会话。
会话以以下方式之一建立
预密钥包。希望向接收方发送消息的客户端可以通过从服务器检索该接收方的预密钥包来建立会话。
预密钥Whisper消息。客户端可以接收一个来自接收方的PreKeyWhisperMessage,并使用它来建立会话。
已建立的会话在两个客户端之间包含大量的状态。该状态在需要维持至会话生命周期的耐用记录中。
状态存储在以下位置
身份状态。客户端需要维护自己的身份密钥对状态,以及从其他客户端接收到的公钥。
预密钥状态。客户端需要维护自己生成的(私有)预密钥状态。
已签名的预密钥状态。客户端需要维护其已签名的(私有)预密钥状态。
会话状态。客户端需要维护已建立的会话状态。
A: 如果 Swift 证明是加密应用的不错语言,这将会被考虑。现在还为时尚早,做出这个决定还为时过早。
感谢 Trevor Perrin 和 Moxie Marlinspike 对 Axolotl 协议和原始实现的出色工作。感谢 Conor Heelan 为 Axolotl 提供插图。