首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干货丨看金仓数据库如何支持透明加密!

数据库透明加密是指对库内数据的加密和解密,对数据库的访问程序是完全无感知的。特别是应用系统,不需要做任何修改,就可以直接操作加密对象。

金仓数据库支持基于透明加密,支持RC4, SM4等多种内置的加密算法,同时金仓数据库也支持其他加密设备,包括卫士通,渔翁等加密设备。

如何同时支持多种加密算法呢?金仓数据库开发了一套透明加密框架,只要加密处理算法封装成加密框架,金仓数据库就可以集成这种加密算法,应用于数据库服务器内部的透明加密。

透明加密框架介绍

加密框架由加密方式管理,加密设备管理和密钥管理三部分组成。加密方式包括透明加密,半透明加密和非透明加密组成;加密设备管理,包括软加密设备和硬加密设备;密钥管理包括主密钥管理,对象密钥管理等。

加密框架总览

钱包机制

密钥管理中包括主密钥的生成,更换,对象密钥的生成,对象密钥同步到备机等内容,其中钱包机制是最核心最重要的。数据库透明加密框架中引入了钱包概念,钱包是一个加密容器,用于存储所有密钥,包括主密钥文件和对象密钥文件。钱包的另一个优点是可以对密钥进行统一管理,与数据文件分开,因此,没有钱包,及时得到了数据文件,数据也是不能解密的,从而大大提高了数据的安全性。钱包需要经常备份,防止钱包因系统损坏或硬件设备导致的丢失钱包的风险。

对于钱包自身来说,支持设置钱包密码。在数据库使用或关闭钱包时需要先通过钱包密码验证,否则将不能使用钱包。创建加密对象时,钱包必须处于OPEN的状态;若钱包处于CLOSE的状态,则不能创建加密对象。修改钱包密码时,钱包必须处于CLOSE的状态。安全管理员可以通过SQL命令修改钱包密码。

开启/关闭钱包

密钥管理

目前密钥采用三级密钥结构,分别为主密钥和对象密钥和块级密钥。

主密钥是唯一的,安全管理员是可以通过SQL命令更新主密钥的。主密钥的作用用于加密对象密钥,主密钥自身加密存储在主密钥文件中。

更新主密钥

每个加密对象都有一个对象密钥,对象密钥之间是不重复的。块级密钥是根据对象密钥和块标识生成的,加密时使用的密钥就是块级密钥。对象密钥暂时不可更改并且由数据库系统维护。对象密钥是由主密钥加密后根据对象类型不同存储在不同的密钥文件中,密钥文件分为:表空间密钥文件,表密钥文件,表列密钥文件,用户密钥文件等。

数据加解密

数据加解密目前采用的是页面级的块加密和块解密。对于块加密,分组加密算法需要的待加密数据的长度应为算法数据对齐长度的整数倍,对于流加密算法的待加密数据的长度并没有对齐的要求。块加密是在数据页面需要同步到外存时进行加密操作;从外存读取数据页面到缓冲区时,首先进行解密操作。内存中的数据都是解密后的数据。

备份加密

数据库的备份文件通常是明文的或是二进制的形式存储,这样也是有数据泄露风险的,

对备份文件加密是一种常用的维护数据库安全的手段。

备份文件时需要用户指定备份的密钥,该密钥不会存储到备份文件中,这样就确保了密钥的安全,没有密钥,即使文件被盗取也没有办法获取到备份出来的真实数据。与此同时,数据库服务器会对备份文件的完整性进行校验,如果备份文件被人恶意破坏,那么还原数据的时候是会先检查备份文件的完整性,完整性校验不通过则无法还原数据到数据库中,防止了恶意篡改数据的操作。

加密框架

为了满足用户使用不同加密算法的需求并且高效的兼容各种加密硬件设备,KingbaseES增加了加密框架用以支持多种加密方式。

加密框架是以插件的形式加载到数据库,支持软加密及硬加密。软加密指通过已经封装好的算法库实现的加密方式,硬加密指的是需要通过硬件设备进行加密的方式。在加密框架下,用户可以通过自己编译算法库来实现使用自己指定的算法,具体实现时通过数据库提供的加密框架内部的API,在API内实现自己所想要的加解密算法及密钥生成管理等方法,编译成可调用的动态库并放到lib目录下。

框架整体分为三层:

框架流程

在服务器启动时,首先加载加密框架插件,完成加密设备初始化,包括打开加密设备,加载加密设备库函数,加载密钥等初始化操作,然后完成服务器启动等待处理加解密。

如何实现用户自己的加密方式:

首先根据数据库提供的API函数编译封装好用户自己的设备库,然后把设备库和设备库所调用的算法库一同放到数据库的LIB目录下。初始化时指定自己的加密方式,包括指定设备库名称,算法库名称,密钥最大长度以及算法对齐长度。对于算法对齐长度,分组加密算法对齐长度是不为0的偶数。对于流加密算法,算法对齐长度指定为0。

API函数主要包括五大类函数:设备管理类函数,密钥管理类函数,加解密算法类函数,数据管理类函数,错误处理类函数。设备管理类函数负责对加密设备的管理,打开加密设备、关闭加密设备等。密钥管理类函数负责密钥管理,包括生成密钥,加载密钥,销毁密钥等。加解密算法类函数负责对数据的加解密。数据管理类函数负责加密前对数据的处理操作。错误处理类函数负责对加解密运行中的错误处理。

初始化完成后,就可以使用自己指定的加密算法来使用透明加密的功能。

透明加密框架的优点

加密敏感数据,降低数据库文件失窃的风险。

采用钱包机制,统一密钥的管理,提高密钥的维护效率与安全。

加密备份数据,防止备份数据被窃取及修改。

支持加密框架,便于用户扩展加密算法,增加数据库的算法多样性,提高用户数据安全。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210319A0AST600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券