共计 6337 个字符,预计需要花费 16 分钟才能阅读完成。
目录
openGauss 数据库 SQL 引擎
openGauss 数据库执行器技术
openGauss 存储技术
openGauss 事务机制
openGauss 数据库安全
Ⅰ.openGauss 平安机制概览
Ⅱ.openGauss 平安认证
Ⅲ.openGauss 角色管理机制
Ⅳ.openGauss 审计与追踪
Ⅴ.openGauss 数据安全技术
1. 数据加密算法
2. 数据脱敏技术
3. 通明加密技术
4. 全程加密技术
Ⅵ.openGauss 云平安技术
Ⅶ.openGauss 智能平安机制
五.openGauss 数据安全技术
数据库最重要的作用是存储数据和解决剖析数据。数据是整个数据库系统中最要害的资产。因而在爱护零碎不受侵害的根底上最为重要的工作就是爱护数据的平安。常见的数据安全技术包含数据加密、数据脱敏 (Data Masking)、通明加密(Transparent Data Encryption,TDE) 和全程加密 (Always Encryption) 技术。这里囊括了数据的动静流程和动态存储行为。
数据加密算法 01
数据加解密是避免数据隐衷泄露最为常见也最为无效的伎俩之一。数据在通过加密后以密文模式寄存在指定的目录下。加密的意义在于,通过一系列简单的迭代计算,将本来的明文转换为随机的没有任何具体含意的字符串,即密文。当所应用的加密算法足够平安时,攻击者在无限的计算资源下将很难依据密文获取到明文信息。
常见的加密算法可分为对称加密算法和非对称算法。其中最为驰名的非对称加密算法叫 RSA 算法,其密钥长度须达到 3072 才能够保障其安全性,即强平安。常见的对称加密算法为 AES 算法,如 AES128 和 AES256。相比于非对称加密算法,对称加密算法运算速度快,密文长度增长少,安全性容易证实,所须要的密钥长度短,但也存在密钥散发艰难,不能够用于数字签名等毛病。除了上述介绍的加密算法外,还有很多其余强平安算法,在此不一一介绍。上面将重点介绍 openGauss 中所反对的数据加密能力。
首先 openGauss 在内核定义了数据加解密的函数,并对外提供了数据加解密的接口,函数接口为:
gs_encrypt_aes128(text, initial_value);
其中,text 为须要加密的明文数据,initial_value 为生成密钥时须要的初始化向量。该函数能够被灵便的利用在 SQL 语法的各个中央。如通过应用 INSERT 语法插入数据或者查问数据时均能够绑定该函数对数据进行加密解决,具体如下:
SELECT * FROM gs_encrypt_aes128(tbl.col,‘1234’);
通过该查问,用户能够间接返回表 tbl 中的 col 列的密文信息。
与加密函数绝对应的是解密函数,其接口格局定义为:
gs_decrypt_aes128(cypertext, initial_value);
其中 cypertext 为加密之后的密文,initial_value 须要为与加密时所采纳的雷同的值才能够。否则应用该函数也无奈失去正确明文。
除了根本的数据加解密接口外,openGauss 还在多个个性性能里提供了数据加解密性能。其中第一个提供加解密性能的个性是数据导入导出;第二个提供加解密性能的个性是数据库备份复原。
数据脱敏技术 02
在很多利用场景下,用户须要通过领有表中某一列的拜访权来执行工作,然而又不能获取所做事务之外其余的权限。以快递人员举例,快递人员在递送包裹的时候须要晓得收件人的联系方式和姓氏,然而无需晓得对应的收件人的全称。在快递收件人信息局部,如果同时定义了收件人的姓名和电话,则裸露了收件人的隐衷信息,“有心之人”能够通过此信息进行虚伪信息结构或利用该隐衷信息进行财产欺诈。因而在很多状况下,所定义的敏感信息是不倡议对外展示的。
数据脱敏是解决此类问题的最无效办法之一,通过对敏感数据信息的局部信息或全量信息进行非凡解决能够无效覆盖敏感数据信息的实在局部,从而达到爱护数据隐衷信息的目标。数据脱敏依照脱敏出现的机会能够分为数据动静脱敏和数据动态脱敏,其中前者在数据运行时对数据进行非凡解决,后者在数据存储的时候进行非凡解决以避免攻击者通过提取数据文件来间接获取敏感信息。在本文中,将重点介绍数据动静脱敏技术。
数据动静脱敏的平安意义在于:
§ 用户在实际操作的时候无需实在数据只须要应用一个变动后的数据进行操作,可无效躲避数据信息的间接裸露。
§ 在不同的国家及地区的法律合规中,如 GDPR,约定不同的用户在治理数据的时候具备不同的拜访对象权限。
§ 对于表中的同一列数据信息,不同的用户应具备不同的用处。
数据动静脱敏性能在数据库内核实际上体现为数据处理函数。通过函数解决使得数据库中的数据在返回给理论查问用户时数据值产生变更,如用户所有的年龄信息值在返回给客户端时均显示为“0”;又或是字符串数据中的局部字节位变更为其余字符,如信用卡卡号“1234 5678 0910 1112”在返回给客户端时显示为“XXXX XXXX XXXX 1112”。
在 openGauss 零碎中,数据动静脱敏策略的语法定义如下所示:
CREATE MASKING_POLICY policy_name
((masking_clause)
[filter_clause]
[ENABLE|DISABLE]
);
其中具体的参数阐明如下:
§ masking_clause 语法定义如下:
MASKING_FUNCTION(PARAMETERS) ON (SCOPE(FQDN)) | (LABEL(resource_label_name)) [, …]*;
定义了针对不同数据汇合对象所采纳的脱敏函数。这里 LABEL 为数据库安全标签,数据库安全标签实际上定义了一组数据外部的表对象或表中的局部列,用于标记相应数据脱敏策略的范畴。
§ filter_clause 语法定义如下:
FILTER ON FILTER_TYPE(filter_value [, …]*) [, …]*;
定义了数据动静脱敏策略所反对的过滤条件。
一个理论的数据动静脱敏案例如下:
CREATE MASKING_POLICY my_masking_policy
creditcardmasking ON LABEL (mask_credcard),
maskall ON LABEL (mask_all)
FILTER ON IP(local), ROLES(dev);
其中,my_mask_polidy 为定义的数据动静脱敏策略名字;creditcardmasking 以及 maskall 为定义的 masking 处理函数,别离用于解决从属于 mask_credcard 对象汇合和 mask_all 对象汇合;mask_credcard 和 mask_all 代表不同的 Label 对象,这些 Label 对象名称将作为惟一标识记录在零碎表中。FILTER 示意以后动静脱敏策略所反对的连贯源,连贯源指的是理论数据库管理员应用何种用户,从何 IP 源地位发动,应用何种 APP 利用来拜访以后的数据库。通过应用 FILTER 能够无效定义零碎的拜访源信息,并躲避不应该拜访以后零碎的行为。
openGauss 在零碎外部预约义了七种数据脱敏策略。具体如表 1 所示:
表 1 数据脱敏策略
用户在理论应用时,还能够依据本人的需要自行定义数据脱敏策略。
通明加密技术 03
当数据在动态存储状态时,除了应用常见的动态脱敏进行数据隐衷爱护外。另外一种卓有成效的办法是通明加密(TDE)。事实上,动态脱敏在理论利用过程中是存在肯定的限度的。用户并不能对所有的数据类型都施加动态脱敏措施。
数据通明加密从加密策略登程,即便用户数据被导出,也能够无效解决数据信息泄露危险。数据通明加密的初衷是为了避免第三方人员绕过数据库认证机制,间接读取数据文件中的数据(数据文件中的数据尽管是二进制数据,然而依然是明文寄存)。所以对数据库的数据文件进行加密后,必须在数据库启动后,用户通过失常路径连贯数据库,才能够读取解密后的数据,达到数据保护的目标。
openGauss 施行通明加密策略,首先是须要确定一个数据库密钥(Database Encryption Key,DEK),该 DEK 由零碎密钥管理系统(Key Management Service,KMS)生成,数据库密钥密文(Encrypted Database Encryption Key,EDEK)以文件形式(gs_tde_keys.cipher)存储于数据库系统中。该 DEK 一次生成,一生应用,不可变更,不可轮换。在快照(即备份)复原时,须要应用此前的 DEK。
数据库节点在每次启动时,通过读取本地存储的密钥信息和密钥密文(EDEK),向 KMS 机器上的 URL 地址,传入密钥版本名(version-name),密钥名(name),IV 值和数据库加密密钥密文值,从而获取到解密后的数据库加密密钥 DEK。此密钥会缓存在节点的内存当中,当数据库须要加解密数据时从内存中拷贝密钥明文。
openGauss 反对两种格局的通明加密算法,通过 GUC 参数 transparent_encryption_algo 来进行管制,以后反对的算法包含 AES-CTR-128 和 SM4-CTR-128。加密模式选用 CTR(CounTeR,计数器模式)的起因是 CTR 流加密能够保障明文和密文长度相等。明文和密文长度相等是由数据块 (Block) 的大小决定的,因为内存和磁盘存储格局对 Block 的大小是有要求的(默认 8K)。特地的,在 openGauss 列存储中,列存储单元(Column Unit,CU)的最大大小是有限度的,所以也不能存在加密后长度超过最大限度。
一个残缺的通明加密流程如图 6 所示。即该个性的生命周期共分为 3 个阶段:装置阶段、启动阶段和应用阶段。
§ 装置阶段用户通过装置部署的配置,生成密钥记录文件和 GUC 参数。
§ 启动阶段根据密钥记录文件和 GUC 参数,获取到明文。
§ 应用阶段用户依据密钥算法标记和全局缓存明文,实现数据落盘的加密和数据读取的解密。
图 6 通明加密流程
全程加密技术 04
无论是以后通用数据脱敏计划,还是数据通明加密计划,其所解决的都是局部状态或局部流程下的数据隐衷平安。数据库攻击者可通过其余不同的攻打技术手段在数据以明文存在的阶段或处于内存中的时候抓取数据流信息,从而达到获取数据隐衷数据的目标。如果数据在整个生命周期过程中都可能处于加密的状态,且密钥把握在用户本人手中。则数据库用户可无效的避免数据隐衷平安泄露。
全程加密技术就是在这种场景下诞生的。其外围是使得数据从用户手中进入到数据库系统后始终处于加密状态,用户所关怀的数据分析过程也在密态状态下实现。在整个数据分析处理过程中,即便用户数据被攻击者窃取,因为密钥始终把握在客户本人手中,攻击者也无奈取得相干的信息。目前该技术处于研发阶段,对应产品尚未向客户公布。
openGauss 数据库分成三个阶段来实现残缺的全程加密性能。
§ 第一阶段是客户端全程加密能力,零碎在客户端提供数据加解密模块和密钥治理模块,在这种设计思路下数据在客户端实现加密后进入数据库,在实现解决剖析返回后果的时候在客户端实现解密性能,客户端全程加密的缺点在于只能反对等值类查问。
§ 在第二阶段,将在服务端实现基于密文场景的密文查问和密文检索能力,使得数据库具备更加弱小的解决能力。
§ 第三阶段 openGauss 将构建基于可信硬件的可信计算能力。在此咱们将基于鲲鹏芯片来构建数据库的可信计算能力。在可信硬件中,实现对数据的解密和计算。数据从可信硬件进入到真实世界后,将再加密成密文返回给客户。
一个残缺的 openGauss 数据库全程加密计划架构如图 7 所示。
图 7 openGauss 全程加密示意图
首先来介绍 openGauss 客户端全程加密计划,咱们也称之为客户端列加密计划(Client Column Encryption,CCE)。在该计划中,首先应该由用户来指定对哪一列数据进行加密,通过在指定的属性列前面加上关键字“encrypted”来进行标记,如下述语法所示:
CREATE TABLE test_encrypt(creditcard varchar(19) encrypted);
为了无效保障加密数据的安全性并反对数据的密态查问,在内核中咱们选用确定性 AES 算法,具体来说其加密算法为:
AEAD_AES_256_CBC_HMAC_SHA_256。整个计划中应用双层密钥计划,第一层根密钥用户向密钥管理中心获取,作为根密钥(master key)。第二层为数据加密密钥,也称之为工作密钥。工作密钥通过根密钥加密后寄存在服务器端。在加密列创立实现后,如果没有工作密钥,则零碎会独自为该列创立一个工作密钥。不同的属性列能够通过创立语法指定并共享列加密密钥。
为保障整个零碎的安全性,加密工作密钥的加密算法强度应高于应用工作密钥加密数据的强度。在 openGauss 数据库中,咱们应用 RSA-OAEP 算法来加密工作密钥,而根密钥仅寄存在客户端。密钥档次关系如图 8 所示。
图 8 全程加密计划密钥治理计划
因为采纳确定性加密算法,对于雷同的明文,所获取的密文也是雷同的。在这种机制下,客户端全程加密可无效的反对等值查问,咱们只须要将对应的查问条件中的参数依照对应属性列的加密算法进行加密,并传给服务端即可。一个残缺的客户端全程加密逻辑流程如图 9 所示。在流程图的客户端局部,咱们须要优先查看相干信息的有效性。
图 9 客户端加密计划查问流程图
客户端全程加密计划是非常简单易懂的,通过确定加密机制保障后果的正确性和完整性。但对于日益简单的查问工作来说,客户端全程加密计划是远远不够的。因为客户端全程加密仅仅能满足那些等值查问的查问工作,如等值条件查问、分组、连贯操作等等。对于那些更为简单的数据搜寻,比拟查问、范畴查问等等,则须要更为简单的密态查问算法或服务端可信硬件计划。
事实上,密文查问算法和检索算法在学术界始终都是热点的钻研方向,如 OPE(Order Preserve Encryption)/ORE(Order Reveal Encryption)算法、SSE(Symmetric Searchable Encryption)算法等。openGauss 将针对排序、范畴查问、含糊检索实现纯软件态的密文查问和密文检索。纯软计划的缺点在于因为在密文状态下进行运算,会导致系统整体性能变慢。为了反对密态计算,须要密文在计算实现后解密的后果与明文计算所取得的后果雷同。全同态加密是最卓有成效的算法,可无效解决数据在密文状态下的加法和乘法计算,而不裸露相干明文信息。然而全同态加密最大的问题在于其性能过于低效,以至于没有一款商业数据库反对该能力,哪怕是局部同态加密能力,如加法同态或者乘法同态。
在第三阶段,openGauss 将提供基于可信硬件的密态计算能力。其外围是数据以密文状态进入服务端可信硬件中并实现所须要的密文计算。可信硬件将零碎内核分为平安世界和非平安世界。数据计算实现后再以密文状态返回给非平安世界,并最终返回给客户端。目前通用的 Intel 芯片和 ARM 芯片均提供了相相似的性能。在 Intel 芯片中,该隔离区域被称之为 SGX(Software Guard Extensions)。SGX 是一个被物理隔离的区域,数据即便以明文模式寄存在该物理区域内,攻击者也无法访问。在 ARM 架构中,与其相似的性能被称之为 Trust Zone,基于 Trust Zone,人们能够构建可信操作系统(Trusted OS),而后能够开发绝对应的可信利用。基于可信计算环境,用户能够解密这些数据进行各类数据库查问操作。当数据来到这些环境后,数据则以密文状态存在,并返回给客户再进行解密。从而起到爱护数据隐衷的目标。
未完待续 ……