hlpsl2if:将用HLPSL语言编写的规范转换为IF语言的低级规范的工具。cl-atse:用于分析安全属性的工具
以NSPK协议为例:
S为认证服务器,A想要认证B
A/B均通过S服务器获得对方的公钥。
A、B都知道S的公钥
一条信息是由若干信息组合而成的。
基本信息是:
函数形式:
常量:constants 变量:variables 旧值:X 新值:X‘
role
role-name(typed-parameters)
played_by
player
def=
local
`declaration-of-local-variables`
const
`declaration-of-constants`
init
`initialization-of-variables`
transition
`list-of-transitions`
end role
variable [, variable]*:type [, variable [, variable]*:type]*
constant [, constant]*:type [, constant [, constant]*:type]*
variable := expression [/\ variable := expression]*
label. condition [/\ condition]* =|> aaction [/\ action]*
例(复现图1第一步):
role
服务器角色:由S扮演。包含(参与者:类型,公钥:类型,设定的参数,两个信道参数(一个用于发送消息(Snd)和一个用于接收消息(Rcv)):类型)
参与者类型为:agent,公钥类型为:public_key,信道类型为:channel(dy)
local
此角色需要本地变量:两个代理名称(X, Y)和一个公钥(PKy)。
transition
标签:req1
触发条件:接收由两个代理名称组成的消息,并在其集合KeyMap中拥有第二个代理的公钥。(KeyMap的书写格式与前面一致)
执行:发送消息(Snd)由代理的名称及其公钥{Y, PKy}组成,所有这些都由服务器私钥加密。(参考:加密:{M}-{K} 由K加密的M)
注:
transition:
condition:
expression = expression
Rcv(message)
in(element,set) not (in(element,set))
action
variable' := expression
variable' := new()
Snd(message)
set' := cons(element,set)
例:(复现图1第二步)定义了B的属性及动作
witness/request/secret等语法参照1.5
当参与者的角色被定义时,我们必须描述如何将它们组合到一个特定的角色中,从而构建协议的会话。
对于示例NSPK密钥服务器,此角色由以下定义:
在本例中,会话是角色alice和角色bob的组合。角色服务器未在此级别运行,因为它对协议的所有会话都是公用的。
协议被完全指定后,我们仍然需要定义分析该协议的环境(包括入侵者的初始知识),以及要执行的场景,即并行运行的会话实例。因此,作为参数传输到角色的信息是常量(除了通信信道)。
对于示例NSPK密钥服务器,环境可以用以下方式描述:
入侵者有一个预先定义的名称(i),它的初始知识是代理的名称、这些代理的公钥以及自己的一对公钥(pki)和私钥(inv(pki))。
所描述的场景是由一个包含三个会话的服务器组成:第一个会话中的玩家是a和b,第二个会话中的玩家是a和入侵者,第三个会话中的玩家是入侵者和b。
必须在名为goal的部分中描述安全属性。如果未定义属性,则此部分不必存在。安全属性分为三类:
security of
完成声明,后跟一个常量标识符;此标识符用于生成信息(或第一次通信)的角色中,使用谓词secret
语法如下:
secret(information,identifier,agents-set)
其中agents set是允许知道信息的agent集合authentication_on
完成的,后跟常量标识符;此标识符用于与身份验证相关的角色;
首先,在经过身份验证的代理X的角色中,在谓词witness
使用以下语法:
witness(X,Y,identifier,information)
第二,在执行身份验证的代理Y的角色中,在谓词request
中使用以下语法:
request(Y,X,identifier,information)
这种身份验证的原理是,当发出request时,必须已经为相同的信息发出了相应的witness。weak_authentication_on
。用到的谓词为weak
与wrequest
例:NSPK协议的安全属性声明:
environment()
相关代码可以关注公号:养两只猫。发送NSPK获取。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。