Scyther 协议形式化验证翻译 (第二章)

论文概述:$\alpha +\forall (\sum \oint_{3}^{4})$

第二章:  操作语义

 在第二章中我提出了一种新的安全协议的模型,用于定义安全协议以及协议的行为,在明确的模型中执行协议,结果是基于角色的安全协议模型,该模型与并发协议的数量无关,该模型对协议分析做出了几个明确的假设,并允许例如:用于从协议描述中推导出入侵者知识,在协议模型中,安全属性被建模成本地声明事件,本章基于引文[65]。本章主要的贡献是开发了新的安全协议模型,用于描述协议和协议的行为,该模型提供了几个新颖功能。

第三章 : 安全属性

 第三章扩展了第二章模型中的安全属性的定义,包括保密概念和现有认证属性的定义。我们通过开发一种强大的身份验证的概念(称为内射同步性)来扩展现有的身份验真属性集。同时我们给出了认证属性的层次结构,并给出了建立内射同步性严格的语法标准格式。我们应用这种正式的定义手动证明 Needham-Schroeder-Lowe协议的安全属性。本章基于引文[67,70,69,67] ,本章的主要贡献是包括现有的安全属性的定义,以及定义了一种更加强的认证属性称为同步性,这种新的身份验证属性通过层次结构与现有的身份认证属性相互关联,对于同步性,结果证明了关于内射性属性。

第四章: 验证

 基于安全协议模型,第四章介绍了一种算法用于验证安全属性和寻找攻击。但也具有能够对协议进行完整表征的功能,这个算法在原型工具 Scyther中已经实现,该工具的性能是安全协议形式化分析的最新技术。我们使用该工具可以进行大量的协议形式化的安全分析。本章的主要贡献是改进基于现有验证算法,此处算法背后的概念是在安全模型中重新定义的。这导致算法的改进,作为负面的影响,新算法共享语义特征,例如能够验证新的身份验证属性 。我们在新算法的输出和现有表征概念之间建立了联系,该算法确保更进一步的终止机制算法。我们表明在绝大数情况之下,并没有降低有效性,该算法涉及启发式(此处),我们研究了几种替代方案,并研究了各自的效率,通过引入附加参数保障新算法的终止。并且调查了特定参数选择的后果。

第五章 :多协议攻击

在第五章中使用原型工具自动分析多个协议的并行执行,在这种情况下,像嵌入式系统,智能卡协议或者手机应用程序,发现了性攻击和安全实践结果,  本章基于引文[62] ,本章主要的理论贡献是定义了多协议攻击,实际的贡献是分析了大量协议的多协议攻击,以及随后发现的几种新的多协议攻击,两种模式是标识捕获在同一网络上执行的协议可能存在的问题。

第六章: 推广 NSL进行多方认证

   第六章进一步讨论模型和工具应用,Needham-Schroeder-Lowe协议被推广到一系列多方认证协议。证明了协议秘密性的正确新,并给出了Needham-Schroeder-Lowe协议的广义版本,开发的协议可以作为多方同步协议的有效基础。参看引文[66]

 本章的主要贡献包括多方同步协议概念和协议中最小消息数之间的链接。开发了一系列的多方认证协议。并绘制了参数化证明,证明了Needham-Schroeder-Lowe协议的广义版本的正确性。

最后 我们在第七章讨论了相关的工作,结束论文,并在第八章中介绍以后的工作。

下面是论文的详细内容:

第二章 内容:   操作语义

在本章中,我们基于简洁的域分析开发了安全协议的形式语义。 语义的主要优点在于它尽可能地区分关注点,明确区分协议描述与其动态行为以及入侵者模型。 该模型的其他特征是直接处理多个协议的并行执行,安全声明的局部性,局部常量与角色实例的绑定,以及明确定义的初始入侵者知识。
 该模型旨在用作直观的核心模型,并允许分析基本的安全协议的概念,因此,仅在某些安全协议中出现的元素(时间或者流量控制),不包括在该模型中,在今后的工作中会添加,在这里我们只关注确定安全协议分析中发挥重要的元素,并使它们关系更加的精确。我们首先在 2.1 节中指出安全协议中涉及的概念,在2.2节中我们指定协议角色的安全级别,角色仅定义行为方案,这些方案在2.3节中实例化为行为。本节还通过描述定义代理网络行为的操作规则来包含代理模型没有入侵者,在2.4节中,我们向模型添加一个入侵者。
2.1 领域分析
  我们首先对安全协议的主要概念进行分析,此分析的目的是使得=设计决策明确,并将问题分解成为更小的部分。我们首先对相关概念进行非正式的描述,安全协议区分了很多行为。每个这样的行为我们称之为角色,我们有列如初始化角色(initiator)和响应者角色(responder)在协议中。系统由许多的通信代理组成,每一个代理有一个或者多个角色(可能来自多个安全协议),这样系统不执行协议,而是系统执行协议角色通过代理。代理执行的角色称为运行。列如,代理Alice 可以执行两个启动运行,一个响应运行并行执行,代理执行他们的运行实现安全目标(列如 信息的保密交换),当代理努力实现他们的目标的时候,入侵者可能会试图反对。入侵者的能力决定了攻击协议运行的强度,但是危险不光光是来自于外部,参与协议的代理也可能会与入侵者合谋尝试使得安全目标的无效,为了抵制攻击,代理可以在构造消息时使用加密原语。
鉴于此全局的描述,我们给出下面的客户以识别安全性的安全协议描述模型:

我们将会讨论这些方面的每一个,列出他们的变化点并作出适当的设计决策。当然每一个细分都是人为的,但是我们发现这里有助于增加结构和限制问题空间。提到字模型并不是一个独立的额实体,列如,协议规范利用提供的加密原语,并且如果入侵者控制网络(某些部分),则通信模型连接到入侵者模型。

协议规范:

  协议规范描述每一个角色在协议中的行为,我们将协议规范当做语义参数,我们定义(抽象)的语法指定安全协议,全面的覆盖安全协议的各个方面超出了本篇论文的范畴。相反我们选择合适的抽象级别上描述协议。这会限制结果的适用性,也就是说从某种程度上说,某些协议不会进入我们的模型。积极的一面是,这个选择允许我们开发高级的推理方法和工具,我们可以应用在大类协议上。我们做出的选择之一是将安全协议中的角色指定为时间顺序列表,实际上,安全加强的通信协议需要更加规范的语言,但是作为一个抽象描述像一个 认证协议,顺序列表就足够了。进一步说,我们认为安全声明事件为一个特殊的事件,计时器(所有与时间相关的信息)不包括在这个模型中,如果没有规定执行角色和函数所需要的初始知识,协议规范就不完整。协议规范中出现的常量和变量,安全协议中一个重要的组成部分是使用的新生成的值,比如像挑战------响应机制(经常称作  nonces 随机数),或者作为会话秘钥,我们定义有个抽象的语法和静态要求使规范的协议描述语言。
代理模型:
 代理执行协议角色,代理模型基于一个封闭的假设,也就是说,诚实的代理除了协议规范中描述的协议的行为之外就没有任何其他行为。这样除非协议中有特殊的说明,诚实代理角色不会泄露分级信息。封闭的假设并不是说代理在协议中值执行一次运行,我们假设代理可以并行执行任何有限数量的运行(以交错的方式)。代理模型还描述了代理如何解释角色的描述,代理按顺序执行器角色的描述,等待一个读事件,直到预期的输入消息可用,这个意味着代理会忽略意外的消息,更加具体的说,如协议规范所述,传入的消息与预期的消息格式匹配。我们的语义将通过这个匹配函数进行参数化,列如:允许检测攻击类型。
通信模型:
  通信模型描述了代理之间如交换信息。我们选择了异步通信模型,为了表达不同的危险模型,正如下一段所讨论的,我们使用两个多集缓冲区来完善通信模型,这些缓冲区由所有代理共享。
危险模型:
在1983年 Dolev 和 Yao 奠定了目前使用最广泛使用的网络威胁模型的基础[79], 在Dolev-Yao模型中敌手(入侵者)完全控制网络,入侵者可以拦截任何消息并插入任何消息,只要他能够从他的知识构建起其内容。Dolev-Yao模型常用的变体也隐含包括密谋的代理,这里我们明确了密谋代理的概念,允许我们系统的导入入侵者的初始知识,比Dolev-Yao模型弱的入侵者模型也是由意义的。例如在研究协议栈和特殊通信媒体的时候,无线通信,入侵者可以选择干扰或者窃听,但是但是不同同时选择同一个,因此我们将入侵者模型作为我们语义的一个参数。
密码原语:
密码原语是理想化的数据结构加密的,我们对加密原语的处理中使用的所谓黑盒的方法,这就意味着我们确切知道使用哪些数学对象来实现这样的结构,但是我们知道他们的相关的属性。除此之外,我们只考虑对称和非对称加密,符合黑盒测试的方法,我们假设密码学是完美的,由完美的密码学假设捕获,这个假设表明,在不知道解密秘钥的情况下,无法从其加密版本中学习纯文本。
安全要求:
安全要求说明了协议的安全目的,通常表示为安全属性(坏的事情不会发生),在本篇论文中我么只研究保密和各种形式的认证。然而,语义设置成这种方式其他基于跟踪的安全属性易于表达。在本篇论文中我们只考虑在此模型中如何处理基于跟踪的通用安全属性。详细的安全属性的描述在第三章。
2.2 安全协议规范
   (消息序列图)

作为本章的一个运行示例,我们使用简版的Neeedham-Schroeder协议来自参考文献[145] 简称为 NS 协议,在本篇论文中我们使用消息序列图(MSC)来说明安全协议和攻击,MSC是ITU标准化的协议规范语言[105].   图2.1 包括NS协议的MSC ,发起者 “i” 同时拥有私钥 sk(i) 和 响应者 的公钥 pk(r) ,对称的,响应者  r 拥有自己的私钥  sk(r) 和发起者的公钥 pk(i),我们使用秘钥 k 加密消息 m ,记作 {/m/}k 。发起者  i 首先创建一个随机变量  ni  ,使用方框指明,然后 将她的名字 i 和 ni 一起发送,使用公钥 pk(r) 加密,对于响应者 r  ,接受到之后,响应者生成一个新的随机变量 nr  ,连着之前接受到的变量 ni ,使用公钥 pk(i) 进行加密 ,一起发送给 发起者 i 。发起者在反过来解密消息,解密出 nr 并使用公钥 pk(r) 加密发送给 响应者 r 。安全声明使用六边形表示,发起者和响应者都声称认证属性 ni-synch成立,将在第三章中详细的介绍安全声明事件。

 协议规范定义了代理之间信息术语的交换,要注意的是,协议规范中出现的术语和稍后定义执行的模型不同,这里我们定义了角色术语,在协议规范中使用。

2.2.1 角色术语

 我们首先解释一些术语的基本术语,像 常量、角色和变量。下面我们添加配对和元组结构为角色术语集 为角色描述中使用。

定义 2.1 (基本术语集) 我们定义用于构造角色的基本术语集合

  •   var ,定义一个变量用于接收和存储消息
  •   const , 表示为角色的每个实例化新生成的常量,因此被认为是局部常量,
  •   Role ,表示 角色
  •   Func ,表示函数名

在表 2.1 中 在下面将展示这些集合的一些典型元素,如本论文中全文使用。

定义 2.2 (角色术语) 我们定义一组角色术语作为角色术语集,使用构造函数进行扩展以进行配对和加密,我们假设配对是右相关的。

来自函数集的函数被认为是全局函数,并且必须尊重所有的额方面,注意没有术语  f  表示函数  f 的形式,当我们想要参考函数 f 的时候,(在定义域 X ),我们使用 f 作为 {f(x)| x ∈X} 的简写。

如果全局常量出现在协议中, 我们将他建模为 arity zero的函数(元数 0),使用术语加密术语,只能解密过相同的术语(用于对称加密)或者反向秘钥(用于非对称加密)进行解密。为了确定解密一个术语需要知道哪个术语,我们定义一个函数,该函数为任何角色术语产生逆。

我们要求 是他自己的逆, 比如  

整片论文中,我们假设 pk 和 sk 函数元数为 1 ,映射到非对称秘钥。 比方说 ,特别是 我们使用 pk表示代理的公钥,使用 sk 表示代理的私钥。

例子 2.3(签名): 我们建立角色 R的私钥模型 sk (R) 和其逆,公钥 pk(R) ,使用公钥 pk对消息 m 加密建模 ,对消息进行签名不直接对应着用秘钥进行加密,相反,所谓的消息摘要加密,与之一起发送的消息,为了正确使用私钥 sk(R) 建模消息 m 签名。我们引进哈希函数 h ,签名 m 的结果术语是

其他的术语 rt 被认为是对称秘钥,我们有 ,除非另外说明。这样,虽然我们对两种加密都是用符号 { /   / } , 应用加密类型可以从使用的秘钥派生,请注意,我们,明确允许组合秘钥。比如 在,我们转向描述协议的行为,我们将协议描述成为角色集,而角色集又由角色事件组成。

定义 2。4 (角色事件):我们使用两个新的集定义角色事件集,标签 Label 和安全声明 Claims ,解释如下:

事件 表示由绑定到R的代理发送消息 rt ,用于绑定到代理 R',同样 表示由绑定到 R' 的代理接受消息 rt ,显示是由绑定到 R的代理发送的。事件表示 代理 R执行此事件时期望安全目标 c 和可选参数一起保持。声明事件时基于本地的声明,这就意味着只是关注 角色 R ,其他的 角色并不期望。本章的详细安全声明的概念将在第三正讨论。

角色事件集设置在协议描述级别包含协议中执行的所有操作,我们区分协议事件通过发送、读取、声明。虽然也可以包括其他的协议事件,列如模拟角色内部的活动,但是这里我们不这么做。发送事件协议、读取时间协议、声明事件协议。已经满足于我们大多数目的需求。我们将局部常量(如:nonce)的生成保持为隐式的,并假设局部常量的生成发生在事假中的第一次出现之前。需要标记的事件的标签

 来消除协议规范中相同事件的类似出现的歧义,这些标签的第二个用途是表达响应的发送事假和接受事件之间的关系,我们将在下一章中看到。对于这些属于条款,我们引入了一个允许我们识别术语部分的运算符。

定义 2.5 (子运算符): 子运算符 $\sqsubseteq $ 归纳总结如下: 

      

子术语运算符$\sqsubseteq $ 识别术语的字句,其中包括用于加密的术语的秘钥,注意的是 f (rt) 形式的术语没有适当的子术语,因为被认为是非组合术语。除了接受和发送术语,角色规范描述执行角色所需要的初始知识,这个初始知识是一组术语组。

定义 2.6 (角色知识): 我们将角色知识集RoleKnow 定义为不包含变量作为子项的所有角色术语的集合:

   $RoleKnow=P({rt\epsilon RoleTerm | \forall {rt}' :{rt}'\sqsubseteq rt\Rightarrow {rt}'\notin  Var})$
作为结论我们有 RoleKnow $\subset $ P(RoleTerm).  因为角色事件完全描述角色的行为,没有必要列如声明局部常量和变量,协议的执行不需要角色的知识,引入角色知识存在以下两个原因,一是他允许静态角色一致性测试,看看在给定初始知识集的情况下角色是否可以执行,二是他将使我们能够系统的推导出本章末尾入侵者知识。
定义 2.7(角色规范)一个角色规范包含一系列的事件和初始化知识, 所有的角色规范集定义为 :$RoleSpec =RoleKnow \times  RoleEvent^{*}$ 我们写 $[\varepsilon 1,\varepsilon 2]$ 表示两个事件列表
$ \varepsilon 1$  和 $\varepsilon 2$ ,我们写 $[\varepsilon 1,\varepsilon 2].[\varepsilon 3]$ 表示 级联,经常我们省略 单个事件的方括号,写作 $ \varepsilon 1$.$ \varepsilon 2$ 来表示$[\varepsilon 1,\varepsilon 2]$。
我们写 $A \mapsto B$ 表示部分函数,他将A的某些元素映射到B的元素上。
定义 2.8 (协议规范): 协议通过集合协议中的部分函数来指定多个角色的行为。 因此我们有这样的 $Protocol =Role \mapsto RoleSpec$ 。
    我们将使用 $MR^{P}(R)$ 作为协议规范P 中R 角色的初始知识的简写。在大多数情况下,我们将省略参数 P,如果预期的协议在上下文上中清楚。符号 MR 是 M的缩写 , 稍后会缩写表示知识,R表示角色。
角色事件在协议中描述必须是唯一的。课可以通过标签计划强制执行。者允许我们定义一个函数,role : RoleEvent $\rightarrow$ Role  给定一个角色事件,函数事件产生所属的角色,当上下文预期的协议使清楚的时候,我们可以将协议保留为一个隐式的参数。
定义 2.9 (角色描述): 下面的角色描述模型是 Needham-Schroeder 协议的初始角色。没有 任何的安全要求 表示如下:

 

以上角色的描述遵循第十二页 图12 ,选取左边的轴和其关联的事件,注意我们必须澄清术语中的哪些结构是变量(因为在接受消息时会收到值)和哪些是常数(因为是基于角色本身决定的)因此我们认为, i, R  ∈ Role , ni  ∈ Const  ,sk pk  ∈ Func .  $pk(i)^{-1}=sk(i)$ , $pk(r)^{-1}=sk(r)$ . 1,2,3,4  ∈ Label  , V  ∈ Var

 

 

  

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-05-06 17:27  疏桐  阅读(163)  评论(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) }();