首页/安全/加密与证书速查/格式保留加密(FPE)
加密算法基础95 条

格式保留加密(FPE)

在加密同时保持数据格式与长度(如 16 位卡号、11 位手机号),NIST SP 800-38G 定义 FF1 与 FF3-1 方案;密文可直接落库,通常无需改表结构。

加密与证书速查安全更新于 2026-10-13

FPE 是什么

格式保留加密(FPE,Format-Preserving Encryption)在加密数据的同时保持数据的格式与长度:16 位银行卡号加密后仍是 16 位数字,手机号仍是 11 位数字。NIST SP 800-38G 定义了 FF1 与 FF3-1 两种方案,其中 FF3 因被发现缺陷而修订为 FF3-1,新系统应选择 FF1 或 FF3-1。因为密文形态与明文一致,落库时通常不需要修改表结构,依赖字段格式的下游程序也能照常工作。

基本信息

标准NIST SP 800-38G(FF1、FF3-1)
输入参数基数 radix(如 10 表示纯数字串)与 tweak
输出特性与明文等长、字符集相同
安全目标仅机密性,不提供完整性
版本提示FF3 已因缺陷修订为 FF3-1,新系统避免使用 FF3
密钥保护密钥必须与业务数据分开存储与授权

典型使用场景

  • 存量数据库敏感字段改造:字段长度与类型不变,应用与报表逻辑改动最小
  • 加密后的值仍需交给只接受固定格式的系统(对账、清算、老接口)
  • 测试与开发环境的数据去标识化:保持数据形态与分布,便于复现问题
  • 多租户场景下用 tweak 绑定租户或字段名,避免同一明文在不同上下文产生相同密文
  • 需要可逆性但无法维护大规模映射库时的折中方案

设计要点

设计要点
radix=10   # 仅数字字符参与运算,保持卡号形态
tweak      # 绑定业务上下文(字段名 + 租户 ID),不同上下文密文不同
key        # 单独保护,禁止与业务数据同库同权限
# FF1 常见约定:AES-256 密钥、8 字节 tweak、radix 与字符串长度按字段确定
# 同一字段、同一 tweak、同一密钥才能稳定还原,参数要与密文一起登记

与其他脱敏方案对比

方案可逆保留格式主要代价
FPE可逆是密钥保护要求高,小域存在枚举风险
令牌化可逆(查映射)可自定义需要高可用映射库与容量规划
掩码 / 哈希不可逆否无法还原,业务能力受限
FPE 的密文可以被反复查询与比对:小基数短字段(例如 6 位数字)明文空间只有百万级,暴力枚举即可还原。敏感场景必须叠加访问控制、操作审计与查询频率限制,必要时再用 HMAC 增加一层校验维度。

易错点

  • 把 FPE 密文当唯一标识直接对外暴露 → 密文可被跨系统关联比对,等于暴露数据轨迹
  • 忽略小域枚举风险 → 短数字字段明文空间过小,枚举即可还原,必须配合访问控制
  • 把完整性寄托在 FPE 上 → 它只保证机密性,密文被篡改后仍能解出错误明文
  • FPE 密钥与业务数据同库同权限 → 数据库被拖走时加密等于没做

数据来源与参考

  • NIST SP 800-38G(Format-Preserving Encryption)
  • NIST SP 800-38G Rev.1(FF3-1)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌