分组密码算法与DES算法

news/2024/12/2 13:11:50/

目录

1 分组密码的含义

1.1 分组密码介绍

1.2 分组密码的含义

1.3 分组密码的要求

2 分组密码的设计思想

2.1 分组密码的设计思想

3 分组密码的基本特点

 3.1 分组密码的基本特点

 3.2 分组密码的迭代结构

3.3 子密钥的生成方法

3.4 轮函数的设计准则 

 3.5 迭代的轮数

4 分组密码的迭代结构

4.1 分组密码迭代结构 

feistel结构:

加密过程中一轮:

 解密过程中一轮:

5 DES分组密码算法 

5.1 DES起源

5.2 DES概述 

5.3 DES加密流程图 

 5.4 DES函数F的实现流程图

 5.5 选择扩展置换E(32位扩展到48位)

5.6 DES子密钥的生成算法

5.7  S盒代替——压缩替代变换

 5.8 置换P盒的构造方法

​ 5.9 轮函数步骤

 5.10 逆初始置换​

 5.10 DES解密流程图

6 DES其他知识

6.1 弱密钥

6.2 半弱密钥

6.3 差分分析

6.4 线性分析

6.5 多重DES


1 分组密码的含义

1.1 分组密码介绍

  •  分组密码(block cipher)是现代密码学中的重要体制之一,也是应用最广泛、影响最大的一种密码体质,其主要任务是提供数据保密性,也可以用到再许多方面,如构造伪随机数生成器、序列密码、认证码和哈希函数等。
  • 由于分组密码加解密速度较快,安全性好,以及得到许多密码芯片的支持,现代分组密码发展非常快,在许多研究和应用领域得到了广泛的应用。

1.2 分组密码的含义

        分组密码,也称块密码,它是将明文消息经编码表示后的二进制序列 p_{0},p_{1},\cdots,p_{i},\cdots划分成若干固定程度(譬如m)的组(或块)p=(p_{0},p_{1},\cdots,p_{m-1}),各组分别在密钥k=(k_{0},k_{1},\cdots,k_{t-1})的控制下转换成长度为n的密文分组c=(c_{0},c_{1},\cdots,c_{n-1})。其本质是从一个明文空间(m长的比特串的集合)P到密文空间(n长的比特串的集合)C的一一映射。(一般而言,m=n,但与t不一定相等)。

1.3 分组密码的要求

  •  分组长度要足够大:当分组长度较小时,攻击过穷举明文空间,得到密码换规律,难于抵御选择明文攻击。
  • 密码量要足够大:如果密钥量小,攻击者可以有效地通过穷举密钥的方法进行破译
  • 密码变换足够复杂:使攻击者除了穷举法攻击以外,找不到其他有效的攻击方法。
  • 加密和解谜运算简单:便于软件和硬件实现,性能好
  • 无数据扩展或压缩

2 分组密码的设计思想

2.1 分组密码的设计思想

  •  扩散

所谓扩散,是指要将算法设计成明文每一比特的变化尽可能多地影响到输出密文序列的变化,以便隐蔽明文的统计特性。形象地称为雪崩效应。 

扩散的另一层意思是密钥每一位的影响尽可能迅速地扩展到较多的密文比特中去。即扩散的目的是希望密文中的任一比特都要尽可能与明文、密钥相关联,或者说,明文和密钥中任何一比特值发生改变,都会在某种程度上影响到密文值得变化,以防止将明文或密钥分解成若干孤立的小部分,然后被逐个击破。

  • 混乱

所谓混乱,指在加解密变换过程中明文、密钥以及密文之间的关系尽可能地复杂化 ,以防密码破译者采用解析法(即通过建立并求解一些方程)进行破译攻击。

混乱可以用“搅拌机”来形象地解释,将一组明文和一组密钥输入到算法中,经过充分混合,最后变成密文。同时要求,执行这种“混乱”作业的每一步必须是可逆的,即明文混乱以后能得到密文,反之,密文经过逆向的混乱操作后能恢复出明文。(按照混乱原则,分组密码算法应有复杂的非线性因素)。

  • 乘积密码

依次使用两个或两个以上的基本密码,所的结果的密码强度将强于所有单个密码的强度。实际上,乘积密码就是扩散和混乱两种基本密码操作的组合变换。 这样能够产生比各自单独使用时更强大的密码系统。选择某个较为简单的密码变换(包含多个基本密码),在密钥控制下以迭代方式多次利用它进行加密变换,就可以达到预期的扩散和混乱效果。乘积密码有助于利用少量的软硬件资源实现较好的扩散和混乱效果,再通过迭代方法,达到预期设计效果,这种思想在现代代码设计中使用非常广泛。

3 分组密码的基本特点

 3.1 分组密码的基本特点

  • 分组长度:能够抵御选择明文攻击
  • 密钥长度:能够抵御穷举攻击
  • 子密钥
  • 轮函数F
  • 迭代 

 3.2 分组密码的迭代结构

 

3.3 子密钥的生成方法

子密钥的生成是迭代分组算法的一个重要组成部分,是从初始(种子)密钥产生各迭代要是用的子密钥的算法。 也就是说,轮函数F的功能是在子密钥的参与和控制下实现的,子密钥的生成很重要,其评价指标:

  • 实现简单、速度,满足轮函数F的要求;
  • 种子密钥的所有比特对每个子密钥比特的影响大致相同;
  • 没有弱密钥或弱密钥容易确定

3.4 轮函数的设计准则 

轮函数F是分组密码的核心,是分组密码中单轮加解密函数,其基本准则:

  • 非线性
  • 可逆性
  • 雪崩效应 

其主要的性能指标是安全性、速度、灵活性。 

 3.5 迭代的轮数

分组密码一般采用简单的、。安全性弱的密码函数进行多轮迭代运算,使得安全性增强。一般来说,分组密码迭代轮数越多,密码分析越困难,但也不是追求迭代轮数越多越好,过多的迭代轮数会使加解密算法的性能下降,而实际的安全性增强不明显。决定迭代轮数的准则:密码算法分析的难度大于简单穷举搜索攻击的难度。分组密码迭代轮数一般采用8、10、12、16、20的居多。

在密码学的学术理论中,任何攻击方式,其计算复杂度若少于暴力搜寻法所需要计算复杂度,就能被视为针对该密码系统的一种破解法;但这并不表示该破解法已经进入可以实际应用的阶段。 

4 分组密码的迭代结构

4.1 分组密码迭代结构 

feistel结构:

 

加密过程中一轮:

  • Feistel加密一轮的迭代过程
  • 明文被分为等长的两部分
  • 第i轮子密钥由初始密钥k推导出的
  • 一般来说,每轮子密钥与k不同,也互不相同
  • F称为轮函数

 

 解密过程中一轮:

 

  • Feistel解密一轮迭代过程
  • 被解密的数据左右互换
  • 解密过程按照与加密过程相反顺序使用密钥

 

 解密同加密一样,也需要进行左右消息分组的运算,并且要将运算结果传递给下一轮。通过feistel结构的加密和解密,我们可以发现在明文消息在经过加密以后的密文,可以通过解密算法将其还原为原始的明文,也就是说该加密算法是可逆的。 

5 DES分组密码算法 

5.1 DES起源

1973年,美国的国家标准局认识到建立数据加密标准的迫切性,开始在全国征集国家数据加密标准。有很多公司着手这项工作并提交了一些建议,经历了海选、初选、决赛,最后IBM公司的Lucifer加密系统获得了胜利。经过两年多的公开讨论之后,1997年1月15日NBS决定利用这个算法,并将其更名为数据加密标准(Data Encryption Stand-ards,DES)。不久,其他组织也认可和采用DES作为加密算法,供商业和非国防行政府部门使用。当时,确定有效期为5年,随后在1983年、1988年、1993年三次再次授权该算法续用五年,1997年开始征集AES(高级机密标准),2000年选定比利时人设计的Rijndael算法作为新标准(AES)。

5.2 DES概述 

  • 分组加密算法:明文和密文为64位分组长度。
  • 密码算法:加密和解密除密钥编排不同外,使用同一算法。
  • 密钥长度:56位,但存在弱密钥,容易避开。
  • 采用混乱和扩散的组合,每个组合先代换后置换,共16轮。
  • 只使用了简单的逻辑运算,易于实现,速度快。
  • 现代密码学诞生的标志之一,揭开了商用密码研究的序幕。 

5.3 DES加密流程图 

初始置换:

 在这里插入图片描述

 ·在这里插入图片描述

Feistel结构:feistel结构把任何函数(一般称为F函数,又称轮函数)转化为一个置换。
子密钥的生成:子密钥K的生成大致分成三个过程:置换选择PC1,循环左移,置换选择PC2。
Ln = R(n - 1);
Rn = L(n - 1)⊕f(Rn-1,kn-1)

 5.4 DES函数F的实现流程图

 

 5.5 选择扩展置换E(32位扩展到48位)

 E盒扩展的作用是把32比特的输入扩展成48比特,扩展的方式如下图所示,把输入的32比特从左到右编号为1,2,3.。。。32,并把 这32比特写成每行4个,共8行的形式。然后把第i-1行最右比特和第i+1行最左比特添加到第i行的左边和右边,这样就得到了48bit的输出。(即c1c2c3c4c5c6 = m32m1m2m3m4m5 .... 以此类推)。

 

5.6 DES子密钥的生成算法

 

  • 初始密钥也称种子密钥,64位,经过子密钥换位表PC-1的变换后,由64位变成56位(因为只有56位是有用的位数,有八位为奇偶校验位),这56位分为两组C0和D0; 子密钥换位表PC-1:

https://pic-1259640338.cos.ap-shanghai.myqcloud.com/img/PC1.png

 将明文中第57位数据放在转换后生成表的第一位,第49位放在生成表的第2位……

  • C0和D0作一次循环左移得到C1和D2;循环左移的规则为:16次循环,每次左移 1 1 2 2, 2 2 2 2, 1 2 2 2, 2 2 2 1。
  • C1和D2合并为56位,再经过子密钥换位表PC-2的变换后,由56位变成48位,即得到第一个子密钥K1 子密钥换位表PC-2:

https://pic-1259640338.cos.ap-shanghai.myqcloud.com/img/PC2.png

  •  总流程图

5.7  S盒代替——压缩替代变换

 S盒的作用是将输入的48比特数据压缩为32比特。

 

8个6进4出的S盒如下图所示,每个S盒有4行,记为第0,1,2,3行,有16列,记为第0,1,2,3.。。。,15列。

以s6为例解释s盒的使用方法:

对于6位输入b1b2b3b4b5b6,用b1b6组成的二进制数表示行标,b2b3b4b5组成的二进制数表示列标,查s盒的表,表中的十进制数字转为4位二进制即为输出

 

 5.8 置换P盒的构造方法

 5.9 轮函数步骤

 令+表示XOR加法 (模2诸位加法) ,对于第n轮有:

在这里插入图片描述

 5.10 逆初始置换IP^{-1}

 轮函数最后一步的左边32 bit和右边32 bit合成64 bit,再进行逆初始置换,得到最终密文。

在这里插入图片描述

 5.10 DES解密流程图

6 DES其他知识

6.1 弱密钥

  • 如果给定初始密钥k,经子密钥产生器产生的各个子密钥都相同,即有k_{1} = k_{2} = \cdots = k_{16},则称给定的初始密钥k为弱密钥
  • 若k为弱密钥,则对任意的64bit信息有:E_{k}(E_{k}(m)) = mD_{k}(D_{k}(m)) = m
  • 弱密钥的构造由子密钥产生器中寄存器C和D中的存数在循环移位下出现重复图样决定的(C和D中的存数为全0或全1)。共有四个(十六进制):

 

6.2 半弱密钥

  •  若给定初始密钥k,产生的16个子密钥只有两种,且每种都出现8次,则k称为半弱密钥。
  • 半弱密钥的特点是成对出现,且具有下述性质:若k_{1}k_{2}为一对半弱密钥,m为明文组,则有:E_{k2}(E_{k1}(m)) = E_{k1}(E_{k2}(m)) = m
  • 此外,还有四分之一弱密钥和八分之一弱密钥。
  • 在DES的256(72057594037927936)个密钥中,弱密钥(256)所占 的比例是非常小的,而且极易避开,因此,弱密钥的存在对DES的安全性威胁不大

6.3 差分分析

 差分分析是一种攻击迭代密码体制的选择明文攻击方法, 与一般统计分析法的不同之处是,它不是直接分析密文或密 钥和明文的统计相关性,而是分析一对给定明文的异或(对 应位不同的个数称为差分)与对应密文对的异或之间的统计 相关性。差分分析的基本思想是在攻击的迭代密码系统中找 出某些高概率的明文差分和密文差分对来推算密钥。利用此 法攻击DES,需要用247个选择明文和247次加密运算,比穷举 搜索的工作量大大减少。然而找到247个选择明文的要求使这
种攻击只有理论上的意义。

6.4 线性分析

该方法是日本密码学家松井充(Mitsuru Matsui)于1993年公 开的另一种对分组密码进行分析攻击的方法,这种方法试图 通过大量的“明-密文对”找出分组密码算法中与密钥有关的 线性方程,然后试着得到大量的这类关系从而确定密钥。其 基本思想是以最佳的线性函数逼近DES的非线性变换S盒,这 是一种已知明文攻击方法,可以在有243个已知明-密文对的情 况下破译DES。虽然获得已知明文比选择明文更容易,但线性分析作为一种攻击手段针对DES在实际上仍然不可行。

6.5 多重DES

  • 为了提高DES的安全性能,并充分利用已有DES的软件 和硬件资源,可以使用多重DES。多重DES就是使用多个密 钥利用DES对明文进行多次加解密,使用多重DES可以增加密钥量,从而大大提高抵抗对密钥的穷举搜索攻击的能力。
  • 已经证明多重DES并不等价于使用一个56位密钥的单重DES:Ø 二重DES Ø 三重DES。
    所有可能的64位明文分组映射到所有可能的64位密文分 组共有264!(>101020)种不同的方法,56位密钥的DES算 法,提供了256(<1017)个这种映射关系,所以,多重 DES所对应的映射不同于单DES所定义的映射。以双重 DES为例,对于消息m1,能够找到一个k3满足: Ek2(Ek1(m1))=Ek3(m1);对于消息m2,能够找到一个k4 满足:Ek2(Ek1(m2))=Ek4(m2) ;但k3和k4相同的概率只 有1/264。也就是说,针对任意消息m不存在k3满足
    Ek2(Ek1(m))=Ek3(m)。
  • 二重DES
  • 三重DES


http://www.ppmy.cn/news/633838.html

相关文章

Android JNI 进阶(含完整 Demo)

GetObjectArrayElement解释: 在JNI 中只有基本类型和引用类型,String 是引用类型,所以遍历 String[]的时候,采用GetObjectArrayElement()来接收 参数一:jobjectArray:所有的元素参数二:jsize:当前的位置 ReleaseIntArrayElements解释: ReleaseIntArrayElements()方法是 C通…

Java多线程导出Excel表格, 100w数据量

海量数据报表导出 背景 大数据量的报表导出&#xff0c;单线程的情况下&#xff0c;很大概率会导致OOM问题&#xff0c;而且导出时间长。 解决方法&#xff1a;多线程导出报表 多线程的优势就是可以同时处理多个任务&#xff0c;提高效率&#xff0c;减少接口的响应时间。…

《图解密码技术》笔记

《图解密码技术》是一本非常适合新手密码学入门的书籍&#xff0c;对于密码学相关的概念讲解的的非常清楚到位。本文是本人阅读该书做的笔记&#xff0c;供大家参考&#xff0c;不足之处&#xff0c;请批评指正。 第一部分 密码 第一章 环游密码世界 公钥密码&#xff08;pub…

2022年券商行业发展和产品研究报告

第一章 行业概况 证券行业指专门从事有价证券买卖的法人企业。分为证券经营公司和证券登记公司。狭义的证券公司是指证券经营公司&#xff0c;是经主管机关批准并到有关工商行政管理局领取营业执照后专门经营证券业务的机构。它具有证券交易所的会员资格&#xff0c;可以承销发…

MySQL随机生成customers表姓名,密码,性别,出生日期,电话,邮箱,收货地址,客户等级创建账号时间(function函数)

在设计图书书店数据库的customers客户表时,记录一些花了时间的成果。 首先创建客户表 drop table if exists customers; create table customers(customerid BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,customername varchar(50) not null COM…

【Autojs】京东自动退货脚本

声明 此脚本只用于读者学习使用&#xff0c;禁止用于非法用途。 环境 app版本Autojs4.1.1 Alpha京东11.3.6 直接分享源码 // 悬浮窗按钮 run.js var path "./jd.js"; if (!files.exists(path)) {toast("脚本文件不存在: " path);exit(); } var wind…

mysql+php数据库大作业之世界杯比赛系统

说明&#xff1a;此项目为本人大三数据库课程的课程大作业。由于只学习过相关的sql知识&#xff0c;对于前端的知识并不是很了解&#xff0c;只花了一周的时间来学习前端&#xff0c;所以此版本只能算是一个阉割版&#xff0c;有很多功能还未实现&#xff0c;希望以后能有机会继…

jmeter常用随机函数

jmeter常用随机函数 邮箱类&#xff1a; ${__RandomString(8,abcdefghijklmnopqrstuvwxyz,)}http://126.com手机号类&#xff1a; ${__Random(18000000000,18999999999,)}银行卡号类16位&#xff1a; ${__Random(1000000000000000,9999999999999999,)}银行卡号类19位&#xff…