安全 unicode FPE 的最佳实践

从 Voltage SecureData Simple API 6.0 开始,您可以使用安全 Unicode 格式保留加密 (FPE) 格式来对 Unicode 字符串进行加密和解密。

使用安全 Unicode FPE 格式加密 Unicode 时,将先使用所有 Unicode 代码点的字母表对传递给 VoltageSecureProtect 函数的纯文本进行加密,然后使用 Base32K 编码对其进行编码,以生成 Unicode 标准化形式 C (NFC) 的加密文本。加密文本通常由 3 字节的中文和日文字符,因为这些字符占具有稳定 NFC 的字母表的比例很大。 VoltageSecureAccess 反转此过程。

与处理由单字节组成的 ASCII 字符串的常规 FPE 不同,安全 Unicode FPE 用于处理由长度可变的代码点组成的字符串。这种可变性引入了一个重要的问题:诸如 UNICODE_BASE32K 的安全 Unicode FPE 格式不保留长度。加密算法会使加密文本大于原始文本,如果未考虑此扩展,可能会导致加密文本被截断或以不正确的方式存储,从而导致无法解密。

此外,Unicode 允许以不同方式对语义相同的字符进行编码,这意味着语义相同的非规范纯文本在加密后可能具有不同的形式,从而会破坏引用完整性。为了防止这种情况,您应该始终在加密之前将您的纯文本字符串标准化为 NFC 形式。有关 Unicode 标准化的详细信息,请参阅 Unicode Consortium 的 标准化常见问题解答

加密文本必然会在以下方面大于纯文本:

  • 字符长度增加 16/15 倍(四舍五入)

  • 大小增加 4 倍(以字节为单位)

有关安全 Unicode FPE 的预定义格式列表,请参阅 Voltage SecureData Simple API 文档副本。

安全 unicode FPE 检查清单

使用安全 Unicode FPE 之前:

  • 在加密之前将纯文本标准化为 NFC 形式。

  • 对于固定长度的数据类型:从纯文本字符串中移除任何填充。

  • 要存储加密文本,请确保用于存储加密文本的列可以处理:

    • 比最长的纯文本字符串长 16/15 倍的字符串

    • 比最大的纯文本字符串大 4 倍(以字节为单位)的字符串