OTR协议学习
文章目录
最近信息安全实验课有一个编程项目,我们组的选题是加密即时通讯软件。上网搜了一番资料后发现一个OTR加密协议(Off-the-Record)。又搜到几篇关于OTR的论文,从中学到了许多加密协议方面的知识。
0x01 原始协议
第一篇论文Off-the-record communication, or, why not to use PGP提出了OTR协议的初始版本:
设计目标
只有对话双方知道对话内容;对话结束后,任何人包括对话双方都不能得到对话内容的副本;虽然对话双方能相互确认身份,但任何人不能向第三方证明身份;上述几个目标都是为了模拟现实生活中的“私人谈话”。
使用的加密特性
- Perfect forward secrecy (PFS)
- Digital signatures
- Message authentication codes(MAC)
- Malleable encryption
协议使用DH密钥交换提供前向保密性,使用RSA签名进行身份验证。由于签名提供了不可否认性,使得任何人都能验证消息签名,所以只有DH密钥交换的消息中使用签名认证,对话消息不签名,保证可否认性。为保证消息完整性,验证消息来源,使用MAC。使用流密码加密,使得任何人在不知道密钥的情况下也可以伪造会话消息。
协议过程
Encryption
为保证会话密钥短时性,每次会话都使用DH交换新密钥,DH交换与会话消息发送同时进行。
\[ A \rightarrow B:g^{x_1} \]
\[ B \rightarrow A:g^{y_1} \]
\[ A \rightarrow B: g^{x_2}, E_{k_{11}}(M_1) \]
\[ B \rightarrow A: g^{y_2}, E_{k_{21}}(M_2) \]
\[ A \rightarrow B: g^{x_3}, E_{k_{22}}(M_3) \]
Forgetting Keys
当会话密钥过期后,密钥被丢弃。而当Alice不停向Bob发送消息时,会产生许多会话密钥,由于延迟,Bob使用的会话密钥是不可预知的,因此Alice需维护一个密钥表。
Authentication
MAC密钥从会话密钥经过Hash得到。初始DH密钥交换使用签名认证
\[ A\rightarrow B:Sign_{k_A}(g^{x_1}),K_A \]
\[ B\rightarrow A:Sign_{k_B}(g^{y_1}),K_B \]
正常的会话消息如下
\[ g^{x_{i+1}},E_{k_{ij}}(M_r),MAC_{H(k_{ij})}(\{g^{x_{i+1}},E_{k_{ij}}(M_k)\}) \]
Revealing MAC keys
当Alice收到来自Bob的消息后,Alice把消息的MAC密钥以明文发送出去
0x02 原始协议的问题
第二篇论文Secure Off-the-Record Messaging指出了上篇论文中OTR协议存在的问题
SECURITY ANALYSIS
An authentication failure
原始OTR协议中的DH密钥交换会受到"identity misbinding"攻击。
\[ A \rightarrow E:g^x,Sign_{s_A}(g^x),v_A \]
\[ E\rightarrow B:g^x,Sign_{s_E}(g^x),v_E \]
\[ B\rightarrow E:g^x,Sign_{s_B}(g^x),v_B \]
\[ E\rightarrow A:g^x,Sign_{s_E}(g^x),v_E \]
A freshness-impersonation vulnerability
由于DH密钥交换消息内没有指定接收方,因此会遭受重放攻击
Deniability
如果消息内指定接收方,由于DH密钥交换消息使用签名,因此不具有可否认性。
BUILDING A SOUND AKE FOR OTR
一种可行的密钥交换协议如下:
\[ A\rightarrow B:g^x \]
\[ B\rightarrow A:g^y \]
\[ A\rightarrow B:A,Sign_{sk_A}(g^y,g^x),MAC_{K_m}(0,A),vk_A \]
\[ B\rightarrow A:B,Sign_{sk_B}(g^x,g^y),MAC_{K_m}(1,B),vk_B \]