当前位置: 首页 > article >正文

基于ARX结构的流密码算法Salsa20

基于ARX结构的流密码算法Salsa20

0x0 ARX密码

ARX密码,是仅采用模加(Addition)、旋转移位(Rotation)和异或(Xor)三种运算构造的对称密码算法,具有良好的混淆扩散性质。其中模加运算提供了非线性复杂度,循环移位可以将高位活跃比特移动到低位,异或运算则提供了线性复杂度。使用ARX结构的分组密码算法有SpeckHIGHTCHAMLEA等,使用ARX结构的流密码算法有Salsa20ChaChaHC128HC256等,使用ARX结构的密码杂凑算法有MD5SHA2SM3SkeinBLAKE等。

0x1 Salsa20算法简介

Salsa20算法由DanielJ.Bernstein于2005年设计,是eSTREAM工程最终入选的4个面向软件实现的序列密码算法之一,该算法密钥长度为256比特或128比特,通过20轮的迭代运算,产生512比特密钥流输出。

Salsa20算法密钥长度为256比特或128比特,初始向量长度为64比特,计数器长度为64比特,该算法的核心是一个512比特输入、512比特输出的杂凑函数H,该杂凑函数将256比特密钥、64比特初始向量、64比特计数器及128比特固定常数共计512比特数据通过20轮的迭代运算,每拍产生512比特密钥流输出。算法分为初始化过程和密钥流产生过程,下面进行简要介绍。

0x2 初始化阶段

Salsa20的输入为:

其中,(k0,...,k7)为256比特的密钥,(v0,v1)为初始IV,(i0,i1)为分组标号,(σ0,σ1,σ2,σ3)为固定的常数。如果密钥长度是128比特,则(k4,k5,k6,k7)=(k0,k1,k2,k3)。其中(σ0,σ1,σ2,σ3)=(0x61707865,0x3320646e,0x79622d32,0x6b206574)或者(σ0,σ1,σ2,σ3)=(0x61707865,0x3120646e,0x79622d36,0x6b206574)。

0x3 密钥流产生过程

Salsa20为基于ARX(模加循环移位异或)混合运算设计的类分组结构流密码算法。

Salsa20的轮函数是一个16-word输入16-word输出的Hash函数。

Salsa20的最基本的部分是quarterround函数,该函数的输入为四个word,输出也为四个word。为了方便,在本文中我们将这个函数简记为QR。其定义如下:

Salsa20共有20轮变换。分别为10个列变换和10个行变换。我们将列变换简记为Col,将行变换简记为Row。列变换和行变换如下图所示。

一个Col和一个Row组成一个Doubleround函数,我们将Doubleround函数简记为Dou。容易看出,Salsa20包括10个Dou变换。我们定义第10个Dou变换后的输出为Dou10(X)。Salsa20的Hash输出值为:

Salsa20(X0)=X0+Dou10(X)。

Salsa20(X)是Salsa20算法的密钥流。我们把它记为S=Salsa20(X)=(s0,s1,...,s15)。设P是一个明文,C是相应的密文。加密函数为C=P⊕S,解密函数为P=C⊕S。Salsa20的加密过程参下图。


http://www.kler.cn/news/328405.html

相关文章:

  • mybatis-puls快速入门
  • Nginx的核心架构和设计原理
  • EnvoyFilter 是 Istio 中用于直接修改 Envoy 配置的一种资源类型
  • 帝都程序猿十二时辰
  • modelsim仿真 wave视图里 数据位宽和进制怎么显示
  • 通信工程学习:什么是CSMA/CD载波监听多路访问/冲突检测
  • 计算机知识科普问答--25(121-125)
  • 关于KKT条件的线性约束下非线性问题-MATLAB
  • 【机器学习】过拟合与欠拟合——如何优化模型性能
  • wx小程序中,商城订单详情显示还有多少分钟关闭
  • 「C++系列」模板
  • 项目实战:构建高效可扩展的Flask Web框架:集成Flask-SQLAlchemy、Marshmallow与日志管理
  • SpringBoot集成Redis及SpringCache缓存管理
  • 了解什么是CMMI认证
  • jenkins项目发布基础
  • 【网络基础】网络常识快速入门知识清单,看这篇文章就够了
  • Docker实践与应用:深度探索与丰富案例
  • 论文阅读- On the Feasibility of Fully AI-automated Vishing Attacks
  • 基于SpringBoot的街道志愿者服务平台设计与实现
  • npm、yarn、pnpm对比
  • 2024年9月个人工作生活总结
  • STM32原理知识查询表
  • linux常用命令汇编(持续更新)
  • 计算机毕业设计之:音乐媒体播放及周边产品运营平台(源码+文档+讲解)
  • 软件供应链安全管理实践之中国科学院软件研究所
  • Python和MATLAB库尔巴克–莱布勒散度信息论统计学生物学和算法模型
  • 李沐深度学习-多层感知机、模型选择、过拟合、欠拟合
  • PHP基础知识
  • 前端独立实现页面是否有发布
  • Android 热点分享二维码功能简单介绍