1. proverif简介

Proverif用来验证密码协议,密码协议是利用互联网等公共通信渠道进行交互以实现一些与安全相关的目标的并发程序。Proverif是在Dolev-Yao模型下进行密码协议验证的。在Dolev-Yao模型下,攻击者可以完全控制通信信道,可以读取、修改、删除以及注入消息,攻击者还可以操纵数据,例如:计算元组的莫个参数,使用密钥解密信息。Proverif还将检测不诚实的参与者行为,只有诚实的参与者会被建模。
Proverif允许密码术语和相关安全性目标以形式化的方式输入,允许自动验证声明的安全性目标。假设密码是完美的,只有攻击者拥有所需的密钥才能执行密码操作。运用对等原理或者重写规则来获取密码术语之间的关系。
使用Proverif语言,需要分三步,第一步声明;第二步进程宏;第三步主进程。

2. 握手(handshake)协议描述

假设client A和server B都有一对公私钥,client A知道server B的公钥(skB)。握手协议的目标就是,client A和server B分享密钥s。client A向server B发送请求,即【A→B:pk(skA)】;server B产生新的对称密钥k作为会话密钥,B把会话密钥和它的身份(pk(skB))相配对,用私钥skB进行签名,即【sign((pk(skB),k),skB)】;再用A的公钥进行加密,即【B→A: aenc(sign((pk(skB),k),skB),pk(skA))】。当client A收到消息后,A用自己的私钥进行解密,验证B的签名使用B的公钥,并提取会话密钥k。

A→B:pk(skA)
B→A: aenc(sign((pk(skB),k),skB),pk(skA))
A→B:senc(s,k)

我们希望这个协议提供三个属性:
- 安全性:会话密钥只有client A和server B知道;
- A对B的认证:如果B达到协议的末尾时,它相信已经和A分享了密钥k,那么A确实是它的对话者,也分享了k。
- B对A的认证:如果A用共享密钥k到达了协议的末尾,那么B提出k供A使用。
这个协议是不能抵抗中间人攻击的。如果一个不诚实的参与者D和B开始一场会话,那么D随后就可以假冒B和A进行会话。在会话结束后,A认为自己已经和B分享了私钥s,而实际上是和D分享了私钥s。

3. proverif模拟握手协议

 (*Symmetric key encryption*)type key.fun senc(bitstring, key):bitstring.reduc formall m:bitstring, k: key; sdec(senc(m,k),k)=m.(*Asymmetric key encryption*) type skey.type pkey.fun pk(skey):pkey.fun aenc(bitstring, pkey):bitstring.reduc formall m:bitstring, sk: skey; adec(aenc(m, pk(sk)), sk) = m. (*Digital signatures*)type sskey.type spkey.fun spk(sskey): spkey.fun sign(bitstring, sskey): bitstring.reduc foamall m: bitstring, skk:sskey; getmess(sign(m,ssk)) = m.reduc foramll m: bitstring, ssk: sskey; checksign(sign(m, ssk),spk(ssk)) = m.free c: channel.free s:bitstring [private].query attacker(s).event acceptsClient(key).event acceptsServer(key,pkey).event termClient(key,pkey).event termServer(key).query x:key,y:pkey;event(termClient(x,y))==>event(acceptsServer(x,y)).query x:key; inj-event(termServer(x))==>inj-event(acceptClient(x)).let clientA(pkA:pkey, skA:skey, pkB:spkey)=out(c,pkA);in(c,x:bitstring);let y=adec(x,skA) inlet (=pkA,=pkB,k:key)=checksign(y,pkB) inevent acceptsClient(k);out(c,senc(s,k)).event termClient(k,pkA).let serverB(pkB:spkey, skB:sskey) =in(c,pkX:pkey);new k:key;event acceptsServer(k,pkX).out(c,aenc(sign((pkB,k),skB),pkX));in(c,x:bitstring);let z=sdec(x,k) inif pkX=pkA then event termServer(k).processnew skA:skey;new skB:sskey;let pkA=pk(skA) in out(c,pkA);let pkB=spk(skB) in out(c,pkB);((!clientA(pkA,skA,pkB))|(!server(pkB,skB)))

4. proverif代码分析

4.1 声明
type----类型、free----自由名称、fun----构造函数;自由名称和构造函数可以声明公开或者私有,如果声明为私有,则攻击者无法获取。
在握手协议中,定义了三种type,分别是key,skey,pkey,sskey,spkey。key是密钥;skey是私钥;pkey是公钥,由skey生成;sskey是签名使用的私钥,spkey是签名使用的公钥,由sskey生成。
定义了9种函数,分别是senc()【加密函数,使用密钥对明文进行加密】,adec()【解密函数,使用密钥对密文进行解密,与senc()函数的关系使用析构函数进行说明(第5行)】,pk()【公钥生成函数,由私钥产生公钥的过程】,aenc() 【加密函数,使用密钥对明文加密】,denc()【解密函数,使用密钥对密文进行解密,与aenc()函数的关系使用析构函数进行说明(第16行)】,spk()【由签名私钥生成签名公钥】, sign()【使用私钥进行签名】, getmess()【得到签名的明文,与签名函数sign()的关系由析构函数决定(第27行)】, checksign()【使用签名者的公钥,验证签名,与签名函数sign()的关系由析构函数决定(第28行)】。
第31行定义了公共通信信道c。
第33行定义了s为私有的,不公开的。
第34行定义了攻击者想要获取的参数s。
第36—39行,是为了认证clientA和serverB的合法性,定义了4个事件的发生。分别是acceptsClient(key)【被client记录它已经接受与serveB运行协议并接收对称密钥key】、acceptsServer(key,pkey)【server接受与client运行协议,接收密钥key和client的公钥pkey】、termClient(key,pkey)【client相信它已经终止了一个协议,第一个参数是对称密钥key,第二个参数是client的公钥pkey】、termServer(key)【server相信它已经终止了与client的协议,参数是对称密钥key】。
client只能和server进行密钥协商,而server可以和多个client进行密钥协商。如果在协议的最后,如果server确认clientA是他的对话者,server只希望A→B的认证保持,所以当pkX=pkA时,执行termServer(x)。
第41、42行用来实现认证属性的。第41行不是inj-even是因为握手协议不允许client验证收到的信息是否是新鲜的。

5. ProVerif模拟结果

Proverif分析handshake协议相关推荐

  1. 计算机网络协议教案,计算机网络实验教案(6)网络协议分析-IP协议3.pdf

    计算机网络实验教案(6)网络协议分析-IP协议3.pdf (2页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 <计算机网络实验> ...

  2. Wireshark数据抓包分析(网络协议篇)1.2安装Wireshark

    Wireshark数据抓包分析(网络协议篇)1.2安装Wireshark Wireshark(前称Ethereal)是一个网络包分析工具.该工具主要是用来捕获网络包,并显示包的详细情况.本节将分别介绍 ...

  3. Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述

    Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述 网络协议是用于不同计算机之间进行网络通信的.网络协议是网络上所有设备(如网络服务器.计算机.交换机.路由器等)之间通信规则的集合,它 ...

  4. Wireshark数据抓包分析——网络协议篇

    Wireshark数据抓包分析--网络协议篇 Wireshark是目前最受欢迎的抓包工具.它可以运行在Windows.Linux及MAC OS X操作系统中,并提供了友好的图形界面.同时,Wiresh ...

  5. 计算机网络数据分析报告,贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式...

    贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 贵州大学GUIZHOU UN ...

  6. 使用WinPcap抓包分析网络协议

    创建一个使用wpcap.dll的应用程序 用 Microsoft Visual C++ 创建一个使用 wpcap.dll 的应用程序,需要按一下步骤: 在每一个使用了库的源程序中,将 pcap.h头文 ...

  7. 接口协议之抓包分析 TCP 协议

    TCP 协议是在传输层中,一种面向连接的.可靠的.基于字节流的传输层通信协议. 环境准备 对接口测试工具进行分类,可以如下几类: 网络嗅探工具:tcpdump,wireshark 代理工具:fiddl ...

  8. 网络协议分析与仿真课程设计报告:网络流量分析与协议模拟

    公众号:CS阿吉 网络协议分析与仿真课程设计报告  题  目:网络流量分析与协议模拟 专业名称:         网络工程 班    级: 学生姓名:           阿吉 学号(8位): 指导教 ...

  9. BT源代码学习心得(七):跟踪服务器(Tracker)的代码分析(HTTP协议处理对象) -- 转贴自 wolfenstein (NeverSayNever)

    BT源代码学习心得(七):跟踪服务器(Tracker)的代码分析(HTTP协议处理对象) author: wolfenstein (NeverSayNever) 上次我们分析了Tracker类初始化的 ...

最新文章

  1. 在云中利用开源软件进行开发以提高创新能力
  2. 豆瓣评分9.1榜首图书:这本经典编程教材,第2版全面升级!
  3. windows7安dns服务器_在Windows 7 上安装DNS服务器bind9方法详解
  4. 移动语义-右值引用-完美转发-万字长文让你一探究竟
  5. ●HDU 2871 Memory Control(Splay)
  6. 四面体的表面积_边长为正四面体的表面积是()、;、;、;、。
  7. lg手机历史机型_LG手机业务亏损增加70% 宣称主因是国产品牌卖的太便宜
  8. 保密作战--在网络上隐藏自己
  9. 生信c语言面试题,c语言入门 java
  10. java设计模式----简单工厂
  11. java关于排版的说法正确是_Java代码规范--排版,命名---以及一个例子
  12. 【转】JMeter Tutorial的安装和具体操作
  13. 【economic】程序员外包平台
  14. 别慌,你的数据或许还有救!(内整理有大量数据恢复软件)
  15. XAML 创建浏览器应用程序
  16. 神经网络学习9--过拟合 (Overfitting)的解决办法
  17. 前端性能测试 WebPagetest功能
  18. (二)Execute
  19. 致远项目管理SPM系统之进度计划管理概述
  20. 输入两个整数,要求输出其中值较大者。要求用函数求出最大值

热门文章

  1. 谈谈PHP中的trait
  2. 第二次修有关路基和隧道的CASIO 5800P 万能曲线计算程序可以正反标
  3. php 摘要算法,MD5摘要算法 - lvk618的个人空间 - OSCHINA - 中文开源技术交流社区
  4. Xilinx Vivado定制IP核调用和除法器IP核的latency和resource分析
  5. 高校人员信息管理系统(C++版)
  6. VUE实现Web端多人语音视频聊天
  7. 【PXI 虹科科普文】-- PXIe机箱介绍
  8. 微信小程序网易云音乐设计与实现 毕业设计-附源码261620
  9. presto时间转换、时间加减、时间差
  10. 神州电脑安装docker for Windows