您的位置:首页 > 新闻 > 会展 > Z语言学习——基于通讯案例

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

2024/12/23 22:28:54 来源:https://blog.csdn.net/qq_47966193/article/details/139843130  浏览:    关键词:Z语言学习——基于通讯案例

目录

1数据类型

2初始状态

3 Alice的消息发送

4 Bob接收与发送消息

5 Alice接收消息

6消息的增删改查

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_KnowledgeX∈ 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 语言时具有独特的优势和高效性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com