对称加密算法原理

yuyu888 于 2021-01-26 发布

什么是对称加密

对称加密算法使用相同的密钥进行加密和解密,它的计算量小,速度快,是最常用的加密方式,也是密码学和各种安全技术应用的基础

人们对信息安全的需求无处不在,早在古典时期,人们为了对军事信息进行保密,就已经应用到的对称加密算法,对称加密也是密码学的基础和开端;现在计算机领域应用最广泛的https就使用了非对称加密的方式传递对称加密的密钥,再用对称加密的方式加密解密消息体,正是利用了对称加密计算量小,速度快的优势;

凯撒密码

凯撒密码 又称为移位密码,相传最早是古罗马军事统帅盖乌斯·尤利乌斯·凯撒为了防止他的敌人在截获到他的军事情报后,直接了解到他的军事意图, 对需要传递的信息每个字母都进行了固定位数的移位操作,从而达到信息加密的目的;

凯撒加密法的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置;假如设定的偏移量是右移三位:

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ  
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC

使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:

明文:ARE YOU OK  
密文:DUH BRX RN

位移密码可以通过求余的方式用数学公式表达,首先将字母用数字代替,A=0,B=1,…,Z=25。此时偏移量为n的加密方法即为:

加密:En(x)=(x+n)mod26  
解密:Dn(x)=(x−n)mod26

凯撒加密算法简单容易理解,在生活中,对于一些要求不高,但又有一定保密需求的地方用的还很广泛,比如行李箱上的密码锁,自行车数字锁,以自己生日为基础的各种位移密码,又或者说初中二年级写情书,即不怕老师发现, 还有点有趣,能形成良好互动还能锻炼计算能力;

通过对凯撒加密的演算,我们也可以把对称加密算法归纳为通过特定算法对字符完成映射关系,形成密文,并且能反向解析

替代密码

看过《潜伏》的同学应该对一个场景比较熟悉,余则成会收到一组数字,然后根据数字去一本书,比如《三国演义》中响应的页码,行数,列数,找到对应的字,这样就解析出了密文

替代密码算法就是预先建立好一张替换表,然后通过查表,将明文逐一替换为相应的密文,从而实现加密的目的,而这张替换表就是密钥。

由于替换表跟明文表是非线性关系,所以相比于凯撒密码更加难以破解

替换表:
明文字母表: ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表: ZEBRASCDFGHIJKLMNOPQTUVWXY

明文:ARE YOU OK  
密文:ZOA XLT LH

相对于凯撒密码,如果算法暴露了,凯撒密码很容易被解密,多试几次就行了, 但是替换密码 只要密码本(映射表)不被获知,破解依然有一定难度; 如例所示使用的是单表替换,即使不知道映射表,如果有足够的样本依然能找到规律进行破解;实际使用中,会使用多表替换,隐藏这种规律

现实中,两位中国人用故意不用汉语,用英语交流,对于其他不会英语的人来讲就实现了替换密码加密的效果;二战时,美国就曾用这种方式进行通讯,并拍成了电影《风语者》

置换密码

通过对明文进行置换操作(重新排序)来达到加密的目的。不过由于密文和明文位于相同的空间,所以不太适合单独使用,但可以作为加密算法的中间步骤用来强化加密效果。

简单置换密码的示例:
明文为:ARE YOU OK THANK YOU VERY MUCH
密钥为:52314
不足部分用 # 填充
列置换密码示例:
5 2 3 1 4
A R E Y O
U O K T H
A N K Y O
U V E R Y
M U C H #
则密文为:YTYRH RONVU EKKEC OHOY# AUAUM

流密码

在前面的密码中,每个明文字符都是用的相同的密钥来进行加密。实际应用时我们会使用相同的密钥对一组固定大小的连续明文进行加密,这就是分组密码。

流密码是根据密钥产生一个密钥流,然后跟明文进行一对一的异或运算,达到加密的效果。由于明文只是跟密钥流进行简单的异或运算,所以加密强度完全取决于密钥流的随机性。

传统密码分析方法

有加密就有破解, 这里讲一下传统密码分析方法

暴力破解

暴力破解是最原始的密码破译方式,主要使用场景是已知算法的情况下求密钥;这种方式效率很低,只适合密钥空间很小的情况,比如上述的位移密码,置换密码,以及单表替换密码

最简单的凯撒密码手算即可破解,偏移量就是凯撒密码的密钥

频率分析

对一般的密码,需要分析密文的规律和明文跟密文的关联。这时可以用频率分析之类的统计分析方法。例如,在简单的置换密码和替代密码中,明文字符和密文字符是一一对应的,所以明文的分布规律(英文里不同字母和字母组合出现的概率是不一样的)也会传导给密文,只要分析密文的分布规律,就可以反推得到明文,从而破解密码。

英文字母频率:
E .127
T .091
A .082
O .075
I .070
N .067
S .063
H .061
R .060
...

最常见的两字母组合:
TH,HE,IN,ER,AN,RE,ED,ON,ES,ST,
EN,AT,TO,NT,HA,ND,OU,EA,NG,AS,
OR,TI,IS,ET,IT,AR,TE,SE,HI,OF.

最常见的三字母组合:
THE, ING, AND, HER, ERE, ENT,
THA, NTH, WAS, ETH, FOR, DTH.

频率分析的过程一般是这样,先找到频率最高的密文字母,如果它的频率显著高于其他字母,就可以假定它对应的明文字母是E,然后继续分析剩余字母。对不确定的情况,可以结合两个或三个字母的组合的频率来进行分析。

密码分析思想

密码系统主要有四个要素组成:明文, 密文, 加密算法/解密算法,密钥构成;
对于对称加密来讲,知道加密算法就能推导出解密算法,反之亦然

密码分析就是在知道密文的基础上,以及其他任意因素,通过分析关联关系,进一步获取其他要素的过程,我们知道的要素信息越多,破解越容易

对于传统的密码,我们知道密文,虽然不知道明文,但是我们知道明文是可以认知的词组组成的语句,再结合实际的环境因素验证;可以通过上述传统的解密方式:暴力破解,频率分析等方法猜测出明文, 进而推导出加解密算法及密钥

对于现代密码, 明文一般也可能无法准确获取到他的特征值,所以现代密码分析一般指在知道一定样本的明文和对应密文,或者能够通过明文构造密文, 或者能够通过密文构造明文的条件下找出明文和秘闻之间的潜在规律解析出加密算法及密钥

现代分析方法更多的是使用相应的数学工具来分析密文分布的偏差,主要算法有:差分分析和线性分析。

现代加密算法

基本设计思想:混淆、扩散、随机

从各种密码分析方法可以看出,要想抵抗住分析,从宏观上,密文必须体现出随机性,从微观上,明文的一处微小的局部变化必须体现为密文的全局变化,否则明文和密文就存在一对一的线性关系,容易被破解。也就是说,要把明文打散混淆,不仅屏蔽密文跟明文的关联,还要将变化尽可能扩散。扩散的结果就是达到高耦合的目的,打破加密算法中的线性关系。

所以,加密算法的设计思想跟软件开发的原则正好相反。软件开发强调模块化,模块之间低耦合,模块内部高内聚,模块和代码结构清晰。而加密则是要把各个部分混为一体,使它们高度耦合,牵一发而动全身,让破解者找不到线索。

流密码则是通过生成随机密钥流的方式来达到同样的目的

柯克霍夫原则(Kerckhoffs’s Principle)

就算被所有人知道系统的运作步骤,密码系统应该仍然是安全的。

简单的说,就是加密算法应该公开,让大家充分的去研究和分析。如果全世界的密码学专家花了很长时间都找不到漏洞,那么这个算法基本上可以被认为是安全的。

这个规则是从实践经验中总结出来的。由于对称加密算法的安全性并不能用数学的方式证明,只能看实际应用中是否能抵抗各种分析和破解,所以对算法保密虽然可以提高破解的难度,但也降低了算法漏洞的透明度,导致漏洞被发现和利用后自己还不知道,后果更严重。

现在不只是算法会公开,而且基本上已经形成了公开选拔密码算法的机制

重新设计一个凯撒加密算法

理论是用来指导实践的,通过上述学习,可以重新设计一个凯撒加密算法,来加深理解

最原始的凯撒密码

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ  
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
明文:ARE YOU OK  
密文:DUH BRX RN

只要知道一组明文和密文,就能轻易发现密文是明文逐个字母偏移3位

替换密文字母表,偏移量不变

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ  
映射字母表:ZEBRASCDFGHIJKLMNOPQTUVWXY
密文字母表:RASCDFGHIJKLMNOPQTUVWXYZEB
明文:ARE YOU OK  
密文:RTD EOW OK

如果只给一组明文和密文, 就很难找到规律,因为映射表产生了非线性关系,但是多给几组, 最终可以发现明文和密文存在必然的映射关系:明文A永远对应密文R,明文B永远对应密文A …

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ  
密文字母表:RASCDFGHIJKLMNOPQTUVWXYZEB

增加映射字母表的长度,可以让线性关系更加隐蔽,但依然是一对一, 或者一对多的固定的对应关系;最简单的流密码,其实也只是构造了一个映射关系

更进一步,我们把偏移量设置为不固定,根据字母出现的位置+1 为偏移量

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ  
映射字母表:ZEBRASCDFGHIJKLMNOPQTUVWXY
明文:HEHE 
密文:DSGD

这里可以看出同样是HE, 对应的密文是变化的,一定程度上打破了固定的映射关系

当然实际设计的时候最好做一个耦合,让每个字母都参与后一个加密的计算;比如第一位字母 H 对应密文 D; 第二位字母 E 对应的映射字母是A;那么E的加密可以A的位数减D的位数等于-3; 在映射表里取-3的位置W;第二位字母 E 对应的密文就是W;依次类推…

以上是以凯撒加密为例来一层层使用理论指导来增加加密算法的健壮性,使之更加难以破解

实际上现代加密算法,也需要考虑计算效率,减少空间与时间复杂度,一般会转换成二进制流进行计算, 密钥也会转换成固定位数的二进制流,会考虑更复杂的算法,并通过不同的模式进行耦合,使得随机性更强

分组密码的模式

分组密码的模式

结语

对称加密算法的细节很多, 这里只是通过整理,提取出了一些浅显易懂的知识,做了阐述,希望能起到一些入门的指引作用;本人也是最开始感觉到非对称加密很神奇,进行一定研究后若有所悟,写完非对称加密,就想写一篇对称加密,事实上对称加密依然有一套严格的理论支撑,并不简单;通过最近对加密算法的研究,感觉收获很多,加密算法不再是不可触碰的黑盒了;


[参考文档]

https://zhuanlan.zhihu.com/p/104070888