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

关于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盒有所不同,对应的区别如上图所示。

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

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

相关文章

让语言学习更简单的 WordFlow

作为一个英语并不是那么特别好的计算机专业学生,长期积累英语的学习对个人发展还是有意义的。简单来说,我在语言上最大的两个问题,一个自己「不理解」,另一个是自己「不会表达」。 上述两个问题主要体现在口语层面,而…

实验二 存储器管理

实验二 存储器管理 实验目的: 理解各类置换算法的原理和虚拟存储器管理的方法。 实验内容: 编程实现LRU算法或CLOCK/改进算法等置换算法(二选一),模拟实现虚拟存储器的地址变换过程。 实验步骤: 1…

【Golang项目实战】用Go写一个学生信息管理系统,真的太酷啦| 保姆级详解,附源码——建议收藏

博主简介:努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。博主主页: 是瑶瑶子啦所属专栏: Go语言核心编程近期目标:写好专栏的每一篇文章 学习了Go的基…

图神经网络:在自定义数据集上动手实现图神经网络

文章说明: 1)参考资料:PYG官方文档。超链。 2)博主水平不高,如有错误还望批评指正。 文章目录 自定义数据集动手实现图神经网络自定义数据集训验测集拆分,创建Data的数据结构,观察Data的基本信息,可视化图网…

震惊,为了学会泛型类竟做这种事?!

上一节,我们基本学会了Java泛型类的用法。 传送门:彻底弄懂Java的泛型 - 泛型类 这一节,我们转变一下风格,具体是什么风格呢,你马上就懂了。 宝子们,欢迎大家来到我们的泛型直播间,这一讲呢&a…

Ansible的脚本-playbook 剧本

目录 1.剧本(playbook) 1.playbook介绍 2. playbooks 的组成 3.案例:编写httpd的playbook 4.定义、引用变量 5.指定远程主机sudo切换用户 6.when条件判断 7.迭代 2.playbook的模块 1.Templates 模块 2.tags 模块 3.Roles 模块 1.…

【Linux从入门到精通】vim的基本使用各种操作详解

文章目录 一、vim编辑器简单介绍 二、vim编辑器的四种模式 2、1 正常/普通/命令模式(Normal mode) 2、2 插入模式(Insert mode) 2、3 末行模式(last line mode) 三、命令模式的相关操作实例 3、1 光标的相关操作 3、2 文本操作 四、插入模式下的相关操作 五、末行模式下的相关操…

Java—JDK8新特性—函数式接口

目录 函数式接口 3.1 什么是函数式接口 3.2 functionalinterface注解 源码分析 3.3 Lambda表达式和函数式接口关系 3.4 使用函数式接口 函数式接口 3.1 什么是函数式接口 如果一个接口中只包含一个抽象方法,这个接口称为函数式接口 如果一个接口包含&#xff0…

K8S管理系统项目实战[API开发]-2

后端: gogin 后端代码地址GitHub - yunixiangfeng/k8s-platform: K8s管理系统后端: gogin 5、存储与配置 5.1 ConfigMap 5.2 Secret 5.3 PersistentVolumeClaims 6、工作流 6.1 流程设计 6.2 数据库操作(GORM) (1)初始化…

交换机-Exchanges

交换机 Exchanges 概念 RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上,通常生产者甚至都不知道这些消息传递传递到了哪些队列中。相反,生产者只能将消息发送到交换机(exchange),交换机工作的内容非常简…

正则表达式-基本元字符和语法规则

© Ptw-cwl 文章目录 字符匹配元字符.元字符[]元字符[^]元字符*元字符元字符?元字符{}元字符|元字符()元字符^元字符$元字符\元字符\d元字符\w元字符\s元字符\b元字符\B元字符*?、?、??、{n,m}?元字符(?)、(?!)元字符(?:)元字符\1、\2等元字符^、$元字符&#x…

JavaSE基础(二)—— 类型转换、运算符、键盘录入

目录 一、类型转换 1. 自动类型转换 1.1 自动类型转换的底层原理: ​1.2 自动类型转换的其他形式​编辑 2. 表达式的自动类型转换 3. 强制类型转换 3.1 强制类型转换底层原理​编辑 3.2 注意事项 二、运算符 1. 算数运算符 1.1 案例:数值拆分…

PCA主成成分分析例题详解

主成分分析是一种降维算法,它能将多个指标转换为少数几个主成分,这些主成分是原始变量的线性组合,且彼此之间互不相关,其能反映出原始数据的大部分信息 需要了解具体细节可看此视频👉:什么是主成成分分析PC…

Linux安装MongoDB数据库,并内网穿透远程连接

文章目录 前言1. 配置Mongodb源2. 安装MongoDB3. 局域网连接测试4. 安装cpolar内网穿透5. 配置公网访问地址6. 公网远程连接7. 固定连接公网地址8. 使用固定地址连接 转载自Cpolar Lisa文章:Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接「内网穿透」 前言 …

SpringBoot访问静态资源

SpringBoot项目中没有WebApp目录,只有src目录。在src/main/resources下面有static和templates两个文件夹。SpringBoot默认在static目录中存放静态资源,而templates中放动态页面。 static目录 SpringBoot通过/resources/static目录访问静态资源&#xff…

完成A轮融资,倍思如何发力场景化为品牌创造广阔未来?

凛冬过后的消费电子正在重新凝聚资本的目光。 近日,深圳市倍思科技有限公司宣布完成由深创投、中金资本联合领投,越秀产业基金、高榕资本跟投,金额数亿元人民币的A轮融资。 分析人士指出,消费电子的行业景气度在逐渐恢复&#x…

中国社科院与美国杜兰大学金融管理硕士项目——迎接立夏,切莫忘记自我成长

五月的风吹走了春季,今天我们迎来立夏。作为夏季的第一个节气,立夏常被人们当做万物蓄满能量,即将加速生长的标志。而在职的我们,也应该跟这世间万物一样,在季节交替之时沉淀自己、努力向上成长。在社科院与杜兰大学金…

“人工智能教父”从谷歌离职 称后悔发展AI,为世人敲响警钟?

在加入谷歌的第十年、深度学习迎来爆发式发展的当下,被誉为“人工智能教父”的Geoffrey Hinton已从谷歌离职,只是为了告诫人们AI已经变得很危险。 公开资料显示,Geoffrey Hinton在2013年加入谷歌,曾任副总裁,研究机器学…

成为数据分析师,需要具备哪些技能?

随着互联网的发展,数据分析师的特点越来越明显,对数据分析师综合素质的要求也较高。 1、较强的数据挖掘、信息整理、和逻辑分析能力 数据分析,也是数据分析师的一个方向。 制作日常性的经营报表,对公司或者行业KPI指标进行拆解…

Mysql索引(3):索引分类

1 索引分类 在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。 分类含义特点关键字主键索引针对于表中主键创建的索引 默认自动创建, 只能有一个 PRIMARY 唯一索引 避免同一个表中某数据列中的值重复可以有多…