❶ 密码技术(四、三)之分组模式(CFB模式)
CFB模式的全称是Cipher FeedBack (密文反馈模式)。在CFB模式中,前一个密文分组会被送回密码算法的输入端。所谓反馈,这里指的就是返回输入端的意思。
CFB模式中,明文分组并没有通过密码算法直接进行加密。明文分组和密文分组之间并没有经过“加密”这一步骤。在CFB模式中,明文分组和密文分组之间只有一个XOR。
在生成第一个密文分组时,由于不存在前一个输出的数据,因此需要使用初始化向量来替代,这一个点和CBC模式相同的。一般来说,我们需要在每次加密时生成一个不同的随机比特序列用作初始化向量。
其实CFB模式模式的结构与我们前面介绍的一次性密码本非常相似的。一次性密码本是通过将“明文”与“随机比特序列”进行XOR运算生成“密文”的。而CFB模式则是通过将“明文分组”与“密码算法的输出”进行XOR运算来生成“密文分组”的。在通过XOR来进行加密这一点,两者是非常相似的。
在CFB模式中,密码算法的输出相当于一次性密码本中的随机比特序列。由于密码算法的输出是通过计算得到的,并不是真正的随机数,因此CFB模式不可能像一次性密码本那样具备理论上不可破译的性质。
CFB模式模式中由密码算法所生产的比特序列称为 密钥流 。在CFB模式中,密码算法就相当于用来生成密钥流的伪随机数生成器,而初始化向量就相当于味素技术生成器的“种子”。
在CFB模式中,明文数据可以被逐比特加密,因此我们可以将CFB模式看作是一种使用 分组密码来实现流密码 的方式。
CFB模式解密过程,上图已经展示,CFB模式解密时,需要注意的是分组密码算法依然执行加密操作,因为密钥流是通过加密操作来生成的。
有一天,Alice向Bob发送了一条消息,这两条消息是由4个密文分组组成的。主动攻击者Mallory将该消息中额后3个密文分组保存了下来。转天,Alice又向Bob发送了内容不同的4个密文分组(我们假设使用了相同的密钥)。Mallory用昨天保存下来的3个密文分组将今天发送的后3个密文分组进行了替换。
于是,在Bob解密时,4个分组中就只有第1个可以解密成正确的明文,第2个会出错,,而第3和第4个则变成了Mallory替换的内容(也就是昨天发送的明文的内容)。Mallory没有破解密码,就成功地将以前的的电文混入了新的电文中。而第2个分组出错到底是通信错误,还是被人攻击所造成?Bob是无法做出判断的。
该系列的主要内容来自《图解密码技术第三版》
我只是知识的搬运工
文章中的插图来源于原着
❷ 密码技术(四、二)之分组模式(CBC模式)
CBC模式是指将前一个密文分组与当前明文分组的内容混合起来进行加密,这样就可以避免ECB模式的弱点。
CBC模式的全称Cipher Block Chaining 模式(密文分组组链接模式),之所以叫这个名字是因为密文分组是像链条一样相互连接在一起。
在CBC模式中,首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。
ECB模式 和 CBC模式比较
当加密第一个明文分组是,由于不存在“前一个密文分组”,因此需要事先准备一个长度为一个分组的比特序列来替代“前一个密文分组”,这个比特序列称为 初始化向量 ,通常缩写为IV。每次加密时都会随机产生一个不同的比特序列来作为初始化向量。
明文分组在加密之前一定会与“前一个密文分组”进行XOR运算,因此即便明文分组1和2的值是相等的,密文分组1和2的值也不一定是相等的。这样一来,ECB模式的缺陷在CBC模式中就不存在了。
在CBC模式找那个,我们无法单独对一个中间的明文分组进行加密。例如,如果要生成密文分组3,则至少需要凑齐明文分组1、2、3才行。
假设CBC模式加密的密文分组中有一个分组损坏了。在这种情况下,只要密文分组的长度没有发生编号,则解密时,最多只会影响2个分组受到数据损坏的影响。
假设CBC模式的密文分组中有一些比特缺失了,那么此时即便只缺失了1比特,也会导致密文分组的长度发生变化,此后的分组发生错位,这样一来,缺失比特的位置之后的密文分组也就全部无法解密了。
假设主动攻击者Mallory的目的是通过修改密文来操纵解密后的明文。如果Mallory能够对初始化向量中的任意比特进行反转,则明文分组中相应的比特也会被反转。这是因为在CBC模式的解密过程中,第一个明文分组会和初始化向量进行XOR运算。
这样,Mallory 就可以对初始化向量进行攻击,但是想要对密文分组也进行同样的攻击就非常困难了。
填充提示攻击 (Padding Oracle Attack)是一种利用分组密码中的填充部分来进行攻击的方法。在分组密码中,当明文长度不为分组长度的整数倍时,需要在最后一个分组填充一些数据使其凑满一个分组的长度。在填充提示攻击中,攻击者会反复发送一段密文,每次发送时都对填充的数据进行少许改变。由于接收者在无法正确解密时会返回一个错误消息,攻击者通过这一错误消息就可以获得一部分与明文相关的信息。这一攻击方式并不仅限于CBC模式,而是适用于所有需要进行分组填充的模式。2014年对SSL3.0造成重大影响的POODLE攻击实际上就是一种填充攻击。要防御这种攻击,需要对密文进行认证,确保这段密文的确是由合法的发送者在制定明文内容的前提下生成的。
初始化向量必须使用不可预测的随机数。然后在SSL/TSL1.0的版本协议中,初始向量并没有使用不可预测的随机数,而是使用了上一次CBC模式加密时的最后一个分组。为了防御攻击者对此进行攻击,TSL1.1以上的版本中改为了必须显式得传送初始化向量。
确保互联网安全的通信协议之一SSL/TSL,就是使用CBC模式来确保通信的机密性的,如使用CBC模式三重DES的3DES_EDE_CBC以及CBC模式256比特AES的AES_256_CBC等。
分组密码中海油一种模式叫作CTS模式(Cipher Text Stealing模式)。在分组密码中,当明文长度不能被分组长度整除时,最后一个分组就需要进行填充。CTS模式是使用最后一个分组的其哪一个密文分组数据来讲信息填充的,它通常和ECB模式以及CBC模式配合使用。根据最后一个分组的发送顺序不同,CTS模式有几种不同的变体(CBC-CS1、CBC-CS2、CBC-CS3)。
该系列的主要内容来自《图解密码技术第三版》
我只是知识的搬运工
文章中的插图来源于原着
❸ 什么是分组密码和序列密码
分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。
序列密码也称为流密码(Stream Cipher),它是对称密码算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。 1949年Shannon证明了只有一次一密的密码体制是绝对安全的,这给序列密码技术的研究以强大的支持,序列密码方案的发展是模仿一次一密系统的尝试,或者说“一次一密”的密码方案是序列密码的雏形。如果序列密码所使用的是真正随机方式的、与消息流长度相同的密钥流,则此时的序列密码就是一次一密的密码体制。若能以一种方式产生一随机序列(密钥流),这一序列由密钥所确定,则利用这样的序列就可以进行加密,即将密钥、明文表示成连续的符号或二进制,对应地进行加密,加解密时一次处理明文中的一个或几个比特。
❹ 分组密码
(1)分组密码算法只负责固定长度消息的加、脱密;
(2)工作模式负责长消息的处理方式;
(3)短块处理方式负责短块处理方式的约定
也称块密码,它是将明文消息经过编码表示后的二进制序列m0,m1,......,mi,......划分成若干个固定长度(p)的组(或块)m=(m0,m1,......,mn),各组分别在密钥K=(K0,K1,......,Kt-1)的控制下转换成长度为n的密文分组C=(C0,C1,......,Cn-1)。其本质是一个从明文空间(m长的比特串的集合)P到密文空间(n长的比特串的集合)C的一一映射。(一般而言,p=n)
当分组长度较小时候,攻击者通过穷举明文空间,得到密码变换规律,难以抵挡选择明文攻击。
如果密钥量小,攻击者可以有效地通过穷举密钥,对密文进行解密,来得到有意义的明文,难以抵挡唯密文攻击。
使攻击者出了穷举法攻击以外,找不到其它有效地数学破译方法。
便于软件和硬件的实现,性能好。
使用迭代方式,由简单得、容易实现的模块搭建出抗破译能力强的分组密码算法;
每个模块各司其责、互相弥补对方的缺点,合作完成分组密码算法的搭建工作。
扩散是指要将算法设计成明文每一比特的变化尽可能多的影响到输出密文序列的变化,以便隐蔽明文的统计特性。形象地称为雪崩效应。
扩散的另外一层意思是密钥每一位的影响尽可能迅速地扩展到较多的密文比特中去。即扩散的目的是希望密文中的任一比特都要尽可能与明文、密钥相关联,或者说,明文和密钥中的任一比特值发生改变,都会在某种程度上影响到密文值得变化,以防止将密钥分解成若干个孤立小部分,然后各个击破。
混乱,指在加解密变换过程中明文、密钥以及密文之间的关系尽可能地复杂化,以防密码破译者采用解析法(即通过建立并求解一些方程)进行破译攻击。
混乱可以用“搅拌机”来形象地解释,将一组明文和一组密钥输入到算法中,经过充分混合,最终变成密文。同时要求,执行这种“混乱”作业的每一步都必须是可逆的,即明文混乱以后能得到密文,反之,密文经过逆向的混乱操作后能恢复到明文。(按照混乱原则,分组密码算法应该有复杂的非线性因素)
依次使用两个或者两个以上的基本密码,所得结果的密码强度将强于所有单个密码的强度,即乘积密码是扩散和混乱两种基本密码操作的组合变换,这样能够产生比个子单独使用时更强大的密码系统。选择某个较为简单的密码变换(包含多个基本密码),在密钥控制下以迭代方式多次利用它进行加密变换,就可以实现预期的扩散和混乱效果。
SP网络是由多重S变换和P变换组合成的变换网络,它是乘积密码的一种。其基本操作是S变换(代替)和P变换(换位),前者称为S盒,后者称为P盒。S盒起到混乱作用,P盒起到扩散的作用。SP网络的构造及S盒、P盒的构造如下图所示:
SP网络具有雪崩效应。所谓雪崩效应是指,输入(明文或密钥)即使只有很小的变化,也会导致输出产生巨大的变化现象。
能够抵御选择明文攻击
能够抵御唯密文攻击
轮函数F是分组密码的核心,是分组密码中单轮加密解密函数,其基本准则:
其主要性能指标是:安全性、速度、灵活性。
子密钥的生成也是也是迭代分组算法的一个重要组成部分,是从初始(种子)密钥产生迭代的各轮要使用的子密钥的算法。也就是说,轮函数F的功能是在子密钥的参与和控制下实现的子密钥的生成很重要,其评价指标:
1.实现简单、速度满足要求;
2.种子密钥的所有比特对每个字密钥比特的影响应大致相同;
3.没有弱密钥或弱密钥容易确定。
分组密码一般采用简单的、安全性弱的加密函数进行多轮迭代运算,使得安全性增强。一般来说,分组密码迭代轮数越多,密码分析越困难,但也不是追求迭代数越多越好,过多迭代轮数会使加密算法的性能下降,而安全性增强不明显。决定迭代轮数的准则:使密码分析的难度大于简单穷举搜索攻击的难度。分组密码迭代轮数一般采用8,10,12,16,20的居多。
❺ 分组密码加密模式选择有哪些
加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption)。对称加密又分为分组加密和序列密码。分组密码,也叫块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。序列密码,也叫流加密(stream cyphers),一次加密明文中的一个位。是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。解密是指用同样的密钥和密码算法及与加密相同的伪随机位流,用以还原明文位流。在分组加密算法中,有ECB,CBC,CFB,OFB这几种算法模式。ECB(Electronic Code Book)/电码。简单,有利于并行计算,误差不会被传送;不能隐藏明文的模式;repetitions in message may show in cipher text/在密文中出现明文消息的重复。可能对明文进行主动攻击;加密消息块相互独立成为被攻击的弱点/weakness e to encrypted message blocks being independent. CBC(Cipher Block Chaining) 这个词在分组密码中经常会用到,它是指一个明文分组在被加密之前要与前一个的密文分组进行异或运算。当加密算法用于此模式的时候除密钥外,还需协商一个初始化向量(IV),这个IV没有实际意义,只是在第一次计算的时候需要用到而已。采用这种模式的话安全性会有所提高。不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。each ciphertext block depends on all message blocks/每个密文块依赖于所有的信息块thus a change in the message affects all ciphertext blocks/明文消息中一个改变会影响所有密文块need Initial Vector (IV) known to sender & receiver/发送方和接收方都需要知道初始化向量 。
❻ 请简述什么是序列密码与分组密码,它们的区别是什么
序列密码(Stream Cipher):
又称流密码,将明文消息按字符逐位进行加密。
分组密码(Block Cipher):
在分组密码中将明文消息分组(每组有多个字符),逐组进行加密。
❼ 关于分组密码CBC模式与CTR模式的对比
在对称分组密码体制中 CBC模式(密文分组链接模式) 与 CTR模式(计数器模式) 是安全性最高且最常用的两种模式,在这两种模式中前一分组会以不同的形式影响下一分组的加密过程,因此这两种模式的安全性相对较高。
在项目研发过程中,需求是要在嵌入式节点间实现实时安全通信,而CTR模式能够支持并行加解密过程计算,因而 在项目中选择CTR模式的SM4对称加密算法。
以下对于分组密码中CBC模式以及CTR模式的原理进行简单介绍:
CBC模式的全称是Cipher Block Chaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组像链条一样相互连接在一起。首先将明文分组与前一个密文分组进行XOR运算,然后再进行加密。 注:对于第一个分组需要构造一个长度为分组长度的初始向量IV。
1)能够隐蔽明文的数据模式,相同的明文对应的密文一般是不同的;
2)无法单独对中间的明文分组进行加密。例如,如果要生成密文分组3,必须按序生成密文分组1和密文分组2。
CTR模式全称counter模式(计数器模式)。CTR模式通过对逐次累加的计数器加密来生成密钥分组与明文分组异或产生密文分组。
CTR模式的解密过程将明文分组与密文分组位置调换即可。
从原理图中可以看出:
1)能够隐蔽明文的数据模式,相同的明文对应的密文一般是不同的;
2)CTR模式中可以以任意顺序对分组进行加密和解密,能够以任意顺序处理分组,意味着能够实现并行计算。使用并行计算,CTR模式的加解密是非常快的。