x3dh
#########
`The X3DH Key Agreement Protocol `_
`KCI in X3DH `_
通信双方相互认证,forward secrecy and cryptographic deniability.
通信的一方,可能是离线状态。
key
======================================
ecc: curve25519/curve448
设计了4类keypair:
- identity key (IK):long term
- signed prekey (SPK): periodically update,signed by long term identity key
- one-time prekey (OPK): only use one time
- ephemeral key (EK): temporary generate
dh
======================================
设计了4个DH值:
.. code-block::
DH1: IK_A & SPK_B
DH2: EK_A & IK_B
DH3: EK_A & SPK_B
DH4(optional): EK_A & OPK_B
SK = KDF(DH1 || DH2 || DH3)
SK = KDF(DH1 || DH2 || DH3 || DH4)
显然:
- DH1是A与B的绑定,DH2/DH3是临时内容与B的绑定,DH123在`SPK_B`的生命周期内无法保证前向安全性
- DH4可以保证一定的`伪`前向安全性,前提是server不作恶
.. code-block::
associated data:
AD = Encode(IKA) || Encode(IKB)
attack
======================================
Protocol replay: 无DH4的场景是可能重放的,导致SK总是一模一样;应设法加参数派生变换。