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

轻量级分组加密算法RECTANGLE

轻量级分组加密算法RECTANGLE

RECTANGLE轻量级分组密码算法是Wentao Zhang,Zhenzhen Bao,Dongdai Lin等学者于2014年提出的,该算法是SPN结构的,采用了线性移位的置换层以及4×4bit的S盒。RECTANGLE是一个迭代分组密码,分组长度为64比特,密钥长度可选80比特或者128比特。

设B=(b4l-1,…,b3l,…,bl-1,…,b0)是一个4l比特的分块,我们总是把它看成一个4×16的矩形:

向量B的第j列就是这个矩形的第j列,记为B(j)=(bj,bj+l,bj+2l,bj+3l),其中0≤j≤l-1。用B(i,j)表示矩形的第i行第j列,即B(i,j)=bj+il.例如,一个64比特的明文或中间状态(w63,w62,⋯,w0)均可以看成4×16的矩形:

同样地,80比特的主密钥或者轮子密钥(k79,k78,⋯,k0)可以看成4X20的矩形。

分组密码RECTANGLE包含了25轮的迭代,每次迭代都包含三个步骤:异或轮密钥AddRoundkey、S盒变换SubColumn和行移位ShiftRow,见下图.

第一步AddRoundKey,用轮子密钥的最右边64比特和明文或中间状态异或。

第二步SubColumn中用到的S盒是4比特到4比特的置换,具体描述如下:

第三步ShiftRow中,第0行不移位,第1行循环左移1位,第2行循环左移12位,第3行循环左移13位。经过25轮迭代后,再异或一个轮子密钥。

密钥扩展算法

密钥的编排也包含三个步骤,见下图。其中,用到的S盒和轮函数中的一样,第0、1、2和3行分别循环左移7、9、11和13位。后一步异或的轮常数RC[i](0≤i≤24)始状态为RC[0]=(0,0,0,0,1)的5级线性反馈移位寄存器生成的,轮的轮常数RC[i]=(ri,4,ri,3,ri,2,ri,1,ri,0)等于(ri-1,3,ri-1,2,ri-1,1,ri-1,0,ri-1,4⊕ri-1,2).

在第i轮(i=0,1,2,3,…,24),64比特轮密钥Ki包含计数器中每一行密钥的右边16个比特数据。即Ki=(k3,15||k3,14||…||k3,0)||(k2,15||k2,14||…||k2,0)||(k1,15||k1,14||…||k1,0)||(k0,15||k0,14||…||k0,0)。在调用子密钥之前,密钥计数器要按以下方式更新数据:

1.将第0列元素用S盒进行混淆运算。

k3,0||k2,0||k1,0||k0,0=S(k3,0||k2,0||k1,0||k0,0)

2.对计数器中的每一行进行权值不同的左移位运算,第0行左移7比特,第1行左移9比特,第2行左移11比特,第3行左移13比特。

3.对计数器第1行的最右边5比特进行异或轮常量RC[i]运算。

k0,4||k0,3||k0,2||k0,1||k0,0=(k0,4||k0,3||k0,2||k0,1||k0,0)⨁RC[i]

轮常量RC[i]由一个5比特线性反馈移位寄存器生成,每经过一轮,5比特数据(rc4rc3rc2rc1rc0)便左移一位,同时将新的rc0位置为第5位和第3位的异或值。初始值RC[0]定义为:RC[0]=0x1。

http://www.dtcms.com/a/20726.html

相关文章:

  • 网络工程师 (41)IP协议、IP地址表示方法
  • 大语言模型中one-hot编码和embedding之间的区别?
  • 使用maven-archetype制作项目脚手架
  • 使用 Go 语言调用 DeepSeek API:完整指南
  • C# 控制台相关 API 与随机数API
  • PyQt学习记录03——批量设置水印
  • 递归的示例
  • 在conda环境下,安装Pytorch和CUDA
  • C++上机_日期问题
  • Python 自然语言处理(NLP)和文本挖掘的常规操作过程
  • 【SpringBoot3】面向切面 AspectJ AOP 使用详解
  • 企业如何搭建高效内容中台?
  • Java(api中常用类,包括Object类,Arrays类,String类,基本数据类型包装类)
  • 本地大模型编程实战(19)RAG(Retrieval Augmented Generation,检索增强生成)(3)
  • 告别卡关!XSS挑战之旅全关卡通关思路详解
  • Golang学习01:Go安装和配置+Vscode、GoLand安装激活+Go环境变量避坑的超详细教程
  • 基于大数据的全国热门旅游景点数据分析系统的设计与实现
  • 【第14章:神经符号集成与可解释AI—14.4 神经符号集成与可解释AI的未来发展趋势与挑战】
  • 【Golang学习之旅】如何在Go语言中使用Redis实现分布式锁,并解决锁过期导致的并发问题?
  • 目标检测之YOLO论文简读
  • 流量类仲裁器(SCHED_NODE_TYPE_TC_ARBITER_TSAR) 和 SCHED_NODE_TYPE_RATE_LIMITER
  • Java GC 基础知识快速回顾
  • Dockerfile 编写推荐
  • 前端(JS进阶)学习笔记(CLASS 2):构造函数数据常用函数
  • 1.10. 引用及内部可变性(简单回顾):引用、内部可变性、`Cell`类型及相关操作
  • 2.4.2 常量的定义与使用
  • Python怎样引用其他.py文件?怎样导入其他模块?
  • DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型
  • 150,[5] BUUCTF WEB [BJDCTF2020]EasySearch
  • 【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列