加密的艺术

小雪
对称加密起源于凯撒密码等古老的加密方法。其主要原理是文件加密和解密使用相同的密钥。如果两个通信方想要交换加密数据,则发送方和接收方都需要拥有相同密钥的副本,同时还需要找到一种秘密传输共享密钥的方法。

加密算法最早诞生在什么时候?计算机出现之后吗?不,早在公元前7世纪,古希腊人就已经在使用加密算法了。他们使用一根叫scytale的棍子来传递加密信息,加密时先绕棍子卷一张纸条,把信息沿棒水平方向写,写一个字旋转一下,直到写完。解下来后,纸条上的文字消息杂乱无章,这就是密文。将它绕在另一个同等尺寸的棒子上后,就能看到原始的消息。如果不知道棍子的粗细,就无法解密里面的内容。

2345截图20210806091512.png

加密方式发展到今天,相比scytale的简单原理已经有了无法想象的巨大发展,我们现在基于更复杂的数学过程,即更为复杂的算法来进行加密。许多使用现代手段创建的成熟密码系统基本被认为是不可破解的。一个不可被破解的加密方式到底有多复杂?下面我们就来领略一下。

什么是加密?

我们通常所说的加密是指使用密钥将纯文本转换为难以理解的序列的方法,通常由两个基本部分构成:算法和密钥。

算法是将普通的文本(或者可以理解的信息)与一串数字(密钥)的结合,产生不可理解的密文的步骤,密钥是用来对数据进行编码和解码的一种算法。加密可以描述为一种方法,通过该方法,明文和密钥通过密码算法,产生秘密文本。

在期望的情况下,加密文本的内容只有拥有对应密钥的用户才能访问。除了文本消息,现代加密还可以应用于其他电子传输信息,例如语音消息、图像文件或程序代码等。

2345截图20210806091512.png

加密方式分类

在现代,我们主要用到对称加密(私人密钥加密)和非对称加密(公开密钥加密)两种加密方式。

对称加密方法

对称加密起源于凯撒密码等古老的加密方法。其主要原理是文件加密和解密使用相同的密钥。如果两个通信方想要交换加密数据,则发送方和接收方都需要拥有相同密钥的副本,同时还需要找到一种秘密传输共享密钥的方法。为了保护加密信息不被第三方访问,密钥是保密的,密钥的长度也决定了该加密算法的安全性。

对称加密算法使用起来简单快捷,密钥较短,且破译困难。众所周知的对称加密方法包括比较典型的数据加密标准(DES)及其高级加密标准(AES)。

数据加密标准(DES)

DES是一种对称加密方法,由IBM在1970年代开发,并于1977年由美国国家标准与技术研究院(NIST)标准化。按照当时的标准,DES是一种安全的计算机辅助加密方法,是现代密码学的基础。密钥长64位,但实际上只有56位参与运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),在如今基本上已经过时了。当今的技术,使用蛮力攻击可以在短短几个小时内破解出DES密钥。

该算法由排列和替换组成,整个过程需要16轮,其原理结构图如下:

2345截图20210806091512.png

首先是初始置换,64位的块被分成32位的块;创建了左半块L0和右半块R0。然后经过16轮相同的操作(此处为函数f)将数据与密钥组合。16轮过后,左右两块重新组合,经过最后的置换,得到密文。DES加密密文的解密遵循相同的方案,但顺序相反。

DES的主要缺点是56位的密钥长度相对较小,无法承受当今计算能力可用的蛮力攻击。DES的一种变体是Triple-DES(3DES),其中加密方法在三个连续轮次中执行。但是3DES的有效密钥长度仍然只有112位,仍低于当今128位的最低标准。因此,DES已在很大程度上被取代。AES(Advanced Encryption Standard)算法接替了DES,它也是一种对称加密方法。

高级加密标准(AES)

到了90年代,很明显最常用的加密标准DES已经落伍了,需要一个新的加密标准来替代。于是,AES诞生了,由于其具有更高的安全性、灵活性,它也是美国联邦政府采用的一种区块加密标准。

AES也是将加密后的明文分成块,所以与DES一样是基于块加密的。该标准支持128、192和256位密钥。但AES使用的不是64位的块,而是使用大很多的128位块,这些块在连续几轮中使用代换-置换网络(Substitution-Permutation Network,SPN)进行加密。加密过程大致分为四个步骤:

1、KeyExpansion密钥扩展:AES和DES一样,对每个加密循环使用一个新的轮密钥。在这个过程中,输出密钥的长度也被扩展,生成映射所需数量的128位轮密钥。每个轮密钥都基于扩展输出密钥的一部分。所需的轮密钥数等于轮数(R),包括关键轮,加上初始轮的轮密钥(密钥数=R+1)。

2、Initial round初始轮:在初始轮中,将128位的输入块转移到二维表(Array)中,并使用按位异或XOR(AddRoundKey)链接到第一轮密钥。该表由四行四列组成。每个单元包含要加密的块的一个字节(8位)。

2345截图20210806091512.png

△在AddRoundKey中,将每个状态中的字节与该回合密钥做异或

3、加密轮数:加密轮数取决于使用的密钥长度:AES128为10轮,AES192为12轮,AES256为14轮。每轮加密使用以下操作:

SubBytes(字节替代):一个非线性替换步骤,其中根据查找表将每个字节替换为另一个字节。

ShiftRows(行移位):一个转置步骤,其中状态的最后三行循环移位一定数量的步骤。

MixColumns(列混淆):一种线性混合操作,它对状态的列进行操作,将每列中的四个字节组合在一起。

AddRoundKey(轮密钥加):在每轮加密结束时,发生另一个AddRoundKey。就像初始轮一样,基于数据块与当前轮次密钥的异或链接。

4.密钥轮:密钥轮是最后的加密轮。与前几轮不同的是,它不包括MixColumns转换,因此只包括SubBytes、ShiftRows和AddRoundKey操作。最后一轮的结果得到密文。

由于其本身的算法,AES已通过了高水平的安全性认证。对于至少128位的密钥长度,蛮力攻击是很低效的。除此之外,AES还用作WPA2、SSH和IPSec的加密标准。该算法还用于加密压缩文件存档,例如7-Zip或RAR。

以上两种对称加密方法都是依托于对称加密的算法,而对称加密算法则分以下两大类:

流密码:也叫序列密码,每次加密都通过密钥生成一个密钥流,解密也是使用同一个密钥流,明文与同样长度的密钥流进行异或运算得到密文,密文与同样的密钥流进行异或运算得到明文。

块密码:也叫分组密码,它把加密和解密序列分成了一个个分组,最后把每一块序列合并到一起,形成明文或者密文。

非对称加密方法

相对于对称加密加密通信的双方需使用相同的密钥来说,非对称加密的通信双方会为每个页面都生成一个密钥对。通信中的每个参与者都有两把钥匙可供使用:一把公钥和一把私匙。为了能够加密信息,每一方都必须事先声明他们的公钥,这被称为公钥算法。这就是非对称密码系统的优势:与对称加密方法相反,密钥永远不会离开其所有者的视线。

下面我们通过一个简单例子来了解非对称加密。。假设用户A想向用户B发送一条加密消息,为此A需要B的公钥,而B的公钥允许A加密只有B的私钥才能解密的消息。这样除了B,就在没有其他人没有人能够阅读该消息,包括A也无法解密。

2345截图20210806091512.png

这么做的优点是任何人都可以使用用户B的公钥加密消息,然后只能B的密钥解密。由于仅交换公钥,因此无需创建防篡改的安全通道,因为能解密的只有B。

非对称加密最通用的加密算法是Rivest、Shamir、Adleman(RSA)和ECC。

Rivest、Shamir、Adleman(RSA)

1977年,数学家Rivest、Shamir和Adleman提出了一种非对称加密算法,并以发明人的名字命名——RSA。RSA是目前普遍认为最安全、最优秀的公钥方法之一。

2345截图20210806091512.png

RSA使用一种基于大素数相乘的算法。如果将质数14,629和30,491相乘,可以得到结果为446,052,839。这个数只有四个可能的除数:其中两个是1和它本身,另外两个是相乘前的原始素数。如果将前两个除数排除(因为每个数字都可以被1和它本身整除),那么将得到14,629和30,491的初始值。

以上就是RSA密钥生成的基础。公钥和私钥都代表两对数字:

2345截图20210806091512.png

N即两个随机选择的非常大素数p和q的乘积N=pxq,以及计算N的欧拉函数φ(N)=(p-1)(q-1)。

要生成公钥,则需要e,e是一个根据一些限制(条件是1<e<φ(N),且e与φ(N)互质)随机选择的数字。

要生成私钥,则需要计算e对于φ(N)的模反元素d。所谓“模反元素”就是指有一个整数d,可以使得ed被φ(N)除的余数为1。满足(ed)modφ(N)=1,即ed=kφ(N)+1,k≥1是一个任意的整数;所以,若知道e和φ(N),则很容易计算出d。

然而只根据N和e(注意:不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但是只有授权用户(知道d)才可对密文解密。

RSA算法的保密强度随其密钥的长度增加而增强。但是,密钥越长,其加解密所耗用的时间也越长。因此,要根据所保护信息的敏感程度与攻击者破解所要花费的代价值不值得以及系统所要求的反应时间来综合考虑。

目前互联网中最常用的SSL/TLS协议就是基于RSA算法。如果想要使用特定公钥加密的信息只能使用附属于该公匙的私钥进行解密。经客户端验证公钥可以与私钥进行匹配,才会建立安全连接。

2345截图20210806091512.png

△一些主流SSL证书加密算法均为RSA算法

ECC

在上图中我们还可以看到非对称加密的另一种算法ECC,即椭圆加密算法。其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。ECC的主要优势是在某些情况下比其他的方法(比如RSA)使用更小的密钥,提供相当或更高等级的安全。

回到非对称加密本身。这种加密算法除去“无需创建防篡改的安全通道”这一有点外,也有一个不可忽视的缺点:无法确认通信伙伴的身份。也就是说在非对称加密中,B不能确定加密的消息确实来自A,理论上第三个用户C可以使用B的公钥来加密并传递消息。此外,A也不能确定公钥是否真的属于B,公钥可能是由C创建并传达给A的,这样可以拦截A发给B的消息。

因此使用非对称加密,需要一种机制以便用户可以测试其通信伙伴的身份验证。

目前我们使用数字证书和签名来解决这个问题:

数字证书:为了确保非对称加密方法的安全,通信伙伴可以通过官方认证机构确认其公钥的真实性。例如,通过HTTPS的TLS/SSL加密数据传输。

数字签名:虽然数字证书可用于验证公钥,但数字签名可用于识别加密消息的发送者。私钥用于生成签名,然后接收方使用发送方的公钥验证该签名。

以上就是我们目前主要用到的加密方式啦,但是加密方式不仅仅如此,随着互联网的不断发展,肯定会越来越复杂,尽管它们涉及了很多数学知识,了解起来非常枯燥,但是正是这些枯燥的数学让我们的信息越来越安全。

THEEND

最新评论(评论仅代表用户观点)

更多
暂无评论