加密算法史

admin10个月前笔记105

本文就尝试由古及今,对这种与我们网络生活息息相关的加密算法的发展演变,以及在整个过程中先后出现的集中关键加密算法一一论述,带领大家了解背后这种有趣的算法。

加密算法主要作用是把明文变成密文,防止信息泄露。加密后的密文看起来和乱码很像,但却不是乱码。大部分乱码是由于编码不一致导致的,编码不属于加密算法,只是改变了显示格式而已。比如,base64 只是一种编码而已,不能保障明文安全。以后听到 base64 加密的说法,说明他们不专业。

加密算法需要保证以下三点:

1.机密性:保证数据即使被盗取,小偷也不知道是啥。

2.完整性:保证数据在传输过程中即使被劫持修改,接收方能够发现信息已被截取,而选择换掉。

3.可用性:保证加密算法的开销、复杂度都在可用范围。

满足上述要求的加密算法经历了从古典密码过渡到现代密码的漫长历史发展时期。

古代人如何加密?
1、历史上最早的加密算法

替代法
最早的加密算法主要用于军事,历史上最早关于加密算法的记载出自于周朝兵书《六韬.龙韬》中的《阴符》和《阴书》。其中记载:

太公曰:“主与将,有阴符,凡八等。有大胜克敌之符,长一尺。破军擒将之符,长九寸。降城得邑之符,长八寸。却敌报远之符,长七寸。警众坚守之符,长六寸。请粮益兵之符,长五寸。败军亡将之符,长四寸。失利亡士之符,长三寸。诸奉使行符,稽留,若符事闻,泄告者,皆诛之。八符者,主将秘闻,所以阴通言语,不泄中外相知之术。敌虽圣智,莫之能识。”

武王问太公曰:“… 符不能明;相去辽远,言语不通。为之奈何?” 太公曰:“诸有阴事大虑,当用书,不用符。主以书遗将,将以书问主。书皆一合而再离,三发而一知。再离者,分书为三部。三发而一知者,言三人,人操一分,相参而不相知情也。此谓阴书。敌虽圣智,莫之能识。”

简单来说,阴符是以八等长度的符来表达不同的消息和指令,属于密码学中的替代法,在应用中是把信息转变成敌人看不懂的符号,这种符号法只能表述最关键的八种含义。阴书作为阴符的补充,运用了文字拆分法直接把一份文字拆成三分,由三种渠道发送到目标方手中,敌人只有同时截获三分内容才可能破解。

移位法
无独有偶,在遥远的西方加密算法也大规模使用于战争之中。在希罗多德的《历史》中记载了公元前五世纪,希腊城邦和波斯帝国频频交战,希腊城邦中广泛使用移位法对战争通讯信息进行加密处理,波斯帝国因此难以获得对方军事情报,无法提前做军事部署。希腊城邦用来传输军事信息、命令的每段文字都有固定的字数,接密者手中会有一份文字移位说明。解密者拿到密文后,根据移位说明解密,破解军事命令或消息。

2、古代密码演变的凯撒密码

古典密码主要采用移动法和替换法。其中,移位法就是让明文都向固定方向移动特定位数,例如 I love you 右移动 4 位就变成了 M pszi csy。经过逐渐发展和完善,最有名的莫过于凯撒密码。但英文或拉丁文字母出现的频率并不一致。以英文字母为例:字母e出现频率明显高过其他字母。获得足够密文样本后,通过频率计算准确找到移位规则,从而破解密文。于是大部分凯撒密码采用替换法,定义一张明文密文映射表:

image.png

这种方式可在一定程度上解决密钥可穷举的问题,但仍对大数据量的频率攻击束手无策。后来该模式发展为靠引入一些特定参数来扰乱频率,提高解密难度。

古典密码后期发展出维吉尼亚密码、ROT5/13/18/47、摩尔斯密码等一系列密码种类。但都是以替换法和移位法为核心基础,安全性也主要是靠算法不公开来保证。

现代人更科学的加密算法

古典加密算法本质上是语言学上模式的改变。直到20世纪中叶,香农发表了《秘密体制的通信理论》一文,标志着加密算法的重心转移往应用数学上的转移。于是,逐渐衍生出了当今重要的三类加密算法:非对称加密、对称加密以及哈希算法。这三类算法往往组合使用,以发挥最佳效果。

1、对称加密算法

对称加密算法是使用最广泛的加密算法之一。常用的有 DES 算法、AES 算法、3DES 算法、TDEA 算法、Blowfish 算法、RC5 算法、IDEA 算法等。其特点是,加密和解密两方使用同一密钥进行加、解密。按照原理不同,对称加密可以大体分成流加密和分组加密两种类型。

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

image.png

流加密原理简单,其算法结构存在弱点,只要泄露局部明文,攻击者很容易算出密钥。另外,由于是按位进行加密,攻击者即使对数据进行篡改,也不会破坏原有数据结构,接收者很难发现其中变化。流加密虽然快捷高效,但其安全性较低,加密关键信息不建议采用此方式。

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

DES

DES 是较早时期的对称加密标准,核心主要分成初始置换、轮函数、逆置换三步,在当时得到了广泛的应用。随着计算机性能地不断提高,暴力破解DES变得越来越容易。所以 DES 已经不再安全,近十几年逐渐地被 3DES 和 AES 代替。

AES

AES 已经被多方分析论证,在全世界范围广泛使用,是目前最为安全的对称加密算法之一。近十年,AES 已然成为对称密钥加密中最流行的算法之一。不同于 DES,AES 使用的是代换-置换网络,而非 Feistel 架构。

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

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

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

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

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

加密模式

AES、DES 内部都支持不同加密模式,每种模式的安全性和效率大不相同。两种最常见模式 ECB 和 CBC 中,ECB 模式加密效率高,但安全性低,模式如下图:

image.png

每次都是 Key 对单独块进行加密,容易被对方破解。但由于每个模块之间毫无关联,可以并发运算,极大提高加密效率。通常,ECB 的加密效率比 CBC 高 5-6 倍。但 CBC 较之 ECB 高,安全性则高得多。模式如下图:

image.png

每块加密引入一个不同的 IV,需要上一块进行迭代,最终完成整个加密过程。由于每块的 IV 和密文块有关,所以无法采用并发模式,必须串行整个过程。若不是出于极高的性能要求,建议采用更安全、可靠的 CBC 模式。

2、非对称加密算法

非对称加密算法和对称加密算法的最大区别在于,加密密钥和解密密钥不再是一个。这种方式主要为了应对“多个加密者,一个解密者”的模式。于是在这种多对一的关系中就出现了一个公钥体系。一个公钥对应一个私钥。公钥公开,任何数据发送者都用公钥对数据进行加密,但公钥加密的内容只有私钥才能解开。背后的数学原理从大数分解到复杂的椭圆曲线上的离散对数问题,非常复杂。常见非对称加密算法包括 DSA 算法、RSA 算法、Elgamal 算法、背包算法、Rabin 算法、D-H 算法、ECC 算法等。非对称加密算法的执行效率制约着该算法的实际应用,因此大部分应用在身份验证中,并不会在通讯中使用。

3、哈希算法

哈希算法也是非常常见的加密算法之一。它不是用来做数据传输,而是对数据是否被篡改加以验证,防止不法分子篡改数据。特点是无论原文多长都会变成固定长度的字符串,只能加密不能解密(只能单向运算)。常见哈希算法包含 MD5、SHA-1 和 SHA 224/256/512 等。前两者已被证明不再安全,建议使用 SHA 256/512 等安全性高的算法。

上述加密算法已经广泛应用在各个领域。

数据库加密算法

随着云和大数据的高速发展,数据库也逐渐从安全的局域网环境,向私有云甚至公有云迁移。数据库迁移到云上,面临更加严峻的安全挑战。数据库中保存着关键数据,云上主机存在众多不安全隐患,所以云上数据库加密成为解决安全隐患的一剂良药。

对称加密算法

不同于文件加密和通讯加密,数据库加密需要特别关注加密算法是否存在膨胀性,并对加密算法的性能有苛刻的要求。2009 年,安华金和在进行数据库加密产品研发时,首先排除对称算法中的流加密算法,原因是这种算法虽然在运行效率和解决数据膨胀上有天然优势,但在一定情况下存在不安全性。

为了追求加密效率,目前国内依然有部分安全厂商采用这种方式,最基本的安全性要求却被忽略。更稳妥的做法是采用对称加密中的分组加密(AES)进行相关加密处理。分组加密安全性高,在安全方面比较有保障,但需要解决由于数据块大小限制带来的膨胀问题。这需要根据具体情况或字段设计足够精妙的使用方案,来针对不同字段或类型解决膨胀问题,最终形成完美的数据库加密方案。

国产密码算法

密码算法是保障信息安全的核心技术,对于国家机密及各行业核心数据的保护起到至关重要的作用,使用 3DES、SHA-1、RSA 等国际通用的密码算法体系及相关标准,存在较大安全隐患。因此,国家有关机关和监管机构站在国家安全和长远战略的高度提出了推动国密算法应用实施、加强行业安全可控的要求。目前国内的数据库加密产品在面对用户的选型评估时,相当一部分是以支持国密算法为首要条件,这对于政府、军工、保密等相关行业用户来说非常重要,国家信息安全的保障必须摆脱对国外技术和产品的过度依赖,加密算法作为关键安全技术更应国产化。

具体而言,国产密码算法指国家密码局认定的国产商用密码算法,比如,在金融领域目前主要使用公开的 SM2、SM3、SM4 三类算法。以 SM4 算法为例:SM4 分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4 算法与 AES 算法具有相同的密钥长度分组长度 128 比特,因此在安全性上高于 3DES 算法。


相关文章

ChatGPT API使用介绍

ChatGPT API使用介绍

1.概述随着人工智能技术的不断发展,越来越多的AI产品被应用到各个领域,其中最具代表性的莫过于人工智能语言模型。语言模型是一种可以通过学习大量语言数据来预测文本或语音的技术,其应用范围十分广泛,如智能...

Linux下的文件I/O编程

Linux下的文件I/O编程

(一).open()打开文件#include <sys/types.h> #include <sys/stat.h> #include int&nbs...

Linux whereis 基础命令

Linux whereis 基础命令

这篇文章里,我们会通过一些便于理解的例子来解释这一命令的基础内容。但在这之前,值得说明的一点是,下面出现的所有例子都在 Ubuntu 16.04 LTS 下测试过。Linux whereis...

建立SSH之免密登陆

建立SSH之免密登陆

忽略ssh安装scp安装过程。默认认为当前机器与远程机器含有完整的ssh,scp功能首先在机器B中使用ssh-keygen -t rsa 命令 (想来玩git的童鞋应该知道吧~)[...

香港虚拟银行开户攻略:一小时搞定ZA BANK、livi理慧银行、天星银行、蚂蚁银行

香港虚拟银行开户攻略:一小时搞定ZA BANK、livi理慧银行、天星银行、蚂蚁银行

10月中旬去了一趟香港,主要是为了激活香港招商永隆银行账户,顺便申请了几家虚拟银行:ZA BANK、livi理慧银行、天星银行、蚂蚁银行,全程手机APP操作,大约花了一个小时的时间。本文会介绍这几家虚...

PHP 驱动 MongoDB 的方法和技巧

创建索引有时会阻塞新的连接然而,如果一个节点是“UP”状态,但是持有写锁,那么验证将没法执行下去,因此该驱动程序将被挂起了。在mongodb 2.6版本前,在建立索引时的通病。所有的在前台或后台创建索...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。