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),主要增加密钥和密文之间的复杂度(包括非线性度等)。
    混淆能够很好的隐藏密文和密钥的关系,一比特密钥的改变,密文会受到很大程度变动

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

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

在这里插入图片描述

相关推荐

  1. 解密算法

    2023-12-26 09:48:03       31 阅读
  2. 学会MySQL(2)——间隙锁算法分析

    2023-12-26 09:48:03       11 阅读
  3. 基于AES图像解密算法的MATLAB仿真

    2023-12-26 09:48:03       32 阅读
  4. .NET C# 实现国密算法解密

    2023-12-26 09:48:03       3 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-26 09:48:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-26 09:48:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-26 09:48:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-26 09:48:03       20 阅读

热门阅读

  1. C#的故事

    2023-12-26 09:48:03       27 阅读
  2. 八股文打卡day10——计算机网络(10)

    2023-12-26 09:48:03       30 阅读
  3. linux无法访问共享目录,ls hgfs失败

    2023-12-26 09:48:03       37 阅读
  4. 支付平台在选择服务器租用时要注意什么?

    2023-12-26 09:48:03       39 阅读
  5. Python HTML内容解析

    2023-12-26 09:48:03       34 阅读
  6. PHP函数实现验证身份证号码并提取年龄

    2023-12-26 09:48:03       41 阅读
  7. 当技术相遇:DevOps之道解析

    2023-12-26 09:48:03       35 阅读
  8. C#编程简单应用程序批量修改文件名

    2023-12-26 09:48:03       38 阅读