Ascon加解密算法分析

参数定义

在这里插入图片描述
在这里插入图片描述

加密架构图

在这里插入图片描述

  • 整个过程是在处理320bits的数据,所以在最开始需要对原始的数据进行一个初始化,获得320bits的数据块,
    图里看到的pa和pb都是在做置换(对320bits的数据进行一个置换)

  • 置换(Permutation)在加密和解密算法中是一种常用的操作,它指的是对序列中的元素重新排列,使得原来的元素顺序发生变化。在加解密中,置换操作通常用于将明文或密文中的字符或比特重新排列,使得原始信息变得难以阅读或理解。
    置换操作在加密和解密中通常具有以下特点:

    • 置换操作是不可逆的,即对序列进行置换后,无法通过置换操作还原原始序列。
    • 置换操作可能会影响信息的长度和复杂性,使得原始信息变得难以阅读或理解。
    • 置换操作可能会增加加密和解密算法的复杂性,使得攻击者更难以破解加密算法。
  • 在加解密中,置换操作通常由一个置换矩阵表示。例如,在密码学中,有一个著名的置换加密算法叫做培根密码(Bacon’s Cipher),它使用一个特殊的置换矩阵来加密和解密信息。在这个算法中,置换矩阵如下所示:

    A = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    B = [0, 5, 6, 7, 8, 9, 1, 2, 3, 4]
    
  • 对于一些运算符号如下约定
    在这里插入图片描述

  • 加解密伪代码实现
    在这里插入图片描述

前置知识

  • Ascon算法,整个加密解密过程实际上是在处理320bits的数据,通过a轮置换和b轮置换进行320bits的内容(简称S),S被分为两个部分,一个是外在部分Sr (r bits),内在部分Sc(c bits),其中r+c =320bits,在文档中r 代表rate,c代表capacity,应该是和算法的速度性能相关。
  • 320bits长度的S被分为5个64bits
    在这里插入图片描述

流程详解

  • 初始化
    320bits的数据是如何生成的?

    • 第一步:构建IV初始向量
      IV=k||r||a||b||补0,此处的k是密钥的长度,r是rate段的长度,初始轮和最终轮数a和b的大小,以及中间轮数b大小(都是8bit 的int型数据),最后补0,个数为160-k
      在这里插入图片描述
    • 第二步:得到S,这个时候S就是320bits长
      S = IV ||密钥K||随机数N
      在这里插入图片描述
    • 第三步:处理S
      经过a轮的p置换后,和密钥K进行异或(此时密钥k不足320bits,需要补0凑320bits)
      在这里插入图片描述
    • 初始化结束,注明:初始化阶段,没有处理AD和plaintext,是把Key,Nonce,以及一些长度、轮数的数值用来生成初始的S块(320bits)
  • 处理相关数据

    • 如果存在关联数据AD(前面说过,AD的数据长度是没有要求的,如果AD数据长度很大,就需要进行切割处理)
    • Ascon处理关联数据,是把它分为r bits一块(block),一共有s块
      如果AD的位数不足r bits或者不是r bits的倍数,需要填充1||0…0
      在这里插入图片描述
      之后,执行s次:从A1到As
      将每一块Ai,都和S里的前r位数据进行异或,异或之后和Sc拼接成320bits数据,进行b轮permutation
    • 此处的permutation执行了b*s次
      在这里插入图片描述
      如果不存在 s=0 ,暂不处理
    • 最后统一处理:
      S和 0…01进行异或(319个0)
      在这里插入图片描述
  • 处理明文过程—两个过程,填充分块和加密

    • 因为plaintext的长度是任意的,所以可能位数不满足r bits,或者不是r bits的倍数,所以需要填充1||0…0
    • 然后将plaintext分为t个block,每个block占r bits(注意:这个地方如果为了满足r bits的倍数进行填充,之后的密文位数就和明文不一致了,所以关于最后一个明文块会进行一个特殊的处理)
      在这里插入图片描述
    • 从第一个block开始处理一直到第t个(这个地方和处理关联数据的方式很相似)
      比如:第i个Block的处理:
    • 首先获取Blocki 对应的密文,将Blocki与此时的Sr(也就是此时320bits大数据块的前r位)进行异或,获得密文块Ci
      在这里插入图片描述
    • 再进行置换运算P(Ci||Sc),进行b轮,得到一个新的S
      进行下一个Block的处理…
      在这里插入图片描述
    • 最后一个Block不进行置换处理,直接获取密文Ct后,将最后一个密文块 Ct 截断为未填充的最后一个明文块片段的长度,使其长度在 0 和 r - 1 位之间,密文 C 的总长度与原始明文 P 的总长度完全相同。
      在这里插入图片描述
  • 解码对应过程

    • 在除最后一次迭代之外的每次迭代中,明文块Pi都是通过用内部状态的第一个r位Sr来表示密文块Ci来计算的。然后,将内部状态的第一个位位Sr替换为Ci。最后,对于除最后一个密文块外的每个密文块,内部状态由b轮排列pb进行置换
      在这里插入图片描述
    • 对于最后一个具有0≤`<r位的截断密文块˜Ct,过程不同
      在这里插入图片描述
  • 结尾处理

    • 最后的收尾工作,会生成一个128bits的tag,用于解密时做验证
    • 解密模式下,如果计算的tag错误,则不会返回明文,仅返回错误标记⊥
    • 在最终确定的过程中,密钥K被转换到内部状态,并通过使用一轮的排列pa进行状态转换。标记T由状态的最后一个(最不重要的)128位和键K的最后128位组成
      在这里插入图片描述
    • 加密算法返回标签T和密文C1k…k˜Ct。解密算法只有当计算出的标记值与接收到的标记值匹配时,才返回明文P1 k … k˜Pt。
  • 置换处理

    • Ascon的重要组成部分就是这个320bits的置换,该置换迭代的应用了基于SPN结构的轮变换(round transformation),置换可以分为3步,Pc->Ps->PL,其实这个过程把混淆和扩散都做了。(不是像AES里简单的p盒置换)
    • 之前算法结构图里提到的Pa和Pb,其实只是轮数的不同,一个是a轮,一个是b轮,实际permutation结构上是一样的,并且a,b是一个可以调整的参数。
      置换步骤
      1)先把320bits划分为5个
      在这里插入图片描述
      2)X2异或一个常数Cr—Cr取值如下
      在这里插入图片描述
      在这里插入图片描述
      3)按5bit位单位做替换
      在这里插入图片描述
      4)分别对x0/x1/x2/x3/x4进行移位、异或
      在这里插入图片描述
  • 扩散和混淆
    Diffusion 扩散
    P盒的作用是扩散(Diffusion),目的是让明文和密钥的影响迅速扩散到整个密文中。即1位的明文或密钥的改变会影响到密文的多个比特。
    Confusion 混淆
    我们常说的S盒的作用是混淆(Confusion),主要增加密钥和密文之间的复杂度(包括非线性度等)。
    混淆能够很好的隐藏密文和密钥的关系,一比特密钥的改变,密文会受到很大程度变动

博客参考了这篇大佬的作品

声明,算法图解部分均来自官方文档

在这里插入图片描述

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

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

相关文章

智能优化算法应用:基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工蜂鸟算法4.实验参数设定5.算法结果6.…

C++11特性:线程同步之条件变量

条件变量是C11提供的另外一种用于等待的同步机制&#xff0c;它能阻塞一个或多个线程&#xff0c;直到收到另外一个线程发出的通知或者超时时&#xff0c;才会唤醒当前阻塞的线程。条件变量需要和互斥量配合起来使用&#xff0c;C11提供了两种条件变量&#xff1a; 1. conditi…

[Linux] MySQL数据库之事务

一、事务的概念 事务就是一组数据库操作序列&#xff08;包含一个或者多个 SQL 操作命令&#xff09;&#xff0c;事务会把所有 操作看作是一个不可分割的整体向数据库系统提交或撤消操作&#xff0c;所有操作要么都执行&#xff0c;要么都不执行。 事务是一种机制、一个操作序…

每日一题——LeetCode160.相交链表

个人主页&#xff1a;白日依山璟 专栏&#xff1a;Java|数据结构与算法|每日一题 文章目录 1. 题目描述示例1&#xff1a;示例2&#xff1a;提示&#xff1a; 2. 思路3. 代码 1. 题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的…

[pyqt5]QSpinBox相关函数

1.QSpinBox简介 QSpinBox是计数器控件&#xff0c;允许用户输入整数&#xff0c;或者通过上下按键递增或者递减&#xff0c;默认调整范围是0-99&#xff0c;每次变化步数1&#xff0c;用户可以自行修改范围和步数&#xff1b; QSpinBox常用方法如下&#xff1a; QSpinBox信号…

【LeetCode刷题笔记】动态规划(二)

647. 回文子串 解题思路: 1. 暴力穷举 , i 遍历 [0, N) , j 遍历 [i+1, N] ,判断每一个子串 s[i, j) 是否是回文串,判断是否是回文串可以采用 对撞指针 的方法。如果是回文串就计数 +1

入门级:用devEco Studio创建一个鸿蒙APP

文章概叙 本文主要讲的是如何在鸿蒙的开发工具devEco Studio新建一个项目&#xff0c;全文很水&#xff0c;只适合新手!! 开始贴图 假设当前你已经下载好了devEco Studio,但是还没正式开始安装&#xff0c;此时你点击安装包&#xff0c;你会发下如下页面&#xff0c;只需要点…

C预处理 | pragma详解

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

【知识点随笔分享 | 第九篇】常见的限流算法

目录 前言&#xff1a; 1.固定窗口限流&#xff1a; 缺点&#xff1a; 2.滑动窗口限流&#xff1a; 优点&#xff1a; 滴桶限流&#xff1a; 缺点&#xff1a; 令牌桶限流&#xff1a; 优点&#xff1a; 总结: 前言&#xff1a; 当今互联网时代&#xff0c;随着网络…

怎么卸载macOS上的爱思助手如何卸载macOS上的logitech g hub,如何卸载顽固macOS应用

1.在App Store里下载Cleaner One Pro &#xff08;注意&#xff0c;不需要订阅付费&#xff01;&#xff01;&#xff01;白嫖基础功能就完全够了&#xff01;&#xff01;&#xff01;&#xff09; 2.运行软件&#xff0c;在左侧目录中选择“应用程序管理”&#xff0c;然后点…

Shiro配置类中的各个配置项浅谈

背景&#xff1a; 上文中在落地实践时&#xff0c;对Shiro进行了相关的配置&#xff0c;并未对其含义作用进行详细学习&#xff0c;本章将进一步详解其作用含义。 Shiro配置类中的各个配置项的作用&#xff1a; Bean public SecurityManager securityManager() { Default…

【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手

TCP三次握手在Wireshark数据包中是如何体现的&#xff1f;在此之前&#xff0c;先熟悉TCP三次握手的流程。 TCP三次握手流程 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的传输层协议。在建立 TCP 连接时&#xff0c;需要进行三次握手&#xff0c;防止因为…