在安全领域存在对称密钥和会对称密钥两大分类:对称密钥,加密和解密采用相同的密钥,具有速度快,通常比非对称算法快,适合大规模数据加密。由于计算复杂度较低,使用较少的计算资源,效率更高。而非对称密钥:加密和解密采用不同的密钥,公钥加密和私钥解密,公钥可以公开,私钥由使用者保管,可以简化密钥分发,安全性高。可见,非对称密钥加密性能差,安全性高,对称密钥性能高,更加适合大数据量的数据加密,由于对称密钥加解密运算采用相同的密钥,存在如何保存数据密钥的问题。衍生出,用一个非对称的主密钥保护数据密钥。
主密钥对数据密钥加密,数据库保存密文的数据密钥,在需要的时候,利用非对称的主密钥对数据密钥的密文解密得到明文的数据密钥,之后进行加解密运算。这样,可以获取对称数据密钥对表数据加密,可以获取加密速度快,性能高的优势,采用非对主密钥保护对称数据密钥,非对称密钥的安全性高,可以增强用于加密表数据的数据密钥的安全性,进而可以兼顾安全性高和加密性能。
使用示例
1. 数据库用户通过SQL创建主密钥
CREATE CLIENT MASTER KEY master_key_demo WITH ( KEY_STORE = key_store_demo, KEY_PATH = "key_path_demo", ALGORITHM = SM2 ); |
2. 创建数据密钥
CREATE COLUMN ENCRYPTION KEY column_encryption_demo WITH( CLIENT_MASTER_KEY = master_key_demo, ALGORITHM = SM4, ENCRYPTED_VALUE = '0123456789' ); |
该语句指定用上面创建的master_key_demo主密钥来保护刚创建的数据密钥,数据库内核创建数据密钥对象。
3. 创建加密表时建立表和数据密钥的关联关系
CREATE TABLE IF NOT EXISTS tbl1 ( col INT ENCRYPTED WITH ( COLUMNS_ENCRYPTION_KEY = column_encryption_demo) ); |
此语句创建了tbl1,指定用上面创建的column_encryption_demo对col1列进行加密。
4. 向表中插入和查询数据,需要明文的数据密钥对数据做加解密运算
insert into tbl1 values(0), (1), (2), (3); select * from tbl1; |
其中insert语句,对数据加密后将数据存储在数据库中,select语句将数据库中的加密的数据进行解密,使得有访问权限的用户可以获取正确的数据。这里无论加密还是解密都需要明文的数据密钥才可以执行加解密运算。
这样采用主密钥保护数据密钥,便形成了一个两级密钥体系。至于密钥的管理,可以采取多种管理策略,可以采用密钥管理系统如KMS,数据文件等。同时可以在主密钥上再添加密钥保护,便可以形成一个更多级的密钥体系。