密码基础(对称密码算法--付DES/SM4/AES详解)

(一)密码概述

1.定义

日常我们所说的密码,其实是指“口令”,它是进入系统的认证方式。一般进入系统可以有多因素认
证,用户名和密码是其中最简单的一种,用于认证用途的一组文字。

(在密码相关文档中,例如密评报告等,不要将口令写成密码)

         

密码的本质属性是特定变换的方法,密码的主要表现形式是技术、产品和服务,密码的主要功能是加密保护、安全认证,密码保护的 对象是信息 等相关内容。

密码技术是指利用物项实现加密保护或安全认证的方法或手段,包括密码算法、密钥管理和密码协议。密码产品是以实现加密保护或安全认证等为核心功能的设备与系统。密码服务是基于密码专业技术、技能和设施,为他人提供集成、运营、监理等密码支持和保障的活动,是基于密码技术和产品,实现密码功能的行为。

2.密码功能

机密性

保密性实现,可以采用公钥密码技术,也可以采用对称密码技术。

  公钥密码技术:计算成本高,主要用于信息量不大、共享方式复杂的情况。

  对称密码技术:大量信息传输或存储的保密性保护。

完整性

通过消息鉴别码(MAC)和数字签名来实现。

消息鉴别码:可以采用对称密码的CBC模式和杂凑密码算法来实现。CBC生成MAC时,不能使

用初始全0初始向量;采用杂凑算法生成的消息鉴别码是经常采用的技术,称为HMAC。

信息完整性是发送者通过计算 消息摘要(MAC),然后把消息和消息摘要传输给接收者,接收者收到消息后用同样的方法计算消息摘要, 然后用计算出的消息摘要和收到的消息摘要比对,查看是否一致,不 一致则说明消息被篡改过。

数字签名完整性实现:基于公钥技术的数字签名,不仅可以防止攻击者对消息进行篡改,还能防止攻击者对消息进行伪造(消息鉴别码不可防止伪造),即实现消息发送行为的不可否认性。

                                     

真实性

真实性的核心是鉴别。基于密码技术的鉴别、基于静态口令的鉴别、基于动态口令的鉴别、基于生物特征的鉴别。

基于密码技术的鉴别方式包括:基于对称密码、公钥密码的密码技术的鉴别。                         

消息来源真实性的保障方法是声称者通过自己的私钥/共享密钥进行签名,验证者通过对应的公钥/共享密钥进行验证,验证通过则证明声称者身份为真。

不可否认性(抗抵赖性)

主要是通过数字签名来实现。

不可否认性保障的方法是发送者通过私有的私钥对消息进行签名,接收者通过对应公钥进行验证,验证通过则证明消息是由私钥拥有者发送的。

3.密码算法分类

                  

(二)分组密码算法

1.分组密码的定义

分组密码是一种密码算法,它将明文按照固定长度的分组进行处理,并对每个分组进行相同的加密或解密操作。在分组密码中,加密和解密操作是对称的,即使用相同的密钥进行加密和解密。分组密码算法是现代密码学中的重要体制之一,所占用的计算资源小,易于软硬件实现(易达到10-100Mbps(兆比特每秒)的量级)适用于大批量数据快速加密。分组密码属于块加密,与之对应的是流密码,逐字节进行加密。

分组密码(block cipher)其主要任务是提供数据保密性和完整性保护。分组密码加解密速度较快 (对称密码特点),密钥交换必须在保密通道。 现代分组密码发展非常快,技术较成熟(公开测评) ,使用广泛。在其他密码算法设计领域有广泛应用,例如:可以用于构造伪随机数生成器、流密 码、认证码和哈希函数等。

               

            

2.分组密码的设计原则

一个好的分组密码在保证足够安全强度下,还应该有运行效率、存储空间、不同运行平台可实现性以及灵活性等相关因素考虑。

分组长度足够长,防止明文穷举攻击,分组长度较小,攻击者穷举明文空间,得到密码变换规律,难以抵御选择明文攻击。密钥量足够大,防止密钥穷举攻击,如果密钥量小,攻击者可以有效地穷举密钥,对密文进行解密,以得到有意义的明文,难以抵御唯密文攻击。密钥变换足够复杂,攻击者除了穷举攻击外找不到其它有效攻击方法。数据扩展足够小,一般无数据扩展。差错传播尽可能小,加密或解密某明文或密文分组出错,对后续密文解密影响尽可能小。

分组算法的设计思想
扩散和混乱:行变换、列混合、移位、密钥加等(使明密文之间的统计关系变得尽可能复杂)
扩散:所谓扩散,是指要将算法设计成明文每一比特的变化尽可能多得影响到输出密文序列的变化,以便隐蔽明文的统计特性。
扩散的另一层意思是密钥每一位的影响尽可能迅速地扩展到较多的密文比特中去。即扩散的目的是希望密文中的任一比特都要尽可能与明文、 密钥相关联, 或者说,明文和密钥中任何一比特值发生改变,都会在某种程度上影响到密文值的变化,以防止将密钥分解成若干个孤立的小部分,然后各个击破。

混乱:所谓混乱, 是指在加解密变换过程中是明文、 密钥以及密文之间的关系尽可能地复杂化,以防密码破译者采用解析法(即通过建立并求解一些方程)进行破译攻击。
混乱可以用“ 搅拌机” 来形象地解释, 将一组明文和一组密钥输入到算法中,经过充分混合,最后变成密文。同时要求,执行这种“ 混乱” 作业的每一步都必须是可逆的, 即明文混乱以后能得到密文,反之,密文经过逆向的混乱操作以后能恢复出明文。 (按照混乱原则,分组密码算法应有复杂的非线性因素)

         

         

         

3.分组密码结构

目前通用密码算法采用迭代结构,根据算法采用结构不同,主要分为Feistel结构、SPN结构

4.DES算法

定义

分组加密算法:明文和密文为64位分组长度。
对称算法:加密和解密除密钥编排不同外,使用同一算法。
密钥长度:56位(其实密钥长64位,但是参与运算的只有56位,其余8位为校验位),但存在弱密钥,容易避开。
采用混乱和扩散的合组合,每个组合先替代后置换,共16轮
只使用了标准的算术和逻辑运算,易于实现。
现代密码学诞生的标志之一。

                                                   

DES是对称密码算法,加密、解密密钥相同。
DES的明文分组为64比特,有效密钥长度为56比特,密文长度为64比特。

加密详细过程详解


DES加密,解密一共是16轮,每一轮需要用一个子密钥,故一共要产生16个轮子密钥,通常表示为K1,K2, K3, ……,K16.
DES的加密和解密,从流程图上和代码上几乎完全一致。只不过加密输入的是明文和密钥,解密输入的是密文和密钥。
细节的差别在于,加密时使用的轮子密钥是K1, K2, K3, ……,K16,而解密时使用的轮子密钥是K16, K15, K14, ……,K1.
 换句话说,DES的16轮解密是其加密的每一轮的逆过程

如上图,R0是直接赋值给L1,然后R1是等于R0和K1经过轮函数后与L0异或的值,迭代十六轮后得到R16和L16,故在计算中,我们需要知道,R0是32bit而K1是48bit,他们要经过轮函数运算

故在轮函数运算过程中,R0先经过E扩展(32bit分为8个4bit的小段,然后在前后各添加一位,具体添加哪一位可参见下面这个E扩展表)变成48bit,再与K1异或,后经过S盒压缩,再进行P置换,这个过程结束得到的值再与L0进行异或,生成R1的值,以此类推。

S盒压缩流程如下:如原始数据取头尾数据,转换后查表,再转换

比如这个,3行15列,然后查左边这个S盒表,数据是13,转换为2进制

P盒置换和初始置换差不多,换位置

密钥生成过程

密钥是由 K1-K16子密钥组成,密钥64位,经过PC-1置换后剩下56bit,分为C0,D0每部分28bit,根据这个移位次数表,C1D1是根据C0D0左移1位得到的,C3D3是由C2D2左移两位得到。比如C1D1拼接在一起,再根据PC-2置换,输出48bit,为密钥K1,以此类推。

关于DES的发展

5.SM4算法

定义

SMS4密码算法是国家密码管理局于2006年发布的第一个商用国产商用密码算法,2021年为了统一标准,SMS4算法更名为SM4算法。

SM4算法的特点是:(1)属于对称密码算法,加解密的密钥相同;(2)明密文和密钥均为128比特,分组长度为128比特;(3)SM4密码算法加解密算法的轮数为32轮,每轮的轮结构相同,只是轮密钥使用相反。(4)SM4密码算法密钥扩展算法也为32轮,每轮的轮结构相同。(5)SM4以字节(8比特)和(32比特)为单位进行数据处理。(128bit,那就是以4个字进行运算)

SM4密码算法包括两部分:一是加解密运算过程,二是密钥扩展运算过程

加密算法流程详解

加密算法由32次迭代运算和一次反序变换R组成

i从0-31,故运算X从31-35。比如X4=F(X0,X1,X2,X3,rk0),下面的轮函数简述为,轮函数涉及到T置换,T置换由非线性变换和线性变换L复合成

非线性变换其实是一个查表替换的过程,每个a0,a1,a2,a3都是一个8bit字符串,每个都能用两个十六进制数字表示,通过S盒查表对应后,得到B=(b0,b1,b2,b3)

                                  

L(B)的结果得出,结束T置换的过程

密钥生成过程

首先搞懂,加密算法32轮迭代中需要rk0-rk31的值,轮密钥rk由128bit子密钥MK生成,具体计算过程如下:

运算示例:

同理计算出k1,k2,k3

关于SM4算法分析:总的来说:安全性与AES-128基本一致,但是实现更简单、效率更高

6.AES算法

定义

AES(Advanced Encryption Standard)是美国联邦政府采用的一种用于替代DES的加密标准,已经被多方分析且广为全世界所使用, AES是Rijndael算法改进,分组长度128bits(128bits-16字节),密钥长度则有三种:128/192/256 bits。
Rijndael密码算法明文分组长度可变,密钥长度也可变。明文分组长度和密钥长度彼此独立地确定为128、192、256bits,因而Rijndael算法有 9种不同的版本,而迭代次数与明文分组长度和密钥长度有关。
NIST选中Rijndael算法作为AES算法,限定了明文分组为128bits,而密钥长度可为128、192、256bits,因而实际上AES有三个版本:AES-128、AES-192、AES-256,相应的迭代轮数为10轮、12轮、14轮。
 AES算法是Rijndael算法的子集,但实际应用中,术语AES和Rijndael视为等价,可以交替使用。

AES加密整体结构

AES的基本运算单位是字节(Byte),加密和解密过程明文和密钥都是在一个4×4的字节矩阵上运 作,这个矩阵又称为“状态” 。 字节矩阵初始值是一个明文块(块/分组,block)。 AES算法的密钥长度的为128bits、192bits、256bits三种不同长度,因此不同密钥长度列数可以取值分别为4、6、8。

                      

AES加密运算流程详解

       

最终1轮不进行列混合

初始变换:将明文和子密钥进行按字节异或的操作,得到一个矩阵

                  

                                    

然后进入循环运算中首先是字节代换

                               

比如这个19,查询S盒, 第1行第9列,是d4,然后以此类推进行代换

                           

接下来是行移位

                               

列混合:左乘一个给定的矩阵

注意这里的乘的规则是这样的:

可以参考这个例子:

最后是轮密钥加:是将结果和一个子密钥矩阵进行异或,每列逐字节进行异或得到

密钥扩展

上面写到的初始变换中,一开始是只有一个16字节的子密钥,后面是如何生成10轮过程中的轮密钥呢

                                       

扩展的过程是一列一列进行扩展的:设wi,取决于i是不是4的倍数

       

如果说是4的倍数:

    

轮常量是给定的,带入运算就行

7.密码小结

8.分组密码的运行模式

在实际运用中,需要加密的消息的数据量是不定的,数据格式可能是多种多样的, 因此需要做一些变通,灵活地运用这些基本密码。而且,也需要采用适当的工作模式来隐藏明文的统计特性、数据格式等,以提高整体的安全性,降低删除、重放、插入和伪造成功的机会。这种基本密码算法的适当的工作模式就是密码模式,也称为分组密码算法的运行模式。 密码模式通常是基本密码、 一些反馈、和一些简单运算的组合。

ECB模式

ECB模式是最简单的模式,直接利用加密算法分别对分组数据组加密。每个分组用同一密钥加密,同样明文分组得到相同密文。假设输入密钥为K,明文分组为P1,…,PN ,输出为C1,…,CN 。ECB操作模式加密: Cj=Ek(Pj)ECB操作模式解密: Pj=Dk(Cj)

模式操作简单, 主要用于内容较短且随机的报文的加密传递;直接利用加密算法分别对分组数据组加密。
最大特性:在给定的密钥下,同一明文组总产生同样的密文组。这会暴露明文数据的格式和统计特征。错误传播:单个密文分组中有一个或多个比特错误只会影响该分组的解密结果。无链接依赖性,各组的加密独立于其它分组,重排密文分组,将导致相应的明文分组重排。

安全性有限,由于同一明文产生同样的密文,这会暴露明文数据的格式和统计特征。特别是若明文数据都有固定的格式(例如图像)或者并需要以协议的形式定义的数据,一些重要的数据常常在同一位置上出现,使密码分析者可以对其进行统计分析、重传和代换攻击。因此当消息长度超过一个分组或者重复使用密钥加密多个单组消息,不建议使用ECB模式

                          

                         

密码分组链接CBC模式

CBC是使用最广泛的工作模式,应用在SSL/IPSEC等,相同的明文,即使相同的密钥下也会得到不同的密文分组,隐藏了明文的统计特性;初始矢量IV(Initial Vector):第一组明文加密时无反馈密文,为此需要在寄存器中预先置入一个,收发双方必须选用同一IV。链接依赖性:每个明文组加密之前,先与反馈至输入端的前一组密文按位模2求和后,再送至加密算法加密,因此密文分组依赖于当前的和以前的明文分组,不能实现并行处理。
实际上,IV 的完整性要比其保密性更为重要。在CBC模式下,最好是每发一个消息,都改变IV,比如将其值加一。

                      

                  

j-比特密码反馈CFB模式

j-比特密码反馈CFB模式:CFB的反馈可以是一个字节,甚至一个bit,对应的每次处理一个字节或一个比特。
j比特明文序列异或j比特密钥序列得到j比特密文序列;明文不再是64bits,而是j个bits。
CFB实际上是同步序列密码(流密码)消息被看作bit流,不需要整个数据分组在接收完后才能进行加解密。
若待加密消息必须按字符(如电传电报)或按比特处理时,可采用CFB模式。 CFB实际上是将加密算法DES作为一个密钥流产生器。
 CFB与CBC的区别是反馈的密文长度为j,且不是直接与明文相加,而是反馈至密钥产生器。
 缺点:加解密效率低,一次只能完成 j个比特明密文数据的加解密。
 应用:数据库加密等对数据格式有特殊要求的应用环境,比如,数据库加密要求加密时不
能改变明文的字节长度,这时就要以明文字节长度为单位进行加密。

输出反馈OFB模式

计数器模式(CTR)

使用与明文分组规则相同的计数器长度。加密不同的分组所使用的计数器值必须不同。解密:采用相同方案,但是使用加密函数而非解密函数。

  • 32
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值