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

c++ - 使用 CNG 存储功能将持久密钥导入 Windows 密钥存储

我正在尝试将持久性 RSA 公钥导入密钥存储。我在CNG 帮助页面上读到可以使用私钥,我想知道我是否也可以将其应用于公钥(特别是 BCRYPT_RSAPUBLIC_BLOB)。我已尝试使用以下代码,但在导入部分中,当我调用 NCryptSetProperty 将公共 blob 设置为属性时,我得到“错误 0x80090029”,这是 NTE 错误数据。无法调试此功能失败的原因。

0 投票
0 回答
569 浏览

winapi - NCryptOpenStorageProvider 返回 0x800706D9

该调用NCryptOpenStorageProvider(myProvider, MS_KEY_STORAGE_PROVIDER, 0)返回 0x800706D9。由于我在 MSDN 中找不到这个 retcode,我真的一团糟。什么地方出了错?

0 投票
2 回答
9075 浏览

c - 如何在 GCM 模式下使用 AES 链接 BCryptEncrypt 和 BCryptDecrypt 调用?

使用 Windows CNG API,我可以在 GCM 模式下使用 AES,通过身份验证加密和解密单个数据块。我现在想连续加密和解密多个缓冲区。

根据CNG的文档,支持以下场景:

如果加密或解密的输入分散在多个缓冲区中,则必须将调用链接到 BCryptEncrypt 和 BCryptDecrypt 函数。通过在 dwFlags 成员中设置 BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG 标志来指示链接。

如果我理解正确,这意味着我可以BCryptEncrypt在多个缓冲区上顺序调用,并在最后获取组合缓冲区的身份验证标签。同样,我可以BCryptDecrypt在多个缓冲区上按顺序调用,同时将实际的身份验证检查推迟到最后。不过,我无法让它工作,看起来 for 的值dwFlags被忽略了。每当我使用BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG时,我都会得到一个返回值,0xc000a002它等于.STATUS_AUTH_TAG_MISMATCHntstatus.h

即使参数pbIV被标记为 in/out,参数指向的元素pbIV也不会被BCryptEncrypt(). 这是预期的吗?我还查看pbNonceBCRYPT_AUTHENTICATED_CIPHER_MODE_INFO结构中由pPaddingInfo指针指向的字段,但该字段也没有被修改。我还尝试“手动”推进 IV,根据计数器方案自己修改内容,但这也无济于事。

BCryptEncrypt成功链接和/或BCryptDecrypt函数的正确程序是什么?

0 投票
1 回答
1626 浏览

c - BCrypt NTSTATUS 代码返回值在哪里定义?

Windows CNG 加密原语函数的返回值类型为NTSTATUSSTATUS_AUTH_TAG_MISMATCH提到了几个可能的(符号)返回值,例如BCryptDecrypt 函数

这些符号未在 中定义bcrypt.h,也未在文档中提到的任何其他头文件中定义。我不能在我的代码中使用它们,因为它们无法解决。它们位于哪里?

0 投票
1 回答
1048 浏览

.net - 使用 RSACng 创建公共 RSA 密钥:指定的密钥不是此算法的有效大小

我目前正在尝试创建一个 RSA 加密密钥,作为Tableau的 Web 服务身份验证的一部分。

在密码学方面,我是个菜鸟,不太清楚如何生成公钥。

我有一个 256 字节的模数,指数是 5 个字节。

0 投票
1 回答
979 浏览

c# - 创建 CNG 密钥的权限

当我尝试创建机器范围的 CNG 密钥时:

我明白了

它在以管理员身份运行时有效,但我需要在 AD 用户帐户下执行此操作,而无需将此用户添加到本地管理员。

授予创建 CNG 密钥的权限的确切权限是什么?可以在哪里设置?

0 投票
1 回答
131 浏览

windows - 使用 Windows 加密 API 在恒定时间内比较 2 个秘密

使用 Windows 加密 API,如何在恒定时间内比较两个字节数组是否相等?

编辑:秘密的长度是固定的并且是公共知识。

0 投票
2 回答
3308 浏览

c# - 如何将 CNG 密钥导入密钥库?

我想导入使用 CngKey.Export(CngKeyBlobFormat.EccPrivateBlob) 导出的密钥,为密钥命名,并将其保存在密钥存储中。这应该很简单,但我还没有找到任何方法来做到这一点。

我可以使用 CngKey.Create 创建一个命名密钥,并将其保存到密钥存储区,以便稍后通过 CngKey.Open 使用它。如果我使用正确的选项创建它,我可以使用 CngKey.Export 将密钥导出为 EccPrivateBlob 并将其存储在文件中。稍后,我可以从文件中读回这些字节,并使用如下调用来重新导入密钥:

这是成功的,但它会产生一个未命名的临时密钥。如何像使用 Create 一样为密钥提供名称,以便将导入的密钥存储在密钥库中?
我正在寻找一种方法来存档 ECDsa 签名密钥,然后将其还原给不同的用户或 PC。我不想让私有 blob 闲置并每次都导入它——我希望管理员只导入一次并将其安全地锁定在密钥库中。

0 投票
0 回答
1464 浏览

windows - 在 Windows 10 上使用 CNG 时无法解析的外部符号 _BCryptEnumRegisteredProviders@8

我正在尝试在 VC++ 2015(Windows 10 x64)中使用 CNG(下一代密码学)迈出第一步。这是代码:

构建项目(对于 x86),我收到一条错误消息:

函数 _main 中引用的错误 LNK2019 未解析的外部符号 _BCryptEnumRegisteredProviders@8

然后我尝试安装“CNG 软件开发工具包”并按照以下说明配置项目:http: //www.codeproject.com/Articles/18713/Simple-way-to-crypt-a-file-with-CNG 但项目building 给出了同样的错误信息。

请帮忙!

PS:我在(Win7 x86,VS 2008)中做了同样的事情,它没有任何错误。

0 投票
2 回答
141 浏览

visual-c++ - 如何导出 GetHashInterface 函数?

我将在 CNG(下一代密码学)下编写一个简单的算法提供程序,正是一个用户模式的哈希提供程序。
根据 CNG 开发工具包帮助中的说明“哈希提供程序必须实现该GetHashInterface功能并按名称导出”。
要实现算法提供程序,我需要包含 CNG 开发工具包中的“bcrypt.h”文件。该文件还定义了GetHashInterface函数的接口,但没有export指令,确切地说:

例如,如果我将头文件中的函数重新定义为可导出函数

我应该收到一条错误消息:

错误 C2375 'GetHashInterface':重新定义;不同的联动

如果我删除 EXPORT 指令(或删除函数的整个接口预定义),错误消息应该会消失,但无法从我的 DLL 导出函数。
所以请帮助我,告诉我解决问题的方法来导出所需的GetHashInterface功能。