OpenSSL不同Provider中同一算法是否有不同实现及FIPS作用疑问
关于OpenSSL FIPS Provider与默认Provider算法实现的疑问
OpenSSL官方文档提到:
如果未指定属性查询,或多个实现匹配属性查询,则返回的特定算法实现是未定义的
这似乎暗示同一算法可能存在不同实现,但查看OpenSSL代码并对比FIPS Provider与默认Provider后发现,二者使用的是同一实现:
FIPS Provider代码(fipsprov.c)
static const OSSL_ALGORITHM fips_digests[] = { /* Our primary name:NiST name[:our older names] */ { PROV_NAMES_SHA1, FIPS_DEFAULT_PROPERTIES, ossl_sha1_functions }, { PROV_NAMES_SHA2_224, FIPS_DEFAULT_PROPERTIES, ossl_sha224_functions }, { PROV_NAMES_SHA2_256, FIPS_DEFAULT_PROPERTIES, ossl_sha256_functions }, };
默认Provider代码(defltprov.c)
static const OSSL_ALGORITHM deflt_digests[] = { /* Our primary name:NIST name[:our older names] */ { PROV_NAMES_SHA1, "provider=default", ossl_sha1_functions }, { PROV_NAMES_SHA2_224, "provider=default", ossl_sha224_functions }, { PROV_NAMES_SHA2_256, "provider=default", ossl_sha256_functions }, };
可见默认Provider与FIPS Provider使用相同的算法实现。现提出疑问:是否FIPS Provider仅限制使用FIPS批准的算法并执行FIPS测试,而与默认Provider共享算法实现?
是的,你的理解完全正确。FIPS Provider和默认Provider确实共享同一套核心算法实现代码,二者的核心区别体现在以下几点:
- 算法范围限制:FIPS Provider仅提供经过FIPS认证批准的算法,不会包含任何未通过认证的算法组件;默认Provider则包含更多非FIPS合规的算法,满足通用场景需求
- 合规性强制检查:FIPS Provider会强制启用FIPS合规性校验逻辑,比如启动时自动执行NIST规定的算法自检、严格限制密钥长度、禁用不安全的算法模式等,确保运行时完全符合FIPS 140系列标准要求
- 无约束的通用模式:默认Provider没有合规性强制约束,算法使用更加灵活,适合不需要FIPS认证的普通场景
简言之,二者共用底层算法实现代码,但FIPS Provider相当于给这些实现加上了一层FIPS合规的“管控层”,而默认Provider则是无限制的通用版本。
内容的提问来源于stack exchange,提问作者ben956
相关产品推荐
相关产品推荐

