当前位置: 首页 > 技术支持 > 技术文档 >

五分钟为你梳理对称加密体系

发表日期:2019-01-16

数据泄露事件频繁被曝光,还有很多很多大大小小没有被公布的安全事件,都说明了数据加密和保护的重要性。只要有收集或者存储客户数据行为的产品,都需要做好安全保密工作,而且加密不仅仅是因为保护用户隐私,更是法律法规的要求,不得不做。今天就来梳理对称加密体系----一种最简单快速的加密。

对称加密体系

端到端加密 .jpg

 

什么是对称加密:

同一个密钥可以同时用来对信息进行加密和解密操作,这种加密方法称为对称加密,也称为单密钥加密。数据发送方将明文原始数据和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,收发双方都使用这个密钥对该条数据进行加密和解密。

对称加密算法的优劣:

对称加密算法的特点是计算量小、加密速度快、加密效率高,适合对大量数据进行加密的场景。

不足之处是,交易双方都使用同样密钥,所以对称加密的安全性就不仅仅取决于加密算法本身,更取决于密钥是否被安全的保管和传输,因此加密发送方如何把密钥安全地传递到解密接收方手中,才是对称加密面临的关键问题。

此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一密钥,这会使得发收信双方所拥有的钥匙数量呈几何级数增长,密钥管理成为用户的负担。

一般原理

举个生活中的简单例子来简要说明一下对称加密的工作过程。甲和乙是一对生意伙伴,他们住在不同的城市。由于生意上的需要,他们经常会相互之间邮寄重要的货物。为了保证货物的安全,他们商定为每次需要配送的货物打造一个保险箱,将货物放入保险箱中,并为保险箱打造两把相同的钥匙分别保管,这样一人可以在邮寄货物前用这把钥匙锁上保险箱,另一人在收到包裹时用这个钥匙可打开保险箱。同时如果甲有了新的生意伙伴丙,为了防止货物被盗取,他和丙会制作不同的保险箱,同时打造跟甲乙之前使用的钥匙不同的钥匙来对保险箱上锁和开锁。

在这个简单的例子中,钥匙就相当于双方用于加解密的密钥,每次配送的货物就可类比于每条消息包,这个例子同时也说明了,每队用户每次使用对称加密算法,都需要使用其他人不知道的唯一密钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。

上面是一个将重要资源安全传递到目的地的传统方式,只要甲乙丙小心保管好钥匙,那么就算有人得到保险箱,也无法打开保险箱窃取货物。这个思想被用到了通信过程的信息加密中。在对称加密中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读原文,则需要使用相同的加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。

对称加密算法的前世今生

按照原理不同,对称加密可以大体分成流加密和分组加密两种类型。

流加密

流加密是将明文按字符逐位地,对应地进行加密的一类对称密码算法。流加密中最有名的算法是RC4和GSM。流加密算法相对简单,明文和密钥按位对其做约定的运算,即可获得密文。

加密过程:首先生成一个对称秘钥,使用用户公钥加密这个对称秘钥后存储在文件头,然后用生成的对称秘钥加密文件数据存储。

解密过程:首先使用自己的私钥解密被加密的对称秘钥,再用该对称秘钥解密出数据原文。

最简单的模型是异或流加密例如:

流加密.png

由于流加密原理简单,其算法结构存在弱点,如果密钥流又多次重复使用,只要泄露局部明文,攻击者很容易算出密钥。另外,由于是按位进行加密,攻击者即使对数据进行篡改,也不会破坏原有数据结构,接收者很难发现其中变化。

因此流加密虽然是一种快捷高效的加密方法,但其安全性较低,不建议用户使用流加密对关键信息进行加密。 

分组加密

分组密码是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。

现代分组密码的研究始于20世纪70年代中期,至今已有40余年历史,这期间人们在这一研究领域已经取得了丰硕的研究成果。

对于分组密码,在早期的研究,基本上是围绕DES进行的,推出了一些类似的算法,例如:LOKIFEALGOST等。

分组加密内部实现则复杂的多,每一个加密块都会经历至少16轮运算,其代表算法有DESAES。目前推荐使用AESDES已经不在安全。 

DES 

DES是较早时期的对称加密标准,在当时得到了广泛的应用。随着计算机性能地不断提高,暴力破解DES变得越来越容易。所以DES已经不再安全,近十多年已逐渐被3DESAES代替。

DES核心主要分成初始置换、轮函数、逆置换三步。

 

初始置换:把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分长32位,其置换规则为将输入的第58位换到第1位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,其置换规则见下表:

58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,

62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,

57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,

61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,

 

轮函数:DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位(每组的第8位作为奇偶校验位),产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。

 

逆置换:DES 使用 16 轮循环,使用异或、置换、代换、移位操作四种基本运算。最后经过16次迭代运算后,得到L16、R16,将此作为输入进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出,解密过程则是整套加密过程的逆运算。

 

AES 

AES的诞生是为了替代原先的DES,它已经被多方分析论证,在全世界范围广泛使用,近十年,AES已然成为对称密钥加密中最流行的算法之一。不同于它的前任标准DES,AES使用的是代换-置换(SP)网络,而非Feistel架构,SP网络从理论上给出了最大差分特征概率和最佳线性逼近优势的界,证明了密码对差分密码分析和线性密码分析的安全性。

 大多数AES计算是在一个特别的有限域内完成的,加密过程是在一个4×4的字节矩阵上运作,这个矩阵又称为“状态(state)”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:

 AddRoundKey——矩阵中的每一个字节都与该次轮密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。

 SubBytes——通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。

 ShiftRows——将矩阵中的每个横列进行循环式移位。

 MixColumns ——为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每列的四个字节。最后一个加密循环中省略MixColumns步骤,以另一个ddRoundKey取代。

国家商用密码是如何实现的

商用密码的应用领域十分广泛,主要用于对不涉及国家秘密内容但又具有敏感性的内部信息、行政事务信息、经济信息等进行加密保护。比如:商用密码可用于企业门禁管理、企业内部的各类敏感信息的传输加密、存储加密,防止非法第三方获取信息内容;也可用于各种安全认证、网上银行、数字签名等。

SM4

2006年我国公布了无限局域网产品使用的SM4密码算法。这是我国第一次公布自己的商用密码算法。

SM4算法的整体结构图:

SM4算法整体结构.jpg

 

国际的DES算法和国产的SM4算法的目的都是为了加密保护静态储存和传输信道中的数据,主要特性如下:

对比表格.jpg

从算法上看,国产SM4算法在计算过程中增加非线性变换,理论上能大大提高其算法的安全性,并且由专业机构进行了密码分析,民间也对21SM4进行了差分密码分析,结论均为安全性较高。