tde4j是 Transparent Data Encryption for JDBC 首字母的缩写组合。tde4j项目旨在为使用JDBC访问数据库的所有应用程序提供一种透明的数据库加解密能力。tde4j核心在于应用程序免改造代码即可实现对数据库字段的加解密,无论是已开发的应用程序,还是新开发的应用程序都可以使用tde4j来实现数据库字段级加密。tde4j与数据库自身TDE的区别:TDE是在数据库侧由数据库厂商实现的一种透明数据加密能力,不同数据库厂商的TDE实现机理各不相同,数据库侧TDE加密通常不支持国密(如Oracle)且不能防DBA;tde4j是在应用程序侧基于JDBC API接口驱动层实现的数据库字段级透明加密,理论上只要适配了JDBC API接口规范的所有数据库都能被tde4j加密,且支持国密算法。tde4j目前仅适用于使用JDBC访问数据库的Java应用程序。另外,使用tde4j加密的字段会丧失计算功能,如排序和模糊查询将受到影响。
tde4j提供遵循JDBC API接口规范的驱动程序tde4j-driver;而字段加密所使用的算法和密钥则由独立的模块实现,tde4j默认自带了tde4j-simple模块实现了软国密算法和简单的密钥管理。
对于开发中的Java应用程序(以Maven为例),导入tde4j-driver和tde4j-simple模块依赖:
<dependencies>
<dependency>
<groupId>org.tde4j</groupId>
<artifactId>tde4j-driver</artifactId>
<version>0.1.0</version>
</dependency>
<dependency>
<groupId>org.tde4j</groupId>
<artifactId>tde4j-simple</artifactId>
<version>0.1.0</version>
</dependency>
</dependencies>提示:对于已开发完成并上线运行的应用程序,如何安装请参考
tde4j安装指南
导入tde4j-driver和tde4j-simple依赖后,依次完成如下配置:
修改应用程序JDBC驱动名称。以SpringBoot和MySQL为例,修改spring.datasource.driver-class-name的值为org.tde4j.Driver,示例如下:
spring.datasource.driver-class-name=org.tde4j.Driver提示:
tde4j当前支持以下数据库类型:
- MySQL
- Postgresql
- Oracle
- SQLServer
tde4j-simple模块的配置文件tde4jsimple.yaml提供了加密字段、加密算法和密钥的配置。创建/etc/tde4jsimple.yaml,示例如下(下载tde4j-simple配置模板):
# You can generate keys with openssl utility
# e.g. execute `openssl rand -hex 16` to generate 16 bytes key
# configure crypto algorithm and key management
keystore:
- id: key1
value: f8c268f2b88524733dce9be6df5e977a
algorithm: SM4/CBC/PKCS5Padding
- id: key2
value: d9af0f98012c847cd19b090cd8758b7f
algorithm: SM4/ECB/PKCS5Padding
# configure encrypted columns and keys
keyColumnMapping:
- key: key1
parameter:
iv: d9af0f98012c847cd19b090cd8758b7f
columns:
- mydb.category.cateName
- key: key2
columns:
- mydb.user.nickname
- mydb.user.email以上配置文件,
-
keystore:配置加密算法和密钥,每个密钥包含id,value,algorithm三个属性,其中value以hex表示。以SM4算法为例,产生16字节的随机密钥,可使用openssl rand -hex 16生成。 -
keyColumnMapping:配置加密密钥、加密参数、加密字段的映射关系,每条映射包含key、parameter(可选)、columns三元组。其中key为keystore中存在的任意一个密钥id;parameter为可选参数,如IV参数;columns是匹配字段名称的列表,字段名称以库.表.字段形式表示,支持wildcard表示方式,如mydb.*.name,即对数据库mydb中所有表的name字段进行加密。示例:使用密钥
key1对mydb.category.cateName字段加密,使用密钥key2对mydb.user.nickname、mydb.user.email字段加密。
提示:有关
tde4j-simple的详细配置,请参考tde4j-simple配置
按以上要求完成安装和配置后,重新运行应用程序即可正常使用。若运行正常,所有配置了需要加密的字段,在写入数据库时将自动加密,从数据库读取时将自动解密。
注意:字段在设置加密后,将丧失计算功能,如排序和模糊搜索功能。对于精确搜索,加密算法必须用
ECB模式或者采用固定IV的CBC模式。
本项目提供的tde4j-simple模块实现了简单的密钥管理和软国密加密,可满足简单的软国密字段加密需求。在安全性上,tde4j-simple以配置文件方式来管理密钥并以软模块实现数据加解密,安全性不高。建议政企客户可采用安全性更高且符合国密合规要求的tde4j第三方模块。
tde4j项目提供加密算法、密钥管理、字段管理的扩展API接口,开发者可基于tde4j-api提供的API接口开发第三方模块,以实现自定义的密码算法、密钥管理和加密字段管理。具体请参考tde4j开发者指南
tde4j开源项目由哈工大深圳-数据安全研究院发起,发起人为刘川意博士。tde4j项目作者为王爱兵,就职于奇安信。tde4j还在成长中,若您对tde4j项目感兴趣并愿意一起完善它,欢迎加入我们的开源社区。
您可以联系项目Owner,若您通过我们的审核便可成为tde4j的Maintainer成员之一。
以下是由其它开发商或开发者创建和维护的tde4j第三方模块列表。tde4j官方不提供第三方模块的技术支持,因此请联系每个模块的开发商或开发者以获取技术支持。
有关如何将你的模块加入到此列表中,请参考发布第三方模块
| 模块名称 | 安全级别 | 描述 | 开发商/开发者 | 仓库 |
|---|---|---|---|---|
| tde4j-quickcsp | 二级 | tde4j密码中间件模块 |
奇安信 |
tde4j开源项目使用Apache Software License, Version 2.0,有关协议请参考LICENSE