关于 FIPS 要求的一般问题

信息安全 密码学 加密 菲普斯
2021-08-17 01:24:27

我了解 FIPS 解决了加密操作。
我的问题是,它是否完全解决了这个问题?
例如,加载密钥库的应用程序能否使用非 FIPS 提供程序?

感谢任何输入或相关参考

2个回答

联邦信息处理标准 (FIPS)是一系列出版物,规定了范围广泛的标准,从智能卡 (PIV) 规范到算法规范、测试要求甚至地理地名。虽然在许多情况下,美国联邦机构都必须遵守这些标准,但它们对于商业用途通常不是强制性的。

根据您所谈论的标准以及您可能需要满足的合规级别,答案会有所不同。

例如,应用程序使用非 FIPS 提供程序加载密钥库,这是被禁止的还是我对此感到困惑?

我认为 FIPS 的定义可能会有所帮助:联邦信息处理标准这里的关键是Standard,很像 W3C 技术报告、ISO 标准等。您没有任何义务遵守这些标准。看看网络浏览器非常欢迎您做自己的事情。不符合这些标准不一定是错误的。

但是,这些标准总是有原因的。一方面,符合它们意味着您应该能够与其他符合标准的软件进行互操作。例如,以 ISO C 标准 C99 为例。我编写的任何 C99 代码都应该适用于任何符合 C99 的编译器。

在密码学和信息安全的情况下,我真的建议遵循这些标准。对于初学者来说,它们定义了算法或密钥存储的行为方式,这不仅意味着互操作性,而且通常还意味着合理的安全测试级别。换句话说,你知道你的环境(你刚刚实现的)不应该包含任何不可承受的弱点、库、操作系统和环境问题。

作为最终用户,您知道您的 FIPS 兼容密钥存储应该为您提供一些安全保证,而不是 Joe Bloggs 所设想的任何存储格式。您应该会发现您的软件具有一定程度的互操作性(例如,不同的标准,但许多程序可以读取 PKCS#11 密钥和 OpenPGP 密钥)。

所以它本身并不被禁止,只是非常强烈推荐。如果您正在选择软件,我更喜欢遵循 ​​FIPS、PKCS 或 OpenPGP 的软件。

这里要提到的另一点是,FIPS、RFC 等通常定义了可用部分(通过标准)。例如,Rijndael != AES。Rijndael 密码支持比 AES 更多的密钥长度和块大小,但将其简化为某个子集意味着它更易于实现,而这正是 AES (FIPS 197) 所做的。如果你说“实现 Rijndael”会发生什么,因为时间限制、纯粹的懒惰或其他原因,许多开发人员不会实现某些大小。否则,使用完全相同核心算法的软件将不兼容。

因此,作为最终答案,不,它不是被禁止的,但强烈推荐。大多数情况下,它是关于互操作性的,但也会有一定程度的保证(“我们不推荐破坏密码”(在当前的 FIPS 中,而不是已退役的密码))。