c# - TripleDESCryptoServiceProvider FIPS 140-2 合规性

标签 c# encryption cryptography fips

我按以下方式使用 System.Security.Cryptography 的 TripleDESCryptoServiceProvider:

  TripleDESCryptoServiceProvider CreateCipher()
        {
            TripleDESCryptoServiceProvider cipher = new TripleDESCryptoServiceProvider();
            cipher.KeySize = 192;
            cipher.BlockSize = 64;
            cipher.Padding = PaddingMode.ISO10126;
            cipher.Mode = CipherMode.CBC;
            return cipher;
        }

我想知道这是否符合 FIPS 140-2 标准。我发现许多页面概述了合规性的不同方面,但在我看来,Microsoft 通过平台而不是类别(有道理)获得合规性证书。取而代之的是,我无法找到上述密码符合 FIPS 140-2 的任何肯定确认。到目前为止,我找到的最有用的链接:

简而言之,有人知道此类/加密方法属于什么证书编号吗?或者它是特定于平台的? (这就是我收集的内容。)

最佳答案

FIPS 140-2 认证适用于算法和模块。算法实现通过一系列测试用例获得认证。模块在满足所有 FIPS 要求时获得认证。其中一项要求是仅使用 FIPS 认证算法(以及以 FIPS 批准的方式使用的非 FIPS 认证算法,如 Diffie-Hellman key 交换)提供加密服务。

三重 DES 是一个 FIPS-certified algorithm ,因此可以获得FIPS证书。这是拼图的一部分。

下一部分是找出提供 Triple-DES 的模块,以及该模块是否经过 FIPS 认证。你已经linked到 Microsoft 列出其所有 FIPS 批准模块的页面。这就是您需要知道的一切。我认为从 Windows Vista 开始,一切最终都会通过 bcrypt.dll

当然也可以直接进入source并自己搜索模块。以 Windows Vista 中 Microsoft 的 bcrypt.dll 证书 #1001 为例。您可以看到该模块已获得其 Triple-DES 实现的算法证书(Cert. #656),因此您可以从此模块使用 Triple-DES。

那么您怎么知道您使用的是 FIPS 认证的模块呢? You enable FIPS mode in Windows .如果您不启用 FIPS 模式,则您不会在 FIPS 批准的操作模式下使用 FIPS 认证的算法。在 Windows 上,如果您尝试在 FIPS 模式下使用非 FIPS 算法,则会出现异常。

让我回到最后一点,找出算法是否被批准用于 FIPS 模式的一个好方法是打开 FIPS 模式并尝试一下!

顺便说一下,this Triple-DES certificate page列出所有批准的 Triple-DES 操作模式:

ECB = TDEA Electronic Codebook
TCBC = TDEA Cipher Block Chaining
TCBC-I = TDEA Cipher Block Chaining - Interleaved
TCFB = TDEA Cipher Feedback
TCFB-P = TDEA Cipher Feedback - Pipelined
TOFB = TDEA Output Feedback
TOFB-I = TDEA Output Feedback - Interleaved

以及以下键控选项。

KO 1 = Three-key Triple DES
KO 2 = Two-key Triple DES

关于c# - TripleDESCryptoServiceProvider FIPS 140-2 合规性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3867449/

相关文章:

c# - 在 C# 和 NodeJS 中生成相同的 PBKDF2 key

.net - 加密 web.config 毫无意义吗?

node.js - Nodejs AES-256-GCM 通过 webcrypto api 解密加密的客户端消息

android - Android 5 上的电子商务

c# - MessageBox 关闭另一个窗体

c# - 从 .net 的下拉列表中删除重复项

java - PHP 上的 DESede 长 key ,而不是 Java 中的

java - 在 Java 中加密和在 Postgres 中解密(使用 pgcrypto 模块)

c# - Xamarin 文件 Mime 类型

c# - 如何在 C# 中执行 C++ 逗号 + 三元运算符?