信号协议问题

时间:2017-05-11 12:03:23

标签: java encryption

美好的一天!我有几个关于使用信号协议的问题。

我有一个小的,基本的聊天,并希望加密消息(端到端)。我想按你的意思尝试Signal,但我想继续我的服务器端实现。

从我看到的 - 所有工作都从创建公钥并将其发送到服务器开始。然后,当Alice想给Bob写一条消息时,她要求服务器向她发送一个PreKeyBundle。之后,所有消息交换就像在github repo的SessionBuilderTest中一样。

主要问题是:

  • 如果我收到PreKeyBundle,它什么时候会过期?
  • 我什么时候应该要求另一个PreKeyBundle?当我要求PreKeyBundle
  • 服务器是否从PreKeyStore中删除了该密钥,因此没有人可以再次使用它?

1 个答案:

答案 0 :(得分:2)

每个人都使用 Bob Alice ,所以我会做同样的事情

预密钥包的构建来自:

  1. 注册ID
  2. 身份公钥
  3. 签名前键(公钥和签名)
  4. 短暂前键(公钥)
  5. Alice Bob 都是通过生成密钥开始的 两者都向服务器发送他们创建的内容(当然只有密钥的公共部分) 现在让我们假设 Bob 想要发送消息 Alice Bob 要求服务器提供签名的预密钥包 服务器发送固定密钥(标识和签名),签名和一个未签名的预密钥 它然后处理预键 - 它永远不会再使用,所以 Bob 有一个对他来说唯一的键,永远不会过期。
    Bob 现在可以使用该捆绑包创建共享密钥并将其发送给 Alice ,使用针对每条消息更改的棘轮键启动两者之间的会话。

    所以回答你的问题:

    • 当您想要开始会话时,您要求预密钥包
    • 您的捆绑包未过期
    • 服务器删除预密钥(捆绑包的一部分),永远不会再使用它