问题标签 [cng]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2770 浏览

asp.net - 密钥在指定状态下无效

我们正在使用 CNG 加密我们的一些敏感数据。作为标准,我们实现了 SQL 集成安全性,而不是使用具有 DB 权限的 SQL 用户。为了实现这一点,我们将应用程序池标识定义为相同的 Active Directory 标识,该标识被授予适​​当的 DB 权限。

现在,问题是当我的 AppPool 在本地系统下运行时,我可以从 CNG 密钥存储中创建和检索密钥,但是,当我将该身份更改为活动目录用户时,我开始收到“密钥在指定状态下无效”我正在尝试从 CNG 商店检索密钥。以下是我们的一些观察:

  • 要在用户级别实现 CNG,我们需要能够创建用户级别的 CNG 密钥而不是机器密钥。我们已经这样做了,并且用户级别的密钥已成功创建,我们可以在 UserProfile - C:\Users\ADusername\AppData\Roaming\Microsoft\Crypto\Keys 中看到它

    • 我们在池设置中设置了“LoadUserProfile=True”。
    • 我们还授予 AD 用户对 %windows%\Microsoft.Net\Framework\Asp.Net 临时文件的读取/修改权限

我们仍然继续收到此错误。任何帮助将不胜感激。

0 投票
3 回答
3023 浏览

rsa - 在 Windows 中使用 CryptoAPI Next Generation (CNG) 的 RSA 加密/解密中的错误?

我编写了一个代码来使用以前使用 CNG 生成的硬编码 RSA 密钥对来加密和解密数据。它是一个简单的程序,它简单地生成一些随机输入数据,用公钥对其进行加密,然后使用私钥对生成的加密缓冲区进行解密。我打印所有的输入、中间和输出阶段,以比较解密后的明文是否与原始输入明文相同,并重复整个加密解密 10 次。

但是,我观察到在某些情况下,加密和解密都很好,但在其他情况下,解密后的明文与输入的明文完全不匹配。这样的错误案例是完全随机和任意的,这些错误似乎没有任何模式。

这是 CNG 的 RSA 实现中的错误还是我做错了什么?

代码如下:


0 投票
1 回答
1183 浏览

windows - Windows CNG ECDH 秘密协议结构

我花了几天时间搜索ECDH秘密协议的结构,但没有成功。我在 MSDN 中发现NCryptSecretAgreement函数设置了一个指向 NCRYPT_SECRET_HANDLE 变量的指针,该变量接收代表秘密协议值的句柄。我根本不熟悉 WinAPI,所以除了阅读文档之外我什么也做不了。

我需要在基于 Windows 的桌面应用程序和 Web 应用程序之间交换密钥。我需要知道的是 CNG 的 KDF 究竟如何使用(在我的情况下是散列)秘密协议值。我使用 SHA-256 算法作为 KDF 并尝试对秘密协议的 X 和 Y 进行散列,但结果与 CNG 计算的一个不匹配。有任何想法吗?

谢谢你。

0 投票
3 回答
5339 浏览

c# - 如何在 .NET 中使用 CNG(或启用 AES-NI 的指令集)?

我目前使用 AES 在 c# 中执行大量的文本加密/解密。

使用纯软件系统可能需要相当长的时间来处理大量需要解密的数据集。我知道英特尔已经推出了他们的 AES-NI 指令集,而 AMD 也推出了类似的指令集。

我正在使用 .NET 4.0,我知道 windows CNG 框架使用这些指令集,但AesManaged在 .NET 世界中似乎并没有这样做。

有一个很棒的项目“ CLR Security ”,它创建了一个从 .NET 3.5 到 windows CNG 的网关,但是它已经一年没有维护了,我宁愿不(如果可能的话)跳上一个垂死的项目。

.NET 4 中有一个 CNGProvider 类,但似乎没有足够的文档来拼凑从中用于 AES 的有效解密。

有没有人对这个主题有经验,他们可以为我指出正确的方向,即如何使用预制类在纯 .NET 环境中实现 AES-NI,而无需直接从 c# 执行 ap/invoke?(如果有一个包装类这样做就好了,只要它得到维护)。

0 投票
1 回答
2007 浏览

.net - .Net,XmlDSigEx:使用来自 X509Certificate2 的公钥的 CngKey.import

我正在尝试验证已使用 ECDsa 算法签名的 XML 签名。我的工作基于 XmlDSigEx 库,我必须稍微修改一下以满足我的需要。我目前的问题与从证书中获取公钥并将其用作 CngKey 有关。我用了:

抛出“参数不正确”。我找不到任何信息,预计哪种格式的公钥会作为密钥传递。因此,我恳请有关此问题的帮助:如何将存储在 X509Certificate 中的公钥传递给 CngKey?

TIA,阿洛伊斯

PS:我考虑使用 BouncyCastle 来提取公钥。我试过BC的

将密钥传递给 CngKey;但是会发生相同的错误。

0 投票
1 回答
1017 浏览

random - 随机数和 Microsoft CNG

我需要使用 Microsoft CNG API 为加密生成安全随机数。

我应该使用此 API 生成所有数字,还是只从中获取另一个随机生成器的种子值?

任何帮助表示赞赏!谢谢。

0 投票
1 回答
941 浏览

encryption - Microsoft CNG BCryptEncrypt 返回密文 == 明文

我正在尝试围绕 CNG 的 AES 实现对称加密的 AES-OFB 包装器。

我遇到了一个我无法理解的问题...我创建了一个 AES 算法句柄 (BCRYPT_AES_ALGORITHM) 并导入了一个 AES 密钥。然后我尝试生成一个 16 字节的密钥流,用于对我的明文/密文进行异或运算。我第一次运行这种机制时,keyStreamPtr 从某个随机字节流变为另一个,但是,第三次这样做(第三组 16 字节的密钥流),我开始得到相同的输出并且它永远发生。

有没有人见过这样的事情?为什么 AES 会返回与作为输入的明文完全相同的密文?这又是针对 AES-OFB 实现的……也许我做错了什么?

0 投票
1 回答
3144 浏览

.net - Windows CNG 自定义密钥存储提供程序

如何使用自己的密钥 BLOB 格式等在 CNG 中注册自定义密钥存储提供程序?我真正想做的是提供一种在 .NET 中处理自定义 CNG 密钥 BLOB 格式的能力。我在 CNG 文档中读到它提供了一种添加第三方 KSP 的方法,但找不到任何示例或教程如何做到这一点。

0 投票
0 回答
257 浏览

windows - 如何在 VS2008 的编译时检测我是在 XP 还是 Windows 7 机器上构建

我有一个包含一些 CNG (Bcrypt.dll) 代码的应用程序。我希望能够在 Windows 7 上构建我的应用程序并编译和运行 bcrypt 功能,但是如果我在 Windows XP 机器上构建(在编译时)我想“跳过”它(我想打印输出“跳过”加密”或其他东西,如果我在 XP 下编译它)。

有没有办法在编译时知道我的机器是 Windows 7 还是 XP,以便编译适当的代码?我真的不想基于此更改我的构建目标/makefile/project 文件(我不想 /D 任何东西),我希望构建它的任何人都只是构建它,它将生成他们的计算机支持的任何东西......

这可能吗?

谢谢!

0 投票
2 回答
2780 浏览

windows - winapi 的 bcrypt.h 是否真的支持 bcrypt 散列?

这听起来像是一个奇怪的问题,而且我实际上不得不问这个问题感觉有点奇怪,但是在花了几个小时查看 MSDN 文档以了解bcrypt在 Vista 中添加的例程之后,我几乎得出了结论:没有实际的 bcrypt 支持!

根据维基百科:

bcrypt 是一种用于密码的自适应加密散列函数……基于 Blowfish 密码……除了加入盐以防止彩虹表攻击之外,bcrypt 还是一种自适应散列:随着时间的推移,它可以变得越来越慢,因此它仍然具有抵抗力针对哈希和盐的特定蛮力搜索攻击。

但是,从 MSDN 上的文档来看,“bcrypt”库显然实际上是用于加密和散列的通用接口。您必须通过BCryptOpenAlgorithmProvider 函数获取“算法提供程序”的句柄,该函数有多种内置算法可供选择。但是“河豚”这个词并没有出现在列表中的任何地方。

所以我错过了什么吗?我读错了吗?还是 Windows 的“bcrypt”库实际上根本不支持 bcrypt