针对结构化数据(数据库、key-value等),加密主要有两种方式:
1、应用层字段加密,数据在入库前加密,直接向数据库中写入字段密文;
2、存储系统透明加密(静态加密),加密仅在存储系统内部自动完成,应用系统使用明文。
每种方式分别又有两种管理密钥的方式:
1、自管理密钥;
2、配合KMS(Key Management System,密钥管理系统)。
加密方式对比
加密方式 | 密钥管理方式 | 优缺点 |
字段加密 | KMS | 应用系统需要改进且改进难度较大; 最安全,可以防止DBA泄密 |
应用自管理 | 应用系统需要改进且改进难度较大; 可以防止DBA泄密,但入侵可能导致加密密钥泄露,安全性次之 | |
静态加密 | KMS | 应用系统不需要改进,存储系统改进后适合大规模推广; 用于结构化数据加密时,不能防止DBA泄密; 用于非结构化数据(文件等)加密时,配合权限控制,安全性较好 |
存储自管理 | 应用系统不需要改进,存储系统改进后一般自用,不适合大规模推广; 安全性中等,不能防止DBA泄密 |
一个安全的加密系统,至少需要二级的加密机制。推荐的最低加密方式就是至少使用两种密钥:
DEK(Data Encryption Key,数据加密密钥):即对数据进行加密的密钥;
KEK(Key Encryption Key,密钥加密密钥):即对DEK进行加密的密钥。
对于DEK,应具备:
1、每条记录均使用不同的DEK(随机生成);
2、DEK不能明文存储,需要使用KEK再次加密;
3、DEK在加密后建议随密文数据一起存储,可用于大数据场景。当只有少量的DEK且预计不会增长时,才考虑存储KMS(不推荐)。
对于KEK,应具备:
1、每个应用或每个用户在每个应用中应该使用不同的KEK;
2、KEK加密存储在KMS系统中,不随密文数据一起存储。