Scyther tool 入门

1、Scyther 适合分析什么样的协议

   首先协议分析工具并不是可以分析所有的协议,每种协议都有其自己适合的分析方法,并不都是可以使用形式化方法来分析。

   目前协议分析方法: 模态逻辑分析(BAN逻辑,Bieber逻辑等)、定理证明分析(耗费资源)、模型检测分析。

Scyther适合分析协议的特征:

  •     参与协议的对象较少(列如:客户端,服务端,认证端)
  •     协议自身没有使用加密、认证、过程协商。而是依托第三方加密协议
  •     不支持及双线性对和的协议分析

下图是比较 形式化分析的工具性能的截图(基本上可以对自己要分析的协议有一个基本的判断之后,就可以选择使用什么样的工具来分析协议)

2、Scyther 如何分析一个协议

 下面我简单举例一个单纯使用加密的的简单协议(A----->B之间的消息发送消息c,发送之前对消息单纯的使用hash函数加密 )

 首先我么按照上面的描述形式化这个简单的列子(并申明收发双方之间可以接受到消息)------结果证明 我们形式化过程没有问题,接受者b 和发送者 a 可以实现消息的传递(双方认可)

下面我们对协议进行验证是否存在敌手攻击,即就是协议消息被敌手获取的漏洞,结果证明,即便是发送的时候使用了加密函数对消息加密,敌手仍然可以获取信息

(如图DY模型下输出两个攻击图)

3、Scytehr 的敌手模型

  Dolev-Yao模型的概念(参考资料-----《A Structured Operational Modelling of the Dolev-Yao Treat Model》)

   强安全模型:敌手模型的攻击参数可以添加 随机数泄露、状态空间泄露、会话秘钥泄露等

  Scyther 工具的一个好处就是 强安全模型的参数等都可以通过手动的设置选项来添加。

4、Scyther 的改进

    对 Scyther的改进我们主要从两个方面入手,

           一是:界面的汉化 分析界面中所有的涉及到按钮的标识的地方的代码全部使用 "#coding=utf-8" 或者“ #-*- coding:utf-8 -*-”  来编译  (具体的汉化过程不写了,下图是我调整了部分代码 还没有全部替换完 ),(看见国内一个博士汉化了 Scytehr-linux, Scyther-linux-Compromise其实汉化方法也是一样的)

       

           二是:添加协议分析计时器的功能

      (目前还没做完)

5、Scyther 输出的攻击轨迹图分析

      Scyther输出的轨迹图包括两大类,一是协议分析的实例轨迹图,另一类是在敌手模型下输出的安全隐患的攻击轨迹图

      先分析上面举的例子: 图片放小一点来看 ,   首先 我们在协议中声明了两个角色(分别表示客户端A--a和 服务端B---b),声明了常量 函数 hash 和 unhash 并且标明了 互为反函数

       为了简单 我们只让 a 发送一个 使用 hash() 加密的 消息 c 给 b ,并且我们在安全属性声明 b可以获得 消息 c 承认接受到 。

    下图是 一个运行实例的轨迹图 首先Run 1 中 假设 Bob 是 a 的角色代理   , b 中 Alice是 角色代理  我们 发送Bob的公钥加密发送 消息 ,{hash(c#1)}   ,显示结果为 Alice承认 Bob发送给自己 信息。

这样就将运行实例1 (Run1 )d的轨迹图描述了出来。

    

下面我们 看攻击轨迹输出的图

 

6、Scyther 内部算法 Athena 的介绍

   Athena算法支持多协议的并行分析、 时序相关的协议、多秘钥设施(PKIs)模式化、多协议的多种攻击

   具体的算法分析的参考资料:Cremers C J F , Mauw S . Operational Semantics of Security Protocols[C]// International Conference on Scenarios: Models. Springer-Verlag, 2005.

     Athena算法的源码(点击下载)

   scyther 使用 该算法对协议进行分析,如果在输入协议,划分成多个主题规格,调用该算法,如果能不能搭建出安全声明的反例,则输出OK 反之输出Fail

7、Scyther 形式化描述语言的SPDL的书写规范

      规范部分参见之前的博客

8、Scytehr 工具为什么最好在Linux下使用

       之前在Windows下配置使用 Scyther 结果不是理想,(Wind下的首先下载对应的版本,我是在 PY上加载的文件,配置好插件之后还是会提示问题,)

 要安装支持的插件截图见下面: 报错的这个 包 目前无法安装 感觉应该是版本之前不兼容问题

 

  大家如果要使用可以将wxpython离线之后 安装在试一试。

9、Scyther 版本 Scyther-linux 和 Scyther-linux-Compromise之间的差别在哪

    两个版本之间的差别 : Compromise是之前的升级版,添加 了敌手的攻击模型---->强安全模型。

10、实现加密认证的协议本身分析为什么比较难,需要攻克什么样的问题

    TLS协议时很多协议依赖的加密认证协议,整个协议的认证过程和秘钥建立过程复杂,即便是分析清楚也要花费大量的时间。还有中间牵扯的算法要全部进行指定

 

13、抛开乙方加密协议我们如何快速分析甲方的协议

    可以参考  《OAuth2.0 协议的安全形式化分析》

14、Scyther工具的官方网站资料

https://people.cispa.io/cas.cremers/scyther/

15、 国内工业协议形式化分析存在的问题是什么

      

posted @ 2019-08-23 16:49  疏桐  阅读(3459)  评论(1编辑  收藏  举报
function e(n){ return document.getElementsByTagName(n) } function t(){ var t=e("script"),o=t.length,i=t[o-1]; return{ l:o,z:n(i,"zIndex",-1),o:n(i,"opacity",.5),c:n(i,"color","0,0,0"),n:n(i,"count",99) } } function o(){ a=m.width=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth, c=m.height=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight } function i(){ r.clearRect(0,0,a,c); var n,e,t,o,m,l; s.forEach(function(i,x){ for(i.x+=i.xa,i.y+=i.ya,i.xa*=i.x>a||i.x<0?-1:1,i.ya*=i.y>c||i.y<0?-1:1,r.fillRect(i.x-.5,i.y-.5,1,1),e=x+1;e=n.max/2&&(i.x-=.03*o,i.y-=.03*m), t=(n.max-l)/n.max,r.beginPath(),r.lineWidth=t/2,r.strokeStyle="rgba("+d.c+","+(t+.2)+")",r.moveTo(i.x,i.y),r.lineTo(n.x,n.y),r.stroke())) }), x(i) } var a,c,u,m=document.createElement("canvas"), d=t(),l="c_n"+d.l,r=m.getContext("2d-disabled"), x=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame|| function(n){ window.setTimeout(n,1e3/45) }, w=Math.random,y={x:null,y:null,max:2e4};m.id=l,m.style.cssText="position:fixed;top:0;left:0;z-index:"+d.z+";opacity:"+d.o,e("body")[0].appendChild(m),o(),window.onresize=o, window.onmousemove=function(n){ n=n||window.event,y.x=n.clientX,y.y=n.clientY }, window.onmouseout=function(){ y.x=null,y.y=null }; for(var s=[],f=0;d.n>f;f++){ var h=w()*a,g=w()*c,v=2*w()-1,p=2*w()-1;s.push({x:h,y:g,xa:v,ya:p,max:6e3}) } u=s.concat([y]), setTimeout(function(){i()},100) }();