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

c# - Microsoft CAPI 在使用 SHA256 时返回 NTE_BADKEYSET

我在 HSM 中有我的私钥,我正在使用 Microsoft CAPI (SignerSignEx) 对文件进行签名。如果能够成功生成 sha1 签名,但如果我尝试在我的 hsm SignerSignEx() 上使用相同的证书和相同的密钥生成 sha256 签名,则返回 -2146893802。(NTE_BAD_KEYSET) 。我不确定出了什么问题。我的私钥存储在 HSM 上的 CSP 容器中。

0 投票
1 回答
2583 浏览

c# - c# JWT 使用 ES256,将 privateKey 加载到 CngKey 中以在talkdesk (jose-jwt) 中进行验证

我正在尝试使用 ES256 算法生成 JWT,以供talkdesk 验证(文档:https ://docs.talkdesk.com/docs/using-a-signed-jwt )。

但是我有一个 ADO.net 项目,所以我不能使用他们推荐的任何框架,所以我认为正确的路径是使用https://github.com/dvsekhvalnov/jose-jwt库。

jose-jwt 文档状态:

ES256、ES384、ES256 ECDSA 签名需要相应长度的 CngKey(通常是私有的)椭圆曲线密钥。通常现有的 CngKey 通过 Key Storage Provider 的 CngKey.Open(..) 方法加载。但是如果你想使用原始密钥材料 (x,y) 和 d,jose-jwt 提供了方便的帮助器 EccKey.New(x,y,d)。

我无法理解我从talkdesk 收到的私钥如何适合所有这些。

贝娄是我的代码:

我还看到使用 CngKey.Open(..) 方法意味着创建证书,如果可能的话,我想远离它。

0 投票
2 回答
1421 浏览

c# - System.Security.Cryptography.CryptographicException:不支持请求的操作。窗口服务器 2012

我厌倦了生成用于调用 apns 的 jwt 令牌。这是我的代码:

代码在我的机器上工作得很好,但在服务器上它在GetApnsPrivateKey方法上抛出了这个异常:

在论坛上进行少量搜索后,我发现它是因为 CNG 密钥存储提供商:https ://msdn.microsoft.com/en-us/library/windows/desktop/aa376242.aspx?f=255&MSPPError=-2147217396 现在我想知道有什么办法可以解决这个问题吗?

0 投票
1 回答
515 浏览

digital-signature - CryptQueryObject 的 CNG 替换

我有兴趣尝试从数字签名中读取字段。我有调用 CryptQueryObject 的代码,然后是 CryptMsgGetParam 来获取一些字段,最后是 CertFindCertificateInStore 来加载证书。

关于如何使用 Cryptography Next Generation APIs 的任何提示?微软告诉我 CryptQueryObject 已被弃用,但没有指出它的替代品。

0 投票
1 回答
605 浏览

c++ - 如何在 Windows 上使用 NCryptDecrypt 解密 AES 密文

我正在尝试使用 Ncrypt.lib 使用 AES 加密纯文本,然后对其进行解密。

我使用 Ncrypt.lib 因为我想使用持久的对称密钥。

我的问题是解密部分起作用。事实上,我没有正确解密我的前 16 个字节。

结果是:

我怀疑是初始化向量问题,但我不知道如何使用它,只需使用 BCRYPT_INITIALIZATION_VECTOR ?或者我必须将随机 iv 放在纯文本前面?

谢谢你的帮助。

0 投票
1 回答
586 浏览

c++ - 如何在 Windows 7 上使用下一代 Crypto API 创建 AES 持久密钥

在 Windows 7 Pro x64 上,我尝试使用 Cryptography API Next Generation 创建一个持久的 AES 密钥。

问题是 NCryptCreatePersistedKey 函数返回 NTE_NOT_SUPPORTED。

我的代码:

这适用于 Windows 10 Pro x64。

并且文档说最低支持的客户端是 Windows Vista ......

谢谢你的帮助。

0 投票
0 回答
217 浏览

cryptoapi - 将代码从 CryptoAPI 移植到 CNG

我开始使用非托管 C++ 在 CryptoAPI 中编写代码:

  1. 创建私钥
  2. 创建自签名证书 (CA)
  3. 创建 CSR
  4. 处理 CSR 并使用私有 CA 签名以制作证书 所以大部分 PKI...CryptoAPI 正在贬值,所以现在我现在将它全部移植到 CNG 在船沉没之前。这主要提供参考信息:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb204779(v=vs.85).aspx

但是主要的架构差异和陷阱是什么?据我所知,他们拆分了一些提供程序/算法的东西并更改了函数名称以使其更好地与 FIPS 配合使用,但这就是突出的全部。我需要注意什么?几乎没有任何 CNG 代码示例。

0 投票
1 回答
710 浏览

c++ - 如何计算 CNG 中的主题密钥标识符?

我的目标是使用 Microsoft CNG 为证书填充主题密钥标识符扩展 (2.5.29.14)。我以前使用 Microsoft CAPI 做过,但我使用的功能是:

CryptHashPublicKeyInfo

https://msdn.microsoft.com/en-us/library/windows/desktop/aa380204(v=vs.85).aspx

现在已经贬值了。CNG没有这种方法。但是,上面链接中对 CryptHashPublicKeyInfo 的描述说他们对公钥信息进行了 SHA1 哈希处理。因此,我在 CryptHashPublicKeyInfo (CAPI) 中的相同数据上对 CNG 中的公钥字节进行了 SHA1 哈希,这两个哈希是不同的。我需要解决这个差异。需要明确的是,我的逻辑是在来自同一个 CSR 的同一个公钥上运行的。

RFC 5280 中的详细信息似乎证实了微软所说的: https ://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.2

(1) keyIdentifier 由 BIT STRING subjectPublicKey 的值(不包括标签、长度和未使用的位数)的 160 位 SHA-1 哈希组成。

库珀等人。标准跟踪 [第 28 页] RFC 5280 PKIX 证书和 CRL 配置文件
2008 年 5 月

^我猜微软正在做案例#1。

这是我的 CAPI 代码:

这会在扩展中产生这个值(证书请求中的相同公钥):9d77f29e4fa15e46237d59a7c00efde9d286b9dc

这是我的 CNG 代码:

这会产生这个 SKI 值(不同): 210816297e8e76879f99ec4762452b5d38967b5b

任何线索我在 CNG 代码示例中做错了什么?显然有一个神奇的调用序列,但我不知道它是什么。

0 投票
2 回答
2749 浏览

encryption - Windows 10 和 Linux 的 TPM 所有者密码和锁定密码

我已经设置了双启动,所以我有 Windows 10 和 ubuntu。

按照此页面上的步骤,我可以在 Windows 10 注册表中检索我的 TPM 的锁定密码和所有者密码。结果如下所示:

OwnerAuthFull 和 LockoutHash 都是 base64 编码,因此我可以使用此链接对它们进行解码(例如,它以 hexa 形式提供 893716F2DD41FAD20A98FFEEC573CBF78405D89C 作为所有者密码)。

在 ubuntu 上启动之后,我尝试使用这些密码与 TPM 交互。我正在使用tpm2-tools与 ubuntu 下的 TPM 进行交互。当 linux 控制 TPM 并设置这些密码时,tpm2-tools 工作得很好。但是在这里我试图让 Windows 控制 TPM 并且仍然能够在 Ubuntu 下与它通信。例如,当我运行这些命令时(在 ubuntu 控制 TPM 时有效)。

我明白了

有谁知道我为什么会收到这个错误/为什么这个密码不起作用?我在哪里可以获得正确的密码?那么任何关于如何解决这个问题的指针都值得赞赏!谢谢!

0 投票
1 回答
1417 浏览

c++ - 如何获取 PCCERT_CONTEXT 的私钥的 NCRYPT_KEY_HANDLE?

如何从 Windows 证书存储NCRYPT_KEY_HANDLE的私钥中获取用于 CNG 的加密/解密?PCCERT_CONTEXT

CryptEncrypt函数已被NCryptEncryptandBCryptEncrypt函数取代,但没有直接明显的方法可以PCCERT_CONTEXT从 Windows 证书存储中获取这些函数中的任何一个的句柄。

是否甚至可以使用 CNG 功能使用证书(私钥)进行加密/解密,而无需解决像导出证书这样的暴力方法?