问题标签 [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.
smartcard - CryptoAPI NG 中的模拟 CryptSetProvParam(PP_SIGNATURE_PIN) 模拟是什么?
我正在为智能卡编写应用程序。我知道我的应用程序如何使用 CryptSetProvParam 方法获取 PIN,但我不知道在使用 CryptoAPI NG 时如何做同样的事情。我想阻止 PIN 请求 UI 窗口弹出。
visual-studio - 为 ARM 平台构建时要为 NTSTATUS 包含什么标头?
我在 VS2013 ARM Developer Prompt 下工作。我正在尝试使用 Microsoft 的下一代加密技术 (CNG),但我遇到了一些重要的问题。
我正在尝试编译一个简单的测试程序:
我尝试编译它:
当我尝试包含<ntstatus.h>
(从PJ Naughter 的博客中删除,因为我似乎无法从 Microsoft 找到任何有用的东西):
我不能让它成为,LONG
因为微软宏喜欢BCRYPT_SUCCESS
将它转换为NTSTATUS
代码。
我也可以NTSTATUS
在 VS2012 ARM Developer Prompt 下复制缺失的问题。
我应该包含什么头文件来获得NTSTATUS
ARM 下的声明?
我认为这可能是相关的,但我不确定:致命错误 LNK1104: cannot open file 'bcrypt.lib' when building for Surface RT tablet。我所知道的只是这些东西似乎没有经过微软的良好测试,因为尝试使用它时有太多该死的问题。
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 中使用什么随机数?
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获取密钥
我是否因为我的主密钥不正确而遗漏了什么。
c++ - 从 BCRYPT_SECRET_HANDLE 将共享密钥导出为 BYTE 数组
我正在使用加密下一代 API (CNG) 实现 ECDHE。我成功生成了公钥和私钥。对于预共享密钥,我使用BCryptSecretAgreement API,它返回预共享密钥秘密句柄(BCRYPT_SECRET_HANDLE)。
如何从 BCRYPT_SECRET_HANDLE 将预共享密钥导出为 BYTE 数组?
c# - 什么样的 RSASignaturePadding 与 PKCS#8 密钥一起使用?
我正在尝试使用带有 RSA 的 SHA-256 使用 PKCS#8 密钥对字符串进行签名。
该RSACng.SignData()
方法需要一个 RSASignaturePadding,其中的选项是Pkcs1
和Pss
。我找不到任何明确的信息来告诉我哪个可用于 PKCS#8。
密码学对我来说是全新的,所以如果我的方法有问题,请告诉我。
c# - 密钥不存在 - 使用自签名 ECDSA 证书
我在对 XML 消息进行数字签名时遇到问题。要求规定 ECDSA 证书将与特定曲线一起使用。这意味着该SignedXml.ComputeSignature(...)
方法提供的 RSA 和 DSA 功能如果不创建SignatureDescription
,AsymmetricSignatureFormatter
和AsymmetricSignatureDeformatter
.
话虽如此,并且没有发布大量代码,我创建了一个简单的函数,该函数应该获取证书并使用其公钥使用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.
”以及如何解决它。
c++ - C++ - 在没有加密大小的情况下解密
我已经寻找了一段时间,我还没有找到解决这个问题的方法。我正在使用 BCryptDecrypt 解密我的加密数据,但它需要 EncryptedData 的大小,你如何在不知道大小的情况下解密?
我知道 BCryptEncrypt 在成功加密数据后会为您提供长度,我知道的唯一方法是将其与加密的数据 / IV 一起发送。
例如:假设我要加密数据,然后通过带有 IV 的套接字将其发送到我的 WinSock 服务器,该服务器将解密数据。该服务器如何在不知道大小的情况下解密它?即使它知道密钥和 IV。
谢谢
c# - 将 ECDSA 公钥从 CngKey 导入到 BouncyCastle
我正在尝试从使用 CngKey 生成的一对密钥生成 x509 证书。我使用以下方法创建密钥:
我得到一个 BouncyCastle 私钥:
而且我没有问题,这样我就可以从键中看到正确的曲线参数。
但是,当我尝试通过以下方式获取公钥时:
我读到我必须从 CngKey 中删除前 8 个数字并添加未压缩的 const 值 0x04。当我执行“PublicKeyFactory.CreateKey(ecPublicKey)”时出现异常:
无论如何,如果我直接使用以下密钥执行此操作,我会得到相同的异常:
有人可以给我一些关于为什么公钥错误的想法吗?
太感谢了。
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 上对此进行了测试。
任何想法?
这是一个代码示例: