消息密钥是从发送者的链密钥派生而来的,该链密钥
随着每个发送的消息“棘轮”前进。此外,每次消息往返都要执行新的ECDH
协议,以创建新的
链密钥。通过立即“哈希棘轮”和往返“ DH棘轮”的组合
,可以提供前向保密性。
#1 楼
棘轮只是一种每次只能向前移动一次的装置,非常类似于固定领带筋(这是棘轮装置)。因此,如果您过去拥有状态值,则可以计算所有未来值。在Wikipedia上看到的棘轮:
此图显示了一个圆形齿轮,这有点误导;状态永远不会重复。想象一下,几乎是无限大的车轮或横肋。
然而,应该不可能用较新的值之一来计算先前的状态值。通常,这是通过单向函数(例如哈希或PRF)完成的。在这种情况下,将使用基于散列的PRF:HMAC-SHA256。
然后将链密钥更新为
Chain Key =
HMAC-SHA256(Chain Key, 0x02)
为了使车轮沿一个方向逐步前进,棘轮还驱动车轴:产生输出。在这种情况下,将使用另一次PRF运行来计算用于产生输出的状态。这将确保输出密钥材料不能用于计算其基于的状态值。
Message Key = HMAC-SHA256(Chain Key, 0x01)
这部分内容在这种情况下,棘轮是在将棘轮推进到下一个状态之前执行的。
除了上述棘轮之外,还为此WhatsApp方案执行了DH密钥协议。
Root Key
是状态,棘轮是: Chain Key, Root Key = HKDF(Root Key, ephemeral_secret)
您可以看到根密钥再次用于计算下一个根密钥。但是在这种情况下,密钥协商期间计算出的临时密钥会提供其他输入。
注意:
PRNG也可能使用棘轮,尽管基于计数器的构造也很常见;
硬件棘轮通常具有释放棘爪的释放装置(图片中的项目2);领带和加密棘轮没有这种功能。
密码安全的PRF(哈希或MAC)的大周期大小可确保状态不重复。
评论
$ \ begingroup $
评论不用于扩展讨论;此对话已移至聊天。
$ \ endgroup $
– SEJPM♦
18/12/6在15:16