【proverif】proverif的语法-各种密码原语的介绍和具体编码

proverif-系列文章目录

  1. 【proverif】proverif的下载安装和初使用
  2. 【proverif】proverif的语法-解决中间人攻击-代码详解
  3. 【proverif】proverif的语法2-各种密码原语的编码 (本文)

文章目录

  • proverif-系列文章目录
  • 前言
  • 铺垫知识
  • 一、对称加密
  • 二、非对称加密
  • 三、Diffie-Hellman密钥协议
  • 四、HASH function
  • 五、数字签名
    • 5.1 带消息恢复的签名
    • 5.2 带消息恢复的概率签名
  • 六、消息验证码(MAC)
  • 总结


前言

在官方文档中,给出了部分密码原语(例如:对称加密、非对称加密等)的详细编码例子,接下来我们可以通过学习官方例子代码,从而进行仿写并编写出自己需要的协议编码。
官网页数很多,而纵观全网关于proverif的相关学习资料很少,这看似是一块很难啃的骨头,但是没关系,再多的讲解资料都不如官方的使用手册来的详细。所以现在我们已经拿到寻宝图的真经,跟着本博客猪一起遨游proverif的知识海。


铺垫知识

  1. 宏机制:包含不止一个构造函数或析构函数应用程序的术语会重复多次。ProVerif提供了一种宏机制,以便定义表示该术语的函数符号并避免重复。
  2. or fail: 每个参数的类型之后,允许用户在某些参数失败的情况下控制函数宏的行为。果存在or fail并且参数失败,则将失败值传递给函数宏,该函数宏可能会捕获它并返回一些非失败结果。
letfun f(x1:t1 [or fail]...,xj:tj [or fail])=M.
  1. 宏机制的应用:非对称加密
type skey.
type pkey.
type coins.
(*格式:fun 函数名(参赛类型):输出参数的类型*)
fun pk(skey):pkey.*公钥生成*)
fun internal_aenc(bitstring,pkey,coins):bitstring. (*加密函数*)

reduc 
	forall m:bitstring,k:skey,r:coins;*参数名:类型*adec(internal_aenc(m,pk(k),r),k)=m. (*析构函数:解密函数*)

(*宏:每次加密时必须重新选择随机硬币r,为了避免在每次加密时都编写这段代码,我们可以定义一个函数宏aenc。*)
letfun aenc(x:bitstring,y:pkey)=new r:coins;intternal_aenc(x,y,r).

好消息:官方手册中明确表明,由于为加密原语定义正确的模型是困难的,我们建议重用现有的定义,例如本手册中给出的定义。
在这里插入图片描述
因此,我将手册中直接给出的密码原语建模列出来,并且我将用图文对相应的加密操作进行原理解释。

一、对称加密

和上一篇proverif语法介绍给出的对称加密不同之处在于,本代码使用了概率生成密钥进而形成加密函数internal_senc() :

type key.
type coins.

fun internal_senc(bitstring,key,coins):bitstring.

reduc 
	forall m:bitstring,k:key;
	sdnc(internal_senc(m,k,r),k)=m.
(*宏:重定义函数。格式:letfun 函数名称(参数名称:类型)=new 参数名称:类型;构造函数(参数名称)*)	
letfun senc(x:bitstring,y:key)=new r:coins;internal_senc(x,y,r).

二、非对称加密

于宏机制的应用中给出的非对称加密编码不同的是,下面的代码使用概率种子seed生成密钥对。

type seed.
type pkey.
type skey.

fun pk(seed):pkey.
fun sk(seed):skey.

fun aenc(bitstring,pkey):bitstring.
reduc
	forall m:bitstring,k:seed; 
	adec(aenc(m,pk(k)),sk(k))=m.

三、Diffie-Hellman密钥协议

在这里插入图片描述
原理:DH算法的基本原理就是通过共享的参数协商一个对称秘钥,然后用这个对称秘钥加密后面的通信。这里用到了离散对数函数,这样即使中间人截获了公钥,也无法计算出各自的私钥。具体的公式如官网描述所示:
在这里插入图片描述
建模代码:

(*声明类型*)
type G.
type exponent. (*指数类型*)
(*定义常量g是G类型的数组*)
const g:G[data].
fun exp(G,exponent):G.(*G的exponent次方*)
equation forall x:exponent,y:exponent;exp(exp(g,x),y)=exp(exp(g,y),x).

四、HASH function

(*Hash func*)
fun h(bitstring):bitstring.

五、数字签名

原理:签名方用自己的私钥签名,验证方用签名方的公钥验证。

在这里插入图片描述
在这里插入图片描述
分两种:

5.1 带消息恢复的签名

(* Digital signatures *)

type sskey.
type spkey.

fun spk(sskey): spkey. (*公钥生成函数*)
fun sign(bitstring, sskey): bitstring. (*私钥签名*)

(*不需要私钥就可以将签名的信息恢复成明文*)
reduc forall m: bitstring, ssk: sskey; getmess(sign(m,ssk)) = m.

(*通过公钥进行验证sign*)
reduc forall m: bitstring, ssk: sskey; checksign(sign(m,ssk),spk(ssk)) = m.

5.2 带消息恢复的概率签名

(* Digital signatures *)

type sskey.
type spkey.
type scoins.

fun spk(sskey): spkey. (*公钥生成函数*)
fun internal_sign(bitstring, sskey,scoins): bitstring. (*概率性私钥签名*)

(*不需要私钥就可以将签名的信息恢复成明文*)
reduc 
	forall m: bitstring, k: sskey,r:scoins;
	getmess(internal_sign(m,k,r)) = m.

reduc 
	forall m: bitstring, k: sskey,r: scions;
	checksign(internal_sign(m,k,r),spk(k)) = m. (*通过公钥进行验证sign*)
(*宏定义:每次使用签名的时候都要新建一个概率,避免重复编写,使用宏定义。*)
letfun sign(m:bitstring,k:sskey)=new r:scoins;internal_sign(m,k,r).

六、消息验证码(MAC)

工作原理:
消息认证码的输入为任意长度的消息和一个发送者与接收者之间共享的密钥,它可以输出固定长度的数据,这个数据称为MAC 值。

根据任意长度的消息输出固定长度的数据,这一点和单向散列函数很类似。但由于计算 MAC 值必须持有共享密钥,没有共享密钥的人就无法计算 MAC 值,因此消息认证码利用这一性质来完成认证。
此外,消息认证码和单向散列函数一样具有雪崩效应,哪怕消息中发生 1 比特的变化,也会导致 MAC 值发生不可区分的改变。

扩展:基于哈希的消息认证代码(HMAC)
一种消息认证代码,它使用加密哈希函数创建消息的摘要(或“消息认证代码”)。摘要可用于验证消息的真实性。HMAC是一种MAC,除了消息外,还使用密钥来生成摘要。

详细讲解:消息认证码(MAC)_简书

type mkey.
fun mac(bitstring,mkey):bitstring.

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型幻觉成应用落地难题 最新评测文心一言解决幻觉能力最好

大模型中的幻觉问题 “林黛玉倒拔垂杨柳”、“月球上面有桂树”、“宋江字武松”……相信经常使用大语言模型都会遇到这样“一本正经胡说八道”的情况。这其实是大模型的“幻觉”问题,是大模型行业落地的核心挑战之一。例如幻觉会影响生成内容的可靠性,…

大数据基础设施搭建 - Hadoop

文章目录 一、下载安装包二、上传压缩包三、解压压缩包四、配置环境变量五、测试Hadoop5.1 测试hadoop命令5.2 测试wordcount案例5.2.1 创建wordcount输入文本信息5.2.2 执行程序5.2.3 查看结果 六、分发压缩包到集群中其他机器6.1 分发压缩包6.2 解压压缩包6.3 配置环境变量 七…

TDengine Restful Authorization 自定义Token

Restful 接口是 TDengine 最常用的接口,仅次于 JDBC。TDengine 支持 HTTP 和 HTTPS,但通常情况下,大家不想搞证书,又在内网环境中,采用 HTTP 方式比较多。但 HTTP 是明文传输,只要抓个包就知道账号密码了。…

2.4 矩阵的运算法则

矩阵是数字或 “元素” 的矩形阵列。当矩阵 A A A 有 m m m 行 n n n 列,则是一个 m n m\times n mn 的矩阵。如果矩阵的形状相同,则它们可以相加。矩阵也可以乘上任意常数 c c c。以下是 A B AB AB 和 2 A 2A 2A 的例子,它们都是 …

YOLOv5项目实战(4)— 简单三步,教你按比例划分数据集

前言:Hello大家好,我是小哥谈。本节课就教大家如何去按照比例去划分数据集,希望大家学习之后可以有所收获!~🌈 前期回顾: YOLOv5项目实战(1)— 如何去训练模型 YOLOv5项目

万字长文:从 C# 入门学会 RabbitMQ 消息队列编程

RabbitMQ 简介 RabbitMQ 是一个实现了 AMQP 协议的消息队列,AMQP 被定义为作为消息传递中间件的开放标准的应用层协议。它代表高级消息队列协议,具有消息定位、路由、队列、安全性和可靠性等特点。 目前社区上比较流行的消息队列有 kafka、ActiveMQ、Pul…

freeRTOS--软件定时器

一、什么是定时器: 简单可以理解为闹钟,到达指定一段时间后,就会响铃。STM32 芯片自带硬件定时器,精度较高、达到定时时间后会触发中断,也可以生成 PWM 、输入捕获、输出比较,等等,功能强大&am…

基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码

基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于黄金正弦优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

从0开始学习数据结构 C语言实现 1.前篇及二分查找算法

一、前篇 1、什么是数据结构? 数据结构是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系 2、时间复杂度与空间复杂度 大O符号是用于描述函数渐进行为的数学符号 常用函数的增长表 阶乘O(n!) > 指数…

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码

基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于蝠鲼觅食算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于蝠鲼觅食优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

Spring Boot 中使用 ResourceLoader 加载资源的完整示例

ResourceLoader 是 Spring 框架中用于加载资源的接口。它定义了一系列用于获取资源的方法,可以处理各种资源,包括类路径资源、文件系统资源、URL 资源等。 以下是 ResourceLoader 接口的主要方法: Resource getResource(String location)&am…

VSCode 运行java程序中文乱码

现象描述 java文件中包含中文,运行java程序后,乱码报错。 解决方法 原本运行指令为 cd "d:\programProjects\Java_proj\" ; if ($?) { javac Solution.java } ; if ($?) { java Solution } 需要添加 编码格式 -encoding utf8 cd &quo…

python数据处理作业6:随机生产一个服从正态分布长度为1000的数组,将这个数组划分为25个区间,画出数组的直方图和密度图

每日小语 我只有忘掉自己,才能津津有味地进行沉思和遐想。——卢梭 gpt代码 import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm# 随机生成一个服从正态分布的长度为1000的数组 data np.random.randn(1000)# 划分为25个区间 num_…

【Linux】U盘安装的cfg引导文件配置

isolinux.cfg文件 default vesamenu.c32 timeout 600display boot.msg# Clear the screen when exiting the menu, instead of leaving the menu displayed. # For vesamenu, this means the graphical background is still displayed without # the menu itself for as long …

什么是好用的HR人才测评?

对于HR来说,选用一个合适的测评工具,我想不外乎以下几点: 1、成本可控 不是所有的HR都能申请到足够的资金,去做专业的人才测评,尤其是中小企业,这可是一笔不小 的开支。即使是基层普通岗位的成本&#xf…

redis运维(十一) python操作redis

一 python操作redis ① 安装pyredis redis常见错误 说明:由于redis服务器是5.0.8的,为了避免出现问题,默认最高版本的即可 --> 适配 ② 操作流程 核心:获取redis数据库连接对象 ③ Python 字符串前面加u,r,b的含义 原因: 字符串在…

视频一键转码:批量转换MP4视频的技巧

随着数字媒体设备的普及,视频文件在生活中扮演着越来越重要的角色。而在处理视频文件时,有时需要将其转换为不同的格式以适应不同的需求。其中,MP4格式因其通用性和高质量而备受青睐。本文详解云炫AI智剪如何一键转码的技巧,帮助批…

基础课6——开放领域对话系统架构

开放领域对话系统是指针对非特定领域或行业的对话系统,它可以与用户进行自由的对话,不受特定领域或行业的知识和规则的限制。开放领域对话系统需要具备更广泛的语言理解和生成能力,以便与用户进行自然、流畅的对话。 与垂直领域对话系统相比…

msvcp140.dll是什么东西以及如何解决其文件缺失问题

当我们在使用Windows电脑的过程中,有时候可能会遇到一些由于系统文件缺失或者损坏而导致的问题。其中,"msvcp140.dll缺失"就是一种常见的错误提示。msvcp140.dll究竟是什么?为什么它会缺失?又该如何解决这个问题呢&…

MIKE水动力笔记20_由dfs2网格文件提取dfs1断面序列文件

本文目录 前言Step 1 MIKE Zero工具箱Step 2 提取dfs1 前言 在MIKE中,dfs2是一个一个小格格的网格面的时间序列文件,dfs1是一条由多个点组成的线的时间序列文件。 如下两图: 本博文内容主要讲如何从dfs2网格文件中提取dfs1断面序列文件。 …