当前位置: 首页 > news >正文

数据库安全网关体系中,对Long、Date类型列加密的方法

数据库安全网关体系中,对Long、Date类型列加密的方法

引言:加密与业务兼容性的平衡

在数据库安全网关体系设计中,对Long、Date类型列的加密面临核心矛盾:安全性需求与业务查询需求的平衡。

传统加密方案会破坏数据类型特性,导致查询功能丧失。

本文将深度解析如何在保证安全性的前提下,通过特定加密技术维持数据格式不变,确保业务连续性。

核心认知:加密的类型转换必然性

技术现实

经过标准的对称加密算法(如 AES、SM4)加密后,输出都是一个二进制数据块。

在数据库中,这个二进制数据块通常用以下类型来存储: BLOB / BINARY / VARBINARY。这是最直接、最自然的存储方式。

加密库(如 Java 的 JCE)输出的字节数组可以直接存入这些类型的字段中。
优点: 存储效率高,没有不必要的转换。
缺点: 不可读,无法直接用于加密以外的操作。

接受两个事实

  • 1、加密列无法直接用于数据库查询(除非实现密文索引或者其他特殊算法)。
  • 2、如果不进行格式和范围保持的特有算法,加密就会破坏了原始数据的类型特性。
    • 明文 Long: 是一个8字节的整数
    • 明文 Date: 是一个日期格式或时间戳数字
    • 加密后: 都变成了一个二进制数据块

探讨:Long 值的加密

Long 是一个 64 位的整数。

加密方案: 确定性加密

例如 AES 在 ECB 模式或使用相同的 IV或者SM4等。相同的 Long 值总是产生相同的密文。这允许进行等值查询(WHERE user_id = ?),但会泄露数据的频率信息,安全性较低。

支持等值查询。

加密方案: 随机性加密

例如 AES 在 GCM 或 CBC 模式或者SM4等。每次加密相同的 Long 值都会产生不同的密文。这非常安全,但你无法基于密文进行查询(如 WHERE encrypted_salary > ?)。

不支持任何查询。

加密方案: 格式保留加密(FPE)

这是一种特殊的加密算法,其核心特点是加密后的密文与明文具有完全相同的格式和长度。

一个可用的算法实现: LongFPE加解密实现 claude-stars

实现该算法加密后的值,可以将密文保持在与明文相同的格式和长度。对于一个 Long 值,加密后仍然是一个 看起来像 Long 的值。

工作原理

它使用一个密钥,将一个有限集合中的值(如所有可能的Long值或Date值)映射到同一个集合中的另一个值,这个过程是可逆的。

优点

完美兼容现有数据库模式和查询,无需修改列类型。可以对加密后的数据进行范围查询和等值查询(虽然实现复杂)。

缺点

实现复杂,通常需要专门的FPE库(如 ff1 模式),性能可能不如 AES,且密码学界对其某些实现的审查不如 AES 那样广泛。

存储:Long值加密后,返回的 byte[] 可以直接存入 BLOB

探讨:Date 值的加密

Date 在 Java 中通常表示为自 1970-01-01 00:00:00 GMT 以来的毫秒数(一个 Long)。在数据库中,它可能是 DATE、DATETIME 或 TIMESTAMP 类型。

加密方案: 转换为 Epoch Millis 再加密

这是最通用的方法。将 Date 对象转换为其底层的长整型值(毫秒数),然后使用上面 Long 值的加密方法进行加密。

优点: 简单,统一了 Long 和 Date 的处理逻辑。

缺点: 失去了所有原生的日期查询能力。

加密方案: 转格式保留加密(FPE)

  • 如果数据库中的日期是 YYYY-MM-DD 格式,FPE 可以将其加密为另一个看起来像 YYYY-MM-DD 的字符串。
  • 原理: 加密后的输出在格式和长度上与明文相同。
    • Long值加密: 加密后仍然是一个看起来合法的 BIGINT 值。
    • Date值加密: 加密后仍然是一个格式为 YYYY-MM-DD 的字符串。
  • 优点: 可以执行等值查询(WHERE birth_date = ‘2023-10-27’)。
  • 缺点: 同样存在安全性和实现复杂性的问题。

加密方案: 转同态加密(理论可行,实际少用)

  • 一种允许在密文上进行计算的加密技术。理论上可以对加密的日期进行范围比较,但目前性能开销巨大,不适用于生产环境的高频查询。

存储: Date值加密后, byte[] 存入 BLOB

格式保留加密(FPE)— 不改变数据格式的核心方案

传统加密技术面临一个现实困境:加密后的数据变成无规则的二进制流,破坏了原有的数据格式和结构,导致数据库查询、业务逻辑和系统集成面临巨大挑战。

格式保留加密(Format-Preserving Encryption, FPE)应运而生,它巧妙地解决了这一矛盾,在提供强加密保护的同时,完美保持了数据的原有格式。

格式保留加密核心特点是加密后的密文与明文具有完全相同的格式、长度和字符集。对于数据库中的Long类型和Date类型,这意味着:

  • Long值加密:明文 100000 → 密文 834752(仍为合法BIGINT)
  • Date值加密:明文 2023-10-27 → 密文 7385-11-23(仍为合法DATE格式)

技术特性

FPE具备三大核心特性,使其在数据库加密领域独具优势:

  1. 数据长度不变性

加密前长度是N,加密后长度仍然是N。例如:13位电话号码加密后仍是13位数字

  1. 数据类型保持性

加密前是数字类型,加密后仍然是数字类型; 加密前是日期格式,加密后仍然是日期格式

  1. 加密过程可逆性

加密后的数据可以通过密钥解密还原原始数据; 支持等值查询和部分范围查询

工作原理
格式保留加密是一种特殊的加密算法,确保密文与明文具有完全相同的格式、长度和字符集。对于Long和Date类型,这意味着加密后仍保持原有的数值或日期外观。

它使用一个密钥,将一个有限集合中的值(如所有可能的Long值或Date值)映射到同一个集合中的另一个值,这个过程是可逆的。

有限域映射原理

FPE算法的精髓在于有限集合内的双射映射:

有限字符集 S = {c₁, c₂, …, cₙ}

整数域 Zₙ = {0, 1, 2, …, n-1}

加密变换 f: Zₙ → Zₙ (双射函数)

字符集映射 S → Zₙ → Zₙ → S

`
数学基础

  • 使用FF1、FF3-1等标准化算法
  • 基于Feistel网络结构,在有限域内进行可逆映射
  • 保持字符集不变(数字0-9、日期分隔符等)

例如对于敏感的数据信息,如电话号码(13位数字),FPE算法算法加依旧是13位数字,因此这种特性可以不用变更数据库中字段格式,有利于传播。

除了这些优点,还具有:

  • 数据长度不变。加密前长度是N,加密后长度仍然是N
  • 数据类型不变,加密前是数字类型,加密后仍然是数字类型。
  • 加密过程可逆,加密后的数据可以通过密钥解密还原原始数据。

注:此段引用自《大数据时代下的隐私保护(三)》

对Long、Date类型列加密的方法

http://www.dtcms.com/a/541485.html

相关文章:

  • 电子鼻设备市场报告:2025 年行业现状、技术趋势与投资前景全景解析
  • wordpress官方主题论坛嘉兴seo
  • 借助大语言模型实现高效测试迁移:Airbnb的大规模实践
  • 为什么选择做游戏网站哪个网站做网站好
  • 5.1.3 大数据方法论与实践指南-实时湖仓架构设计
  • 咸宁公司做网站深圳结构设计
  • 建网站都用什么字体广东佛山企业
  • 【牛客刷题-剑指Offer】BM23 二叉树的前序遍历:递归与迭代双解法
  • 【算法】day14 链表
  • 手机建设网站赚钱专业seo站长工具
  • 网站建设项目申请嵌入式工程师证书怎么考
  • [vscode] vscode的python解释器问题
  • 告别卡顿与等待,Rancher Vai 让集群操作“秒响应”
  • 【vscode】Eigen可视化配置
  • VSCode Copilot 魔改对比:智谱 GLM-4.6 与其他大模型接入流程差异解析
  • PyTorch2 Python深度学习 - TensorBoard可视化工具
  • wordpress首页分页函数网站专业优化
  • 雅奇小蘑菇做网站好不好用家居定制公司股票
  • 安卓进阶——UI控件
  • Android 四大组件——Activity
  • 照片书哪个网站做的好哪家网站开发培训好
  • wordpress小说网站模板下载地址光辉网络 石家庄网站建设
  • 网站建设可信赖环球资源网的网站特色
  • 西安网站开发高端网站开发中企动力是干嘛的
  • 浅谈什么是微前端
  • AtCoder Beginner Contest 429(ABCDEF)
  • 好用的GEO优化引擎服务商
  • 做网站那个平台网站制作网站建设案例
  • 搜索引擎主题网站模板网络架构有哪几层
  • Linux 驱动开发中,主设备号和次设备号不同的两个驱动能否正常工作