龙空技术网

看不见的卫士-密码技术(二)

不能再碌碌无为 553

前言:

当前看官们对“安全加密算法”都比较关切,姐妹们都需要学习一些“安全加密算法”的相关知识。那么小编在网络上收集了一些有关“安全加密算法””的相关资讯,希望各位老铁们能喜欢,兄弟们快快来了解一下吧!

上一篇《看不见的卫士-密码技术(一)》文章中,介绍了等保2.0对密码技术的相关要求、密码技术的历史和基本概念,并重点介绍哈希算法及相关应用。今天这篇文章主要介绍对称加密算法及其应用方案。

对称加密算法介绍

基本概念

首先,回顾一下密码技术的体系结构模型:

在这个体系模型中,如果加密密钥和解密密钥完全相同,这类加密算法就称为对称加密算法。对称加密算法在实际应用时,要求发送方和接收方在工作前商定一个密钥,大家使用共同的密钥进行加密和解密计算。

对称加密算法的主要特点是算法公开、快速高效。

国际知名的加密算法都已经对外公开细节,对称加密算法的安全性主要依赖密钥——现代密码学已经证明,只有不依赖算法保密的加密算法才是更安全的加密算法。因为算法终究要被大量的软、硬件工程师使用,只要发布出去,算法就可以被逆向破解,所以保密算法本身是从根本上不可能完成的任务;而且我们也不可能为每一套系统单独研发一套加密算法,所以密码算法一旦被破解,就意味着大量的加密系统和数据都被破解。与加密算法对应得是,我们可以设置为每一个系统甚至每一次通信设置独有的密钥,这样保密的重点就是保护密钥的安全性。密钥管理是对称加密技术方案中的重点内容。

对称加密算法的核心优势是快速高效,对系统消耗很少,就可以支持对大量数据的加密和解密。比如非对称加密算法RSA对比对称加密算法AES,加密同样的数据,时间消耗大约相差1500倍左右。

因为加密和解密的密钥相同,对称加密算法的安全核心是密钥,密钥的安全就等同于数据加密的安全,密钥安全问题是对称加密算法在实际应用中需要解决的主要问题。

为了保证不同数据加密过程的安全性,一般使用不同的密钥,有些特殊场景甚至要求一次一密。随着密钥数量的增多,密钥的管理问题会逐渐显现出来,带来极大的管理负担。一个完整的加密技术方案,必须考虑密钥的管理。密钥管理涉及密钥的生成、使用、传输、存储和销毁等过程,是一套复杂的安全业务系统。

典型算法

算法家族简介

目前常见的典型对称加密算法包括DES、3DES、AES、RC5等,这些算法其实背后都有一个家族,同一家族中算法的基本结构是一致的,主要是密钥长度、循环运行的次数等略有差异,下表列出来这些家族中的典型算法:

DES(Data Encryption Standard):美国国家标准局于1976年发布的商用数据加密标准,基于Feistel结构。DES算法的数据分组长度和密钥长度都是64位。DES算法现在已经被证明是不够安全的,不建议使用。为了增强DES的安全性,推出来3DES算法,基于2个64位密钥,进行3轮DES加密,可以大大增强加密算法的强度。

AES(Advanced Encryption Standard):美国国家标准技术研究所NIST在2001年发布的旨在取代DES的新一代数据加密标准。AES算法的数据分组长度是128位,密钥长度可以是128位、192位或256位。AES算法是目前推荐使用的加密算法,AES128在目前仍然被认为是安全的加密算法。

RC(Rivest Code):美国麻省理工学院的Ron Rivest教授发明的一种加密算法。注意,其他的加密算法都是基于数据分组进行加解密,而RC4算法是基于数据流,在加解密过程中没有数据分组的概念,面向字节进行加解密,密钥长度可变。

国密家族:SM1为对称加密算法,加密强度与AES相当,密钥长度和分组长度均为128位,该算法不公开,需要通过加密芯片的接口进行调用。SM4是无线局域网标准的分组数据算法,密钥长度和分组长度均为128位。SM7是一种分组密码算法,密钥长度和分组长度均为128位,SM7适用于非接触式IC卡。ZUC祖冲之算法是流密码算法,是运用于移动通信4G网络中的国际标准密码算法,该算法包括祖冲之算法(ZUC)、加密算法(128-EEA3)和完整性算法(128-EIA3)三个部分。

其他:

Blowfish:Bruce Schneier于1993年设计的旨在替换DES的数据加密算法,Schneier 声明 Blowfish 的使用没有任何限制,任何国家、任何人、任何时候都可以随意使用这个算法。Blowfish 算法的数据分组长度是64位,密钥长度是可以是32-448位。

TEA:TEA算法由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明。它是一种分组密码算法,其明文数据分组长度为64位,密钥长度为128位。TEA算法在腾讯的QQ应用中广泛使用。

分组加密算法

分组加密(Block Cipher)算法中的典型算法是AES算法。AES加密算法中,每个分组数据的长度为128位,密钥长度可以是128位、192位或256位,一共有四种加密模式,我们通常采用需要初始向量IV的CBC模式,初始向量的长度也是128位。

AES算法的加密流程涉及五个关键词,分别是:分组密码体制、Padding、密钥、初始向量IV和四种加密模式。

分组密码体制:分组密码体制就是指将明文切成一段一段的来加密,然后再把一段一段的密文拼起来形成最终密文的加密方式。AES算法中数据分组的长度要求必须是128位(16字节),如果最后一段不够16个字节了,就需要用Padding来把这段数据填满16个字节,然后分别对每段数据进行加密,最后再把每段加密数据拼起来形成最终的密文。

Padding:Padding就是用来把不满16个字节的分组数据填满16个字节用的,它有三种模式PKCS5、PKCS7和NOPADDING。解密端需要使用和加密端同样的Padding模式,才能准确的识别有效数据和填充数据。

初始向量IV:初始向量IV的作用是使加密更加安全可靠,我们使用AES加密时需要主动提供初始向量,而且只需要提供一个初始向量就够了,每段数据的加密向量都是后面一段加密的初始向量。初始向量IV的长度规定为128位,初始向量的来源为随机生成。

密钥:AES要求密钥的长度可以是128位、192位或者256位,位数越高,加密强度自然越大,但是加密的效率自然会低一些。目前普遍认为128位的密钥已经可以保证解密数据的安全。

加密模式:AES一共有四种加密模式,分别是ECB(电子密码本模式)、CBC(密码分组链接模式)、CFB、OFB。四种模式中,ECB相对不安全,分组加密之间没有关联,每个分组独立加密,不推荐使用;其它三种模式安全性更好,比较类似,我们一般推荐使用CBC模式。

基于CBC模式的AES加密过程框架如下图所示:

首先把明文按128位分组,切成一段一段的数据,如果数据的最后一段不够128位,会用Padding来填充。

加密开始的时候,第一个明文块会首先和初始向量IV做异或操作,然后再经过密钥加密。然后第一个密文块又会作为第二个明文块的加密向量IV来异或,依次类推下去,这样相同的明文块加密出的密文块就是不同的,明文的结构和密文的结构也将是不同的,因此更加安全。

最后,把所有的密文块拼接,就形成了加密后的密文。

流式加密算法

流式加密(Stream Cipher)算法和分组加密算法的设计思路完全不同,不需要对原始数据分组,而是通过对密钥的变换,生成变化的密钥流对每个字节进行加密。对分组加密算法来说,密钥是固定长度的数据,对流式加密算法来说,密钥是一个字节流。

流式加密算法使用一个“种子密钥”产生密钥流(理论上可以无限长度),通信双方共享这个“种子密钥”,按相同方式产生密钥流。一般密钥流的长度等于待加密数据的长度,也等于密文数据的长度。流密码类似于”一次一密”,不同的是”一次一密”使用的是真正的随机数流,而流密码使用的是伪随机数流。流密码的安全性很大程度取决于密钥的随机性。

流式加密算法的加解密过程如下图所示:

流式加密算法中典型的算法是RC4算法,比如SSL/TLS加密算法套件中就包含RC4算法。RC4算法的加密流程涉及几个关键词,分别是密钥流、状态向量S、临时向量T和密钥K。

密钥流:RC4算法的关键是根据明文和密钥生成相应的密钥流,密钥流的长度和明文的长度是对应的,也就是说明文的长度是500字节,那么密钥流也是500字节。当然,加密生成的密文也是500字节。密钥流生成算法非常重要,因为密钥流的随机性决定了该算法的安全性。

状态向量S:长度为256,S[0],S[1].....S[255]。每个单元都是一个字节,算法运行的任何时候,S都包括0-255的8比特数的排列组合,只不过值的位置发生了变换;S用来作为密钥流生成的种子。

临时向量T:长度也为256,每个单元也是一个字节。如果密钥的长度是256字节,就直接把密钥的值赋给T,否则,轮转地将密钥的每个字节赋给T。T也用来作为密钥流生成的种子。

密钥K:长度为1-256字节,注意密钥的长度与明文长度、密钥流的长度没有必然关系,通常密钥的长度为16字节(128比特)。

RC4算法的计算过程为:

应用场景

通信加密

对称加密算法的特点是计算量小、加密速度快、加密效率高。

由于算法效率较高,一般用于对效率有要求的实时数据加密通信,或者对大批量数据进行加密。比如在使用 IPSec VPN 和SSL/TLS进行加密通信时,对传输的数据就使用对称加密算法进行加密和解密。

存储加密

敏感数据在存储时必须进行加密,数据存储的形式可能是数据库、文件等。很多数据库系统为了方便使用,普遍自带加密方案,用于存储敏感数据。比如MySQL提供的数据加密方案中包括AES加解密方案AES_ENCRYPT() / AES_DECRYPT(),DES加解密方案DES_ENCRYPT() / DES_DECRYPT()等。微软的Windows操作系统则支持文件加密和硬盘加密方案。

对称加密算法应用方案

通信加密方案

等保2.0中,要求采用密码技术保证通信过程中数据的完整性和保密性;要求建立一条安全的信息传输路径,对网络中的安全设备或安全组件进行管理。这些要求都需要采用通信加密方案来保证和完成。

通信加密方案中,最典型的是IPSec VPN和SSL/TLS VPN。

IPSec VPN

IPSec VPN是一套协议集合,共同定义了一系列IP报文的安全传输封装标准。第一版IPsec协议于1998年发布,定义在RFC 2401-2409中。在2005年第二版标准文档发布,新的文档定义在RFC 4301和RFC 4309中。

IPSec使用认证头AH(Authentication Header)和封装安全载ESP(Encapsulating Security Payload)两种安全协议来传输和封装数据,提供认证或加密等安全服务。

AH对数据包和认证密钥进行Hash计算,接收方收到带有计算结果的数据包后,执行同样的Hash计算并与原计算结果比较,传输过程中对数据的任何更改将使计算结果无效,这样就提供了数据来源认证和数据完整性校验。AH协议的完整性验证范围为整个IP报文。

ESP是一种基于IP的传输层协议,其工作原理是在每一个数据包的标准IP报头后面添加一个ESP报文头,并在数据包后面追加一个ESP尾(ESP Tail和ESP Auth data)。与AH不同的是,ESP将数据中的有效载荷进行加密后再封装到数据包中,以保证数据的机密性。

ESP对数据封装的加密方式分为2种模式:传输模式和隧道模式。

传输模式中,不改变原始IP头信息,只针对传输层数据进行加密封装,报文格式如下:

隧道模式中,把原始的整个报文,包括IP地址,打包封装到ESP内,报文格式如下:

这2种模式中,ESP都采取对称加密的方式对数据进行加密封装,加密算法包括DES、3DES、AES等。华为的某款产品的IPSec VPN配置界面如下:

IPSec VPN是一套经过证明的安全的IP加密封装方案,建议在远距离通信时使用,比如电网的远程传输控制、石油天然气的远程传输控制,以及集团总部和各个分部、子公司之间的通讯等,目前大多数的防火墙或者安全路由器都已经实现了该功能。

SSL/TLS VPN

SSL/TLS VPN起源于SSL协议,该协议现在已经升级为TLS协议,不过很多人还是习惯性称为SSL。我们日常使用HTTPS协议技术基于SSL/TLS协议进行加密传输的。

SSL/TLS VPN与IPSec VPN相比,相对更简易更易于部署。任何安装浏览器的机器都可以使用SSL/TLS VPN,它不需要像传统IPSecVPN一样必须为每一台客户机安装客户端软件。

SSL/TLS中客户端和服务器端通过协商确定使用密码套件中的一致的加密算法,其中对称加密算法主要包括AES-128、AES-256等,DES和RC4算法已经被证明是不安全的,不建议使用。

比如Windows中支持的SSL/TLS密码套件中,优先使用AES-128作为对称加密算法(新版本可能优先使用AES-256),Windows的SSL密码套件顺序界面如下:

SSL/TLS VPN也是一套成熟的IP网络安全传输解决方案,在涉及安全通信的方案中,如果通信内容以TCP为主,则建议使用SSL/TLS 进行加密传输,比如不同系统之间的数据接口建议采用SSL Socket通信,Web服务应采用HTTPS通讯等。SSL/TLS是一套安全协议,既能保证数据的加密传输,也支持客户端、服务端的双向或单向身份认证。

单纯的应用对称加密算法对通信数据进行加密很简单,加密方案的主要难点是加密密钥的协商管理,因为对称加密算法的安全性完全依赖于密钥的安全性。这些成熟的通信加密方案都提供了很好的密钥协商管理机制。比如IPSec VPN使用IKE(Internet Key Exchange)协议进行密钥协商交换,保证加密过程中密钥的一致性、唯一性,从而保证通信加密的安全性。SSL/TLS协议分为两部分:Handshake Protocol和Record Protocol。其中握手协议(Handshake Protocol)用来协商密钥,协议的大部分内容就是通信双方如何利用它来安全的协商出一份密钥。

除了上述IPSec VPN、SSL/TLS VPN之外,SSH、SCP等也都是比较成熟的通信加密方案。如果是通过命令行对设备进行管理控制,应该采用SSH加密通道;如果通过Web对设备进行管理控制,应该采用HTTPS加密通道。

邮件加密方案

等保2.0中,要求通信前基于密码技术对通信的双方进行验证或认证,采用密码技术保证重要数据在传输过程中的完整性、保密性等。电子邮件是日常工作中必不可少的通信手段,如果等保2.0的系统中涉及到电子邮件,就需要考虑电子邮件加密方案,电子邮件加密方案中,最典型的加密方案是S/MIME和PGP。

S/MIME

S/MIME(Secure/Multipurpose Internet Mail Extensions)协议是专门用来保护E-Mail安全的一种应用层加密协议,定义在RFC1847中,提供了完整性校验、数据加密和身份认证的安全机制。大家可能知道,在配置SMTP时,可以选择SSL/TLS来进行安全加密,这只能保证通信链路的安全加密,属于前面所讲的通信加密方案。相反S/MIME是加密整个邮件的内容,涉及到邮件的发送、接收、存储、查看,摆脱了安全链路的限制,实现端到端的安全。

S/MIME协议采用数字证书技术给邮件做签名和加密,不仅仅是邮件加密,还能为邮件带上邮件发送者的真实身份信息,以便收件人能确认发件人的真实身份。S/MIME标准中,用户必须从受信任的证书颁发机构申请X.509 v3数字证书,由权威CA机构验证用户真实身份并签署公钥,确保用户公钥可信,收件人通过证书公钥验证发件人身份真实性。

由于非对称加密算法计算速度比较慢,所以 S/MIME 标准中一般采用先用对称加密算法对邮件进行加密,然后再用非对称加密算法对对称加密算法的密钥进行加密。常用的对称加密算法有:RC4、DES、3DES、AES等。

S/MIME具备非常广泛的行业支持,S/MIME协议已经内置于大多数电子邮件客户端软件中,如Outlook、iMail等。美国国家标准技术研究院NIST发布的“可信邮件”标准中,就明确地推荐联邦机构使用S/MIME加密信息来保护电子邮件安全。

S/MIME方案中,电子邮件客户端对将要发送的邮件信息进行加密发送的过程:

过程说明如下:

1.邮件消息被捕获,进入处理流程。

2.检索接收者的唯一标识。

3.使用接收者的唯一标识对邮件执行加密,生成加密邮件,确保只有预期的收件人才能解密查看邮件。

4.使用加密消息将替换原始消息。

5.发送加密后的邮件消息。

电子邮件客户端收到邮件信息解密展示的过程:

过程说明如下:

1.收到邮件消息。

2.检索加密的邮件。

3.检索接收者的唯一标识。

4.使用接收者的唯一标识对加密的消息执行解密,获得邮件明文信息。

5.未加密的邮件将返回给收件人。

PGP

PGP(Pretty Good Privacy)邮件加密方案和S/MIME非常相似,是一套用于信息加密、验证的应用程序,可用于加密电子邮件内容。PGP本身是商业应用程序,同类开源软件名为GnuPG(GPG),可以代替PGP软件。PGP及其同类产品均遵守OpenPGP数据加解密标准。

S/MIME和PGP都是用于通过互联网对消息进行身份验证和加密保护的协议,都使用公钥加密技术进行电子邮件签名和加密。而主要区别在于:

公钥可信度:S/MIME标准中,用户必须从受信任的证书颁发机构申请X.509v3数字证书,由权威CA机构验证用户真实身份并签署公钥,确保用户公钥可信,收件人通过证书公钥验证发件人身份真实性。而PGP不提供强制创建信任的策略,由发件人自己创建并签署自己的密钥对,并为其他通信用户签署公钥增加其密钥可信度,没有任何受信任的权威中心去验证核实身份信息,每个用户必须自己决定是否信任对方。

加密保护的范围:PGP的诞生是为了解决纯文本消息的安全问题,而S/MIME不仅保护文本消息,更旨在保护各种附件/数据文件。

兼容性和易用性:S/MIME具备更广泛的行业支持,已经内置于大多数电子邮件客户端软件中,PGP需要下载额外的插件才能运行。

所以,PGP具有开源的实现方案GPG,不需要申请权威CA机构的数字证书,是一个相对廉价的邮件加密方案,但是相应的兼容性、易用性、可信度要差一些。

存储加密方案

等保2.0中,要求采用密码技术保证重要数据在存储过程中的完整性、保密性。应用系统中,数据一般存储在数据库或文件中,根据加密的层次不同,相应的加密方案也分为数据库加密、文件加密和硬盘加密方案等。

数据库加密

当前主流的数据库都提供的自带的加密函数,实现对某些字段的存储加密。比如MySQL提供的数据加密方案中包括AES加解密方案AES_ENCRYPT() / AES_DECRYPT(),DES加解密方案DES_ENCRYPT() / DES_DECRYPT()等。微软的SQL Server几乎支持所有的主流对称加密算法。一般推荐使用AES-128或AES-256作为对称加密的数据加密算法。

如果不愿意使用数据库自带的加密方案,也可以自定义数据加密方案,加密后再存储。

数据库加密属于应用层加密方案,和实际业务绑定很紧,需要在业务层精准识别需要加密的敏感数据,针对性的进行加密、解密处理。

文件加密

文件加密即对需要保护的整个文件加密后存储在硬盘上,读取时先解密然后读取内容。

根据文件加密的粒度,文件加密可以分为针对特定文件加密、针对特定文件夹加密、针对特定文件类型加密等。这些概念都比较简单,不再详细说明。

根据文件加密的使用方式,文件加密可以分为透明加密和不透明加密。透明加密即使用者不感知,在存储和查看时感觉不到加解密的过程。不透明加密即使用者明确感知文件的加解密过程,需要输入密钥或确认加解密。

微软的Windows操作系统自带文件加密功能,Encrypting File System(EFS,加密文件系统)是Windows内置的一套基于公共密钥的加密机制,可以加密NTFS分区上的文件和文件夹,能够实时、透明地对磁盘上的数据进行加密。有权限的用户在使用时不感知加密和解密过程,和其他文件一样操作;没有权限的用户则无法打开加密文件。Windows的文件/文件夹加密设置界面如下:

加密后的文件夹显示为绿色,示例如下:

除了微软的文件加密方案,目前市场上也有很多厂商推出了自己的文件加密方案,对于需要进行文件加密的场景,可以考虑购买市场上的成熟产品。

硬盘加密

硬盘加密方案是最底层的数据加密方案,控制粒度最粗,也最有通用性。硬盘加密基于某个硬盘分区进行加密和解密,在硬盘驱动层进行加密解密,上层应用不感知,也属于透明加密方式。硬盘加密方案不需要识别哪些数据需要加密,哪些数据不需要加密,不需要应用层软件做任何改变,所以通用性很强。

典型的硬盘加密方案是微软的BitLocker硬盘加密方案。

BitLocker加密技术能够同时支持FAT和NTFS两种格式,可以加密电脑的整个系统分区,也可以加密可移动的便携存储设备,如U盘和移动硬盘等。BitLocker使用AES-128或AES-256算法进行加密,能保证加密数据的的安全性。

Windows的BitLocker加密界面如下:

BitLocker主要有3种工作模式:TPM模式、U盘模式和混合模式,主要区别就是密钥文件和相关验证文件存储的地方不同。

TPM模式下,密钥文件和验证引导文件完整性的相关文件存储在TPM芯片中,要求计算机中必须具备不低于1.2版TPM硬件芯片,要想知道电脑是否有TPM芯片,可以运行“devmgmt.msc”打开设备管理器,在设备管理器中查找“安全设备”的节点,看该节点下是否有“受信任的平台模块”这类的设备,并确定其版本。界面示例如下:

U盘模式下,密钥文件和验证引导文件完整性的相关文件存储在U盘中,需要计算机的BIOS支持在开机的时候访问USB设备,读取密钥和验证信息,解密硬盘开始使用。

混合模式下,密钥文件和验证引导文件完整性的相关文件分别存储在TPM芯片和U盘中,也需要开机时就插入U盘。

对称加密算法小结

对称加密算法是指加密密钥和解密密钥相同的加密算法,具有计算量小、加密速度快、加密效率高的特点,是业务数据加密的必选算法。目前密钥长度达到128位的加密算法才能保证安全性,一般推荐使用AES-128加密算法,国内某些特殊场景可以根据需要采用国密算法。

对称加密算法主要应用在数据加密通信和数据加密存储领域。数据加密通信领域的典型技术方案是IPSec VPN和SSL/TLS VPN,另外SSH、SCP等也都是安全的通信加密技术。数据存储领域的典型技术方案是数据库加密、文件加密和磁盘加密等,一般推荐使用系统自带的加密方案,对于特殊数据加密也可以自定义一套加密方案。

对称加密算法的加密方案中,加密算法其实并不是方案的重点。一般在安全加密方案中,加密算法都是可选套件。加密方案的重点是密钥的管理,包括密钥生成、使用、传输、存储和销毁等过程。密钥的管理过程通常要使用数字证书和非对称加密算法,我们将在下一篇重点讲非对称加密算法及其主流应用。

标签: #安全加密算法