yuan-er

导航

 

6 全密态数据库

全密态数据库是指对应用能够提供透明的加解密能力,在数据库系统中将数据的全生命周期以密文形式进行处理,同时密钥掌握在授权用户手中的数据库管理系统。当数据拥有者在客户端完成数据加密并发送给服务端后,即使攻击者借助系统脆弱点窃取用户数据时仍然无法获得有效、有价值的数据信息,从而起到保护数据隐私的能力。

由于整个业务数据流在数据处理过程中都是以密文形态存在,因此通过全密态数据库可以实现如下优势:

  • 数据安全:数据产生后即刻加密,保护数据在传输、处理、存储、同步和备份等过程中的全生命周期安全。
  • 管理可信:由授权用户掌握密钥,进行数据解密及验证,符合要求后,才可获得明文数据,而其他任何人员,包括操作系统、数据库的管理及运维人员都无法接触到明文数据。
  • 法律合规:随着数据安全法律法规相继发布,密评、等保、分类分级等要求出台,对数据全生命周期的保护有了更严格的要求。

全密态数据库的总体架构示意图如图1 密态数据库总体架构所示,其完整形态包括纯软方案和软硬结合两种方案。纯软密态查询在数据库服务侧全程存储密文,通过密码学算法在密文空间直接查询运算,保障数据隐私不泄露。而软硬融合全密态则通过机密计算,借助可信执行环境(安全硬件隔离或逻辑隔离明文计算空间),通过访问控制,实现计算及数据对外“不可见”,防止数据泄露。两种方案都需要客户端加解密驱动的密钥管理、语法解析及加解密计算。

图1 密态数据库总体架构

纯软密态等值查询

纯软密态查询在数据库服务侧全程存储密文,通过密码学算法在密文空间直接对密文进行查询运算,保障数据隐私不泄露。软件方案可以不依赖于硬件能力,也不需要在服务侧获取密钥对数据进行解密,直接依赖于可直接查询和操作密文的密码学算法。

全密态数据库支持使用AEAD_AES_256_CBC_HMAC_SHA_256、AEAD_AES_128_CBC_HMAC_SHA256、AES_256_GCM、AEAD_AES_256_CTR_HMAC_SHA256和国密算法SM4_SM3算法来加密数据库中的数据。同时,其还支持确定性加密和随机加密算法,其中,仅确定性加密支持密态等值查询。

如下,以AEAD_AES_256_CBC_HMAC_SHA_256算法为例,为给定的明文值计算密文值。

密钥派生

用户在创建CEK密钥时,ENCRYPTED_VALUE为用户指定的密钥口令,密钥口令长度范围为28 ~ 256个字符。28个字符派生出来的密钥安全强度满足AES128。若用户需要用AES256,密钥口令的长度需要39个字符。如果不指定,则会自动生成256bit的密钥。

CREATE COLUMN ENCRYPTION KEY column_encryption_key_name WITH VALUES ( CLIENT_MASTER_KEY = client_master_key_name, ALGORITHM = algorithm_type[, ENCRYPTED_VALUE = encrypted_value] );

在确定性加密中,加解密驱动使用HKDF派生算法,根据root_key和硬编码密钥材料,派生出iv_key、enc_key、mac_key三个密钥。

图2

产生初始化向量(iv)

对于“确定性加密”,使用HMAC-SHA-256算法,输入iv_key和明文数据,产生对应明文数据的初始化向量值。

对于“随机加密”,初始化向量值是由RAND_bytes随机生成的。

1.计算AES_256_CBC加密密文,使用PKCS7填充

aes_256_cbc_ciphertext = AES-CBC-256( enc_key , iv , plaintext ) with PKCS7 padding

2.使用HMAC-SHA-256计算mac值

mac = HMAC-SHA-256( mac_key , algorithm_version_byte + iv + aes_256_cbc_ciphertext )

3.串联密文值,得到存储到数据库的列加密值

ciphertext = version_byte + cek_oid + mac + algorithm_version_byte + iv + aes_256_cbc_ciphertext

密态加密算法的数据膨胀如{REF _d0e354 \r \h \* MERGEFORMAT |图2-2}所示,不同的加密算法的数据膨胀率不一致,AEAD_AES_256_CBC_HMAC_SHA256 = AEAD_AES_128_CBC_HMAC_SHA256 = SM4_SM3 > AES_256_GCM > AEAD_AES_256_CTR_HMAC_SHA256。

算法膨胀率与数据大小有关,数据越大膨胀率越低。若数据类型为int8,单个明文数据大小为8 bytes, AEAD_AES_256_CBC_HMAC_SHA256、AEAD_AES_128_CBC_HMAC_SHA256、SM4_SM3算法单个数据大小为74 bytes, AES_256_GCM算法单个数据大小为46 bytes,AEAD_AES_256_CTR_HMAC_SHA256算法单个数据大小为34 bytes。

推荐使用AEAD_AES_256_CTR_HMAC_SHA256 和 AES_256_GCM加密算法。

图3 加密算法膨胀对比图          

 

posted on 2025-03-17 16:26  数据库笔记  阅读(30)  评论(0)    收藏  举报