密码学入门——Feistel网络

2023-09-17 10:42:37

参考书

图解密码技术,第三版

一、引入

DES的基本结构是由Horst Feistel设计的,因此也被成为Feistel网络(Feistel结构,Feistel密码)。这一结构不仅被应用于DES,在其他密码算法中也有应用。

在Feistel网络中,加密的各个步骤被称为轮(round)。整个加密过程就是若干次轮的循环。

二、Feistel网络计算流程

Feistel网络计算流程如下

在这里插入图片描述
由于DES采用分组密码工作模式,每一块的大小为64字节。

上面的两个方框表示Feistel网络中一轮的输入(明文)。输人的数据被等分为左右两半分别进行处理。在图中,左半部分写作“左侧”,右半部分写作“右侧”。

下面的两个方框表示本轮的输出(密文)。输出的左半部分写作“加密后的左侧”,右半部分写作“右侧”。

中间的“子密钥”指的是本轮加密所使用的密钥。在Feistel网络中,每一轮都需要使用一个不同的子密钥。由于子密钥只在一轮中使用,它只是一个局部密钥,因此才称为子密钥。

轮函数的作用是根据“右侧”和子密钥生成对“左侧”加密的比特序列。轮函数的输出与“左侧”进行xor运算。

上述流程存在的问题是,右侧根本没有被加密,因此需要在每两轮处理中将左侧和右侧的数据对调。

下面是一个3轮的Feistel网络

在这里插入图片描述

三、Feistel网络的解密

在这里插入图片描述
Feistel网络只需要按照相反的顺序使用子密钥即可解密。

四、Feistel网络的性质

1.Feistel网络的轮数可以任意增加,无论进行多少轮的加密计算,都不会出现无法解密的情况。

2.加密时无论使用任何函数作为轮函数,都可以正确解密。

3.加密和解密可以使用完全相同的结构实现。

值得一提的是,AES候选的5个算法中,有3个算法(MARS,RC6和Twofish)都用到了Feistel网络。但AES最终选择的Rijndael却没有使用Feistel网络。Rijndael使用的是SPN结构。

更多推荐

java使用正则提取数据

一、正则提取文本指定数据需要对一个json结构做数据的提取,提取label和value的值,组成新的结构,西瓜:0、苹果:1、草莓:2原始json字符串如下格式[{"label":"西瓜","value":0},{"label":"苹果","value":1},{"label":"草莓","value":2},{"la

LeetCode2.两数相加

一看完题,我的想法是先算出这两个链表表示的数,然后相加,然后把这个数一位一位的分配给第三个数组,这种方法应该很简单但是要遍历三次数组,于是我就想直接一遍遍历,两个链表同时往后面遍历,把这两个数的和给第三个链表,如果有进位,下一个数加1;但是写完之后出现的问题,因为我的循环是先创建下一个链表然后,指针指向这个链表,然后再

AI绘图软件Stable Diffusion 安装和使用之二controlnet插件

本期说一下StableDiffusion非常有名的插件controlnet。同上一篇一样,我们安装b站大佬秋葉aaaki(有的网友戏称他/她是赛博佛祖)的stablediffusion4.2整合包。解压缩以后,打开启动器,见下图,界面比早期版本更好看了。​编辑​启动器打开以后,安装controlnet插件填写网址:ht

【文生图系列】如何在Stable Diffusion Webui中使用ControlNet

文章目录ControlNetStableDiffusion+ControlNet安装ControlNet插件bug例子展示参考ControlNetControlNet是一个神经网络结构,通过添加额外的条件控制扩散模型。给定任务条件,ControlNet能够提升已训练好的图像扩散模型。对于任意一个神经网络块,如下图所示,

【面试经典150 | 数组】跳跃游戏 II

文章目录写在前面Tag题目来源题目解读解题思路方法一:贪心写在最后写在前面本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:Tag:介绍本题牵涉到的知识点、数据结构;题目来源

软件测试/测试开发丨利用人工智能ChatGPT编写晋级报告

点此获取更多相关资料简介不管是在哪个公司,如果想要有一个长足的发展,想要获得晋升,除了平时的表现与积累,还有就是晋级答辩与晋级报告。不同的岗位,比如设计、产品、研发、测试,都有不同的答辩通道和晋级标准。一篇好的晋级报告,可以完整地体现一个人过去的工作贡献,以及未来的工作展望。而晋级报告的编写,也可以借助ChatGPT轻

微信CRM系统致力于帮助金融保险行业

在当今信息化的时代,金融保险行业面临着越来越大的竞争与挑战,那么微信CRM系统是怎么帮助金融保险行业解决问题的呢?金融保险行业面临的困难①销售管理困难,企业资源容易流失;金融保险业通过在线销售实现业务。电话销售、微信沟通难以监控管理,销售部员工流动性大,导致监管风险和客户资源流失。②客户营销困难,用户意向定位模糊;由于

《golang设计模式》第二部分·结构型模式-06-享元模式(Flyweight)

文章目录1.概述1.1角色1.2类图2.代码示例2.1设计2.2代码2.3类图示例1.概述享元(Flyweight)模式采用共享方式向客户端提供数量庞大的细粒度对象。所谓细粒度对象,是指实现了业务细节并相互独立的对象。细粒度对象是一种相对概念,一般不会进行更小粒度的拆分。1.1角色抽象享元(Flyweight):通常是

【跟小嘉学 Rust 编程】三十、Rust 使用 Slint UI

系列文章目录【跟小嘉学Rust编程】一、Rust编程基础【跟小嘉学Rust编程】二、Rust包管理工具使用【跟小嘉学Rust编程】三、Rust的基本程序概念【跟小嘉学Rust编程】四、理解Rust的所有权概念【跟小嘉学Rust编程】五、使用结构体关联结构化数据【跟小嘉学Rust编程】六、枚举和模式匹配【跟小嘉学Rust

(vue2)面经基础版-案例效果分析

配路由先配一级,一级里面配二级。一级路由:首页(二级:嵌套4个小页面)、详情页高亮a->router-link,高亮效果对自带高亮类名router-link(-exact)-active设置注:通过children配置项,可以配置嵌套子路由。并在该组件中准备路由出口<router-view></router-view>

「聊设计模式」之 设计模式的前世今生

🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅!目录:一、什么是设计模式设计模式的定义设计模式的作用二、设计模式的发展历程设计模式的起源设计模式的发展阶段三、设计模式的分类创建型模式结构型模式行为型模式四、常用的设计模式工厂模式单例模式装饰器模式代理模

热文推荐