信号协议问题

Red*_*nda 4 java encryption

再会!我有几个关于使用 Signal 协议的问题。

我有一个小型的基本聊天,想要加密消息(端到端)。正如您所见,我想尝试 Signal,但我想保留我的服务器端实现。

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

主要问题是:

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

Mos*_*ieb 5

每个人都使用BobAlice所以我也会这样做

预密钥包构建于:

  1. 注册号
  2. 身份公钥
  3. 签名预密钥(公钥和签名)
  4. 临时预密钥(公钥)

无论爱丽丝鲍勃开始通过生成密钥。
两者都将它们创建的内容发送到服务器(当然,只有密钥的公共部分)。
现在让我们假设Bob想要给Alice发送消息。
Bob向服务器请求签名的预密钥包
服务器发送固定密钥(身份和签名)、签名和未签名的预密钥之一。
然后它处理 pre 密钥 - 它永远不会再次使用,因此Bob拥有一个对他来说唯一的密钥,并且永远不会过期。
Bob现在可以使用捆绑包创建共享密钥并将其发送给Alice,使用随每条消息而变化的棘轮键在两者之间启动会话。

所以回答你的问题:

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