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++ 中 boringssl
的 local_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 不允许您
处理任何数据。