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

cryptoapi - BcryptSignHash 输出签名的字节序

BcryptGenerateKeyPair生成的私钥和公钥 blob采用大端编码 ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa375520%28v=vs.85%29.aspx )。

使用这些密钥,我使用BcryptSignHash对数据进行签名并生成一个 64 字节的签名,理想情况下应该是 (r,s)。这个签名也是大端编码的吗?

我需要这些信息来从 64 字节签名中提取 r 和 s。我假设 64 字节签名是 r(前 32 个字节)和 s(后 32 个字节)的串联。

如果错了请纠正我

0 投票
4 回答
10853 浏览

c# - 将公钥从其他地方导入 CngKey?

我正在寻找一种跨平台的方式来共享 ECDSA 签名的公钥。从性能的角度来看,我使用 CngKey 和标准 .NET 加密库做了一件好事,但后来我无法弄清楚 33(或 65)字节的公钥(使用 secp256r1/P256)是如何变成 104 字节的by MS.. Ergo,我不支持跨平台签名和验证..

我现在正在使用 BouncyCastle,但神圣的手榴弹速度太慢了!

因此,寻找以下要求的建议:

  1. 跨平台/语言(服务器是 .NET,但这是通过 JSON/Web.API 接口提供的)
    • JavaScript、Ruby、Python、C++ 等。
  2. 没有服务器上的慢那么疯狂
  3. 不是那么慢的人不能在客户端上使用它。

客户端必须能够对消息进行签名,服务器必须能够使用在注册到服务时交换的公钥来验证签名。

无论如何,想法会很棒......谢谢

0 投票
1 回答
602 浏览

cng - CryptBinaryToString/CryptStringToBinary 的 CNG 替代品?

我期待找到用于序列化 BLOB 数据的旧 Crypto API 调用的 CNG 替代方案。但是,似乎没有 CNG 替代CryptBinaryToStringCryptStringToBinary

我是否遗漏了什么,或者大多数程序员要么继续加载和使用,Crypt32.dll要么他们只是自己滚动,使用 3rd 方库,或者......?

0 投票
0 回答
417 浏览

security - MSCAPI : CNG 和安全描述符

Windows API 提供了在对象上设置安全描述符的方法(例如,允许设置访问控制列表)。

由密钥存储提供程序(KSP)托管的加密密钥的安全描述符可以使用NCryptSetProperty(以及正确的标志和参数集)来评估。

Cryptography Provider Development Kit (CPDK)不需要对安全描述符的任何强制支持(并且在没有创建用户帐户的专用服务器上,设置访问控制列表确实可能没有用)。

有人知道某些 Microsoft 应用程序是否期望 KSP 支持安全描述符?(例如 Active Directory 证书服务)

0 投票
0 回答
982 浏览

c++ - 使用 bcrypt 库进行加密/解密

我正在调用BCryptDecrypt返回错误的函数。我收到错误 120 using getlasterror,这意味着此系统不支持此功能(在 msdn 中)。

pbInput是指向包含要解密的数据的地址的指针,cbInput是文件的长度,pcbResult将获得输出文件(解密的数据)的大小。BCryptEncrypt工作正常但BCryptDecryptis不工作。

谁能帮帮我?与解密相关的几行代码:

状态 = BCryptOpenAlgorithmProvider(&hAlgorithm , BCRYPT_AES_ALGORITHM , NULL , 0); 如果(!NT_SUCCESS(状态)){返回;}

0 投票
1 回答
965 浏览

windows - 如何使用 CNG 处理明文密钥?

我有一组用于对称加密/解密的预定义明文密钥。这些密钥用于与连接到 PC 的硬件设备进行加密通信。我想使用 CNG 密钥存储提供程序来安全地存储这些密钥。加密和解密必须在 CNG 之外进行。我只需要一个安全的地方来存储和从哪里检索我的预定义明文密钥。最近几天我研究了 CNG 函数参考,但找不到任何方法将按名称标识的纯文本对称密钥导入/导出到 CNG 密钥容器中。

我知道 CryptoAPI 提供了导入/导出会话密钥的功能。但是这个旧 API 不提供持久(会话)密钥,也无法在密钥容器中按名称选择/识别密钥。

非常感谢任何帮助。提前致谢。

0 投票
0 回答
289 浏览

ssl - BCrypt obtain symmetric key from BCRYPT_KEY_HANDLE

Hence given a BCRYPT_KEY_HANDLE (Lets say from the BCryptEncrypt function) is it possible to obtain the 'Master secret' or the 'SymmetricKey' to see SSL stream on wireshark un encrypted?

0 投票
1 回答
2074 浏览

c# - 在 .Net 中使用 ECDsa 和 SHA256 签署 XML

我正在尝试在 .Net 中使用带有 ECDsa (ECDsaCng) 和 SHA256 的 SignedXml,我收到一条带有消息“无法创建签名密钥”的“CryptographicException”。有人知道如何实现这一目标,或者我是否应该知道有关 .net 对 ecdsa 的支持的相关信息?先感谢您。

“signedXml.ComputeSignature();”中出现错误 方法调用。

0 投票
1 回答
2215 浏览

c++ - 将原始函数与存储在 Microsoft KSP 中的密钥一起使用

我的问题是关于 CNG API 和 Microsoft 提供商的用例。我不编写代码示例,因为与 CSP API 相比,我请求您帮助了解在我的应用程序中使用 CNG API 的最佳方式。

我构建了一个应用程序,它使用通过以下步骤存储的对称密钥:

  • 使用CertFindCertificateInStore枚举“我的”存储中的证书
  • 对于找到的每个证书,使用CertGetCertificateContextProperty询问私钥信息
  • 对于找到的每个私钥信息,存储提供程序名称pwszProvName和容器名称pwszContainerName

然后,当找到密钥时,我的应用程序使用使用 CSP API 找到的私钥执行签名功能:

  • 使用带有pwszProvNamepwszContainerName的CryptAcquireContext初始化提供程序操作
  • 使用 CSP 函数计算签名:CryptCreateHashCryptHashDataCryptSignHash

使用 CSP 功能一切正常。

现在我尝试使用 CNG API 进行签名操作:

  • 使用带有pwszProvName的NCryptOpenStorageProvider初始化提供程序操作
  • 使用 CNG 函数BCryptOpenAlgorithmProvider的开放算法提供程序失败并显示STATUS_NOT_FOUND

当私钥存储在Microsoft Software Key Storage Provider中时会发生此错误。阅读 Microsoft 文档,我了解提供程序的类型是 KSP 提供程序,并且仅对密钥管理起作用。这就是为什么当我尝试原始函数时它失败的原因,我需要使用“原始提供者”。

我找到了按照这些设置使用 CNG 提供程序的方法:

  • Windows Server 2008:创建具有提供程序要求的证书模板(在“加密”选项卡上)。唯一可用的提供商是“Microsoft Software Key Storage Provider
  • Windows 7:用户要求生成密钥,密钥存储在 Microsoft KSP 中。

所以这是我的问题:

  • 我无法使用“Microsoft Software Key Storage Provider”执行原始功能是否正常?

  • 如果我无法使用 Microsoft KSP(它是 KSP 提供程序)执行原始功能(签名、加密、解密、哈希),我如何使我的私钥在 Microsoft Primitive Provider 中存储和管理?

我的麻烦在于,使用 CSP API,默认的 Microsoft CSP 提供程序执行签名(以及解密、加密等)功能。但是使用 CNG API,默认提供程序只执行密钥存储管理。

0 投票
1 回答
741 浏览

openssl - 使用存储在 Windows 密钥库中的密钥作为 OpenSSL 中的预共享密钥

我想知道这是否可能。我已经实现了一个使用 PSK 的 SSL 连接,但我想以某种方式保护 PSK,以便它只能由当前用户访问。我认为 Windows 密钥库是最安全的。

有没有人有我可以做到这一点的提示?SSL 部分已经使用 OpenSSL 完成,但我不确定密钥存储。我一直在尝试 Windows CNG api,但很难弄清楚如何使用存储的随机密钥作为 PSK。