一种Swift语言实施的安全协议的安全性验证方法与流程

文档序号:11775170阅读:259来源:国知局
一种Swift语言实施的安全协议的安全性验证方法与流程
本发明涉及一种安全性验证方法,属于信息安全领域,具体是涉及一种swift语言实施的安全协议的安全性验证方法。
背景技术
:一直以来,由于ios操作系统源码不开源,人们普遍认为它比开源的android操作系统具有更高的安全性,更能保证用户的隐私安全,因而得到了广泛的应用。然而,2015年9月发生的“xcodeghost”事件打破了ios系统安全的“神话”,黑客直接将木马代码嵌入了ios平台应用软件的开发工具xcode,程序员们使用被植入恶意代码的xcode工具开发应用程序,会导致应用程序本身携带恶意代码,被植入恶意代码的应用程序可以在appstore正常下载并安装使用,对用户的隐私数据安全造成了威胁,让人们对ios系统的安全性产生了怀疑。当前,人们对ios系统安全性的分析集中在对操作系统本身安全机制的研究和ios平台下的应用程序的安全性研究,主要包括分析基于ios操作系统架构、软硬件的安全特性、应用程序的数据库设计、安装包、实时监测等评估方案,还没有涉及对ios系统安全协议实施安全性分析。安全协议实施安全性指安全协议在实际应用过程中代码的安全性。研究者们提出了大量能够保证网络空间安全的安全协议规范模型,然而理论上被证明安全的安全协议在实际应用的过程中会由于各种原因变得不安全,如某些开发人员为了方便实现常常以牺牲安全性、内存泄露为代价,这就使得开发的应用程序本身就存在不安全因素。当然,某些公司也会对开发的应用程序进行安全测试,但这种测试并没有用自动化工具进行验证,有时并不能完全地检验出其中是否存在不安全因素。因此,研究安全协议实施安全性,保证安全协议规范与安全协议实施的安全性是极其重要的。技术实现要素:本发明解决的问题是,分析ios平台上的安全协议swift语言实施安全性,保证安全协议实施与安全协议规范模型具有同等的安全性,为此,本发明提出了一种swift语言实施的安全协议的安全性验证方法。该方法基于计算模型,利用模型抽取方法从安全协议swift语言实施中得到安全协议blanchet演算实施;然后将抽取出来的安全协议blanchet演算实施转化为cryptoverif的输入语言,并在cryptoverif中运行得到安全性验证结果,从而验证安全协议swift语言实施安全性。本发明所述的技术问题主要是通过下述方案解决的:一种swift语言实施的安全协议的安全性验证方法,包括以下步骤:映射建模步骤,建立swift语言到blanchet演算的映射模型,并根据映射模型建立swift语言语句到blanchet演算语句、类型的bnf映射规则;实施抽取步骤,从swift语言实现的安全协议实施中抽取出自动化验证工具cryptoverif可以识别的安全协议形式化语言blanchet演算实施;安全验证步骤,根据自动化验证工具cryptoverif的输入语法,向从安全协议swift语言实施中抽取出来的安全协议blanchet演算实施添加安全性验证目标,然后导入cryptoverif中进行安全性分析。优选的,上述的一种swift语言实施的安全协议的安全性验证方法,所述映射建模步骤中,建立swift语言到blanchet演算的映射模型包括:将swift语言中的套接字声明转化为blanchet演算中的通道声明;将swift语言中的消息发送和接收接口映射至blanchet演算中的通道输出和通道输入;将swift语言中的类型声明、变量/常量声明、方法声明、语句等分别映射至blanchet演算中的类型声明、创建项声明、函数声明、语句。优选的,上述的一种swift语言实施的安全协议的安全性验证方法,所述映射建模步骤中,根据映射模型建立swift语言语句到blanchet演算语句规则包括:将swift语言中的常量映射为blanchet演算中的常量;将swift语言中的变量映射为blanchet演算中的项;将swift语言中的赋值表达式映射为blanchet演算中的let…in语句;将swift语言中的逻辑表达式映射为blanchet演算中的逻辑表达式cond。优选的,上述的一种swift语言实施的安全协议的安全性验证方法,所述映射建模步骤中,根据映射模型建立swift语言语句到blanchet演算语句规则包括:在转换blanchet演算模型过程中,忽略swift语言中的import导入包;将swift语言中的常量声明转换为blanchet演算中的new语句;将swift语言中的未初始化的变量声明映射为blanchet演算中的new语句;将swift语言中的已初始化的变量声明映射为blanchet演算中的let…in语句;将swift语言中的函数声明function_declaration:funcf(x:t,...){fun_body;}转换为blanchet演算中对应的函数funident(seq<t>):t[compos].;将swift语言中的类声明转换为blanchet演算中的进程。优选的,上述的一种swift语言实施的安全协议的安全性验证方法,所述映射建模步骤中,根据映射模型建立swift语言语句到blanchet演算语句规则包括:将任意一条swift语句statement:s转换为blanchet演算中输入或输出进程中的语句<outprocess/inprocess>。根据权利要求1所述的一种swift语言实施的安全协议的安全性验证方法,所述映射建模步骤中,根据映射模型建立swift语言中数据类型与blanchet演算的映射规则包括:对于swift语言中的基本数据类型,在blanchet演算中声明一个同名的数据类型,直接进行调用;对于swift语言中与密码体制、签名机制相关的数据类型需映射到blanchet演算中对应的密码体制、签名机制中的数据类型。因此,本发明具有如下优点:基于计算模型,利用模型抽取方法分析ios平台上的安全协议swift语言实施安全性能够将对安全协议的分析由规范模型扩展到具体实施方面,分析在实际应用中的安全协议是否与安全协议规范模型具有同样的安全属性。附图说明附图1是安全协议swift语言实施安全性分析与验证原理图。附图2是swift语言到blanchet演算的映射模型。附图3是swift语言表达式语句到blanchet演算的bnf映射规则。附图4是swift语言声明语句到blanchet演算的bnf映射规则。附图5是swift语言中基本语句到blanchet演算的bnf映射规则。具体实施方式下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。实施例:分析ios平台上的安全协议swift语言实施安全性的原理图如图1所示。由图可知,主要包括两个部分:获取安全协议blanchet演算实施和获取安全性验证结果。1、获取安全协议blanchet演算实施获取安全协议blanchet演算实施主要通过模型抽取的方法。模型抽取是从高级程序语言swift语言实现的安全协议实施中抽取出自动化验证工具cryptoverif可以识别的安全协议形式化语言blanchet演算实施,是ios平台上安全协议swift语言实施安全性分析与验证的关键。在抽取安全协议blanchet演算实施的过程中,需要考虑swift语言和blanchet演算的语法规则,基于操作语义的一致性,将swift语言实施的语法映射到blanchet演算中相对应的语法,进而生成对应的blanchet演算语言实施。bnf作为一种广泛应用于编程语言语法规则定义的规范,非常适合用来作为swift语言语法与blanchet演算语法之间建立映射关系的桥梁。为了完成模型抽取,首先建立swift语言到blanchet演算的映射模型,并根据映射模型建立swift语言语句到blanchet演算语句、类型的bnf映射规则。(1)swift语言到blanchet演算的映射模型通常情况下,安全协议的参与实体有多个。安全协议各参与实体在安全协议swift语言实施中是多个与之相对应的类,而在blanchet演算中,参与实体用多个进程来模拟。因此,swift语言中的类与blanchet演算中的进程存在映射关系,安全协议swift语言实施中的发送者类、接收者类分别转化为blanchet演算中的发送者进程、接收者进程。安全协议的不同实体之间不可避免的需要进行网络连接和消息传输。在swift语言实施中,通常会利用自定义的类库和相对应的接口来实现不同实体之间的通信,如websocket、swiftsockets、ysocket等等,从而实现不同实体在网络中发送和接收消息;在blanchet演算中,不同实体之间消息的传递在通道中实现,并利用相应的输出、输入方法分别实现消息的发送和接收。因此,在安全协议swift语言实施中,套接字的声明应该转化为blanchet演算中的通道声明,而消息的发送和接收接口分别对应blanchet演算中的通道输出和通道输入。在安全协议swift实施中,具体的类型声明、变量/常量声明、方法声明、语句等分别可以与blanchet演算中的类型声明、项、函数声明、语句建立对应关系。如此,可以得到安全协议swift语言实施到blanchet演算实施的映射模型,如图1所示。(2)swift语言语句到blanchet演算语句的bnf映射规则在swift语言的表达式语句(expression)中,主要定义了常量(value)、变量(variable)、赋值表达式(assignment)、逻辑表达式(logical_statement)。在定义表达式的bnf映射规则时,swift语言中的常量a∈value与blanchet演算中的常量a[:t]对应,变量x∈variable可以转化为blanchet演算中的项x[:t]。赋值表达式assignment:x=a可以转化blanchet演算中的let…in语句lety:t=simpletermin。逻辑表达式(logical_statement)可与blanchet演算中的逻辑表达式(cond)相对应,具体来说,逻辑与表达式logicaland:e1&&e2转化为blanchet演算中的逻辑与<simpleterm>&&<simpleterm>,逻辑或表达式logicalor:e1||e2转化为blanchet演算中的逻辑或<simpleterm>||<simpleterm>,逻辑等于表达式logicalequal:e1==e2转化为blanchet演算中的逻辑等于simpleterm>=<simpleterm>,逻辑不等于表达式logicalunequal:e1!=e2转化为blanchet演算中的逻辑不等于<simpleterm><><simpleterm>,由此可以得到swift语言表达式语句到blanchet演算的bnf映射规则如图2所示。声明(declaration)是swift语言中重要的部分,任何常量、变量、函数等都必须先声明,然后才能被使用。在swift语言的语法规则定义中,主要定义了导入声明(import_declaration)、常量声明(constant_declaration)、变量声明(variable_declaration)、函数声明(function_declaration)、类声明(class_declaration)。其中,导入声明用于加载编译器中已经定义好的类或包,从而确保程序能够调用类或包中定义的方法,在blanchet演算中,并不存在对应的语法,因此,在转换blanchet演算模型过程中,遇到import导入包,可以直接跳过。对于常量声明letx[:t]/letx[:t]=a,由于swift语言实施中的许多用于初始化的常量在blanchet演算中没有实际意义,因此直接将其转换为blanchet演算中的new语句newx:t;对于变量声明,如果仅仅是声明而没有进行初始化varx[:t],可将其与blanchet演算中new语句newx:t相对应;如果是声明且进行了初始化varx[:t]=a,则将其与blanchet演算中的let…in语句lety:t=simpletermin相对应。swift语言中的函数声明function_declaration:funcf(x:t,...){fun_body;}可以转换为blanchet演算中对应的函数funident(seq<t>):t[compos].。关于swift语言中的类声明,根据上一节定义的映射模型,可以确定将swift语言中的类class_declaration:classa{}转换为blanchet演算中进程leta_process=,每一个类均转换为一个进程。由此得到swift语言声明语句到blanchet演算的bnf映射规则如图3所示。最后需要定义的是swift语言中基本语句(statement)到blanchet演算的bnf映射规则。在将swift语句转换为blanchet演算语句时,任意一条swift语句statement:s将被转换为blanchet演算中输入或输出进程中的语句<outprocess/inprocess>,每个swift语句块code_block:{s*}将转换为blanchet演算中输入或输出进程中的多条语句<outprocess/inprocess>*,swift语句中的if语句if_statement:ife{p}else{q}被转换为blanchet演算中对应的if语句if<cond>then<outprocess>else<outprocess>,swift语句中的guard语句guard_statement:guardeelse{p}同样转换为blanchet演算中的if语句if<!cond>then<outprocess>,需要注意的是,将guard语句转换为blanchet演算中的if语句时,条件表达式需要进行取非操作,因为只有guard语句中有不成立的条件时,else后的语句块才会被执行,当所有的条件均成立时,else后的语句块是不会执行的。此外,在swift语言中创建一个类的实例new_class:letx=class(e1,e2,...),那么在blanchet演算中与之对应的是利用new语句创建一个新的项newx:t,swift语言中调用类的方法class_method:class.method(e1,e2,...),可以转换为blanchet演算中的函数funident(seq<t>):t[compos]。在swift语言中,利用套接字等多种形式来进行消息的发送与接收,而在blanchet演算中,消息的发送与接收通常用out和in语句来实现,以swift语言套接字为例,将其建立映射关系即可得到:利用socket中的send方法socket_send:socket.send(x1,x2,...)来发送消息,在blanchet演算中可映射为out语句out(<channel>,<term>)[;<inprocess>;利用socket中的receive方法socket_receive:socket.receive(x1,x2,...)来接收消息,在blanchet演算中可映射为in语句in(<channel>,<term>)[;<outprocess>。由此得到swift语言基本语句到blanchet演算的bnf映射规则如图4所示(3)swift语言到blanchet演算类型的映射规则swift语言和blanchet演算都是强类型语言。区别在于,swift语言中的基本类型如整型int、单精度浮点型float、双精度浮点型double、布尔型bool、字符串string等都是swift语言本身预先定义的,用户直接使用即可;而在blanchet演算中,除了与密码体制、签名机制相关的部分数据类型是由blanchet演算本身预先定义的之外,其他大部分类型是用户自己声明后使用的。因此,在定义swift语言到blanchet演算的类型映射规则时,主要从以下两个方面考虑:swift语言中的基本数据类型,在blanchet演算中声明一个同名的数据类型,直接进行调用;swift语言中与密码体制、签名机制相关的数据类型需映射到blanchet演算中对应的密码体制、签名机制中的数据类型。swift语言到blanchet演算的部分类型映射规则如表1所示。表1swift语言到blanchet演算的部分类型映射规则swift语言类型blanchet演算类型类型说明ciphertextciphertext密文类型plaintextcleartext明文类型stringkeyseed/mkeyseed密钥种子类型stringkey/key密钥类型stringseed随机种子类型stringpkey公钥类型stringskey私钥类型stringsigninput数字签名函数输入类型stringsignature数字签名函数输出类型stringhashinput哈希函数输入类型stringhashoutput哈希函数输出类型2、获取安全性验证结果获取安全性验证结果的方法是:根据自动化验证工具cryptoverif的输入语法,向从安全协议swift语言实施中抽取出来的安全协议blanchet演算实施添加安全性验证目标,将其转化为cryptoverif的输入后导入cryptoverif中进行。本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属
技术领域
的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1