问题标签 [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 回答
610 浏览

smartcard - CryptoAPI NG 中的模拟 CryptSetProvParam(PP_SIGNATURE_PIN) 模拟是什么?

我正在为智能卡编写应用程序。我知道我的应用程序如何使用 CryptSetProvParam 方法获取 PIN,但我不知道在使用 CryptoAPI NG 时如何做同样的事情。我想阻止 PIN 请求 UI 窗口弹出。

0 投票
1 回答
7205 浏览

visual-studio - 为 ARM 平台构建时要为 NTSTATUS 包含什么标头?

我在 VS2013 ARM Developer Prompt 下工作。我正在尝试使用 Microsoft 的下一代加密技术 (CNG),但我遇到了一些重要的问题。

我正在尝试编译一个简单的测试程序:

我尝试编译它:

当我尝试包含<ntstatus.h>(从PJ Naughter 的博客中删除,因为我似乎无法从 Microsoft 找到任何有用的东西):

我不能让它成为,LONG因为微软宏喜欢BCRYPT_SUCCESS将它转换为NTSTATUS代码。

我也可以NTSTATUS在 VS2012 ARM Developer Prompt 下复制缺失的问题。

我应该包含什么头文件来获得NTSTATUSARM 下的声明?


认为这可能是相关的,但我不确定:致命错误 LNK1104: cannot open file 'bcrypt.lib' when building for Surface RT tablet。我所知道的只是这些东西似乎没有经过微软的良好测试,因为尝试使用它时有太多该死的问题。

0 投票
1 回答
202 浏览

windows-phone-8 - Windows Phone 8 和 Windows Store 8 的随机数?

我正在努力将几个安全库移植到 Windows Phone 8 和 Windows Store 8 平台。我需要一个提供随机数的函数。

Win32 有CryptGenRandom甚至RtlGenRandom. Windows Store 10 和通用 Windows 具有BCryptGenRandom. 但是,Windows Phone 8 和 Windows Store 8 存在漏洞,因为 CryptoAPI不可用,而 CNG在 Windows 10 和通用 Windows 上可用。MSDN 文档说BCryptGenRandom可用于“Windows Store”,但他们没有说它的 Windows Store 10 和 UWP(感谢 CW)。

这些库是非托管 C/C++。它们是用标准/可移植的 C 和 C++ 编写的。有时,他们必须使用特定于操作系统的 API,例如用于收集随机数的 API。它们不针对托管 API 进行编译,也不链接到托管库。

我们在 Windows Phone 8 和 Windows Store 8 中使用什么随机数?

0 投票
1 回答
256 浏览

ssl - DTLS 1.2 主密钥派生

我正在实施DTLS 1.2并使用密码TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

我正在使用以下步骤创建预主密钥和主密钥

1- 使用 API BCryptOpenAlgorithmProvider开放算法提供程序

2- 使用 API BCryptGenerateKeyPair生成密钥对

3- 比使用 API BCryptExportKey导出公钥

4- 比使用 API BCryptImportKeyPair导入对方公钥

5- 之后使用我的私钥和其他方公钥通过 API BCryptSecretAgreement生成秘密协议句柄

6- 最后使用 API BCryptDeriveKey获取密钥

我是否因为我的主密钥不正确而遗漏了什么。

0 投票
4 回答
1484 浏览

c++ - 从 BCRYPT_SECRET_HANDLE 将共享密钥导出为 BYTE 数组

我正在使用加密下一代 API (CNG) 实现 ECDHE。我成功生成了公钥和私钥。对于预共享密钥,我使用BCryptSecretAgreement API,它返回预共享密钥秘密句柄(BCRYPT_SECRET_HANDLE)。

如何从 BCRYPT_SECRET_HANDLE 将预共享密钥导出为 BYTE 数组?

0 投票
1 回答
2928 浏览

c# - 什么样的 RSASignaturePadding 与 PKCS#8 密钥一起使用?

我正在尝试使用带有 RSA 的 SHA-256 使用 PKCS#8 密钥对字符串进行签名。

RSACng.SignData()方法需要一个 RSASignaturePadding,其中的选项是Pkcs1Pss。我找不到任何明确的信息来告诉我哪个可用于 PKCS#8。

密码学对我来说是全新的,所以如果我的方法有问题,请告诉我。

0 投票
1 回答
932 浏览

c# - 密钥不存在 - 使用自签名 ECDSA 证书

我在对 XML 消息进行数字签名时遇到问题。要求规定 ECDSA 证书将与特定曲线一起使用。这意味着该SignedXml.ComputeSignature(...)方法提供的 RSA 和 DSA 功能如果不创建SignatureDescription,AsymmetricSignatureFormatterAsymmetricSignatureDeformatter.

话虽如此,并且没有发布大量代码,我创建了一个简单的函数,该函数应该获取证书并使用其公钥使用ECDsaCng类对数据进行签名,因为这就是我用来创建上述自定义实现的方法。

发生的情况是,即使使用我的自定义实现,我也会抛出异常“ System.Security.Cryptography.CryptographicException: Key does not exist.”。但是,如果我只是创建一个CngKey而不是导入它,它就可以工作。从我所见,这个异常被抛出了调用方法的代码internal static extern ErrorCode NCryptSignHash(...)之外ncrypt.dll

所以我的问题是为什么抛出异常“ System.Security.Cryptography.CryptographicException: Key does not exist.”以及如何解决它。

0 投票
1 回答
224 浏览

c++ - C++ - 在没有加密大小的情况下解密

我已经寻找了一段时间,我还没有找到解决这个问题的方法。我正在使用 BCryptDecrypt 解密我的加密数据,但它需要 EncryptedData 的大小,你如何在不知道大小的情况下解密?

我知道 BCryptEncrypt 在成功加密数据后会为您提供长度,我知道的唯一方法是将其与加密的数据 / IV 一起发送。

例如:假设我要加密数据,然后通过带有 IV 的套接字将其发送到我的 WinSock 服务器,该服务器将解密数据。该服务器如何在不知道大小的情况下解密它?即使它知道密钥和 IV。

谢谢

0 投票
0 回答
1392 浏览

c# - 将 ECDSA 公钥从 CngKey 导入到 BouncyCastle

我正在尝试从使用 CngKey 生成的一对密钥生成 x509 证书。我使用以下方法创建密钥:

我得到一个 BouncyCastle 私钥:

而且我没有问题,这样我就可以从键中看到正确的曲线参数。

但是,当我尝试通过以下方式获取公钥时:

我读到我必须从 CngKey 中删除前 8 个数字并添加未压缩的 const 值 0x04。当我执行“PublicKeyFactory.CreateKey(ecPublicKey)”时出现异常:

无论如何,如果我直接使用以下密钥执行此操作,我会得到相同的异常:

有人可以给我一些关于为什么公钥错误的想法吗?

太感谢了。

0 投票
4 回答
975 浏览

windows-server-2012-r2 - DPAPI NG - NCryptProtectSecret 返回 NTE_ENCRYPTION_FAILURE

我正在尝试使用 DPAPI-NG 加密数据,但在执行NCryptProtectSecret时失败,它返回:

0x80090034 (NTE_ENCRYPTION_FAILURE)

我用本地用户 SID创建了NCryptCreateProtectionDescriptor :

然后我使用这个描述符实例作为NCryptProtectSecret的输入,但它不起作用。

如果我使用以下保护描述符:

一切似乎都很好,但它不适用于用户或组的 SID。我已经在 Windows Server 2012R2 和 Windows Server 2016 上对此进行了测试。

任何想法?

这是一个代码示例: