导读:2 月 17 日,由中国开源软件推动联盟 PostgreSQL 分会 & 中科院软件所 & CSDN 联结举办的“中国 PostgreSQL 数据库生态大会”隆重召开。拓数派(OpenPie)作为冉冉升起的新一代云原生分布式数据库厂商,受邀加入本届大会。
本文为演讲的文字版摘要,次要内容包含:
- 通明加密的设计思路
- 通明加密模块的架构
- 三级密钥的实现
- 密钥治理的实现
分享嘉宾:PieCloudDB 资深技术专家 王淏舟
回访视频:https://www.bilibili.com/vide…
PPT 链接:https://openpie.com/download/…
一、数据安全的重要性
往年来,对于数据安全的政策和热点新闻层出不穷。无论是政府、企业或是各个厂商都对数据安全给予了很高的器重。过往的案例表明,如果呈现敏感数据的泄露或失落,将给企业和用户带来微小的损失。对于云上用户来说,云上数据的平安更是其最关注的需要之一。
作为一款存算拆散的云原生数据库产品,PieCloudDB 做到了三大区域的平安个性设计,全链路地保障用户数据安全,包含:
- 云原生平安
- 存储平安
- 计算平安
其中,针对 云原生平安,PieCloudDB 实现了传输层加密和缓存数据加密。作为一款云原生的 eMPP(弹性大规模并行计算)数据库,数据会在不同节点间进行传输,因而对于传输过程的数据加密至关重要。在执行用户查问时,PieCloudDB 会生成相应的缓存数据,用以减速查问后果的生成。缓存数据中会蕴含一部分的用户数据,对缓存数据的加密将更好的保障用户的数据安全。
针对存储平安,元数据作为数据库的「心脏」,一旦呈现失落或损坏,将导致数据库的不可用。为此,PieCloudDB 实现了对于元数据的长久化存储。PieCloudDB 的用户数据被多正本加密存储,以保障用户数据的彻底平安。
针对计算平安,PieCloudDB 采纳 eMPP 存算拆散架构,并反对 ACID,在集群繁多节点或更多节点生效的状况下,不会造成用户数据的失落或损坏。
本文将着重介绍 PieCloudDB 是如何通过通明加密模块实现云原生平安层的缓存数据加密,和存储平安层的用户数据加密存储的。
二、PieCloudDB 通明加密设计思路
PieCloudDB 打造的通明加密模块让数据从传统的明文存储转为加密存储,能够无效地避免数据被零碎运维人员间接读出,保障存储在数据文件中的数据安全。通明加密是指密钥生成、密钥治理和加解密过程由数据库管理系统主动实现,用户无感知。也就是说,通明加密的加密和解密过程对用户来说就是通明的,用户读写数据十分不便,数据写入主动加密,读取主动解密。此外,PieCloudDB 的通明加密模块不依赖于私有云 / 公有云 / 零碎自带的加密,真正实现了自主可控,同时满足数据安全审计和业务平安审计等用户合规需要。
PieCloudDB 通明加密模块的设计和实现过程中,研发团队充分考虑和总结了用户需要与技术挑战,让通明加密模块实现了以下几个个性:
- 用户侧,PieCloudDB 通明加密模块合乎审计流程,做到用户无感知,可能与用户业务拟合,无需对业务进行扭转。
- 研发侧,PieCloudDB 通明加密模块作为一个独立模块,与数据库存储模块联合,不影响内核迭代,不便后续扩大,无历史包袱。
三、PieCloudDB 通明加密的实现细节
PieCloudDB 通明加密模块采纳目前支流的多级密钥机制和无效的密钥管理机制防备了数据泄露危险,确保了用户的数据安全。每个租户数据齐全隔离,领有独立的密钥体系。
密钥治理的实现
在 PieCloudDB 中,主密钥是由用户自主生成、保留与管制的,保留于用户的信赖域中,PieCloudDB 的通明加密模块不会尝试拜访主密钥,确保主密钥的平安。
此外,PieCloudDB 的最小加密单位为数据页,每个数据页都由单个密钥进行加密。加密密钥反对轮换,能够按一段时间、或某些条件进行新的密钥的轮换,来最大化保障数据安全。同时,在轮换时,须要防止中断服务,无需停机。
PieCloudDB 采纳三级密钥机制,轮换下级密钥无需从新加解密数据,只需加解密密钥。同时,PieCloudDB 通明加密模块反对按页 / 按表轮换密钥,防止整个用户集群停机轮换密钥,最大限度的缩小对用户业务的影响。
密钥保留是通明加密模块中十分重要的局部,一旦密钥失落,数据将无奈解密,从而彻底无法访问。PieCloudDB 通明加密模块的所有次级密钥均进行了长久化存储,保障密钥的平安,底层页级密钥与数据共存,数据多正本备份,避免页级密钥的失落造成无法挽救的损失。此外,因为页级密钥可能会很大,页级密钥与数据的共存,也能防止在拜访密钥时频繁拜访长久化存储,缩小查问的提早。
PieCloudDB 多级密钥
在多级密钥的过程中,用户会在用户信赖域中创立主密钥,并保留在信赖域中。任何状况下,主密钥都会被放弃在用户信赖域中。当创立新的租户时,通明加密模块会创立新的租户密钥,将密钥送进信赖域中,用主密钥进行加密,并将加密后的密钥存储在 PieCloudDB 的长久化存储区域中。
当用户创立表时,PieCloudDB 的通明加密模块会主动生成表密钥,由租户密钥进行加密,并存储在 PieCloudDB 的长久化存储区域中。当有数据写入、须要创立一个新的数据页时,通明加密模块会创立一个新的页密钥,由表密钥进行加密,并将加密后的页密钥存储和数据一起存储在数据存储区域中。抉择存储到数据存储区域而非长久化存储区域中,是为了缩小长久化存储区域的拜访密度,缩小长久化存储区域的负载,升高用户查问提早,晋升性能。当对页进行删除时,会将对应的密钥一并删除。
通明加密的模块化实现
PieCloudDB 通明加密采纳模块化的实现。优化器、执行器将不会感知到通明加密模块的存在。在继续并行开发优化器、执行器等数据内核模块时,无需思考对通明加密模块的适配。当进行降级时,单方也不耦合,合乎云原生解耦的个性。
此外,通明加密模块完满反对 PieCloudDB 的存储引擎「简墨」,最大化利用存储性能,缩小加密导致的性能损失。依据实测数据,通明加密导致的性能损失对用户查问造成的性能影响微不足道,可忽略不计。
依据用户需要,PieCloudDB 实现了可插拔加密算法库,针对不同的硬件,可能反对不同的加密算法,充分利用硬件加速。PieCloudDB 提供了多种类型的高强度加密算法,包含 DES、AES、RC4 等。同时,针对国内用户,减少了对国密规范的反对,合乎审计流程和合规要求。此外,为了做到真正的自主可控,加密算法做到了可选。
PieCloudDB 通明加密模块与用户原有业务齐全拟合。在通明加密后,不会对原有用户的查问 \ 业务造成影响,用户无需对原有业务进行更改,做到开箱即用。外围组件也无需针对通明加密模块进行适配,例如应用 ETL 工具对数据进行导入时,数据会主动加密;导出接入 ETL 时,数据曾经主动实现解密。不会产生 ETL 读到加密的数据导致工作的失败的状况,ETL 也不会感知到通明加密模块的存在。
通明加密的实现
通明加密组件架构
首先,咱们来理解一下 PieCloudDB 通明加密组件的架构,当用户发动一个查问申请时,PieCloudDB 优化器会生成执行打算树,执行器将依据此打算树进行执行。当须要拜访数据时,执行器将拜访 PieCloudDB 存储引擎「简墨」提供的存储接口,通过存储接口拜访数据,并对数据进行查问、插入等操作。PieCloudDB 在存储接口与数据拜访两头增加了一层通明加密组件。组件位于存储接口的上面,从而做到了优化器和执行器对模块的无感知。
PieCloudDB 的通明加密组件包含三个模块:加密模块、密钥治理模块、和函数接口。 为了实现加密算法库的可插拔,加密模块独立于密钥治理模块,使 PieCloudDB 可能针对不同的通明加密算法库提供不同的接口,并保障外部的加密流程的统一性。这样的设计也能够缩小 bug 的产生、让整个开发流程更顺滑,使用户的行为也更加的对立。
通明加密组件架构
租户密钥的生成和读取
租户密钥的生成次要分为以下几个步骤。当租户创立申请,PieCloudDB 通明加密模块将应用强随机算法生成新的主密钥,存储在用户信赖域中。主密钥会对其进行加密,生成租户密钥。整个加密过程是在用户的信赖域中实现的。PieCloudDB 不会尝试拜访主密钥。用户信赖域返回加密的租户密钥后,会被存储在长久化存储区域中。
租户密钥的生成
当须要应用租户密钥时,PieCloudDB 通明加密模块会将加密后的密钥从长久化存储区域读出,送入用户信赖域中,应用主密钥将加密后的密钥进行解密,并将解密后的密钥存储在密钥存储区中。此外,PieCloudDB 通明加密模块还在这里设置了定时器,在通过肯定工夫后,密钥会被主动销毁,防止对解密密钥的持有,缩小密钥泄露危险。
租户密钥的读取
次级密钥的生成与读取
包含表密钥和页密钥在内的次级密钥的生成形式与租户密钥相似。当用户发动查问申请时,PieCloudDB 通明加密模块将应用强加密算法随机生成密钥,并用下级密钥进行加密,并存储到绝对应的存储区域。
次级密钥的生成
当须要进行次级密钥的读取时,与租户密钥的读取过程相似,PieCloudDB 通明加密模块会将数据从对应的存储区域将加密后的密钥读取出,用下级密钥进行解密。
页级密钥的解决会有所不同,解密后的页级密钥会被存储在内存,而非存储区域中,防止对存储区域造成累赘。定时器的存在,会让密钥在一段时间后彻底从内存中销毁。在此过程中,通明加密模块也会为密钥增加随机值,防止密钥从内存中被读取,缩小泄露危险。任何密钥都不会被存储在磁盘或缓冲区域,防止密钥因为某种不可控因素而泄露。
次级密钥的读取
通过通明加密等平安模块,PieCloudDB 实现了文件级别的安全性爱护,无效防止了数据的泄露,为用户打造了更加牢靠的数据安全堡垒。