引言加密算法作为一种安全手段,与我们大多数人的生活息息相关。只要你上网,就会从中受益,因为所有使用https的网站都已经使用了加密协议TLS/SSL。因此,我们都在被动地享受加密算法带来的隐私保护和通信安全。另外,从安全技术层面,从网络层到主机文件层,无论哪一层加密应用程序或协议,都有各种加密算法的支持。
本文试图通过讨论这种与我们的网络生活息息相关的加密算法从古至今的发展演变,以及整个过程中出现过的集中式密钥加密算法,帮助大家理解这个背后有趣的算法。
加密算法的主要作用是将明文转化为密文,防止信息泄露。加密后的密文看上去很像乱码,但其实不是乱码。大部分乱码都是编码不一致导致的。编码不属于加密算法,只是改变显示格式而已,比如它只是一种编码,并不能保证明文的安全。以后你再听到加密,说明他们不专业。
加密算法需要保证以下三点:
1、保密性:确保即使数据被窃取,窃贼也不知道它是什么。
2、完整性:确保即使数据在传输过程中被劫持和修改,接收方也能发现信息被截取并选择替换。
3、可用性:保证加密算法的开销和复杂度在可用范围内。
满足上述要求的加密算法从古典加密到现代加密都经历了漫长的历史发展时期。
古人是如何加密的?
1. 历史上最早的加密算法
替代方法
最早的加密算法主要应用于军事上。历史上最早关于加密算法的记载,来自于周代兵书《六道.龙涛》中的《隐赋》和《隐书》。其中记载:
太公说:“君主和将军有秘密的符箓,有八种。有大胜、克敌的符箓,长一尺。有败军、擒将的符箓,长九寸。有攻城、得镇的符箓,长八寸。有驱敌、报知远近的符箓,长七寸。有警示百姓坚守的符箓,长六寸。有求粮草、增兵的符箓,长五寸。有败军、死将的符箓,长四寸。有失兵的符箓,长三寸。凡带符箓而迟迟不肯出战的人,如果符箓被人知道,谁泄露了,就都杀了。这八种符箓是君主和将军的秘密,这样就可以秘密地沟通,不泄露彼此内外知晓的本领。即使敌人是敌人,他们也知道,谁也不知道。智慧,没有人能够理解它们。”
武王问太公:“……符不能明事理,相距遥远,不能相通,怎么办呢?”太公说:“有密事,有大事,就用文字,不用符。将军把文字交给将军,将军拿着文字问将军。文字一合一,两分一合,三读便懂。两分一合的,就分成三份。三读便懂的,就是三人各执一份,互相之间不能互相了解对方的心意,这就叫密文。敌人纵有智慧,谁也不能了解。”
简单来说,阴符用八个等长的符号来表达不同的信息和指令,是密码学中的一种替代方法,在应用中,将信息转化为敌人无法理解的符号,这种符号方法只能表达最关键的八个含义。作为阴符的补充,阴书采用文本拆分方法,将一段文本直接拆分成三部分,通过三个通道发送给目标方,敌人只有同时截获这三部分才能破解。
移位方法
无独有偶,加密算法在遥远的西方战争中也被大规模使用。希罗多德的《历史》记载,公元前五世纪,希腊城邦与波斯帝国频繁交战。希腊城邦广泛使用移位法加密战争通讯信息,使得波斯帝国难以获得对方的军事情报,无法提前做好军事部署。希腊城邦传递军事信息和命令所用的每段文字都有固定的字数,接收者手中会有一个文字移位指令。解密者得到密文后,根据移位指令解密,破解军事命令或讯息。
2. 凯撒密码,古代密码的演变
古典密码主要采用移位和代换法,其中移位法就是将明文向固定方向移位特定的位数,例如 I love you 右移4位变为 M pszi csy。经过逐渐的发展和完善,最著名的就是凯撒密码。但是英文或拉丁字母的频率并不一致,以英文字母为例:字母e的频率明显高于其他字母。在获得足够多的密文样本后,通过频率计算准确找到移位规则,从而破解密文。因此,凯撒密码大多采用代换法,并定义一个明文密文映射表:
这种方法虽然能一定程度上解决密钥穷举问题,但面对大量数据的频率攻击依然无能为力,后来这种模型发展为引入一些特定的参数来扰乱频率,增加解密难度。
古典密码后来发展出了一系列密码,包括维吉尼亚密码、ROT5/13/18/47、摩尔斯密码等,但它们都是基于代换和移位的方法,其安全性主要靠算法的不公开来保证。
现代人更科学的加密算法
古典加密算法本质上是语言学的变革,直到20世纪中叶,香农发表了《秘密系统通信理论》一文,标志着加密算法的重心转向应用数学。由此逐渐出现了三类重要的加密算法:非对称加密、对称加密、哈希算法。这三类算法经常组合使用,以达到最佳效果。
1.对称加密算法
对称加密算法是应用最为广泛的加密算法之一,常用的算法有DES算法、AES算法、3DES算法、TDEA算法、RC5算法、IDEA算法等。其特点是加密方和解密方使用同一个密钥进行加密和解密。根据原理不同,对称加密大致可以分为流加密和块加密两种。
流密码
流密码是一种对称加密算法,它逐位加密明文,对明文和密钥逐位进行运算,得到密文。流密码中最著名的算法是RC4和GSM。最简单的模型是XOR流密码,如:
流加密原理简单,但其算法结构存在弱点,只要泄露部分明文,攻击者就能轻松计算出密钥。另外,由于是逐位加密,即使攻击者篡改数据,也不会破坏原有数据结构,接收方很难察觉到这种改动。流加密虽然快速高效,但安全性相对较低,不建议对密钥信息进行加密。
分组密码
分组加密的内部实现要复杂得多,每个加密块至少要经过16轮运算,其代表算法有DES和AES,目前推荐使用AES,DES已经不再安全。
数据加密标准
DES 是早期的对称加密标准,其核心由初置换、轮函数、逆置换三个步骤组成,当时被广泛使用。随着计算机性能的不断提高,通过暴力破解 DES 变得越来越容易,因此 DES 已经不再安全,近十几年来逐渐被 3DES 和 AES 所取代。
高级加密标准 (AES)
AES 已被多方分析和证明,并在全球范围内被广泛使用。它是最安全的对称加密算法之一。在过去十年中,AES 已成为对称密钥加密中最流行的算法之一。与 DES 不同,AES 使用替换排列网络而不是体系结构。
AES 的大部分计算都是在一个特殊的有限域中进行的。加密过程在一个 4×4 字节矩阵上进行,这个矩阵也被称为“状态”,其初始值是一个明文块。加密时,AES 加密循环的每一轮(最后一轮除外)都包含 4 个步骤:
——矩阵中每个字节都与轮密钥进行异或;每个子密钥由密钥生成方案生成。
——使用非线性替换函数通过查找表将每个字节替换为相应的字节。
——循环移位矩阵的每一行。
- 对矩阵中每列的操作进行充分混合,使用线性变换将每列的四个字节进行混合。在最后一个加密循环中,该步骤被省略,并用另一个步骤代替。
加密模式
AES和DES都支持不同的加密模式,每种模式的安全性和效率差别很大。在最常见的两种模式ECB和CBC中,ECB模式加密效率高,但安全性较低。模式如下图所示:
每次密钥加密单个块,很容易被对方破解。但由于各个模块互不关联,可以并发操作,大大提高加密效率。一般ECB的加密效率比CBC高5-6倍。不过CBC比ECB安全很多。模式如下:
每个加密块引入不同的IV,需要迭代前一个块才能完成整个加密过程。由于每个块的IV与密文块相关,因此无法使用并发模式,必须串行执行整个过程。如果没有极高的性能要求,建议使用更安全可靠的CBC模式。
2.非对称加密算法
非对称加密算法与对称加密算法最大的区别就是加密密钥和解密密钥不再是同一个,这种方式主要用于处理“多个加密者,一个解密者”的模型。因此在这种多对一的关系中就出现了公钥体制,一个公钥对应一个私钥,公钥是公开的,任何数据发送者都使用公钥对数据进行加密,但是公钥加密的内容只有私钥才能解密。其背后的数学原理非常复杂,从大数分解到椭圆曲线上复杂的离散对数问题。常见的非对称加密算法有DSA算法、RSA算法、算法、背包算法、Rabin算法、DH算法、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算法更安全。