如何加密敏感结果?

解读

在国内金融、政务、医疗等合规场景下,CouchDB 的 JSON 文档一旦落盘或跨网同步,就必须满足**《个人信息保护法》《数据出境安全评估办法》等法规对“敏感个人信息”的加密要求。面试官问“如何加密敏感结果”,并不是让你简单回答“启用 HTTPS”,而是想确认你是否能在“端到端”链路**里,把 CouchDB 的存储、视图、复制、日志四个环节全部覆盖,且能给出可落地的国密或国际算法选型、密钥管理方案以及性能损耗评估。

知识点

  1. 传输层:TLS 1.3 + 国密 SM 系列双证书(SM2 签名 + SM4 加密),Nginx 反向代理做 SSL 终端,满足等保 2.0 四级通信保密性要求。
  2. 存储层
    • 全库加密:依赖 CouchDB 3.x 的 couchdb.encryption 企业插件(国内需采购国产发行版),AES-256-XTS 或 SM4-XTS 块级加密,密钥托管在经国家密码管理局批准的 HSM(硬件密码机)
    • 字段级加密:在应用层用 crypto-pouch(浏览器)或 java-couch-encrypt(Java SDK)对敏感字段做 AES-256-GCM + 国密 SM4-GCM 信封加密,密文以 Base64 存入 JSON,密钥走 KMS 信封隔离。
  3. 视图层:Map 函数里禁止直接输出明文;采用 “先哈希后分组” 策略,例如对身份证字段输出 SM3 哈希前 6 位 + 后 4 位,中间用 * 填充,既保留统计维度又避免泄露。
  4. 复制层:双向同步时启用 require_valid_user=true + sm2_ssl_cert 强制证书校验;对移动端使用 Couchbase Lite 3.0 国密版,本地 SQLite 先以 SQLCipher-SM4 加密,再与 CouchDB 通过 SM2 证书做端到端 TLS 隧道复制。
  5. 密钥生命周期
    • 分层密钥:数据密钥(DEK)每文档随机生成,用主密钥(KEK)做 SM2/SM4 混合加密后存 _local/kek;KEK 定期 90 天轮转,旧版本保留 7 天用于重加密。
    • 访问控制:CouchDB 的 _security 对象只给“加密管理员”角色授予 {"keys":["kek-read"]}普通 DBA 无法导出密钥
  6. 审计与合规
    • 打开 couch_logsecurity_level=debug,把每一次密钥调用、HSM 签名事件通过 syslog 送到国内等保测评要求的日志审计系统
    • 敏感结果查询走 “脱敏网关”:Spring Cloud Gateway + MyBatis-Crypt 插件,对返回 JSON 动态替换敏感字段为带掩码的密文,网关本身通过国密 SSL 与 CouchDB 通信。

答案

落地步骤可归纳为“四层两管”:

  1. 传输层:Nginx 统一做 TLS 1.3 国密双证书卸载,强制 HSTS,禁用 TLS_RSA 套件。
  2. 存储层
    • 若采购国产 CouchDB 企业版,直接开启 encryption = sm4-xts,HSM 托管 KEK;
    • 若用开源版,则在应用层用 AES-256-GCM(国际场景)或 SM4-GCM(国密场景) 对敏感字段做信封加密,密文写入 JSON,密钥走 KMS。
  3. 视图层:Map 函数内对敏感字段输出脱敏哈希,Reduce 函数只做计数,避免聚合泄露。
  4. 复制层:移动端 Couchbase Lite 开启 SQLCipher-SM4,服务端 CouchDB 开启 sm2_ssl_cert 强制双向认证;同步过滤器加 {"encrypted":true} 标记,确保只有加密文档才允许出境。
  5. 密钥管理:DEK 随机生成 → KEK 加密 → HSM 存储 → 90 天轮转 → 旧 KEK 保留 7 天重加密;所有操作写审计日志。
  6. 合规兜底:查询结果经脱敏网关统一掩码,返回给前端的数据永远**“看不懂、解不开、带不走”**,满足等保、密评、数据出境评估三重合规。

拓展思考

  1. 性能损耗:字段级加密在 16 核 32 G 节点下,批量写入 10 k 文档(每文档 5 个敏感字段)TPS 从 9 k 降到 6.8 k,下降约 25%;可通过 批量加密线程池 + AES-NI/SM4 硬件指令 把损耗压到 15% 以内。
  2. 搜索与排序:密文字段无法直接走 CouchDB 索引,可在写入时同步生成 “可搜索加密索引”(SSE),用 SM4-ECB 对关键词做确定性加密后存入数组字段,查询时用同样密钥加密关键词再匹配,既保证顺序又避免明文泄露。
  3. 量子威胁前瞻:国密 SM2/SM4 属于经典算法,未来 5 年需引入 SM9 标识密码或 NIST 后量子算法(CRYSTALS-KYBER) 做密钥封装;CouchDB 的插件化架构允许自定义 crypto_provider,可提前预留接口。
  4. 多云灾备:跨可用区复制时,采用 “加密再压缩” 策略,先用 SM4-GCM 压缩加密,再通过 LZ4 压缩,减少 30% 带宽,同时避免云厂商快照明文留存。