Z语言学习——基于通讯案例

目录

1数据类型

2初始状态

[3 Alice的消息发送](#3 Alice的消息发送)

[4 Bob接收与发送消息](#4 Bob接收与发送消息)

[5 Alice接收消息](#5 Alice接收消息)

6消息的增删改查

[6.1 删除消息](#6.1 删除消息)

6.2查询消息

6.3修改/增加消息

7定理证明------重要目的

案例背景:

(1)构建一个交互式的通讯方案;

(2)攻击者控制了所有的通讯信道,可以修改、拦截、转发信息;

(3)诚实主体为了保护个人隐私,所有信息加密;

(4)信息项可以增加、删除、查询、修改。

1数据类型

(1)基于非对称密码保护方案;

(2)包含了各种错误信息和消息项操作信息;

[Messages]

定义一个消息类型。

Agents ::= Alice | Bob | Evil

三个主体, Evil是攻击者

Keys ::= Alice_PK| Bob_PK| Evil_PK | Alice_SK | Bob_SK | Evil_SK | NULL

Alice_PK表示Alice有个公钥,Alice_SK表示Alice有个私钥,NULL表示消息可以明文传送。

Result ::= OK | NoSuchltem

传输结果,操作成功OK,某个消息不存在NoSuchltem

Command := Add | Del | Query | Modi

额外的选项,交易项的操作信息:增删改查

Check _M: Agents × Agents × Command × Messages × Keys

→Command × Messages × Keys

额外定义了一个函数,函数的输入是一个五元组(Agents × Agents X Command × Messages × Keys),函数的输出是一个命令,消息,和对应的一个密钥(Command × Messages × Keys

)。

Check_M=O

初始化:是初始化函数,因为所有的都是集合,所以要有初始值。

2初始状态

Evil_Agent攻击者的状态

Adversary_Knowledge:P(Agents × Agents × Command × Messages × Keys)

攻击者的知识集,给他刻画了某一种数据类型,P表示由集合(Agents × Agents × Command × Messages × Keys)产生的密集。

Adversary_Init: Keys→ Agents

输入的Keys,对应的是一个实体,因为函数是多对一的,一个实体可以拥有多个密钥,

Acversary_Init = {(Alice_PK,Alice),(Bob_PK,Bob).(Evil_PK,Evil).(Evil_SK,Evil)}

对于攻击者而言,有3个公钥PK,1个私钥SK。

Alice_Agent

Alice_Knowledge: P Messages

Alice_Init: Keys →Agents

Alice_Init = {(Alice_PK,Alice),(Bob_PK, Bob), (Evil_PK,Evil), (Alice_SK,Alice) }

Alice_Knowledge = ∅

Bob_Agent(与Alice类似)

Bob_Knowledge: P Messages

Bob_Init: Keys → Agents

Bob_Init = {(Alice_PK,Alice).(Bob_PK. Bob),(Evil_PK.Evil),(Bob_SK,Bob)}

Bob_Knowledge = ∅

Init

Alice_Agent'

Bob_Agent'

Evil_Agent'

Adversary_Knowledge'=∅

得到初始状态,初始状态Alice与Bob之间没有任何消息的传递(Alice_Knowledge = ∅

,Bob_Knowledge = ∅),所以攻击者得不到任何信息,因此攻击者的知识集目前也是空的(Adversary_Knowledge'=∅)。

注意:Z规格中每一个schema本质上是由多个集合组成,每个集合上必须严格定义数据类型,因此Z规格是一种类型化系统;另外,对数据的操作则构成了多个命题。命题用于说明系统状态,后续将说明前件和后件的使用。

3 Alice的消息发送

Alice_send_Ml

Na: Messages

Na是一个随机数,定义为一个消息

M1!: Agents × Agents × Command × Messages × Keys

输出是M1

△Alice_Agent

△Evil_Agent

这里△表示如果Alice发送消息M1的话(Alice_send_Ml),会引起Alice_Agent和Evil_Agent的状态变化。

Na ∉ Alice_Knowledge

做一个判断,要发送的随机数Na不能属于Alice已有的知识集

Alice_Knowledge'= Alice_Knowledge ∪ {Na}

更新Alice知识集,增加Na

M1! = (Alice, Bob,Add,Na,Bob_PK)

输出M1用固定的表示(Alice, Bob,Add,Na,Bob_PK)

Adversary_Knowledge'= Adversary_Knowledge ∪ {M1!}

输出以后,攻击者会在知识集中增加M1的信息

4 Bob接收与发送消息

Bob receive Ml _send_M2

Bob收到M1同时发送M2

M1?: Agents × Agents × Command × Messages × Keys

?表示输入

M2!: Agents ×Agents × Command × Messages × Keys

!表示输出

Na,Nb: Messages

△Bob_Agent

△Evil_Agent

M1? ∈ dom Check_M

要检查一下M1是否属于Check_M函数的一个定义,属于证明才能通过。

(Bob_SK,Bob) ∈ Bob_Init

Bob要解密M1,所以需要一个私钥Bob_SK。

Check_M M1? =(Add,Na,Bob_PK)

利用函数Check_M判断M1,输入?是M1,输出是产出的结果判断,增加Add一个消息Na.

Bob_Knowledge'= Bob_Knowledge ∪ {Na,Nb}

接受方Bob知识集增加两个,Na 是Bob从密文中提取的,Nb是Bob自己产生的。

M2!=(Bob,Alice,Add,Nb,Alice_PK)

Adversary_Knowledge'= Adversary_Knowledge ∪ {M24}

5 Alice接收消息

大同小异了

6消息的增删改查

6.1 删除消息

Alice_And_Bob_Del

M?: Agents×Agents × Conmcd × Messcges ×Keys

reply!: Result

状态的反馈

X: Messcges

△Alice_Agent

△Bob_Agent

要求同时更新Alice和Bob两个实体状态。

M? ∈ dom Check_M

Check_M M?=(Del,X,NULL)

逻辑与符号*⋀*:可以省略,因为在Z规格中,每一行后面都会隐含一个and。这里只是为了增加可读性。

X∈ Bob_Knowledge

X∈Alice_Knowleclge

增加了额外的操作条件,此时前提条件有四个:判断M?属于Check_M定义域、M?中是否包含Del指令、消息X是否属于Alice知识集、消息X是否属于Bob知识集。

*⋀*Alice_Knowledge'= Alice_Knowledge \ {X}

*⋀*Bob_Knowledge'= Bob_Knowlecge \ {X}

上面的\就表示删除X

*⋀*reply! = OK

reply! = NoSuchItem

逻辑或符号*⋁* :

要写,表示产生了一个错误,当M不属于Check_M函数的定义,就返回没有信息项NoSuchItem

注意:Z规格中,系统的模型通常体现为一个LTS,即标签化的可变迁状态机。每一个状态的变迁有前提条件和后续条件。但是,Z规格的schema中并没有显示地说明哪些是前提条件,哪些是后续条件,需要用户自己甄别。

6.2查询消息

Alice_Or_Bob_Query

M?: Agents × Agents × Commcmnd × Messages × Keys

X: Messcges

resp!: Messcges

reply!: Result

ΞAlice_Agent

ΞBob_Agent

希腊字符Ξ:表示Alice和Bob的状态不会有任何的更改。仅仅是对消息的查询。

M?∈ dom Check_M

Check_M M?=(Query,X,NULL)

判断M?是否属于Check_M定义域、M?中是否包含Query指令

X∈Alice_Knowledge*⋀*X∈ Bob_Knowledge

reply! = OK

resp!=X *⋁*reply!= NoSuchItem

输出X,或如果输入不在Check_M函数中,输出没有的消息NoSuchItem

6.3修改/增加消息

Alice_Or_Bob_Modify

M_New? : Messciges

M_Old? : Agents × Agents ×Conmand × Messcges × Keys

对于修改消息,输入有两个,新旧消息项

X: Messages

reply!: Result

△Alice_Agent

△Bob_Agent

M_Old? ∈ dom Check_M *⋀*Check_M M_Old? =(Modi,X,NULLL)

判断旧消息项是否属于函数定义域,同时输出密文能把X找到。

X∈ Alice_Knowledge

*⋀*X∈ Bob_Knowlecge

*⋀*Alice_Knowledge'= Alice_Knowledge \ {X}∪{M_New?}

*⋀*Bob_Knowleclge'= Bob_Knowledge \ {X}∪{M_New?}

reply! = OK *⋁*reply! = NoStuchItem

7定理证明------重要目的

第一列Y表示没有语法错误,第二列Y表示没有逻辑错误。

重要目的:证明系统的安全性,或某些功能是否达到要求。

(1)初始状态中是否能够蕴含这三种实体

(2)Alice收到消息M2,是否从上面的系统中蕴含着Alice一定发送了消息M1

(3)Alice是否正确的得到了随机数Na和Nb,如果Alice收到M2,能否推出:

1)Na和Nb属于Alice知识集,2)Alice发送M1,3)Bob收到M1并发送M2

------------------------后面会学习软件Z-EVES:

Z-EVES 是专门为 Z 规范设计的,这使得它在处理 Z 语言时比一般的定理证明器更高效和精确。例如,支持 Z 规范的语法和语义检查。与其他形式化验证工具相比,Z-EVES 在处理 Z 语言时具有独特的优势和高效性。

相关推荐
小黑子不会打篮球几秒前
CTF之unseping
网络·web安全·网络安全
故事讲予风听2 分钟前
iptables与firewalld
linux·服务器·网络·网络安全
文盲老顾1 小时前
阿里云 ECS 服务器的安全组设置
服务器·安全·阿里云
竹等寒3 小时前
SQL注入方法
安全·网络安全
kinlon.liu3 小时前
Web应用安全实用建议
前端·网络·网络协议·安全·centos
威斯盾科技3 小时前
电力设备巡检管理系统
运维·网络·信息可视化
念晚9174 小时前
Linux——测网速例子,在网站查看生成的图片
linux·运维·服务器·网络·数据库
gavinwang1521524 小时前
一文解决:你与该网站的连接不是私密连接,存在安全隐患
安全·web安全·网络安全·https·ssl
yaoxin5211235 小时前
第四十七章 解决 IRIS 中的 SOAP 问题 - Web 网关中的 HTTP 跟踪
网络·网络协议·http
大众生活5 小时前
边界无限陈佩文:红蓝对抗安全演练常态化的各方分析
网络·安全·web安全