精华内容
下载资源
问答
  • 扩散和混淆
    千次阅读 多人点赞
    2020-12-31 14:55:16

    扩散就是让明文中的每一位影响密文中的许多位,或者说让密文中的每一位受明文中的许多位的影响.这样可以隐蔽明文的统计特性。

    混淆就是将密文与密钥之间的统计关系变得尽可能复杂,使得对手即使获取了关于密文的一些统计特性,也无法推测密钥。使用复杂的非线性代替变换可以达到比较好的混淆效果,而简单的线性代替变换得到的混淆效果则不理想。

    雪崩效应(Avalanche effect)指加密算法(尤其是块密码和加密散列函数)的一种理想属性。雪崩效应就是一种不稳定的平衡状态也是加密算法的一种特征,它指明文或密钥的少量变化会引起密文的很大变化。雪崩效应是指当输入发生最微小的改变(例如,反转一个二进制位)时,也会导致输出的剧变(如,输出中一半的二进制位发生反转)。在高品质的块密码中,无论密钥或明文的任何细微变化都应当引起密文的剧烈改变。

    更多相关内容
  • 本文提出了布尔变换中信息扩散和混淆度的概念,并证明最大的信息扩散和混淆度都是在元组布尔线性可逆变换中。 此外,我们给出了构造可逆布尔非线性变换结构的最大扩散和混淆度的方法。 也就是说,通过AESSMS4,...
  • 密码学扩散和混淆备忘

    万次阅读 2011-05-23 11:07:00
    扩散和混淆是现代分组密码的设计基础. <br /> 所谓扩散就是让明文中的每一位影响密文中的许多位,或者说让密文中的每一位受明文中的许多位的影响.这样可以隐蔽明文的统计特性.当然,理想的情况是让明文中的...

    扩散(diffusion)和混淆(confusion)是C.E.Shannon提出的设计密码体制的两种基本方法,其目的是为了抵抗对手对密码体制的统计分析.在分组密码的设计中,充分利用扩散和混淆,可以有效地抵抗对手从密文的统计特性推测明文或密钥.扩散和混淆是现代分组密码的设计基础.

    所谓扩散就是让明文中的每一位影响密文中的许多位,或者说让密文中的每一位受明文中的许多位的影响.这样可以隐蔽明文的统计特性.当然,理想的情况是让明文中的每一位影响密文中的所有位,或者说让密文中的每一位受明文中所有位的影响.

    所谓混淆就是将密文与密钥之间的统计关系变得尽可能复杂,使得对手即使获取了关于密文的一些统计特性,也无法推测密钥.使用复杂的非线性代替变换可以达到比较好的混淆效果,而简单的线性代替变换得到的混淆效果则不理想.可以用"揉面团"来形象地比喻扩散和混淆.当然,这个"揉面团"的过程应该是可逆的.乘积和迭代有助于实现扩散和混淆.选择某些较简单的受密钥控制的密码变换,通过乘积和迭代可以取得比较好的扩散和混淆的效果.

    展开全文
  • 其思想实际上是Shannon提出的利用乘积密码实现混淆和扩散思想的具体应用。 Feistel特性 分组大小:分组越大则安全性越高,但加密速度就越慢。分组密码设计中最为普遍使用的分组大小是64比特。 密钥大小:密钥越长则...

    分组密码(block cipher)是密码系统的基本组成部分之一。分组密码的数学模型是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。


    与流密码不同的是,是对数据流进行连续处理的算法,每次加密数字流的一位或一字节。

    分组密码对128位明文进行加密生成128位密文,是128位数据分组加密的可逆加密函数。128位也称为分组密码的分组长度。密钥是长度通常为128或256的位串。可以将分组密码看作一个非常大的映射表,用于明文到密文的映射。

    • 加密:E(K,p)或者Ek(p)
    • 解密:D(K,p)或者Dk(p)

    分组密码的主要任务是提供数据保密性,也可以用到在许多方面,如构造伪随机数生成器、序列密码、认证码和哈希函数等。

    0x01 分组密码背景


    20世纪70年代中期后,基本上是围绕DES进行的,推出了一些类似的算法,例如:LOKI,FEAL,GOST等。
    20世纪90年代,人们对DES算法研究更加深入,特别是差分密码分析(differential cryptanalysis)和线性密码分析(linear cryptanalysis)的提出,迫使人们不得不研究新的密码结构。


    IDEA密码打破了DES类密码的垄断局面,随后出现了SQUARE、SHARK、SAFER-64等采用了结构非常清晰的代替—置换(SP)网络,每一轮由混淆层和扩散层组成,从理论上给出了最大差分特征概率和最佳线性逼近优势的界,证明了密码对差分密码分析和线性密码分析的安全性。


    目前分组密码所采用的整体结构可分为Feistel结构(例如CAST—256、DEAL、DFC、E2等)、SP网络(例如Safer+、Serpent等)及其他密码结构(例如Frog和HPC)。

    0x02 理想分组密码


    理想分组密码的核心是随机置换,对于每个密钥值,分组密码都有一个随机置换,而且不同密钥对应的置换应该是完全独立的。


    一个大小为128的分组密码含2128个元素,对应大小为2128的查找表。
    实际中常将n分成较小的段,例如可选n=r*n0,其中r和nq都是正整数,将设计n个变量的代换变为设计r个较小的子代换,而每个子代换只有n0个输入变量。一般nq都不太大,

    0x03 分组密码攻击


    大部分分组密码攻击都为明文攻击,对于分组密码安全的定义覆盖了所有可能的攻击形式,唯密文攻击,已知明文攻击,选择明文攻击,相关密钥攻击等所有攻击。

    1. 相关密钥攻击,由Eli Biham于1993年首次提出,假设攻击者已知到加密函数位、未知密钥的情况下,通过这些函数密钥之间的相关性进行攻击。在实际系统中的不同密钥之间存在相关性。
    2. 选取一部分进行攻击,对剩余部分采用相关密钥攻击。

    128位的密钥是足够长的,但是可能会遇到碰撞攻击,例如1.2 密码学研究重点中提到的生日攻击或中间人攻击。可以针对n位的安全等级,分组密码的长度采用2n位长,但很难遵循。

    0x04 分组密码的一般模型


    分组密码是将明文消息编码为二进制序列后,划分成固定大小的块(Block),每块分别在密钥的控制下变换成二进制序列。明文编码后的二进制序列为x0,x1...xi,将其划分为若干固定长度的分组(Block,块)。考虑某个分组,分组在密钥的控制下变换为长度为q的密文分组。


    其本质是一个从明文空间(长度为p的比特串集合)M到密文空间(长度为q的比特串的集合)C的映射,该映射由密钥确定。

    分组密码的要求

    • 分组长度要足够大
    • 密钥量要足够大
    • 密码变换足够复杂
    • 加密和解密运算简单
    • 无数据扩展或压缩

    扩散和混淆


    扩散


    扩散是指明文的每--位(比特)尽可能多地影响密文的比特位,以隐蔽明文的统计特征。密钥的每一位(比特)也尽可能迅速地扩散到较多的密文比特中去。


    混淆


    混淆指在加密变换过程中明文、密钥以及密文之间的关系尽可能地复杂,以使密码分析者(敌手)无法分析出密钥。

    Feistel密码结构


    乘积密码指顺序地执行两个或多个基本密码系统,使得最后结果的密码强度高于每个基本密码系统产生的结果。
    Feistel还提出了实现代换和置换的方法。其思想实际上是Shannon提出的利用乘积密码实现混淆和扩散思想的具体应用。

    Feistel特性

    1. 分组大小:分组越大则安全性越高,但加密速度就越慢。分组密码设计中最为普遍使用的分组大小是64比特。
    2. 密钥大小:密钥越长则安全性越高,但加密速度就越慢。现在普遍认为64比特或更短的密钥长度是不安全的,通常使用128比特的密钥长度。
    3. 轮数:单轮结构远不足以保证安全性,但多轮结构可提供足够的安全性。典型地,轮数取为16。
    4. 子密钥产生算法:该算法的复杂性越大,则密码分析的困难性就越大。
    5. 轮函数:轮函数的复杂性越大,密码分析的困难性也越大。

    0x05 置换的奇偶性


    建立置换表步骤

    1. 通过索引i到值i的意义映射进行初始化表
    2. 重复交换条表的两个元素来创建置换

    置换类型

    1. 奇置换:进行奇次数置换,对于一个给定的密钥,对所有可能的明文进行加密以提取置换,如果是奇置换可认为是理想分组密码,因为真正的分组密码不能进行奇置换
    2. 偶置换:进行偶次数置换

    0x06 实际分组密码


    设计一种新的分组密码很容易,但是设计出好的分组密码就十分困难。几乎所有的分组密码都由一个弱分组密码重复多次,每一次运算称为1轮,通过多次重复形成强分组密码。

    分组密码方案

    • 数字加密标准 (DES) - 1990 年代流行的分组密码。它现在被认为是一个“破碎的”分组密码,主要是因为它的小密钥大小。
    • Triple DES - 它是基于重复 DES 应用程序的变体方案。它仍然是一种受人尊敬的分组密码,但与可用的新的更快的分组密码相比效率低下。
    • 高级加密标准 (AES) - 它是一种基于加密算法Rijndael的相对较新的分组密码,赢得了 AES 设计竞赛。
    • IDEA - 它是一个足够强大的块密码,块大小为 64,密钥大小为 128 位。许多应用程序使用 IDEA 加密,包括早期版本的 Pretty Good Privacy (PGP) 协议。由于专利问题,IDEA 方案的使用受到限制。
    • Twofish - 这种分组密码方案使用 128 位的块大小和可变长度的密钥。它是 AES 决赛选手之一。它基于较早的块密码 Blowfish,块大小为 64 位。
    • Serpent - 块大小为 128 位,密钥长度为 128、192 或 256 位的块密码,也是 AES 竞赛决赛选手。它比其他分组密码更慢但具有更安全的设计。

    DES


    数据加密标准(DES)是应用最广泛的一种分组密码算法,有56位密钥长度和64位分组长度。在进行大量数据运算时可采用3DES的分组加密算法,使用某种特殊顺序使用2个密钥执行3次DES加密流程。

    数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。3DES(即Triple DES)是DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。是DES的一个更安全的变形。

    • 3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
    • 3DES解密过程为:P=Dk1(EK2(Dk3(C)))

    这是一轮DES加密,首先将明文进行IP置换,分为左右两个部分,为32位的L0与32位的R0。DES算法有16轮加密,为0,1,2 ... 15,每一轮使用一个48位的轮密钥ki,这16个轮密钥从分组密码的56位种选择48位生成,通过轮函数f改变R0与L0的值。

    32位R0首先通过扩展函数得到48位,与轮密钥进行异或,之后输入到S盒中通过非线性映射成为32位,之后与L0异或得到新的R1,进入下一轮加密。

    DES算法的基本结构称为Feistel结构,每一轮通过L与F(Ki,R)的异或生成新的L,然后R与L进行交换。其中S盒、扩展函数、位变换函数通过结合实现了扩散功能。

    扩散指输入函数的任意一位都会影响输出密文的许多位。

    DES的互补性质

    如果使用取反的密钥加密取反的明文数据,所得到的密文是原密文取反。

    AES

    高级加密标准(AES)采用了与DES不同的架构,没有采用Feistel结构。

    最初由 NIST 于 2001 年创建,使用更有趣的名称 Rijndael 密码/算法(这个名字来自其发明者,比利时研究人员 Daemen 和 Rijmen),它已成为一种广泛使用和流行的公共加密标准,因为它对破坏尝试具有极强的弹性. AES 用于加密世界各地的机构、政府、银行和其他组织的绝密数据,被认为是现有最强大的加密方法之一。

    首先输入16字节(128位)的明文数据,将明文与16字节的轮密钥进行异或操作,之后对特定的数据进行重新排列,使用先行混合函数进行异或运算得到输出结果。

    整个AES算法约10-14轮,根据密钥的长度选择轮数。
    AES的密钥长度有128位、192位、256位。

    • 128位:加密10轮
    • 192位:加密12轮
    • 256位:加密14轮

    AES优点

    1. 实现高速运算
    2. 对内存的需求低,适合于受限环境
    3. 分组长度和密钥长度设计灵活
    4. AES标准支持可改变分组长度,分组长度可设定为32比特的任意倍数
    5. 加密和解密算法完全不同

    Serpent

    Serpent算法在很多方面与AES相反,更加注重安全,但速度只有AES的1/3。

    Serpent是一种对称密钥分组密码,它是高级加密标准 (AES) 的选手,仅次于Rijndael。Serpent 由Ross Anderson、Eli Biham和Lars Knudsen设计。

    与其他AES提交一样,Serpent的块大小为128位,并支持128、192或256位的密钥大小。该密码是一个32轮替换置换网络,在四个32位字块上运行。每一轮并行应用8个4位到4位S-box中的一个32次。Serpent的设计使得所有操作都可以使用32个1位切片并行执行。这最大限度地提高了并行性,但也允许使用在DES上执行的大量密码分析工作。Serpent被广泛认为对安全性采取了更保守的方法,选择了更大的安全余量。

    Serpent 主页:Serpent home page

    Twofish

    Twofish和AES加密算法一样快,但安全性更高,Twofish和DES使用相同的结构:Feistel结构。

    Twofish是一种对称密钥分组密码,分组大小为128位,密钥大小高达256 位。它是高级加密标准竞赛的五个之一,但没有被选为标准化。Twofish与较早的分组密码Blowfish相关。

    Twofish 的显着特点是使用预先计算的依赖于密钥的S-box,以及相对复杂的密钥调度。n位密钥的一半用作实际加密密钥,而n位密钥的另一半用于修改加密算法(密钥相关的S盒)。Twofish 借鉴了其他设计的一些元素;例如,来自SAFER密码系列的伪 Hadamard 变换(PHT) 。Twofish 使用与 DES 相同的Feistel结构。

    在大多数软件平台上,对于 128 位密钥,Twofish 比Rijndael(为高级加密标准选择的算法)稍慢,但对于 256 位密钥来说要快一些。

    参考文章:

    https://www.researchgate.net/figure/Advanced-Encryption-Standard-AES-Algorithm_fig5_321587376

    第3章分组密码-zhp - 百度文库

    Community Central | Fandom

    展开全文
  • 使用基于查找表的混淆和扩散的有效图像加密方案
  • 分组密码总结

    千次阅读 2021-12-15 17:35:16
    扩散和混淆扩散和混淆是Shannonon提出的设计密码系统的两个基本方法,目的是抗击敌手对密码系统的统计分析。扩散是将明文的统计特性散布到密文中,使密文中的每一位由明文中多位产生。混淆是使密文密钥之间的...

    分组密码

    分组密码就是将明文消息序列划分成长为n的组,各组分别在密钥k控制下,变成等长的输出序列。

    • 代换: 明文分组到密文分组的可逆变换为代换。
    • 扩散和混淆: 扩散和混淆是Shannonon提出的设计密码系统的两个基本方法,目的是抗击敌手对密码系统的统计分析。扩散是将明文的统计特性散布到密文中,使密文中的每一位由明文中多位产生。混淆是使密文和密钥之间的统计关系变得尽可能的复杂,使敌手无法获得密钥。

    Feistel密码结构

    很多分组密码的本质是Feistel结构。是一种代换-置换网络。其结构如下

    在这里插入图片描述

    如图,加密算法输入是分组长为2w的明文和一个密钥K。将每组明文分为左右两半L0和R0,在进行为n轮迭代后,左右两半合在一起产生密文分组。其第i轮迭代为:
    L i = R i − 1 L_i = R_{i-1} Li=Ri1

    R i = L i − 1 ⨁ F ( R i − 1 , K i ) R_i = L_{i-1}\bigoplus F(R_{i-1},Ki) Ri=Li1F(Ri1,Ki)

    Feistel网络的安全性与以下参数有关:

    1. 分组大小
    2. 密钥大小
    3. 轮数
    4. 子密钥产生算法
    5. 轮函数
    • Feistel解密结构

    Feistel解密结构和加密本质一样,算法使用密文作为输入,但使用密钥Ki的次序与加密的过程相反。如上图右边。

    数据加密标准DES

    在这里插入图片描述

    如上图是DES的算法框图,其中明文分组长为64比特,密钥长为56比特。左边是明文处理过程,分为3个阶段。

    1. 初始置换IP

    用于重排64比特明文数据,规则如下表:

    在这里插入图片描述

    如:第1位用第58位替换

    1. 轮变换

    进行具有相同功能的16轮变换,每轮都有置换和代换运算。具体结构如下:

    在这里插入图片描述

    (其中右边为密钥的生成)

    将64比特分组的明文分为左右两部分,记为L,R和Feistel网络结构一样。右半部分R为32比特,首先经过选择扩展运算E,扩展为48比特。选择扩展运算E规则如下表:

    在这里插入图片描述

    扩展后的48比特在于子密钥Ki异或,然后在经过S盒,由48比特变为32比特的输出。S盒运算如下:

    将48比特的数据分为8个6比特的分组分别通过s1,s2,...,s8的转换。

    在这里插入图片描述

    将通过S盒运算产生的32比特数据再经过置换运算P输出32比特,置换运算P规则如下:

    在这里插入图片描述

    接下来就按照上面图示进行。

    1. 密钥的产生

    接下来讲解图中右边的密钥产生算法。输入算法的56比特首先经过一个置换运算PC-1,产生56比特输出,规则如下:

    在这里插入图片描述

    然后将置换后的56比特分为各为28比特的左右两部分,记为C,D,在第i轮分别对Ci-1和Di-1进行循环左移,移位数由上表所示。移位的结果作为下一轮的子密钥的输入,同时也作置换选择2的输入。通过置换选择2产生48比特的Ki,作为本轮的子密钥参与加密的轮变换。置换选择2由上图所示。

    解密

    Feistel结构一样,DES加密和解密使用同一算法,而子密钥使用顺序相反。

    二重DES

    为了提高DES的安全性,可使用二重DES,其中P为明文,K1K2为两个加密密钥。密文为
    C = E K 2 [ E K 1 [ P ] ] C=E_{K_2}[E_{K_1}[P]] C=EK2[EK1[P]]
    解密
    P = D K 1 [ D K 2 [ C ] ] P = D_{K_1}[D_{K_2}[C]] P=DK1[DK2[C]]
    对二重DES可以采用中途相遇攻击:

    如果已知一个明文密文对,首先用所有的256个可能的`K1`对明文加密,将加密结果存入一个表,然后用256个所有可能的K2对密文解密,在上述的表中找到与解密结果相匹配的项,找到就可以确定K1K2是所要找的密钥。

    三重DES

    为了抵抗中途相遇攻击,可以使用三重DES,使用两个密钥作三次加密
    C = E K 1 [ D K 2 [ E K 1 [ P ] ] ] C=E_{K_1}[D_{K_2}[E_{K_1}[P]]] C=EK1[DK2[EK1[P]]]

    差分密码分析和线性密码分析

    差分密码分析是迄今已知攻击迭代密码最有效的方法之一,其基本思想是:通过分析明文对的差值对密文对的差值的影响来恢复某些密钥比特。

    线性密码分析是对迭代密码的一种已知明文攻击,它利用的是密码算法中的“不平衡的线性逼近”。

    分组密码的运行模式

    分组密码在加密时明文分组的长度是固定,而实用中待加密消息的数据量是不定的,数据格式可能多种多样,所以产生了4中分组密码的运行模式。

    1. 电码本模式ECB

    每个分组独立的以同一密钥加密。用于传送短数据。

    在这里插入图片描述

    长度不够需要进行填充,可以用于传递DES密钥。但如果明文分组在消息中重复出现的话,密文分组也一样,这会给攻击者带来方便。

    1. 密码分组链接模式CBC

    为了解决ECB的安全缺陷,CBC可以让重复的明文分组产生不同的密文分组。适用于数据分组和认证。

    一次对一个明文分组加密,每次加密使用同一密钥,加密算法的输入当前明文分组和前一次密文分组的异或。

    在这里插入图片描述

    IV应该被保密发送给对方。

    1. 密码反馈模式CFB

    利用CFB可以将分组密码转换为流密码,加密时,加密算法的输入是64比特的移位寄存器,其初始值是某个初始向量IV。加密算法输出的最左j比特于明文的第一个单元P1异或,产生的密文的第一个单元C1,并传送该单元。然后将移位寄存器的内容左移j位,并将C1送入移位寄存器的最右j位。

    在这里插入图片描述

    在这里插入图片描述

    1. 输出反馈模式OFB

    OFB类似于CFB不同之处在于OFB模式是将加密算法的输出反馈到移位寄存器,而CFB是将密文单元反馈到移位寄存器。

    在这里插入图片描述

    在这里插入图片描述

    优点:

    不需要填充
    错误不传播
    抗消息流篡改攻击的能力不如CFB

    AES算法

    AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,如下表所示:

    在这里插入图片描述

    AES的处理单位是字节,128位的输入明文分组P和输入密钥K都被分成16个字节,分别记为P = P0 P1 … P15 和 K = K0 K1 … K15。如,明文分组为P = abcdefghijklmnop,其中的字符a对应P0,p对应P15。一般地,明文分组用字节为单位的正方形矩阵描述,称为状态矩阵。在算法的每一轮中,状态矩阵的内容不断发生变化,最后的结果作为密文输出。该矩阵中字节的排列顺序为从上到下、从左至右依次排列,如下图所示:
    在这里插入图片描述

    类似地,128位密钥也是用字节为单位的矩阵表示,矩阵的每一列被称为1个32位比特字。通过密钥编排函数该密钥矩阵被扩展成一个44个字组成的序列W[0],W[1], … ,W[43],该序列的前4个元素W[0],W[1],W[2],W[3]是原始密钥,用于加密运算中的初始密钥加(下面介绍);后面40个字分为10组,每组4个字(128比特)分别用于10轮加密运算中的轮密钥加,如下图所示:
    在这里插入图片描述

    AES的整体结构如下图所示,其中的W[0,3]是指W[0]、W[1]、W[2]和W[3]串联组成的128位密钥。加密的第1轮到第9轮的轮函数一样,包括4个操作:字节代换、行位移、列混合和轮密钥加。最后一轮迭代不执行列混合。另外,在第一轮迭代之前,先将明文和原始密钥进行一次异或加密操作。
    在这里插入图片描述

    上图也展示了AES解密过程,解密过程仍为10轮,每一轮的操作是加密操作的逆操作。由于AES的4个轮操作都是可逆的,因此,解密操作的一轮就是顺序执行逆行移位、逆字节代换、轮密钥加和逆列混合。同加密操作类似,最后一轮不执行逆列混合,在第1轮解密之前,要执行1次密钥加操作。

    一、字节代换

    字节代换是非线性变换,独立的对每个字节进行,代换表(S盒)是可逆的,由如下两个步骤实现:

    (1)首先,将字节看作GF(2^8)上的元素,映射到自己的乘法逆元。

    (2)对每个字节作以下变换

    在这里插入图片描述

    其实可以不用进行计算,S盒是一个固定的表,可以查表得到字节代换结果。

    逆字节代换通过以上的逆运算得到,也可以查逆S盒。

    二、行移位

    行移位是一个简单的左循环移位操作。当密钥长度为128比特时,状态矩阵的第0行左移0字节,第1行左移1字节,第2行左移2字节,第3行左移3字节,如下图所示:

    在这里插入图片描述

    行移位的逆变换是将状态矩阵中的每一行执行相反的移位操作,例如AES-128中,状态矩阵的第0行右移0字节,第1行右移1字节,第2行右移2字节,第3行右移3字节。

    三、列混合

    列混合变换是通过矩阵相乘来实现的,经行移位后的状态矩阵与固定的矩阵相乘,得到混淆后的状态矩阵,如下图的公式所示:在这里插入图片描述

    状态矩阵中的第j列(0 ≤j≤3)的列混合可以表示为下图所示:

    在这里插入图片描述

    其中,矩阵元素的乘法和加法都是定义在基于GF(2^8)上的二元运算,并不是通常意义上的乘法和加法。这里涉及到一些信息安全上的数学知识,不过不懂这些知识也行。其实这种二元运算的加法等价于两个字节的异或,乘法则复杂一点。对于一个8位的二进制数来说,使用域上的乘法乘以(00000010)等价于左移1位(低位补0)后,再根据情况同(00011011)进行异或运算,设S1 = (a7 a6 a5 a4 a3 a2 a1 a0),刚0x02 * S1如下图所示:
    在这里插入图片描述

    也就是说,如果a7为1,则进行异或运算,否则不进行。
    类似地,乘以(00000100)可以拆分成两次乘以(00000010)的运算:

    在这里插入图片描述

    乘以(0000 0011)可以拆分成先分别乘以(0000 0001)和(0000 0010),再将两个乘积异或:

    在这里插入图片描述

    列混合逆运算

    在这里插入图片描述

    四、轮密钥加

    轮密钥加是将128位轮密钥Ki同状态矩阵中的数据进行逐位异或操作,如下图所示。其中,密钥Ki中每个字W[4i],W[4i+1],W[4i+2],W[4i+3]为32位比特字,包含4个字节,他们的生成算法下面在下面介绍。轮密钥加过程可以看成是字逐位异或的结果,也可以看成字节级别或者位级别的操作。也就是说,可以看成S0 S1 S2 S3 组成的32位字与W[4i]的异或运算。

    在这里插入图片描述

    密钥扩展

    AES首先将初始密钥输入到一个4*4的状态矩阵中,如下图所示。
    在这里插入图片描述

    这个44矩阵的每一列的4个字节组成一个字,矩阵4列的4个字依次命名为W[0]、W[1]、W[2]和W[3],它们构成一个以字为单位的数组W。例如,设密钥K为"abcdefghijklmnop",则K0 = ‘a’,K1 = ‘b’, K2 = ‘c’,K3 = ‘d’,W[0] = “abcd”。
    接着,对W数组扩充40个新列,构成总共44列的扩展密钥数组。新列以如下的递归方式产生:
    1.如果i不是4的倍数,那么第i列由如下等式确定:
    W[i]=W[i-4]⨁W[i-1]
    2.如果i是4的倍数,那么第i列由如下等式确定:
    W[i]=W[i-4]⨁T(W[i-1])
    其中,T是一个有点复杂的函数。
    函数T由3部分组成:字循环、字节代换和轮常量异或,这3部分的作用分别如下。
    a.字循环:将1个字中的4个字节循环左移1个字节。即将输入字[b0, b1, b2, b3]变换成[b1,b2,b3,b0]。
    b.字节代换:对字循环的结果使用S盒进行字节代换。
    c.轮常量异或:将前两步的结果同轮常量Rcon[j]进行异或,其中j表示轮数。
    轮常量Rcon[j]是一个字,其值见下表。
    列由如下等式确定:
    W[i]=W[i-4]⨁T(W[i-1])
    其中,T是一个有点复杂的函数。
    函数T由3部分组成:字循环、字节代换和轮常量异或,这3部分的作用分别如下。
    a.字循环:将1个字中的4个字节循环左移1个字节。即将输入字[b0, b1, b2, b3]变换成[b1,b2,b3,b0]。
    b.字节代换:对字循环的结果使用S盒进行字节代换。
    c.轮常量异或:将前两步的结果同轮常量Rcon[j]进行异或,其中j表示轮数。
    轮常量Rcon[j]是一个字,其值见下表。
    在这里插入图片描述
    AES的讲解参考了https://blog.csdn.net/qq_28205153/article/details/55798628

    展开全文
  • 所提出的混沌混淆-扩散图像加密在两个级别上利用了图像混淆和像素扩散。 在第一层中,纯图像被修改的Henon映射扰动了n个回合。 在第二级中,使用Henon混沌映射来扩散加扰的图像。 建立了逻辑图和改进的Henon图之间...
  • 2021-05-04

    2021-05-04 16:21:03
    DES算法利用多次组合替代算法和换位算法,通过混淆和扩散的相互作用,把明文编制成密码强度很高的密文。解密则使用了相同的步骤和相同的密钥。 DES加密特点 DES算法产生密钥的方式简单,密钥一般也比较短。 DES算法...
  • 对称加密算法 ~ Des

    2019-04-26 09:29:00
    Des 设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion),其目的是抗击敌手对密码系统的统计分析。混淆是使密文的统计特性与密钥的取值之间的关系 尽可能复杂化,以使密钥明文以及密文之间的...
  • 在已有的四维超混沌系统的基础上构造了一个五维超混沌系统,对一种结合超混沌序列移位密码的数字图像加密算法进行了分析,通过选择明文攻击的方法,成功破解了该算法中用于像素位置置乱以及像素值扩散和混淆的等效...
  • 该方案的一轮包括两个步骤:扩散和混淆。 前一步包括三个阶段:正向扩散,使用维格涅尔(Vigenère)方案的匹配过程反向扩散。 在后面的部分中,使用混沌映射的位置置换用于交换像素位置。 Matlab-2015中实施了所...
  • 信息安全技术知识点

    千次阅读 2019-01-16 16:26:02
    第1章 概览 1. 信息安全的定义(六点) 保密性:对信息访问公开... 可用性:确保对信息的及时可靠的访问使用。e.g.¡由于某个非授权用户C盗窃修改了A的个人银行账号,使无法给B开出合法的转账单。 真实性...
  • DES加密算法原理简介

    千次阅读 2020-03-16 22:19:21
    一知半解,有误欢迎提醒。 3.1 数据加密标准DES DES算法将明文按64位分组,使用的密钥长度为64位(实际参与加密的有56位)。 密钥的第8、16、24、…、64位作为校验位...符合所谓的混淆原则和扩散原则。 混淆原则:...
  • 现代密码学

    千次阅读 2022-04-20 20:56:16
    DES算法利用多次组合替代算法和换位算法,通过混淆和扩散的相互作用,把明文编织成密码强度很高的密文。解密使用了相同的步骤和相同的密钥。 DES的压缩、扩展和置换操作使其具有很强的雪崩效应。即输入明文或密钥中...
  • 注意不要将编号字符集CCS抽象字符表ACR相混淆。多个不同的编号字符集CCS可以表示同一个抽象字符表ACR;换言之,同一个抽象字符表ACR,可以按不同的编号规则被编号为多个不同的编号字符集CCS。 6. 在Unicode标准中...
  • 先对明文图像进行像素置乱,再对置乱后的像素值进行扩散和混淆,并利用明文控制密钥流的输出,使密钥流明文相关。理论分析及实验结果表明,该算法简单易行,不仅具有较好的抗统计分析、抗差分攻击能力,而且密钥...
  • 3.5 滑动窗口协议 GBN SR
  • 密码学分为密码编码学(cryptography)密码分析学(cryptanalysis)。 4.1.1 密码学发展简史 古典密码时期 近代密码时期 现代密码时期 4.1.2 密码体制的基本组成及分类 密码学的基本思想:对信息进行伪装。 ...
  • 混淆和扩散 扩散:尽可能的使明文和密文之间的统计关系变得复杂,防止推导出密钥。使明文的统计特征消散在密文中,让每个密文数字被多个明文数字影响。 混淆:尽可能使密文和加密密钥之间的统计关系更加复杂,防止...
  • 综述:密码学分为 1、古典密码学 2、经典密码学 本文主要讲解经典密码学 经典密码学主要分为四块: 1... 扩散,Diffusion,使得明文中的每一位影响密文中的许多位 参考文献:https://ctf-wiki.org/crypto/introduction/
  • 2.改组然后替换(扩散然后混淆方法) 此处,代码首先使用使用PRNG之一生成的随机数(每个像素一个)对图像的像素进行混洗,然后使用另一组键执行上述替换方法。 因此,这种加密方法非常安全。将混沌与分形联系起来该...
  • 以时空混沌模型作为核心控制方程,设计了一种基于动态DNA编码的图像...在加密图像的过程中,还通过密文反馈和混沌系统的迭代来增强算法的混淆和扩散特性。仿真实验表明,算法具有很好的安全性,适合应用于图像加密。
  • 在本文中,我们采用了一种新机制,通过使用 PRN 生成器(由于混淆和扩散)来确保 k 的值,并通过使用 SHA(使用单向属性)来确保 m 的值。 基于模拟结果,我们实现了强大的身份验证和保密机制,最终增强了数据的...
  • 分组密码流密码的区别。 1.分组密码流密码的概念与区别: 所谓流密码,就是把明文的所有字符作为一个整体,然后一位一位地对明文字符进行加密。如维吉尼亚密码Vernam密码,都属于流密码。一位明文被一位密钥...
  • 用户 ID 生成唯一邀请码的几种方法

    千次阅读 2021-09-06 12:11:30
    方法三:除法取整与取模 + 扩散混淆(可逆)6.小结参考文献 1.需求描述 有一个业务需求,需要根据用户 ID(数值型 >=10000000)生成一个唯一的长 6 个字符的邀请码,用于邀请新用户注册。 2.需求分析 从业务...
  • 假如给的string是“abba”(接下来我就尽量用下标位置说明,以免混淆) 首先初始化 result = s.substring(0,1)这里是拿到下标0的数据也就是a for loop对字符串的长度遍历每次拿到index(0,1,2,3)第一次loop:...
  • 密码学是保障信息安全的核心技术,信息安全是密码学研究与发展的主要动力目的。 ... ...机密性: 如何使得某个数据自己能看懂,别人看不懂 认证: 如何确保数据的正确来源...算法基本约束要求:对使用者算法可逆恢复成
  • IDEA加密算法

    2021-01-15 19:30:25
    在IDEA 加密解密过程中,明文密文是分成 64 比特的块来处理的,但密钥宽度是 128 比特,加解密是依赖于下面的三种代数群的运算,每个代数群都是 16 比特数的运算,其中包括:两个16 比特子块的按位异或 (XOR) ...
  • 产生扩散的最简单方法是通过“置换(Permutation)”(比如:重新排列字符) 混淆(confusion) 其目的在于使作用于明文的密钥密文之间的关系复杂化,使明文密文之间,密文密钥之间的统计相关特性极小化,从而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,188
精华内容 1,275
关键字:

扩散和混淆

友情链接: homework2.zip