使用 Tink 来满足 FIPS 140-2 安全要求

Tink 本身 已通过 FIPS 140-2 验证。不过,它支持多种 FIPS 140-2 个经过批准的算法和底层实现方法可以利用 例如经过验证的加密模块, BoringSSLs BoringCrypto。Tink 包含一个 工作区,用于在 FIPS 模式下构建 BoringSSL。

请注意,工作区并不保证您在使用 BoringSSL 符合 FIPS 要求。我们强烈建议您阅读 BoringCrypto 的安全政策

支持的算法

Tink 中的以下算法已根据 FIPS 140-2(如需了解详情,请访问 FIPS 140-2 附录 A):

  • 基于身份验证的加密 <ph type="x-smartling-placeholder">
      </ph>
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC <ph type="x-smartling-placeholder">
      </ph>
    • HMAC-SHA256
    • AES-CMAC
  • 数字签名 <ph type="x-smartling-placeholder">
      </ph>
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

C++ 中的仅限 FIPS 模式

如果您需要使用通过 FIPS 140-2 批准的算法,并且 那么您可以在仅限 FIPS 模式下构建 Tink。这会限制 对经过批准的算法的使用情况,检查 Tink 是否使用了经过验证的 加密模块。

这会通过以下方式更改 Tink 的行为:

  • Register() 函数仅注册具有 FIPS 的算法 经过验证的实施方式。也就是说,您只能使用 使用经过验证的加密模块的算法的密钥集。
  • Tink 会检查 BoringSSL 是否已使用 BoringCrypto 模块构建。 当模块未正常运行时,对基元的调用会返回 INTERNAL 错误 可用。
  • subtle/ 中使用基元仅限于利用以下算法的算法: 一个经过验证的加密模块。

BoringCrypto

Tink 使用 BoringCrypto 提供对经过验证的加密模块的访问权限。当前 验证状态会对可用数据进行以下额外限制 算法:

  • AES-CMAC 尚未经过验证,无法使用
  • RSA-SSA-PKCS1 仅限 3072 位模数
  • RSA-SSA-PSS 限制为 3072 位模数

要将 BoringCrypto 模块与 Bazel 搭配使用,您可以在 C++ 中 boringssllocal_repository 定义 工作区

在编译时启用

如需在仅限 FIPS 模式下构建 Tink,请在编译时设置一个标志:

bazel build ... --//third_party/tink/cc/config:use_only_fips=True

如果您想在运行时检查 Tink 是否已在“仅限 FIPS”模式下构建 您可以添加 internal/fips_utils.h 标头,该标头提供常量 kUseOnlyFips

如果您不在“仅限 FIPS”模式下构建 Tink,它仍可利用 已验证某些算法的实现,但不限制 其他算法

在运行时启用

作为在仅限 FIPS 模式下构建 Tink 的替代方法,您可以 config/tink_fips.h 中的 crypto::tink::RestrictToFips(),用于设置标志 以便启用对 FIPS 基元的限制。

警告:如果您使用运行时选项,则 crypto::tink::RestrictToFips() 必须在处理任何密钥材料、注册密钥管理器或 其他 Tink 功能此外,您还必须确保 否则 Tink 不允许您 处理任何数据。