我想了解信号协议的过程。我有谷歌它,但我找不到任何好的文章或教程。
我想了解信号协议的基本定义和功能,如果有任何描述该过程的图表可用,那就太好了。
我想了解信号协议的过程。我有谷歌它,但我找不到任何好的文章或教程。
我想了解信号协议的基本定义和功能,如果有任何描述该过程的图表可用,那就太好了。
看看 WhatsApp 的这份技术白皮书,他们最近转移到了用于 e2e 加密的信号协议。
Identity Key Pair – 在安装时生成的长期 Curve25519 密钥对。Signed Pre Key – 中期 Curve25519 密钥对,在安装时生成,由身份密钥签名,并定期轮换。One-Time Pre Keys– 一次性使用的 Curve25519 密钥对队列,在安装时生成,并根据需要进行补充。会话密钥类型Root Key – 一个 32 字节的值,用于创建链密钥。Chain Key – 用于创建消息密钥的 32 字节值。Message Key– 用于加密消息内容的 80 字节值。AES-256 密钥使用 32 个字节,HMAC-SHA256 密钥使用 32 个字节,IV 使用 16 个字节。Identity Key、 publicSigned Pre Key和单个 public 。One-Time Pre KeyOne-Time
Pre Key只使用一次,因此在被请求后会从服务器存储中删除。收件人最新一批One-Time
Pre Keys已消费且收件人未补货的,不予One-Time Pre Key退换。Identity Keyas Irecipient、
Signed Pre KeyasSrecipient和One-Time Pre Keyas
Orecipient。Einitiator。Identity Key为Iinitiator.master_secret =
ECDH(Iinitiator, Srecipient) || ECDH(Einitiator, Irecipient) ||
ECDH(Einitiator, Srecipient) || ECDH(Einitiator, Orecipient)。如果没有One Time Pre Key,则省略最终的 ECDH。Root Key并Chain Keys
从master_secret。建立一个长时间运行的加密会话后,发起者可以立即开始向接收者发送消息,即使接收者处于离线状态。在接收方响应之前,发起方会包含接收方建立相应会话所需的信息(在所有已发送消息的标头中)。这包括发起者的Einitiator和Iinitiator。
当收件人收到包含会话设置信息的消息时:
master_secret接收方使用自己的私钥和传入消息头中公布的公钥计算对应的值。One-Time Pre Key发起者使用的。Root Key发起者
使用 HKDFChain Keys从master_secret.