TinyJAMBU的制动原理——一种轻量化的认证密码

news2025/1/9 0:19:02

关于TinyJAMBU的定义和介绍在另一篇博文已经介绍过了,这里只对其动作原理进行描述和说明。
对应的博文链接如下:TinyJAMBU:一种轻量化密码介绍

在这里插入图片描述
首先,该密码是一个流密码体系的块密码框架。其加密模式整体上来看是块密码,但是密钥的作用单位确实是比特单位,所以本质是一种流密码。这是一个常见的密码体系,整体上分为初始化,关联数据处理,加密和解密,认证四个阶段。每个阶段的动作过程如上所示。

密钥身份——P盒

首先,TinyJambu和其他的密码中有一个比较大且有趣的局别就是,你很难在动作过程图中看到密钥的相关参与过程。因为这个密码中所有的密钥体系是与P盒绑定的,这里的P盒是置换操作,提供了Confusion和Diffusion的效果。P盒本身的设计是基于非线性LFSR,NLFSR(非线性反馈移位寄存器,Non-Linear Feedback Shift Register)是一种序列生成器,主要用于密码学、伪随机数生成和数字通信中的扩频技术。NLFSR 是线性反馈移位寄存器(LFSR,Linear Feedback Shift Register)的非线性扩展。与 LFSR 使用线性函数不同,NLFSR 使用非线性函数处理位移操作。NLFSR 的工作原理类似于 LFSR,但在反馈函数中引入了非线性组件。NLFSR 包括一系列触发器(或位),这些触发器按顺序排列。在每个时钟周期,寄存器中的每个触发器都会向右移动一个位置。最右边的触发器将其值移出寄存器,而最左边的触发器接收一个新的输入值。这个新值是基于寄存器中其他触发器值的非线性函数。引入非线性组件可以增加密码系统的安全性,因为非线性函数更难以通过频谱分析、线性密码分析等密码攻击来预测。然而,NLFSR 的设计和分析相对复杂,因为非线性函数可能导致更多的不可预测性和混乱。
在这里插入图片描述
上图就是P盒的NLFSR过程。可以看到密钥流在这里进行了作用,其加密算法如下:
在这里插入图片描述
注意的是,该算法中没进行一次,就更新了一个名为state的状态值,该状态值是128bit。这个状态在tinyjambu密码中至关重要。P盒每执行一次,被称为一轮。Pn意味着P盒执行的第n轮次。由于每次P盒执行都会更新状态值,换句话说Pn表示P盒执行n次以后的密码置换操作。

初始化

以tinyjambu-128为例,初始化阶段我们需要首先生成密钥然后获得一个新的状态值。这个过程我们成为密钥生成阶段。在密钥生成阶段,首先将初始的状态值128bit全部置为0,然后通过P1024生成一个全新的状态值。
下一个阶段是随机值Nonce的生成,该值生成需要使用到一个重要的参数叫Framebits。这个参数在TinyJambu中至关重要,他总共有4个取值,分别是1,3,5,7。在生成nonce的阶段,我们需要使用Fb=1,然后使用P384更新状态值,并进行如下图所示的方法更新并再次更新状态值。
在这里插入图片描述
在这里插入图片描述
需要注意的是,这里虽然谈到了nonce生成和密钥生成,但是本质上这两个数值的生成都是由外部协议提供的,Tinyjambu并不提供一个专门的协议去生成这两个数。而这个密码重点关心的是对状态值的不断更新从而对明文和密文的操作。

关联数据处理

关联数据是在通信中,需要提供认证但是不需要提供数据加密保护的特殊数据,如使用的协议信息。
对于该数据的处理,在TinyJambu中我们首先将Fb置于3,然后使用P384进行操作并更新状态值。最后状态值的最后一个块(32bit)和相关数据的对应的块进行异或运算,并更新最后一个状态块的值。这样每次异或运算更新的值都是最新的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
需要注意的是,关联数据AD是一个不可定的数据块,每次传输数据时可能长度不等,而并不一定每次对AD都能正好被32整除,可能会有余数。此时和块密码不同的是,由于该密码本质上是一个流密码,所以我们不适用padding去凑整,而是剩余的bit有几个就对几个bit进行第四个状态块的前x为比特进行单独的xor处理。

加密与解密

在这里插入图片描述
加密过程如上所示,Fb的值首先被置为5,然后经过P1024更新当前的状态值,然后状态值的第四个块与明文块进行异或运算,其结果更新为第四个状态块;而第三个状态块与对应的明文块进行异或后,更新为密文块。根据循环的增长,每个明文块都会得到对应的密文块。同理,由于是流密码,当密文和明文的长度不是32的倍数时,对剩余的部分bit进行一对一的单独异或操作,不需要使用padding填充数据。
在这里插入图片描述
在这里插入图片描述
解密过程如下所示:基本是过程是相同的,区别只有更新状态使用的明文块而不是密文块。通过下图应该很好理解,就不多赘述了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

认证阶段

认证阶段,首先将Fb置为7,然后进行分两步的操作。分别使用两个P盒函数,一个是1024一个是384。然后分别使用第三个状态块作为对应的Tag值,每个Tag是32bit。最后将两个Tag组合,就可以获得一个64bit 的认证tag。这也是我们需要的最终Tag
在这里插入图片描述
在这里插入图片描述
提供认证的方法也很简单,就是在接收方接收到后,本地计算一遍Tag并比较接收到的Tag。如果比较结果现实两个Tag相同则证明数据的完整性是没问题的,否则数据被篡改,本次传输被视为无效的。

整体的制动过程

在这里插入图片描述
整体制动过程如上图所示,其中作为一个密码,提供密钥作用的是P盒。其他的过程我们在上面已经详细的说明过了。
在这里插入图片描述
此外,除了TinyJambu128,还有192和256两个版本,它们本身的区别不大,只不过是密钥的长度以及使用的P盒有所不同,对应的区别如上图所示。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

P4903 心碎

这是一道洛谷里的题目 难度级别:普及/提高- 题目提供者:大神cyd 题目背景 NOIP2015初赛。CYD大神在他的母校跪掉了。初赛那天,他回到原来的教室参观了一下,发现那张遍布了N个洞的课桌还摆在那里——那是他初中时和XHY同学坐过…

优思学院|8D和DMAIC两种方法应如何选择?

在现代的商业环境中,客户投诉是一个非常常见的问题。当客户不满意产品或服务时,他们往往会向企业发出投诉。质量管理部门是一个负责处理这些投诉的重要部门,因为它们需要确保产品和服务的质量满足客户的期望。改善方法是质量管理部门用来解决…

作为一名程序员,如何写出一手让同事膜拜的漂亮代码?

整洁的代码 有意义的命名 函数命名 变量命名 函数的定义 注释的规范 代码的长度 代码的对齐 我写代码已经有好几年了,最近看了一本书叫做《代码整洁之道》。我发现这本书中介绍的一些内容对我来说非常有启发性。书中提到的一些方法和技巧让我重新审视了自己的…

疑难问题定位案例复盘(三)

今天我们分享一个数据库被异常改写的案例,通过该案例我们可以学习总结出常规的文件被改写问题定位思路。 问题现象 1、测试环境在进行特定压力测试时发现页面登陆异常,且调试日志多个进程持续打印“数据库打开失败”日志。 2、测试环境在进行多个压力测…

Unity教程||Unity添加中文字体||Unity知识记录--制作UI粒子特效

Unity添加中文字体 ## 1、拷贝字体文件 拷贝C:\Windows\Fonts文件夹下,华文细黑常规文件到项目中 ## 2、下载中文字库 链接: https://pan.baidu.com/s/1KW31KB5vEImZHUWvQ9PLEQ 提取码: bgug 3、添加字体字库 选择Window->TextMeshPro->Font Asset Crea…

HTML的基础语法

文章目录 前言一.HTML结构1.1 什么是html语言1.2 html的结构是什么 二.HTML常见标签2.1 文本格式标签标题标签段落标签换行标签格式化标签图片标签超链接标签 2.2 表格标签2.3 表单标签from标签input标签文本框密码框单选框复选框普通按钮提交按钮清空按钮选择文件select标签te…

延迟队列与SpringBoot实战

延迟队列与SpringBoot实战 概念 延时队列,队列内部是有序的,最重要的特性就体现在它的延时属性上,延时队列中的元素是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列 …

基于jQuery------购物车案例

目录 基于jQuery------购物车案例 案例:购物车案例模块-增减商品数量分析 案例:购物车案例模块-修改商品小计分析 案例:购物车案例模块-计算总计和总额 案例:购物车案例模块-删除商品模块 案例:购物车案例模块-选…

从‘discover.partitions‘=‘true‘分析Hive的TBLPROPERTIES

从’discover.partitions’true’分析Hive的TBLPROPERTIES 前言 Hive3.1.2先建表: show databases ;use db_lzy;show tables ;create external table if not exists test_external_20230502(id int,comment1 string,comment2 string ) stored as parquet ;creat…

C语言通过控制台命令行传入参数

Linux 与 windows运行c语言程序 切换到对应目录下 1. gcc hello.c -o hello 2.Linux: ./hello Windows: hello.exe int main(){}默认无参数 但在一些情况下想要直接通过在上述过程中第二步就传入参数而不是使用scanf..之类的输入语句就需要使用有参数的main方法: int main() {…

Docker--harbor私有库部署与管理

目录 一、本地私有仓库 搭建本地私有仓库 Docker容器的重启策略 二、Harbor 1、什么是Harbor 2、Harbor特性 3、Harbor的构成 三、Harbor部署 实验步骤 1、安装Docker-Compose服务 2、部署Harbor服务 1、下载或上传Harbor安装程序 2、修改Harbor安装的配置文件 3、…

基于TI板MSP430 玩转PID

文章目录 前言一、整体框架二、PID算法1. 位置式PID2. 增量式PID3. 比例外置式PID4. 积分限幅、输出限幅和PID参数整定5. 位置式PID和增量式PID的区别及抉择 三、初值获取1. 定时器输入捕获2. 外部中断3. ADC采样 前言 具体啥是PID,我这里不做介绍,网上…

SpringMVC(后)SSM整合

10、文件上传和下载 10.1、文件下载 ResponseEntity用于控制器方法的返回值类型&#xff0c;该控制器方法的返回值就是响应到浏览器的响应报文 使用ResponseEntity实现下载文件的功能 RequestMapping("/testDown") public ResponseEntity<byte[]> testResp…

【Hello Algorithm】复杂度 二分法

作者&#xff1a;小萌新 专栏&#xff1a;算法 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客简介&#xff1a;介绍算法的复杂度 对数器和二分法 复杂度 对数器 二分法 复杂度常数时间操作非常数时间操作时间复杂度空间复杂度 二分法有序数组中找一个值寻找有序…

树的存储和遍历

文章目录 6.5 树与森林6.5.1 树的存储结构1. 双亲表示法(顺序存储结构)2 孩子链表表示法3 孩子兄弟表示法(二叉树表示法) 6.5.2 森林与二叉树的转换1 树转换成二叉树2 二叉树转换成树3 森林转换成二叉树4 二叉树转换成森林 6.5.3 树和森林的遍历1. 树的遍历2. 森林的遍历 6.6 赫…

数据库篇:表设计、创建编辑以及导出导入数据

微信小程序云开发实战-答题积分赛小程序系列 数据库篇:表设计、添加编辑以及导出导入数据 原型: 最终实现界面截图:

Moqui REST API的两种实现方法

实现Restful API的方法 实现REST API有两种方法。第一种&#xff1a; The main tool for building a REST API based on internal services and entity operations is to define resource paths in a Service REST API XML file such as the moqui.rest.xml file in moqui-fr…

chatGPT国内可用镜像源地址

chatGPT国内可用镜像源地址 彷丶徨丶 关注 IP属地: 湖北 0.811 2023.03.15 16:02:16 字数 1,152 阅读 249,582 如果你正在尝试访问Chatgpt网站&#xff0c;但由于某些原因无法访问该网站&#xff0c;那么你可以尝试使用Chatgpt的国内镜像网站。以下是一些Chatgpt国内镜像网站的…

java基础知识——27.动态代理

这篇文章&#xff0c;我们来学一下java的动态代理 目录 1.动态代理的介绍 2.具体的代码实现 1.动态代理的介绍 动态代理&#xff1a;无侵入式的额外给代码增加功能 很不好理解&#xff0c;下面&#xff0c;我们通过两个例子来说明一下什么是动态代理&#xff1a; 例一&a…

shell编程 -- 基础

shell是一个命令行解释器&#xff0c;它接收应用程序/用户命令&#xff0c;然后调用操作系统内核。 linux笔记 链接&#xff1a;https://pan.baidu.com/s/16GZCPfUTRzUqIyGnYwPuUg?pwds5xt 提取码&#xff1a;s5xt 脚本执行 采用bash或者sh脚本的相对路径或绝对路径&#x…