我想了解信号协议的过程。我有谷歌它,但我找不到任何好的文章或教程。
我想了解信号协议的基本定义和功能,如果有任何描述该过程的图表可用,那就太好了。
我想了解信号协议的过程。我有谷歌它,但我找不到任何好的文章或教程。
我想了解信号协议的基本定义和功能,如果有任何描述该过程的图表可用,那就太好了。
看看 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 Key
One-Time
Pre Key
只使用一次,因此在被请求后会从服务器存储中删除。收件人最新一批One-Time
Pre Keys
已消费且收件人未补货的,不予One-Time Pre Key
退换。Identity Key
as Irecipient
、
Signed Pre Key
asSrecipient
和One-Time Pre Key
as
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
.