基于云存储的数据库安全备份系统
来源:信息网络安全杂志 更新时间:2014-03-19
 
文章针对采用第三方云存储服务进行数据库远程实时备份时对数据机密性、完整性和可用性的需求,设计了一种数据库安全备份系统,采用用户自主密钥管理方法,实现云备份数据库的记录级数据加密,并能保证每条备份记录的完整性。
    1.背景介绍
  随着移动宽带、云计算等信息技术的发展,电子商务、电子政务等信息化应用已深入社会生活的各个方面,业务系统持续可靠运行成为信息系统运维与建设的一个重要指标,保持业务数据的可用性是必须考虑的重要方面。业界对数据库和数据备份技术进行了广泛研究,已有大量软件厂商针对数据库的备份恢复需求开发了专门的软件产品。以oracle数据库为例,存在各种备份恢复软件,如Veritas公司的VeritasNetBackup、Legato公司的LegatoNetworkerModuleforOracle等。数据备份之后为实现容灾备份需要建设同城或异地的容灾备份中心,但许多小规模企业、初创公司或基层单位在信息化建设方面投入有限,对于短期内无法看见成效的灾难恢复系统基本没有预算,其信息系统不具备容灾备份能力。云计算技术具有资源虚拟化、弹性分配和多租户共享的特点,计算、存储、网络和软件等资源可以作为服务对第三方提供,因而还具有门槛低、接入方便、能够有效减少客户投入的特点。采用以云计算为支撑的云存储服务为第三方提供灾难备份成为数据容灾领域的一个热点。云存储服务需要将数据上传到云中,物理存储位置已脱离用户网络范围,用户无法再对数据的物理存储层进行全面控制和管理,使得云用户对数据的安全可控存在质疑。多项研究显示,云存储服务的安全性和云计算服务的安全性已成为制约云计算发展的关键要素之一,已经影响到用户是否采用这项技术。2008年AmazonS3云存储系统停机8小时,导致云服务失效并丢失部分客户的资料;2011年4月SONY公司系统因安全问题导致用户数据外漏。这些事件敲响了云计算与云存储环境的安全性问题的警钟,限制了云服务模式的推广和应用。以第三方提供灾备服务是一种新的运营模式,在处理灾备数据时产生了新的安全要求。
  云环境下数据存储于用户不完全可控的环境,采用数据加密是确保数据安全的有效方法。由于云存储服务商的不可信,数据加/解密过程不应在云端完成而应在用户端完成,这样即便云端数据不幸泄露或丢失,也难以被人破解。采用云存储服务实现数据库实时备份需要设计一套加密备份和恢复模块,实现数据在云端的加密存储,实现备份数据可用性的高效检测。
  2.总体技术方案
  用云存储的数据库实时备份系统的网络结构如图1所示,用户数据库数据通过网络备份到云存储服务中心,由云存储服务中心提供的数据库服务提供备份数据的管理。云存储服务提供弹性的用户存储空间、网络、计算等性能管理,利用云计算自身的分布式和多机冗余方式提供数据存储的可靠性。采用云备份提高了系统资源的使用效率,降低了容灾备份的建设和运维成本。
 图1 数据库云备份的网络结构 放大图片
图1 数据库云备份的网络结构
  为解决云存储带来的数据安全问题,本文设计了如图2所示的数据明文和密文环境加密方案。用户的源数据库为明文,云端备份数据库为密文,通过加密备份和恢复模块实现数据库记录的加密和解密,加解密密钥由该模块自动管理。
 图2 数据库明密文环境 放大图片
图2 数据库明密文环境
  数据库是典型的结构化数据,需结合数据特点,对加密算法、粒度以及模式进行合理选择。对数据库进行加密一般要求做到如下几个方面:
  1)加密有足够的强度,确保数据库加密后密文数据在尽量长的时间内不可破译;
  2)密文数据的存储空间与明文数据的存储空间相比不应明显增大;
  3)数据加解密性能要高,尤其是数据解密速度,应不能显著影响原有应用系统性能,降低用户体验;
  4)数据库系统对密文数据具有灵活的用户授权管理机制;
  5)密钥管理机制既能提供密钥生成、存储、分配和销毁的安全管理,又能保证用户能够方便使用。
  基于数据文件、基于表记录和基于列字段的加密方式是常见的数据库加密技术,各具特点。基于文件的数据库加密技术采用整个数据库文件作为加解密操作单元,用户就算只是需要查看某一条记录,他也必须将整个数据库文件解密,这与数据库权限分配管理相冲突,实际中使用较少。基于记录的数据库加密技术以数据库的记录作为加解密操作单元,可以对一个完整记录项进行加密和解密,但无法实现对一个记录中单个字段进行加解密。基于字段的数据库加密技术以字段作为加解密操作单元,具有最小的加密粒度,数据加密的灵活性和适应性非常好。数据库对每个字段可以采用不同密钥的加密方式,这样需要的密钥数为字段个数和记录个数的乘积,由于密钥量庞大,实际中难以实现有效管理。
  本文针对数据库实时备份的需求即源端和云端的数据在记录级必须保持实时同步,选择采用记录级数据加密。由于云存储方式下又适合采用数据库系统外部加密的方式,因此,本文采用系统外部加密的数据库记录级加密方案。
  2.1 加密备份和恢复模块总体结构
  加密备份和恢复模块分为以下几个部分:1)密钥管理部分。负责产生、存储和定期更新密钥。2)加解密部分。负责使用密钥对数据记录进行加密、完整性计算与验证。3)备份部分。对数据库的增量数据进行检测或按照全量备份的策略进行所需数据的备份操作,调用加解密部分进行加密。4)恢复部分。对云备份数据库按照恢复策略进行数据恢复,调用加解密部分进行解密。5)可用性检验部分。对云备份数据库进行随机数据记录检索,解密后与源端记录进行比较,检查备份数据的可用性。
  2.2 密钥管理功能
  源数据库管理员对数据库记录加密后实时备份到云端的备份加密数据库,每个源库使用一个数据加密密钥(k)和初始向量(IV)。k和IV定期进行更换,更换周期与备份策略同步。为了保证k和IV的安全,在智能密码钥匙USB-Key中生成和存储k和IV。USB-Key是一种经过国家密码管理机构安全认定的专用密码硬件,具备加密计算、随机数生成、密钥安全存储、数字签名等多种功能。每个USB-Key自主生成一对RSA密钥为主密钥,主密钥用于加密k和IV。利用USBKey的随机数生成功能,截取两端256位随机数为密钥k和初始向量IV。当前有效的k和IV存放于USB-Key的安全存储区内,其他历史k和IV经过RSA加密后以文件方式存放。
  2.3 加密功能
  加密算法是数据加密的核心,加密算法产生的密文应具备频率平衡、随机无重码的特征,攻击者难以通过对密文频率、重码等特征进行分析破译密文。加密算法通常分为对称算法和非对称算法两种,在对数据库数据进行加密时,其性能要求使得对称加密算法应用更为广泛。序列密码和分组密码是两类主要对称算法,序列密码在运算速度上较快,但密钥序列不能重复,密钥的生成和管理限制了它在实际中的使用。分组密码是在明文分组和密文分组上进行运算,常见的加密算法有DES、3DES和AES等。分组密码算法主要有4种模式,分别是电子密码本(ECB)、密码分组链接模式(CBC)、加密反馈(CFM)和输出反馈模式(OFM)。数据库中的记录具有相同结构,就有可能存在大量相同内容。例如,人口属性中有性别和籍贯,大量记录就会导致相同的性别、相同的籍贯。
  加密后的数据记录应该为不同密文,否则相同密文信息容易泄露明文信息,会有助于针对密钥的攻击,因此算法设计时应该避免记录内字段特性的信息隐藏。此外还要选择合适的加密数据封装方式和合适的数据加密方法。本方案以数据记录为加密单元,采用AES-OFM加密模式。
  完整性校验主要分为带认证和不带认证两种。云端数据库插入数据记录时需要对数据记录的完整性进行检验,本方案采用哈希算法实现。常见的哈希算法有MD5和SHA-1等。数据加密后的完整性需要通过检验字段来校验,并选择性能高的算法来实现,本方案采用MD5算法。加密数据记录的封装方式为记录主键不加密,后续数据全部加密。加密后的数据记录由3部分构成:记录主键、加密数据记录和完整性校验数据。加密算法采用AES-OFM,加密的范围是主键之外的数据记录的所有值。完整性校验采用MD5,完整性校验范围为主键和加密数据记录。
  2.4 备份和恢复功能
  数据备份有全量备份和增量两种方式。全量备份方式是某时刻下通过导出工具对全库进行备份快照,备份工具对数据库备份快照进行全库、表和记录级的扫描,加密并传输到云端,检验数据的完整性后增加到云端数据库中。
  增量备份过程与全量备份过程相似,只是增量备份的数据记录的处理触发是通过监视数据库的数据变动日志来实现。当数据库对记录进行增、删、改等操作时,每个操作的命令和参数被记录,并触发一次备份模块的增量备份操作,操作命令和参数通过加密处理转变为对云端备份数据库的一次远端操作,保持了源端和云端数据操作的一致性。
  数据的恢复过程是备份的逆过程即数据从云端经过解密后恢复到源端。
  2.5 可用性检验功能
  备份数据的可用性是指备份在云端的数据是否与源端数据保持一致,若保持一致,则认为备份数据是可用的。在数据备份过程中,数据加密后存储在云端,由于对云端服务的可靠性缺少相关评价标准,因而需要设计一种方案能够检验数据的有效性。对云端数据记录进行遍历,并逐一和源端数据对比检查的方案代价高昂,需要占用源端资源、网络资源和云端资源。可以通过定期随机抽取数据记录的方式代替全检,若出现不一致的数据记录,则缩短定期检查的时间间隔;若长期抽检记录都能保持一致,则可以扩大定期检查的时间间隔。一个具体的记录可以通过三元素(数据文件位置、表位置、记录位置)来明确。方案具体描述如下:
  1)确认抽检时间间隔为T,并记录累计相符记录数为n,当时间间隔达到T时,开始一次新的抽查。
  2)随机生成抽检记录的位置。假设云中备份库文件总数为sum1,指定库文件的数据表总数为sum2,指定表的记录总数为sum3。生成3个随机数r1,r2,r3,r1对sum1求模得f_no,r2对sum2求模得t_no,r3对sum3求模得r_no。得到的(f_no,t_no,r_no)标记了一条随机产生的抽检记录的位置。
  3)在云端获得(f_no,t_no,r_no)位置的记录值,返回记录主键和加密数据记录。通过解密模块解密得到记录主键和数据记录(key_cloud,rec_cloud)。
  4)在源端获得(f_no,t_no,r_no)位置的记录值(key,rec)。
  5)比对云端(key_cloud,rec_cloud)和源端(key,rec)。若两者一致,则n增加1,且判断n是否大过一个门限,若大过门限,则将T增大一倍。若两者不一致,则n清0,并且将T缩小一半。完成一次抽检。
  3.结束语
  中小企业存在对信息系统容灾备份的迫切需求,但苦于成本效益因素的影响,此需求无法得到广泛的满足。云存储的出现降低了容灾中心的成本,但安全性是首先需要解决的问题。本文提出的数据库记录级加密实时备份方案能够将数据库记录加密后存储到云端,并且由于密钥由源端用户自主管理,云端无法知晓和破解,确保了数据的安全性。同时对云端备份数据的可用性提供了一种低成本的随机数据可用性检验方法,为云端备份数据的可用性提供了保障。本文提出的是一种节约成本的云容灾备份实现方案,可广泛在中小企业中推广使用。