再会!我有几个关于使用 Signal 协议的问题。
我有一个小型的基本聊天,想要加密消息(端到端)。正如您所见,我想尝试 Signal,但我想保留我的服务器端实现。
从我所看到的 - 所有的工作都是从创建公钥并将它们发送到服务器开始的。然后,当 Alice 想给 Bob 写一条消息时,她要求服务器向她发送一个 PreKeyBundle。之后所有的消息交换就像在 github repo 的 SessionBuilderTest 中一样。
主要问题是:
每个人都使用Bob和Alice所以我也会这样做
预密钥包构建于:
无论爱丽丝和鲍勃开始通过生成密钥。
两者都将它们创建的内容发送到服务器(当然,只有密钥的公共部分)。
现在让我们假设Bob想要给Alice发送消息。
Bob向服务器请求签名的预密钥包。
服务器发送固定密钥(身份和签名)、签名和未签名的预密钥之一。
然后它处理 pre 密钥 - 它永远不会再次使用,因此Bob拥有一个对他来说唯一的密钥,并且永远不会过期。
Bob现在可以使用捆绑包创建共享密钥并将其发送给Alice,使用随每条消息而变化的棘轮键在两者之间启动会话。