作者:Yan Xiong, Cheng Su, Wenchao Huang, Fuyou Miao, Wansen Wang, and Hengyi Ouyang, University of Science and Technology of China
出处:USENIX 2020
背景
现有的检查安全协议中的设计错误的工具不能实现完全自动化的分析。自动化分析安全协议的瓶颈在于安全协议有全局状态或者无限的会话,它们会引起状态的爆炸从而影响分析。现有的工作要么是只解决全局状态,但是支持的会话数量有限;要么是解决会话数量但在有全局状态时有误报;还有的解决这两个问题但是不能实现自动化。
Insight
作者观察到现有的工具都使用一个静态的策略,因此作者提出一种动态策略来解决上述问题。
主要的思想是把校验过程视为在一个树上搜索一条路径的过程,每个树节点是一个proof state,它保存一个可用的lemma用于证明父节点的lemma(引理,论点),当且仅当一条路径中每一个节点代表的lemma加起来能够支撑一条安全校验性质的时候,那这条路径就被证明符合安全特性。
作者认为当给出一个随机策略时,表示支持引理的节点在错误路径上的概率较低。因此提出一种强化学习模型Deep Q Network(DQN)来支持这个动态策略进行节点的选择。此外,对于内存损耗以及loop中的校验也提出了解决方案。
方法设计与实现
-
Tamarin Prover
作者是基于Tamarin Prover这个工具进行了改进。原始的Tamarin Prover它是一个对安全协议进行符号建模和分析的工具 。输入一个协议模型,用户需要给定协议的参与方的动作(server、responder这些)、敌手的信息、协议应该要有的一些特征。然后这个工具就可以同时起这些参与方以及敌手的动作来看协议是否满足给定的特征。
上述关于协议和敌手的信息必须用这个工具规定的语法来写,写好的定义就会生成一个由符号表达组成的敌手知识、状态转换、网络报文、协议状态等信息。基于这些信息就可以模拟敌手和正常的报文交换。利用约束求解算法来决定协议是否满足给定的特征。 -
本文方法
- 给定协议描述和安全属性
- 用随机的策略初始化DQN,选出来一个策略。
- 用选定的策略进行搜索,起多个线程,每个线程根据策略选择节点进行验证。
- 如果一条路径被证明正确且完整,就停下来把这个路径作为结果打印出来。
- 如果所有路径都不正确,那就更新策略,然后重新搜索,循环往复。
-
例子
假设我有一个如图(Figure 3)的安全协议,C生成一个密钥k,用S的公钥加密后发给S,然后S用自己的私钥解密后得到k,再计算一个哈希值发送给C。至此,S和C就商量好了一个对称密钥k。利用规定的语法可以指定以下规则:
Rule C_1表示捕获参与方生成的k并且发送加密后的信息的这个动作。
Rule S_1表示以各参与方收到了C发出去的消息然后返回一个哈希值。
Rule C_2表示参与方收到了哈希值。
然后有一个敌手,他可能会持续窃听发送的加密信息,但是不能解哈希。我们需要证明他不会得到k。也就是证明下图(Figure 4)所示的lemma。Key_secrecy这个安全特性需要满足不存在一个状态当SessKeyC(S,K)(表示C和S商量密钥的过程)发生的时候敌手得到k,并且LtkReveal(S)(表示S的密钥被破坏)不发生。
4. 采集模块
在采集模块需要构建一个校验树。树种的每一个节点由三部分组成:
- ID:约束规则的哈希值。
- step:当前证明的步骤数。
- Rule:约束约简规则的字符串
在生成的时候它先生成安全特性也就是图4里面的Key_secrecy,然后逐渐生成选中节点的子节点,每次往下生成两层。
- 验证模块
- 选择一条路径然后证明它的正确性。
- 路径中有loop的时候就认为path是不正确的。
- DQN:它是一个动作选择策略模型,就是说给定一个状态,它会输出一个动作。它记录了节点和奖励用于强化学习指导之后的动作选择。