本发明属于计算机安全协议验证方法领域,具体涉及一种以攻击者为中心的安全协议验证方法。
背景技术:
安全协议是采用了密码算法的网络协议。密码算法是信息系统安全的基石,但信息系统整体的安全性不仅取决于密码算法的强度,而且与系统所采用的安全协议密切相关。即使系统所采用的密码算法是安全的,如果其所采用的安全协议存在安全风险,攻击者同样可以在不需要攻破密码算法的前提下对系统成功地实施攻击。伴随着计算机网络的普及不断发展,安全协议已成为信息系统中各种核心安全服务可靠运行的重要支撑,是实现在各种分布式的网络环境中安全共享各种网络资源的关键手段,对信息系统安全性具有至关重要的作用。当今互联网应用中几乎所有关键服务,如系统认证授权、电子商务、网银、在线支付等,都离不开安全协议的支撑。因此,安全协议的安全性分析方法一直是信息安全领域研究的关键问题之一。
为了能达到设计目标,研究人员提出了众多方法验证安全协议是否具有声称的安全性,其中最为著名和有效的是形式化分析方法。形式化分析方法采用数学模型对安全协议进行建模,具有可靠的理论基础,再辅以计算机自动推理验证技术,可以自动或辅助证明协议的安全性或发现其存在的安全隐患。例如G.Lowe基于CSP建模方法和FDR模型检测工具,发现了Needham-Schroeder公钥协议中存在17年的漏洞。由于基于严格的数学逻辑模型和推理方法,形式化分析的结论被业界广泛认可。是否经过形式化分析,已成为一个安全协议安全与否的重要指标。本发明主要解决问题是如何对协议进行形式化分析。
现有技术基于模型检测的安全协议分析方法,可分为两种:
第一类方法,需设定会话场景,以AVISPA系列工具为代表。大概有三种方法:(1)人工设定协议会话场景,如验证NS协议时设定为三个主体之间的平行会话;(2)自动设定协议会话场景,通过算法自动生成固定的会话实例;(3)采用符号化的协议会话场景,即令会话实例的主体为变量,按需实例化为具体的协议主体。设定会话场景后,依据建立的协议模型和攻击者模型对协议进行分析,其基本思想可分为两个过程:第一个过程称之为交互转移过程,协议中消息交互引起状态转移,形成状态空间树;第二个过程为攻击搜索过程,测试在某一状态转移规则下,攻击者能否参与协议形成攻击。两个过程都有相应技术减少搜索空间,交互转移过程可采用偏序规约的思想,去除重复状态,采用符号技术使状态树中的每一节点表示一类状态,缩减状态空间;攻击转移过程可使用惰性思想,在攻击搜索中按需实例化消息项中的变量。
第二类方法,不设定协议会话场景,以Athena和Scyther工具为代表,初始状态仅包含一个主体的会话实例,采用目标绑定或者节点绑定的方法,增加会话实例。
上述两种方法存在时序矛盾、扩展方式存在冗余等问题,会增加状态空间爆炸的可能性。
技术实现要素:
本发明针对现有技术的形势分析存在时序矛盾、扩展方式存在冗余,会增加状态空间爆炸的可能性等问题,提出一种以攻击者为中心的安全协议验证方法。
本发明的技术方案是:一种以攻击者为中心的安全协议验证方法,该方法包括以下步骤:
步骤1:对协议运行过程中的合法主体和攻击者行为进行建模,依据协议验证目标,设定初始状态,初始状态设定为只包含一个角色实例;
步骤2:提取状态中的待处理事件,依次判断现在状态和事件是否符合规则TRules,若符合,则按相应状态转移规则更新状态,继续步骤2过程;否则,该状态进入Resultstate集合中;
步骤3:对Resultstate中的状态进行判断,若存在某一状态,其攻击者知识中包含了协议需要保密的参数,则该状态为秘密性异常状态;若存在某一状态,其协议会话场景异常,则该状态认证性异常状态;否则,该协议设计是安全的。
所述的以攻击者为中心的安全协议验证方法,所述步骤一中的协议:表示成一个状态集合和一个状态转移集合,而且攻击者的各种行为、往来于协议参与者之间的消息都被考虑进这个状态集合和状态转移集合,遍历整个状态空间,检查是否能够到达某个感兴趣的状态。所述的以攻击者为中心的安全协议验证方法,所述步骤1中的建模主要包括:(1)依据Dolve-Yao模型,主体发送的消息不论目的方是否为攻击者,都可视为攻击者接收,所有主体接收的消息都可视为攻击者所发送;因此,协议的交互轨迹可用攻击者的有序通信关系序列表示,这样把协议的攻击者和合法主体统一描述为与攻击者有关的有序通信序列,并基于这样的通信序列定义状态;(2)当协议出现攻击的时候,攻击者必定参与了协议的运行过程,由于密码协议交互消息多采用密钥加密,攻击者在不知道密钥的情况下很难生成被合法主体接受的消息,从这一角度来说,验证协议是否安全等价于验证攻击者是否可以合成目标消息项;攻击者合成目标消息项的方式只能两种,一种是自己生成,另一种是诱使合法主体替其生成;因此,可从攻击者的角度制定状态转移规则,即由攻击者依据目标项其决定与哪些主体通信,截获哪些消息,是否需要新增会话实例。
所述的以攻击者为中心的安全协议验证方法,所述步骤2的规则TRules包括:TRule1、TRule2、TRule3、TRule4、TRule5、TRule6、TRule7、TRule8。
所述的以攻击者为中心的安全协议验证方法,所述TRule1具体规则为:若则:
state'={RI,E/e,pair∪(e→recv(I,t)),tpair,tE,Atk∪addTermAtK(t)}
规则TRule1表示在无需回溯的情况下,攻击者接收消息,更新攻击者知识。
所述的以攻击者为中心的安全协议验证方法,所述TRule2具体规则为:若则:
state'={RI,E/e,pair∪p,tpair/p,tE,Atk∪addTermAtK(t)}
规则TRule2表示处理的send事件时,tpair集合中存在与之对应通信关系,由于该send事件的前驱事件已经处理完毕,应将该通信关系加入到pair中。
所述的以攻击者为中心的安全协议验证方法,所述TRule3具体规则为:若则
state'={RI,E/e,pair∪(send(I,t)→e),tpair,sE,Atk}
规则TRule3表示攻击者可以依据现有知识合成目标消息。
所述的以攻击者为中心的安全协议验证方法,所述TRule4具体规则为:若设t的需求集合{core(t)},求解解空间S,对于则:state'={RI,E∪e1,pair,tpair,sE,Atk}
规则TRule4表示攻击者不能合成目标项,试图从外部获取需求以合成目标项。
所述的以攻击者为中心的安全协议验证方法,所述TRule5具体规则为:
若则形成状态为:state'={RI,E/e,pair∪(e1→e),tpair,sE/e1,Atk∪addTermAtK(t)};
所述TRule6具体规则为:
若则形成状态为:state'={RI,E∪e1∪before(e1)/e,pair,tpair∪(e1→e),sE/(e1∪before(e1)),Atk};
规则TRule5和TRule6表示已有角色实例中存在事件可与目标事件形成通信关系。
所述的以攻击者为中心的安全协议验证方法,所述TRule7具体规则为:
若
且则形成状态为:
所述TRule8具体规则为:
若
且则形成状态为:
规则TRule7和TRule8表示已有角色实例中存在事件可与目标事件形成通信关系。
所述的以攻击者为中心的安全协议验证方法,所述攻击者行为主要包括添加知识和攻击者推理,分别表示为addTermAtK(m)和core(m)。
所述的以攻击者为中心的安全协议验证方法,所述添加知识具体包括:攻击者将截获大量的新消息得到新的知识,这些消息项中存在大量重复的子项,为精简攻击者知识集合,制定了如下攻击者知识添加规则,并去除相同的不可分解子项:
R1:
R2:
R3:
R4:
R5:
所述的以攻击者为中心的安全协议验证方法,所述攻击者推理主要解决两个问题:一是判断攻击者能否基于攻击者推理规则和现有知识产生目标项;二是进一步判断若攻击者不能合成目标项,进一步判断攻击者能否通过某种途径获取特定新知识以合成目标项;
将特定新知识定义为需求core(m),设core(m)满足以下条件:
(1)
(2)
(3)
在上述需求定义中,条件(1)说明攻击者获得core(m)后,可以推导出消息m,条件(2)说明core(m)缺少任何元素,攻击者都无法推导出消息m,条件(3)要求攻击者获得core(m)后,获得的新知识与原知识集合无重复。
本发明的有益效果是:本发明的目标是在状态扩展过程中考虑时序矛盾,状态扩展引入回溯机制,在状态搜索过程中不会出现这类无效状态的扩展分支,中间状态数目减少;状态扩展是以攻击者需求为驱动的,方式不固定,分支更少,减少了状态空间数目。
附图说明
图1为时序矛盾示意图;
图2为协议模型结构示意图;
具体实施方式
实施例1:一种以攻击者为中心的安全协议验证方法,该方法包括以下步骤:
步骤1:对协议运行过程中的合法主体和攻击者行为进行建模,依据协议验证目标,设定初始状态,初始状态设定为只包含一个角色实例;协议:表示成一个状态集合和一个状态转移集合,而且攻击者的各种行为、往来于协议参与者之间的消息都被考虑进这个状态集合和状态转移集合,遍历整个状态空间,检查是否能够到达某个感兴趣的状态。
建模主要包括:(1)依据Dolve-Yao模型,主体发送的消息不论目的方是否为攻击者,都可视为攻击者接收,所有主体接收的消息都可视为攻击者所发送;因此,协议的交互轨迹可用攻击者的有序通信关系序列表示,这样把协议的攻击者和合法主体统一描述为与攻击者有关的有序通信序列,并基于这样的通信序列定义状态;(2)当协议出现攻击的时候,攻击者必定参与了协议的运行过程,由于密码协议交互消息多采用密钥加密,攻击者在不知道密钥的情况下很难生成被合法主体接受的消息,从这一角度来说,验证协议是否安全等价于验证攻击者是否可以合成目标消息项;攻击者合成目标消息项的方式只能两种,一种是自己生成,另一种是诱使合法主体替其生成;因此,可从攻击者的角度制定状态转移规则,即由攻击者依据目标项其决定与哪些主体通信,截获哪些消息,是否需要新增会话实例。
攻击者行为主要包括添加知识和攻击者推理,分别表示为addTermAtK(m)和core(m)。
所述添加知识具体包括:攻击者将截获大量的新消息得到新的知识,这些消息项中存在大量重复的子项,为精简攻击者知识集合,制定了如下攻击者知识添加规则,并去除相同的不可分解子项:
R1:
R2:
R3:
R4:
R5:
所述攻击者推理主要解决两个问题:一是判断攻击者能否基于攻击者推理规则和现有知识产生目标项;二是进一步判断若攻击者不能合成目标项,进一步判断攻击者能否通过某种途径获取特定新知识以合成目标项;
将特定新知识定义为需求core(m),设core(m)满足以下条件:
(1)
(2)
(3)
在上述需求定义中,条件(1)说明攻击者获得core(m)后,可以推导出消息m,条件(2)说明core(m)缺少任何元素,攻击者都无法推导出消息m,条件(3)要求攻击者获得core(m)后,获得的新知识与原知识集合无重复。
步骤2:提取状态中的待处理事件,依次判断现在状态和事件是否符合规则TRules,若符合,则按相应状态转移规则更新状态,继续步骤2过程;否则,该状态进入Resultstate集合中;步骤2的规则TRules包括:TRule1、TRule2、TRule3、TRule4、TRule5、TRule6、TRule7、TRule8。
TRule1具体规则为:若则:
state'={RI,E/e,pair∪(e→recv(I,t)),tpair,tE,Atk∪addTermAtK(t)}
规则TRule1表示在无需回溯的情况下,攻击者接收消息,更新攻击者知识。
TRule2具体规则为:若则:
state'={RI,E/e,pair∪p,tpair/p,tE,Atk∪addTermAtK(t)}
规则TRule2表示处理的send事件时,tpair集合中存在与之对应通信关系,由于该send事件的前驱事件已经处理完毕,应将该通信关系加入到pair中。
TRule3具体规则为:若则
state'={RI,E/e,pair∪(send(I,t)→e),tpair,sE,Atk}
规则TRule3表示攻击者可以依据现有知识合成目标消息。
TRule4具体规则为:若设t的需求集合{core(t)},求解解空间S,对于则:state'={RI,E∪e1,pair,tpair,sE,Atk}
规则TRule4表示攻击者不能合成目标项,试图从外部获取需求以合成目标项。
TRule5具体规则为:若则形成状态为:state'={RI,E/e,pair∪(e1→e),tpair,sE/e1,Atk∪addTermAtK(t)};
TRule6具体规则为:
若则形成状态为:state'={RI,E∪e1∪before(e1)/e,pair,tpair∪(e1→e),sE/(e1∪before(e1)),Atk};
规则TRule5和TRule6表示已有角色实例中存在事件可与目标事件形成通信关系。
TRule7具体规则为:
若
且则形成状态为:
TRule8具体规则为:
若
且则形成状态为:
规则TRule7和TRule8表示已有角色实例中存在事件可与目标事件形成通信关系。
步骤3:对Resultstate中的状态进行判断,若存在某一状态,其攻击者知识中包含了协议需要保密的参数,则该状态为秘密性异常状态;若存在某一状态,其协议会话场景异常,则该状态认证性异常状态;否则,该协议设计是安全的。
实施例2:一种以攻击者为中心的安全协议验证方法,首先需要对协议运行过程中的合法主体和攻击者行为进行建模,合法主体的行为可被描述为角色实例;攻击者的行为主要包括添加知识以及攻击者推理,分别表示为addTermAtK(m)和core(m)。
攻击者将截获大量的新消息得到新的知识,这些消息项中存在大量重复的子项,为精简攻击者知识集合,本发明制定了如下攻击者知识添加规则,去除相同的不可分解子项。
R1:
R2:
R3:
R4:
R5:
在攻击者知识的基础上,攻击者推理主要解决两个问题:一是判断攻击者能否基于攻击者推理规则和现有知识产生目标项;二是进一步判断若攻击者不能合成目标项,进一步判断攻击者能否通过某种途径获取特定新知识以合成目标项。
本发明中将特定新知识定义为需求core(m),设core(m)满足以下条件:
(1)
(2)
(3)
在上述需求定义中,条件(1)说明攻击者获得core(m)后,可以推导出消息m,条件(2)说明core(m)缺少任何元素,攻击者都无法推导出消息m,条件(3)要求攻击者获得core(m)后,获得的新知识与原知识集合无重复。需求是攻击者未知的知识集合,对攻击者合成目标项至关重要。
设集合{n1,n2,...,nk}和{m1,m2,...,ml},规定运算×满足:
{n1,n2,...,nk}×{m1,m2,...,ml}={{n1,m1},{n1,m2},...{n1,ml},{n2,m1},{n2,m2},
...{n2,ml},...,{nk,m1},{nk,m2},...{nk,ml}}
设消息项n的下一层子项为n1,n2...,则存在如下递归关系:
{core(n)}={n}∪{core(n1)×core(n2)×...}
else{core(n)}={core(n1)×core(n2)×...}
协议中的消息模板是一个确定的有限集合,攻击者遍历消息模板中的消息,判断收到该消息是否存在能得到集合core(m),符合该要求的的消息模块元素加入解空间S:
在本发明中,对协议的状态定义如下:state={RI,E,pair,tE,tpair,Atk}。
其中RI为角色实例集合;E为待处理事件序列,由RI中角色实例的事件组成,且符合规范时序;pair为通信关系序列,其顺序可以反应协议执行轨迹;tE为事件集合,用于存放与E中事件时序关系不确定的事件;tpair为通信关系集合,用于存放不能加入pair中时序关系不定的通信关系;Atk表示攻击者知识。
对于按如下规则进行状态转移。
TRule1:若则:
state'={RI,E/e,pair∪(e→recv(I,t)),tpair,tE,Atk∪addTermAtK(t)}
规则TRule1表示在无需回溯的情况下,攻击者接收消息,更新攻击者知识。
TRule2:若则:
state'={RI,E/e,pair∪p,tpair/p,tE,Atk∪addTermAtK(t)}
规则TRule2表示处理的send事件时,tpair集合中存在与之对应通信关系,由于该send事件的前驱事件已经处理完毕,应将该通信关系加入到pair中。
TRule3:若则
state'={RI,E/e,pair∪(send(I,t)→e),tpair,sE,Atk}
规则TRule3表示攻击者可以依据现有知识合成目标消息。
TRule4:若设t的需求集合{core(t)},求解解空间S,对于则:
state'={RI,E∪e1,pair,tpair,sE,Atk}
规则TRule4表示攻击者不能合成目标项,试图从外部获取需求以合成目标项。
TRule5:若则形成状态为:
state'={RI,E/e,pair∪(e1→e),tpair,sE/e1,Atk∪addTermAtK(t)}
TRule6:若则形成状态为:
state'={RI,E∪e1∪before(e1)/e,pair,tpair∪(e1→e),sE/(e1∪before(e1)),Atk}
规则TRule5和TRule6表示已有角色实例中存在事件可与目标事件形成通信关系。
TRule7:若且则形成状态为:
TRule8:若且则形成状态为:
规则TRule7和TRule8表示已有角色实例中存在事件可与目标事件形成通信关系。
协议验证的主要步骤为:
步骤1:依据协议验证目标,设定初始状态,初始状态设定为只包含一个角色实例。
步骤2:提取状态中的待处理事件,依次判断现在状态和事件是否符合规则TRules,若符合,则按相应状态转移规则更新状态,继续步骤2过程;否则,该状态进入Resultstate集合中。
步骤3:对Resultstate中的状态进行判断,若存在某一状态,其攻击者知识中包含了协议需要保密的参数,则该状态为秘密性异常状态;若存在某一状态,其协议会话场景异常,则该状态认证性异常状态;否则,该协议设计是安全的。
本发明基于模型检测方法,首先将协议表示成一个状态集合和一个状态转移集合,而且攻击者的各种行为、往来于协议参与者之间的消息都被考虑进这个状态集合和状态转移集合,遍历整个状态空间,检查是否能够到达某个感兴趣的状态。
模型检测是一种状态搜索方法,它认为每个主体都有与之相关的状态集,所有的主体状态集的并集构成系统状态,协议的每个步骤可以看作状态转移规则,依据协议的执行过程进行状态转移。通过模型检测,看是否存在从初始状态到一个不安全状态的转移过程。模型检测方法应包含状态定义、状态转移规则、终止条件等三个方面。
本发明的两个基本原理描述如下:
1.依据Dolve-Yao模型,主体发送的消息不论目的方是否为攻击者,都可视为攻击者接收,所有主体接收的消息都可视为攻击者所发送。因此,协议的交互轨迹可用攻击者的有序通信关系序列表示。这样我们可以把协议的攻击者和合法主体统一描述为与攻击者有关的有序通信序列,并基于这样的通信序列定义状态。
2.当协议出现攻击的时候,攻击者必定参与了协议的运行过程。由于密码协议交互消息多采用密钥加密,攻击者在不知道密钥的情况下很难生成被合法主体接受的消息。从这一角度来说,验证协议是否安全等价于验证攻击者是否可以合成目标消息项。攻击者合成目标消息项的方式只能两种,一种是自己生成,另一种是诱使合法主体替其生成。因此,可从攻击者的角度制定状态转移规则,即由攻击者依据目标项其决定与哪些主体通信,截获哪些消息,是否需要新增会话实例。
术语解释:
密码协议(cryptography protocol):又称为安全协议(security protocol),是建立在密码体制基础上的一种网络交互通信协议,其目的是为网络环境提供各种安全服务,通常运用密码算法和协议逻辑来实现网络中各种实体之间的身份认证、密钥分配等重要安全目标,是网络安全的一个重要组成部分。
新鲜数(fresh):也称为随机数,协议运行过程中,主体用于标识协议某次会话的一组随机数据,是安全协议中最常用安全手段之一。
Dolve-Yao模型假设:指攻击者完全控制网络,可以转发、窃听、阻断消息。
消息项(term):协议中的消息用消息项来表示,消息项分为基本项和复合项,基本项包括主体名agent、随机数fresh、密钥key,复合项由基本项通过加密(_)(_)、链接(_||_)和函数变化f(_,_)(如签名、哈希等操作)等操作形成。
事件(event):指主体在协议运行过程中的消息交互动作,send(Re,term)表示主体Re发送消息项term;事件recv(In,term)表示主体In接收消息项term。
前序事件和后序事件:设e1·e2·e3表示事件e1、e2和e3按时间关系构成事件偏序序列。e1之前的事件集合记为before(e1),之后的事件集合记为after(e1)。
通信关系→:指主体之间消息的收发关系,用符号→来表示。
知识:指主体或攻击者已知的消息项集合。
角色(role):协议参与者,通常包括发起者、响应者、可信第三方,它由一系列有序事件和知识组成。
置换与实例因子:置换设则表示将t中所有的变量子项x替换为x';实例因子实例因子中r表示主体,rid表示主体的运行轮次,为置换集合。
消息模板template:template是符合协议规定的消息格式和结构的消息项集合。协议交互过程中的所有消息可看成消息模板中消息的实例化,消息的实例化可分为两种情况,一种是角色实例的实例化,当新增一个角色实例时,角色的扮演者、密钥及其使用的随机数将会实例化;另一种是构建通信关系的实例化,将会对角色中的变量包括其他角色使用的主体名、随机数、密钥等进行实例化。
匹配函数Match(inst,pt,m,inst'):表示在inst和inst'作用下,两个消息项pt和m相等,即满足inst·pt=inst'·m。
角色实例(roleInst):指协议的一次运行交互过程中,角色实例化形成角色实例,用符号rInst()表示,如rInst(b#i)表示主体b第i次运行。
目标项:指攻击者需要生成的消息项。