【Proverif语法(六)】

Proverif的输出结果

Attack Derivation:解释攻击者为了破坏性质必须采取的行动。
Attack Trace:能够在输入文件所给出的进程中执行的trace

输出的三种结果:

  • true:结果被证实了,攻击没有发生,不会输出[Attack derivation] [Attack trace]。
  • false:性质被证伪了,输出[Attack derivation] [Attack trace],主要关注 [Attack trace]
  • cannot be proved:性质证明不了,观察它的攻击源[Attack derivation]有时可以手动构建一个攻击trace
握手协议输出实例

可以分为三部分:

  • Abbreviations:到A more detailed...描述了导致这个攻击的推导过程。
  • A more detailed...A trace has been found.描述了攻击trace
  • 最后的RESULT行给出了验证结果。
    *attacker (M)指在攻击者的知识里是持有M
    abbreviateDerivation=false:禁止使用缩写名称。
    explainDerivation=false:显示内部表示的Horn子句,而不是去显示进程的信息。
    traceDisplay=long:获得进程的状态等详细信息。
绘制攻击trace图
proverif -graph C:\proverif2.02pl1\graph session3.pv

格式:proverif -graph 存储pdf的路径 xxx.pv
请添加图片描述

分析上图的trace
诚实进程创建两个私钥,将生成的私钥发送给攻击者,~M = pk(skA_2)~M_1 = spk(skB_2)
获得两个进程,clientAserverB
clientA将自己的公钥发送到公共信道上,~M_2 = pk(skA_2),攻击者收到后存放在M_2中。
然后攻击者将自己的公钥发送给serverB
serverB 生成会话密钥k_2,执行事件{20}event acceptsServer(k_2,pk(a_1))
serverB发送aenc(sign((spk(skB_2),k_2),skB_2),pk(a_1))到公共信道上,攻击者存放在~M_3中。
攻击者执行adec(~M_3,a_1),获得sign((spk(skB_2),k_2),skB_2),利用spk(skB_2)可以获得(spk(skB_2),k_2)
攻击者发送aenc(adec(~M_3,a_1),~M) =aenc(sign((spk(skB_2),k_2),skB_2),pk(skA_2))clientA
clientA执行事件{13}event acceptsClient(k_2)
clientA通过公共信道发送senc(s,k_2),攻击者存放到~M_4中。
clientA执行事件{15}event termClient(k_2,pk(skA_2))

注意:Query event(termClient(x_2,y_1)) ==> event(acceptsServer(x_2,y_1)) is false. 因为对比事件{15}event termClient(k_2,pk(skA_2))而言,事件{20}event acceptsServer(k_2,pk(a_1))的第二个参数不同,pk(skA_2)≠pk(a_1),一个是clientA的公钥,一个是攻击者的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值