协议安全分析方法的综述

          安全协议的定义是:   是建立在密码体制基础上的一种交互通信的协议,所以也成为密码协议,他运行在计算机通信网或者分布式系统中,借助于密码算法来达到秘钥分配,身份认证的目的。两方或者多方为了获得某种特定的安全目标而执行的一个分布式算法。这个算法确定一个动作的序列,这些动作主要发送和接受使用密码的功能构造消息。

         安全协议的属性和安全协议的目标是两个不同的概念: 安全协议的属性-----> 机密性 完整性 认证性   不可否认性  公平性  匿名性

       安全协议为什么老是会存在安全隐患问题,一方面来说 协议的设计没有一套完善的理论和方法来指导协议的设计。很难避免出现人为的错误。    任何形式化模型都是不可能模拟协议的所有的内容,也就是不可能检测或者预防所有类型的安全协议的威胁。如果从安全协议设计开始就是用形式化的分析方法,势必会减少协议中存在的漏洞问题。

安全协议的最初模型的分析真正开始于 Dolev和Yao提出的Dolev-Yao模型,至今DY模型任成为大部分协议形式哈分析工作的基础理论,DY模型对入侵者的身份,知识和能力给出了具体的描述,在DY模型中,攻击者可以控制整个通信网络,并假定攻击者具备很多功能( 熟知参与协议的主体标识符合公钥等一些列的公开信息,具有专业的密码分析知识和能力, 熟悉加解密,散列 ,签名验证等基础的运算,并且拥有自己的加密解密密钥 ,具有进行各种攻击 如 重放攻击 和并行会话攻击等)知识能力 。这也就是在Scyther攻击输出图中出出现  “初始化知识”的缘由。那么在DY模型中是不是意味着攻击者可以完全掌握整个网络---也不其然,我们来看看 DY中的敌手能力的边界限制(不能由给定的公钥求出其匹配的私钥,不能控制计算机环境中的许多私域,没有对用明文的私钥不能求出或者恢复出明文信息,不嫩从足够大的空间中选中随机数  对于完善的加密,需要借助给定的明文构造出正确的密文)

而且目前的很多形式化分的都是基于这个模型的,简单的说安全协议的形式化分析有协议系统的数学或逻辑模型,系统规约的证明程序组成,使用的方法主要分成三种 :  逻辑推理方法  模型检测方法  定理证明方法  

     逻辑推理方法的概念:  由命题的知识或者推理规则组成,命题表示主体对消息的知识或信念,这类方法中最具有代表性的BAN逻辑,但是BAN逻辑处理能力有限,存在的问题是初始假设与理想化步骤非形式化,没有考虑入侵者存在等问题,GNY   AT 逻辑 统称为BAN  逻辑   ,BAN逻辑的缺点是BAN抽象层次过高,无法对消息空间,消息交换以及协议运行环境进行细致的描述,BAN类逻辑适合描述不同的安全目标,很难把他们合并到统一的理论框架下。

    模型检测方法:  也叫作状态空间搜索法,模型检测方法基于代数方法,首先建立协议运行的有限状态机模型,通过搜索所有可达状态,判断是否存在成功攻击协议的路径,基于模型检测的形式化分析方法的优点在于自动化的检测,过程和验证速度快,效率高,并且如果一个性质不满足,他能给出响应的反例,据此可对系统进行改进,模型检测的缺点是智能分析有限状态系统,随着状态的增加,存在状态空间爆炸问题,     ------------基于模型检测的方法 容易产生状态空间爆炸问题 ,所以不能分析复杂的协议,但是 Scyther工具完美的解决了这些问题。  一般需要制定运行的参数,一般包括运行实例和主体的数量,发现错误(攻击输出)说明协议确实存在错误,但是他不能证明协议时正确的。 模型检测能够实现自动化,即使不熟悉设计和分析人员也很容易使用。但是存在的两个缺陷的问题还是要关注:

    如何解决状态空间的爆炸问题和 实现模型检测方法的完备性。

    定理证明方法:  定理证明方法可以验证并无穷并发系统安全属性,具体的做法是将协议描述成为一些公式,协议的安全属性规约为需要证明的定理,然后利用模型的公式和推理规格证明目标定理成立,即证明协议满足安全属性,并不是寻找针对协议的攻击,但定理证明方法难以自动化,用户需要手动推导。而且需要具备专家级知识,有一定程度上限制其使用。----------

    形式化分析方法使用的相关工具是密不可分的,形式化分析工具是判定系统模型是否满足其规约的工具,不同的形式化分析方法在协议的建模 验证等方面都有很大的差异,,因此每种形式化方法都有自己的形式化工具。

      BAN逻辑的产生推动了协议的形式化分析这一方向的发展,1989年 Brrows和 Abadi 、Needdham 三个人提出了BAN逻辑,c从此安全协议的形式化分析进入了模态逻辑的分析阶段,BAN是一种基于信念的模态逻辑。 BAN在认证协议的形式化分析中发挥了积极的作用,但BAN逻辑仅仅关注在抽象层次上来讨论认证协议的安全性,他不考虑有协议的具体实现带来的安全缺陷,也不考虑由于加密体制的缺点所引发的协议缺陷,BAN逻辑的使用,很多假设的基础上的 :   密文不能被篡改    密文不能同时抵达两个,基于加密系统的完善性的 假设。密文中包含足够的冗余信息, 消息中含有足够的冗余信息 ,假设参与协议的主体是诚实的。从实际上看 ,BAN逻辑证明了一些协议时安全的,但是后来发现协议却存在安全漏洞,实际山也是不安全的。也就是证明了BAN逻辑发现协议时不安全的,就证明看了该研究的协议时不安全的。但是如果说是BAN逻辑证明安全的协议,我们不能说该协议就是安全的。这个问题也是很多协议分析工具所面临的一个问题。

   参考文献:

王焕孝. 基于SAT的安全协议形式化分析方法研究与应用[D]. 中国人民解放军信息工程大学.

朱宜炳, 罗敏, ZHUYi-bing, et al. 典型安全协议形式化分析工具比较[J]. 计算机与现代化, 2008(5).

Mao W . A Structured Operational Modelling of the Dolev-Yao Threat Model[M]// Security Protocols. Springer Berlin Heidelberg, 2002.

 

posted @ 2019-09-12 17:14  疏桐  阅读(2723)  评论(0编辑  收藏  举报
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) }();