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

certificate - 从 .NET 4.6 访问 CNG 证书的私钥 - 未找到 GetCngPrivateKey

我需要从 .NET 4.6 访问 CNG 证书的私钥。

在文档中,我找到了扩展方法GetCngPrivateKey,但此方法在 Visual Studio 2015 中对我不可用。

也许此方法已从 .NET 框架的最新版本中删除。

任何建议现在访问 CNG 证书的私钥的正确方法是什么。

0 投票
3 回答
690 浏览

cryptography - CNG 提供商,如何将 EC 密钥转换为 BCRYPT_ECCKEY_BLOB 结构?

我正在写一个 CNG 提供程序。具体来说,坚持实现NCryptExportKeyAPI。我正在尝试从硬件密钥管理器转换 EC 密钥(用于签名,ECDSA256)。硬件密钥管理器提供 ASN 格式的密钥。我参考了 MSDN 文档,提到公钥 X 和 Y 值(BCRYPT_ECCKEY_BLOB 结构)是大端格式。但是在关于 stackoverflow 的另一篇文章(从其他地方导入公钥到 CngKey?)中,Magic 值似乎也是大端格式。

我的问题是:

  1. 'magic' 和 'length' 值是否需要采用大端格式?

  2. 如何将大数 X 转换为 big-endian 格式?转换每个字节?

0 投票
1 回答
716 浏览

.net - .NET - 将 RSACryptoServiceProvider 移植到 CNG 以对数据进行签名

我正在尝试将用 C# 编写的 RSA 签名函数从(相对易于使用的)RSACryptoServiceProvider.SignHash方法移植到CNG API,以便使用特定的加密服务提供者

这是原始(移植前)功能:

很简单,你不觉得吗?移植到 CNG 时,这是迄今为止我能做的最好的:

我可以成功将密钥导入CNG,但我不知道如何执行签名操作。欢迎任何帮助...

0 投票
1 回答
69 浏览

cryptography - CryptoAPI:CALG_* 和 BCRYPT_*_ALGORITHM 之间的区别

CALG_*和有什么区别BCRYPT_*_ALGORITHM

例如:SHA_256 被定义为:

#define CALG_SHA_256 (ALG_CLASS_HASH|ALG_TYPE_ANY|ALG_SID_SHA_256)

#define BCRYPT_SHA256_ALGORITHM L"SHA256"

0 投票
1 回答
1159 浏览

c++ - Microsoft Cryptographic API 可以允许从字节流创建 ECDSA 密钥吗?

因此,我正在考虑使用哪个加密 C++ 库(我已经想出了如何在 C# 中进行等效操作)来验证许可证文件签名哈希。

阅读有关 CNG 的 Microsoft 文档,似乎不可能从字节流中生成代码中的 ECDSA 密钥,尽管这对于 RSA 密钥是可能的(我认为,不是 100% 肯定)。

因为我想要生成代码字节流,所以我查看了 crypto++,我设法编译了测试套件,但是 cryptolib.lib 是一个超大的 90 兆字节,我正面临着一系列链接错误,只是试图做一些基本的事情。所以我现在不太热衷于加密++。

所以我想转而使用微软在其桌面 Windows 操作系统中提供的东西,但我又回到了我最初的问题,即没有代码字节流生成的密钥。

专家能否证实这真的不可能?此外,他们能否提出替代方案,我很高兴使用长(2048?)密钥回退到 RSA。

以下代码为我编译并运行。可以在MSDN 文章 - 使用 CNG 签名数据中找到它。我想知道它是否可以改编。此代码是否 (a) 即时创建 ECDSA 密钥 (b) 签署哈希 (c) 将密钥保存到证书存储 (d) 检索密钥并验证签名哈希。如果是这样,那么我猜它是演示代码。我需要的是一个硬编码 ECDSA 密钥的示例,而不是动态创建的。

为了清楚起见,我的目标是 384 位,为了与 OpenSsl 和 C# 兼容,曲线名称是 NIST 推荐的曲线secp384r1 – {1.3.132.0.34} ,我将使用两次 SHA256 哈希(就像比特币一样)。

0 投票
0 回答
465 浏览

c++ - STATUS_INVALID_PARAMETER 错误使用 BCryptImportKeyPair 导入 diffie hellman 公钥

我正在尝试将公钥添加到 Bcrypt 的 diffie Hellman 实现中。 建议创建和导出公钥的示例。就我而言,我已经从客户端获得了公钥。我正在尝试使用该公钥来生成共享会话密钥。当我尝试使用 BCryptImportKeyPair 时,我得到了 STATUS_INVALID_PARAMETER。我创建了 PBCRYPT_DH_KEY_BLOB 并手动添加了这些值。有没有其他方法可以做到这一点?将公共密钥从字符串导入 BCrypt 的示例将不胜感激。

提前致谢。请检查下面的代码。

0 投票
1 回答
733 浏览

c++11 - 当我尝试导入公钥时,BCryptImportKeyPair 返回 STATUS_INVALID_PARAMETER

我按照这个例子。我正在尝试将从服务器获得的公钥添加到密钥对中,并且我得到了 STATUS_INVALID_PARAMETER。

我得到以下输出。

我尝试打印 pubKeyBlobFromServer 的字节。公钥从第 8 个字节开始。前 8 个为 BCRYPT_DH_KEY_BLOB 保留。我不确定出了什么问题。请建议我犯错的地方。如果不是,请建议一个从字符串导入公钥的示例。提前致谢。

0 投票
0 回答
434 浏览

c# - 使用 AllowPlaintextExport 标志将 C# X509Certificate2 添加到 X509Store?

当我使用 CertUtil 将证书导入商店时,例如 ,certutil -f -v -user -privatekey -importPFX my mycert.p12然后在 C# 中读取它,我看到它的导出策略是AllowExport | AllowPlaintextExport.

但是,当使用该方法将同一个证书导入到同一个存储X509Store.Add()区再读回时,导出策略只有AllowExport;我X509KeyStorageFlags.Exportable在将证书导入商店时使用该标志,例如:

我的问题是:有没有办法在 C# 中将 X509Certificate2 添加到 X509Store 中,以便证书的导出策略同时包含AllowExportAllowPlaintextExport?X509KeyStorageFlags 似乎没有定义AllowPlaintextExport标志;只有CngExportPolicies确实。

仅供参考,我使用 .NET Framework 4.6.1 作为目标。

谢谢。

0 投票
0 回答
44 浏览

windows - windows dll调用的优化选项和使用

我正在为 Windows 构建一个 dll,使用 Makefile,使用 cl.exe。我正在使用VS2015 ..这个dll使用CNG(bcrypt)进行加密操作,并且bcryptr是使用loadlibrary调用动态加载的。

当我使用 /Od 选项构建以禁用优化时,我对任何功能都没有问题。但是如果我使用任何优化选项/O1、/O2、/Ox,我会看到最奇怪的事情发生。一旦我使用 GetProcAddress 检索 bcrypt 函数的地址,例如 BCryptGetFipsAlgorithmMode,然后我调用该函数ptr,调用堆栈消失。当调用函数尝试返回时,这会导致异常..看起来几乎就像当一个回调没有 CALLBACK 前缀时,但我没有看到连接..

该 bcrypt 函数的原型如下所示:

NTSTATUS WINAPI BCryptGetFipsAlgorithmMode( __out BOOLEAN *pfEnabled)

和 WINAPI 似乎被定义:

定义 WINAPI __stdcall

有什么我想念的吗?优化与此有什么关系?

任何帮助将不胜感激..谢谢!

继承人的代码:

跳过对_BCryptGetFipsAlgorithmMode()的调用,调用堆栈基本上被清除了。

0 投票
3 回答
2186 浏览

c# - C# - 尝试使用导入方法从 .p8 文件创建 CngKey,抛出错误“编码或解码操作期间发生错误。”

我正在尝试使用Jose.JWT.encode(payload, secretKey, JwsAlgorithm.ES256, header)(请参阅https://github.com/dvsekhvalnov/jose-jwt)生成 JWT 令牌,以与 Apple 新的基于令牌的 APNs 系统一起使用。

JWT 编码方法要求 secretKey 的CngKey格式。这是我将 .p8 文件从 Apple 转换为CngKey对象的代码:

但是,在最后一行,会引发以下错误。

输入的格式没有错误,因为有一个单独的错误(当我更改 blob 类型时出现)。

此代码在 .NET WebApi v4.6 中运行。

我已经搜索了高和低,但无法破译此错误所指的内容。任何帮助将不胜感激。谢谢你。