港口EDI加密与数据库透明加密:一条集装箱数据的完整加密链路
报错现场:很多港口TOS上线后发现,EDI报文在局域网里明文跑了一年,监控数据直接落盘明文——等要过等保检查时,才发现加密要从头补。
港口的信息化系统(TOS码头操作系统、EDI电子数据交换)里有三类数据最敏感:集装箱业务数据、EDI报文、危险品运输监控数据。这篇文章不聊政策,就从技术上讲清楚:一条集装箱数据从落库到跨多方流转,加密链路应该怎么搭,以及最容易踩的坑。
一、先分清:存储加密、传输加密、脱敏是三件事
很多方案把这三件事混在一起讲,结果就是"上了加密"但该漏的还在漏。区别如下:
| 数据形态 | 保护手段 | 解决什么问题 |
|---|---|---|
| 落盘数据 | 存储加密 | 拖库/拷走备份后无法读 |
| 传输数据 | 传输加密 | 中间节点截获后无法读 |
| 共享数据 | 数据脱敏 | 测试/三方场景不泄露真实值 |
关键点:危险品监控数据同时要过存储加密和脱敏两道——既要防拖库,又要保证共享给监管时不泄露危化品明细。
二、存储层加密:透明加密(TDE)怎么做
透明加密的思路是:应用层无感知,数据库层自动加解密。数据写盘前加密、读盘时解密,业务代码一行不用改。
-- 以 MySQL 为例:为集装箱表启用透明加密-- 表数据在磁盘上为密文,查询时自动解密,应用无感知ALTERTABLEcontainer_in ENCRYPTED='Y';ALTERTABLEvessel_stowage ENCRYPTED='Y';-- 验证是否已加密SELECTTABLE_NAME,CREATE_OPTIONSFROMINFORMATION_SCHEMA.TABLESWHERETABLE_SCHEMA='port_db'ANDTABLE_NAME='container_in';这段 SQL 说的是:加密是表级别的开关,开完之后业务代码零改动,性能损耗通常在 3% 左右(这是 TDE 类方案的主流水平,不同产品有差异)。
坑1:备份文件没加密。很多人只加密了在线表,结果备份、binlog、慢查询日志里还是明文。部署时要把备份链路一起纳入加密范围,否则等于白加密。
三、字段级加密:比表级加密更细的管控
表级加密粒度粗,遇到"不同角色看不同字段"的需求就不好办了。字段级加密可以做到同一列数据,不同账号读出不同结果。
// 字段级加密示意:EDI报文中的品名字段// 普通业务员拿到明文,三方对接方拿到脱敏值FieldCryptoenc=newFieldCrypto("SM4",keyId);Stringplain="锂电池";// 业务员视角Stringmasked=enc.encryptForView(plain,"THIRD_PARTY");// 三方视角:密文/脱敏字段级加密的代价是模糊查询失效——密文没法直接 LIKE。这是项目里最大的坑:
坑2:字段加密后 LIKE 查不了。加密前WHERE cargo_name LIKE '%锂%'能查,加密后直接全表扫描或查不到。解法一般有三种:
| 解法 | 思路 | 适用场景 |
|---|---|---|
| 加密后模糊索引 | 额外维护可查询索引 | 高频模糊查询 |
| 保留格式加密(FPE) | 密文保持明文格式可匹配 | 身份证号、箱号等定长字段 |
| 数据库加密网关 | 网关层做加解密,业务无感 | 存量系统免改造 |
其中数据库加密网关是港口这种存量系统最友好的方案:网关部署在应用与数据库之间,字段加解密和脱敏都在网关完成,应用和数据库都不用改,还能对运维侧做 SQL 审计。
四、传输加密:EDI报文跨多方流转
EDI 报文要在港口、船公司、海关、货主之间流转,传输层用 TLS/SM4 加密 + SM2 签名做防篡改:
# 报文签名(以 GMSSL 示意):# 发送方用私钥签名,接收方用公钥验签gmssl sm2sign-inedi_message.txt-outedi.sig-privkeyport_priv.pem gmssl sm2verify-inedi_message.txt-sigedi.sig-pubkeyport_pub.pem坑3:报文内容加密了,但传输通道是明文的。有人只做了应用层字段加密,却用明文 HTTP 传,等于钥匙锁好、门没锁。传输加密要用 HTTPS/TLS 或国密协议,且证书要定期轮换。
五、脱敏:危险品数据怎么安全地共享
危险品运输监控数据要给监管、测试、分析用,直接给原文不合适。静态脱敏(KTM 这类工具)在数据出环境前处理:
# 脱敏规则示意:危险品监控数据cargo_type:mask_keep(2)# 品类保留前2位,如"锂***"cargo_qty:fpe_sm4# 数量用FPE加密,脱敏后还能参与运算route:replace_random# 路线随机替换,不泄露真实路径脱敏后的数据格式保持原样(FPE 保留格式),下游系统不用改逻辑,这是它比简单打码强的地方。
六、踩坑清单汇总
| 坑 | 表现 | 对策 |
|---|---|---|
| 备份未加密 | 备份文件明文 | 备份链路纳入加密 |
| 字段加密后查不了 | LIKE 失效 | 模糊索引/FPE/加密网关 |
| 只加密内容不加密通道 | 传输明文 | HTTPS/国密协议 |
| 脱敏破坏格式 | 下游解析失败 | 用保留格式加密 |
| 密钥没人管 | 私存、丢失 | 统一密钥管理+轮换 |
七、总结
一条集装箱数据的安全链路,四层缺一不可:存储层透明加密、字段层精细管控、传输层加密签名、共享层脱敏。港口存量系统改造优先选数据库加密网关(应用免改、运维可审计),配套统一密钥管理做轮换,基本就能把明文裸奔的问题收干净。
这类存储加密 + 字段管控 + 脱敏 + 密钥管理的组合,安当的 TDE/DBG/KTM/KSP 都有对应落地能力,需要可参考官网方案。
文章作者:安当加密技术负责人
