tamarin manual总结笔记5(使用流程的模型规格)

使用流程的模型规格

在本节中,我们提供了一个非正式的描述过程演算现在集成在Tamarin。它被称为SAPIC,即“状态应用PI-Calculus”。该模型的全部细节可以在(Kremer and k nnemann 2016)和(Backes et al 2017)中找到。

可以根据规则或作为(单个)流程对协议进行建模。过程被转换成一组遵守过程演算语义的规则。甚至可以将流程声明和一组规则混合在一起,尽管不建议这样做,因为规则和流程之间的交互取决于如何精确地定义这种转换.
在这里插入图片描述
SAPIC演算是应用pi演算的一种方言,具有用于存储、检索和修改全局状态的附加功能。

标准应用pi特性

建模协议的主要成分是网络通信和并行性。我们从网络通信和其他为本地操作建模的构造开始。

过程out(m,n);P和in(m,n);P分别表示通道m上消息n的输出和输入。与应用的pi演算(Abadi和Fournet 2001)相反,SAPiC的输入构造执行模式匹配而不是变量绑定。

如果通道被忽略,则假定公共通道’c’,这是我们大多数示例中的情况。这正是In(m)和Out(m)所表示的。进程也可以分支:如果Pred,则执行P,否则Q将执行P或Q,这取决于Pred是否保持。到目前为止,只实现了相等性检查,因此对于项t和t’, Pred总是具有t = t’的形式。

构造new a;P绑定了P中的新鲜名称a。与Fr(a)类似,它模拟了一个新鲜的随机值的生成。

事件构造类似于规则中的操作。事实上,它将被转化为行动。与规则一样,事件对流程的某些部分进行注释,对于声明安全属性非常有用。这些结构中的每一个都可以被认为是“局部”计算。它们用分号分隔;并以0结束,即终止进程或null进程。这是一个什么都不做的过程。允许省略末尾的0进程和由0进程组成的else分支。

现在我们来看看操作的并行性建模。P | Q是进程P和进程Q的并行执行。它被用来模拟协议中的两个参与者。

!P是P的复制,它允许在协议执行中无限数量的会话。它可以被认为是无穷多个进程P |…P并行运行。如果P描述了一个回答单个查询的web服务器,那么!P是无限期回答查询的web服务器。P+Q表示外部非确定性选择,可用于对备选方案进行建模。从这个意义上说,它更接近于一个条件,而不是两个并行运行的进程:P+Q减少为P’或Q’,后续进程或P或Q分别。

操纵全局状态

其余的构造用于操作全局状态

  • 结构插入m,n;P将值n绑定到键m。后续插入将覆盖此绑定。存储是全局的,但由于m是一个术语,因此可以使用它来定义名称空间。例如,如果一个web服务器是由名称w_id标识的,那么它可以为它的store添加如下前缀:
 insert <'webservers',w_id,'store'>, data;  P.
  • 构造delete m;P“取消定义”绑定。
  • 在P else Q中查找m为x的构造允许检索与m相关的值,并在输入P时将其绑定到变量x。如果m的映射未定义,则过程表现为Q。
  • lock和unlock结构用于获得或放弃对资源m的独占访问权,采用Dijkstra二进制信号量的风格:如果项m已被锁定,则任何后续锁定m的尝试将被阻塞,直到m已被解锁。这对于编写并行进程可以读取和更新公共内存的协议至关重要。

对于专家来说有一个隐藏的特性:内联多集重写规则:[l]–[a]-> r; P是一个有效过程。如果预置条件适用(即,左侧的事实存在),则应用嵌入式规则,并且将流程简化为此规则。如果规则适用于当前状态,则流程减少到p。我们建议尽可能避免使用这些规则,因为它们与SAPIC的目标背道而驰:为协议建模提供清晰、可证明正确的高级抽象。还请注意,状态操作将查找x构造为v,插入x,y和删除x通过发出IsIn(x,y’), insert (x,y)和delete (x)操作来管理状态,并通过限制强制其正确的语义。例如:表示查找成功的操作IsIn(x,y)要求操作Insert(x,y)先前已经发生,并且在此期间,没有其他Insert(x,y’)或Delete(x)操作更改了位置x的全局存储。因此,全局存储不同于当前状态下的事实集。

强制本地进度(可选)

可以修改来自进程的转换,使其执行不同的语义。在这个语义中,跟踪集只包含那些进程已经尽可能减少的跟踪集。进程可以减少,除非它正在等待一些输入,它正在复制,或者除非它已经减少到0进程。

选择:translation-progress

这可用于对超时进行建模。以下过程必须减少到P或out(‘help’);0:

( in(x); P) + (out('help');0)

如果接收到输入消息,它将产生规则,在这个例子中:p。如果没有接收到输入,除了右边没有其他方法可以进行。但进步是必须的,这样右手边的人才能制定恢复方案。

在翻译后的规则中,添加了ProgressFrom_p和ProgressTo_p事件。这里p标记了一个位置,当到达该位置时,需要出现相应的ProgressTo事件。这是通过限制来实现的。注意,工艺可能需要加工到一个以上的位置,例如:

new a; (new b; 0 | new c; 0)

进展到两个跟踪0进程。

它也可以加工成许多位置中的一个,例如这里

in(x); if x='a' then 0 else 0

更多细节可以在相应的论文中找到(Backes et al . 2017)。注意,本地进程本身并不能保证消息到达。恢复协议通常依赖于受信任的第三方,该第三方可能大部分时间都处于离线状态,但可以使用内置的可靠通道理论进行访问。

建模孤立的执行环境

IEEs或enclave允许在安全环境中运行代码,并提供enclave当前状态(包括已执行的程序)的证书。在(JKS-eurosp17?)中定义并包含在SAPIC中的应用微积分的本地化版本允许对此类环境进行建模。

进程可以被赋予一个唯一的标识符,我们称之为location:

let A = (...)@loc

位置可以是任何项(这可能取决于之前的输入)。位置是一个标识符,它允许谈论它的进程。在一个location中,可以生成一个关于某个值的报告:

(...
let x=report(m) in
...)@loc

然后,一些外部用户可以通过使用check_rep函数来验证某个值是否在特定位置产生,即由特定进程或程序产生:

if input=check_rep(rep,loc) then

只有当前面的指令产生了rep, m=input时,这才有效。

关于enclave的重要一点是,任何用户(例如攻击者)都可以使用enclave,从而为自己的进程或位置生成报告。但是,如果攻击者可以为任何位置生成报告,他就可以破坏与该位置相关的所有安全属性。为此,用户可以通过定义一个内置的Report谓词来定义一组不受信任的位置,这相当于定义一组他不信任的进程:

predicates:
Report(x,y) <=> phi(x,y)

如果phi(m,loc)为真,攻击者可以生成任意report(m)@loc

更多细节可以在相应的论文(JKS-eurosp17?)和示例中找到。

语法糖

使用let处理声明

建议围绕流程所代表的协议角色来构建流程。这些可以使用let结构声明:

let Webserver = in(<'Get',identity..>); ..
let Webbrowser = ..
(! new identity !Webserver) | ! Webbroser
These can be nested, i.e., this is valid:
let A = ..
let B = A | A
!B

其他过程演算,例如,ProVerif的应用-pi演算方言,只允许输入变量。虽然在letblock中编写模式有时更清晰,但它可能会让期望in构造绑定变量的用户感到困惑:

let pat_m1 = <x,y> in
in(pat_m1)

为了避免意外行为,我们只允许let表达式应用于in中的单变量项,如果该变量以pat_为前缀,如上面的示例所示。

在进程中使用“let”绑定

let foo1 = h(bar)foo2 = <'bars', foo1>...var5 = pk(~x)inin(<'test',y>); let response = <foo2,y> in out(response)

流程中的let绑定遵循与规则中的let绑定相同的规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/225628.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算:现代技术的基本要素

众所周知&#xff0c;在儿童教育的早期阶段&#xff0c;幼儿园都会传授塑造未来行为的一些基本准则。 今天&#xff0c;我们可以以类似的方式思考云计算&#xff1a;它已成为现代技术架构中的基本元素。云现在在数字交互、安全和基础设施开发中发挥着关键作用。云不仅仅是另一…

C#教程(四):多态

1、介绍 1.1 什么是多态 在C#中&#xff0c;多态性&#xff08;Polymorphism&#xff09;是面向对象编程中的一个重要概念&#xff0c;它允许不同类的对象对同一消息做出响应&#xff0c;即同一个方法可以在不同的对象上产生不同的行为。C#中的多态性可以通过以下几种方式实现…

Java API 操作Docker浅谈

背景&#xff1a; 使用com.github.docker-java库可以很方便地在Java中操作Docker。下面是一个详细的教程&#xff0c;包括创建镜像、创建容器、启动容器、停止容器和删除容器的步骤以及每一步的说明。 前提&#xff1a; 首先&#xff0c;在你的Java项目中添加com.github.doc…

ARM 汇编语言知识积累

博文参考&#xff1a; arm中SP&#xff0c;LR&#xff0c;PC寄存器以及其它所有寄存器以及处理器运行模式介绍 arm平台根据栈进行backtrace的方法-腾讯云开发者社区-腾讯云 (tencent.com) 特殊功能寄存器&#xff1a; SP&#xff1a; 即 R13&#xff0c;栈指针&#xff0c;…

渗透测试——1.4主动扫描

主动扫描是别人可以发觉的情报收集 一、nmap的使用 1.nmap<目标主机>:最常用的扫描方式 有nmap版本、扫描时间 “host is up”表示目标主机处于开机状态、“not shown”未开放端口 有四个端口是开的&#xff08;135.139.445.912&#xff09; 2.nmap -p<端口范围…

NET中使用Identity+CodeFirst+Jwt实现登录、鉴权

目录 前言 一、创建上下文类 1.自定义MyContext上下文类继承IdentityDbContext 2.在Program中添加AddDbContext服务 二、使用Migration数据迁移 1.在控制台中 依次使用add-migration 、updatebase 命令 2.如何修改表名 3.如何自定义字段 三、使用Identity实现登录、修改密码 …

【JAVA】黑马MybatisPlus 学习笔记【终】【插件功能】

4.插件功能 MybatisPlus提供了很多的插件功能&#xff0c;进一步拓展其功能。目前已有的插件有&#xff1a; PaginationInnerInterceptor&#xff1a;自动分页TenantLineInnerInterceptor&#xff1a;多租户DynamicTableNameInnerInterceptor&#xff1a;动态表名OptimisticL…

【小白专用】C# 压缩文件 ICSharpCode.SharpZipLib.dll效果:

插件描述&#xff1a; ICSharpCode.SharpZipLib.dll 是一个完全由c#编写的Zip, GZip、Tar 、 BZip2 类库,可以方便地支持这几种格式的压缩解压缩, SharpZipLib 的许可是经过修改的GPL&#xff0c;底线是允许用在不开源商业软件中&#xff0c;意思就是免费使用。具体可访问ICSha…

12月25日作业

串口发送控制命令&#xff0c;实现一些外设LED 风扇 uart4.c #include "uart4.h"void uart4_config() {//1.使能GPIOB\GPIOG\UART4外设时钟RCC->MP_AHB4ENSETR | (0x1 << 1);RCC->MP_AHB4ENSETR | (0x1 << 6);RCC->MP_APB1ENSETR | (0x1 <…

关于Windows 10防火墙的设置,看这篇文章就够用了

Windows 10防火墙是一个强大的安全系统,易于设置和配置。以下是如何使用它来阻止网络访问并为应用程序、服务器和端口创建异常。 当你登录到企业域时,你将使用整个系统验证你的凭据,包括现有的任何防火墙。这一基本原则也适用于登录家庭网络的个人,你授予自己使用网络和通…

手机无人直播:解放直播的新方式

现如今&#xff0c;随着科技的迅猛发展&#xff0c;手机已经成为我们生活中不可或缺的一部分。除了通讯、娱乐等功能外&#xff0c;手机还能够通过直播功能将我们的生活实时分享给他人。而针对传统的直播方式&#xff0c;使用手机进行无人直播成为了一种全新的选择。 手机无人…

[c]扫雷

题目描述 扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。 玩家翻开一个非地雷格时&#xff0c;该格将会出现一个数字——提示周围格子中…

利用Milvus Cloud和LangChain构建机器人:一种引人入胜且通俗易懂的方法

一、引言 机器人已经深入我们的日常生活&#xff0c;从家庭服务到工业生产&#xff0c;再到医疗和运输等领域。然而&#xff0c;这些机器人往往需要复杂的算法和数据处理技术才能有效地执行任务。在这个过程中&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#…

往年面试精选题目(前50道)

常用的集合和区别&#xff0c;list和set区别 Map&#xff1a;key-value键值对&#xff0c;常见的有&#xff1a;HashMap、Hashtable、ConcurrentHashMap以及TreeMap等。Map不能包含重复的key&#xff0c;但是可以包含相同的value。 Set&#xff1a;不包含重复元素的集合&#…

VMware之FTP的简介以及搭建计算机端口的介绍

目录 一.FTP的简介 1.1 FTP的作用 二.FTP的搭建 2.1 建立组和用户 2.2 添加角色和功能 2.3 用户绑定组 2.4 配置FTP服务器 2.5 授权 2.5 连接测试 三.计算机端口介绍 3.1 端口分类&#xff1a; 3.2 常见的计算机端口及其用途&#xff1a; 四.附图-思维…

promise的使用和实例方法

前言 异步,是任何编程都无法回避的话题。在promise出现之前,js中也有处理异步的方案,不过还没有专门的api能去处理链式的异步操作。所以,当大量的异步任务逐个执行,就变成了传说中的回调地狱。 function asyncFn(fn1, fn2, fn3) {setTimeout(() > {//处理第一个异步任务fn1…

uniapp 添加分包页面,配置分包预下载

为什么要分包 ? 分包即将小程序代码分成多个部分打包&#xff0c;可以减少小程序的加载时间&#xff0c;提升用户体验 添加分包页面 比较便捷的方法是使用vscode插件 uni-create-view 新建分包文件夹 以在我的页面&#xff0c;添加分包的设置页面为例&#xff0c;新建文件夹 s…

【文本处理】正则表达式

一、简介 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字符&…

短视频矩阵系统:赋予用户创造与分享的力量

在如今快节奏的社交网络时代&#xff0c;人们对于信息获取和娱乐方式的需求也逐渐发生了变化。作为当下最受欢迎的短视频平台之一&#xff0c;抖音短视频矩阵系统正以其独特的魅力和吸引力&#xff0c;深深地打动着亿万用户。 抖音短视频矩阵系统是一种基于移动端的短视频分享…

ros2+gazebo+urdf:ros2机器人使用gazebo的urdf文件中的<gazebo>部分官网资料

原文链接SDFormat extensions to URDF (the gazebo tag) — Documentation 注意了ros2的gazebo部分已经跟ros1的gazebo部分不一样了&#xff1a; Toggle navigation SpecificationAPIDocumentationDownload Back Edit Version: 1.6 Table of C…