问题标签 [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.
c++ - 使用 CNG 存储功能将持久密钥导入 Windows 密钥存储
我正在尝试将持久性 RSA 公钥导入密钥存储。我在CNG 帮助页面上读到可以使用私钥,我想知道我是否也可以将其应用于公钥(特别是 BCRYPT_RSAPUBLIC_BLOB)。我已尝试使用以下代码,但在导入部分中,当我调用 NCryptSetProperty 将公共 blob 设置为属性时,我得到“错误 0x80090029”,这是 NTE 错误数据。无法调试此功能失败的原因。
winapi - NCryptOpenStorageProvider 返回 0x800706D9
该调用NCryptOpenStorageProvider(myProvider, MS_KEY_STORAGE_PROVIDER, 0)
返回 0x800706D9。由于我在 MSDN 中找不到这个 retcode,我真的一团糟。什么地方出了错?
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_MISMATCH
ntstatus.h
即使参数pbIV
被标记为 in/out,参数指向的元素pbIV
也不会被BCryptEncrypt()
. 这是预期的吗?我还查看pbNonce
了BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO
结构中由pPaddingInfo
指针指向的字段,但该字段也没有被修改。我还尝试“手动”推进 IV,根据计数器方案自己修改内容,但这也无济于事。
BCryptEncrypt
成功链接和/或BCryptDecrypt
函数的正确程序是什么?
c - BCrypt NTSTATUS 代码返回值在哪里定义?
Windows CNG 加密原语函数的返回值类型为NTSTATUS
。STATUS_AUTH_TAG_MISMATCH
提到了几个可能的(符号)返回值,例如BCryptDecrypt 函数。
这些符号未在 中定义bcrypt.h
,也未在文档中提到的任何其他头文件中定义。我不能在我的代码中使用它们,因为它们无法解决。它们位于哪里?
c# - 创建 CNG 密钥的权限
当我尝试创建机器范围的 CNG 密钥时:
我明白了
它在以管理员身份运行时有效,但我需要在 AD 用户帐户下执行此操作,而无需将此用户添加到本地管理员。
授予创建 CNG 密钥的权限的确切权限是什么?可以在哪里设置?
windows - 使用 Windows 加密 API 在恒定时间内比较 2 个秘密
使用 Windows 加密 API,如何在恒定时间内比较两个字节数组是否相等?
编辑:秘密的长度是固定的并且是公共知识。
c# - 如何将 CNG 密钥导入密钥库?
我想导入使用 CngKey.Export(CngKeyBlobFormat.EccPrivateBlob) 导出的密钥,为密钥命名,并将其保存在密钥存储中。这应该很简单,但我还没有找到任何方法来做到这一点。
我可以使用 CngKey.Create 创建一个命名密钥,并将其保存到密钥存储区,以便稍后通过 CngKey.Open 使用它。如果我使用正确的选项创建它,我可以使用 CngKey.Export 将密钥导出为 EccPrivateBlob 并将其存储在文件中。稍后,我可以从文件中读回这些字节,并使用如下调用来重新导入密钥:
这是成功的,但它会产生一个未命名的临时密钥。如何像使用 Create 一样为密钥提供名称,以便将导入的密钥存储在密钥库中?
我正在寻找一种方法来存档 ECDsa 签名密钥,然后将其还原给不同的用户或 PC。我不想让私有 blob 闲置并每次都导入它——我希望管理员只导入一次并将其安全地锁定在密钥库中。
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)中做了同样的事情,它没有任何错误。
visual-c++ - 如何导出 GetHashInterface 函数?
我将在 CNG(下一代密码学)下编写一个简单的算法提供程序,正是一个用户模式的哈希提供程序。
根据 CNG 开发工具包帮助中的说明“哈希提供程序必须实现该GetHashInterface
功能并按名称导出”。
要实现算法提供程序,我需要包含 CNG 开发工具包中的“bcrypt.h”文件。该文件还定义了GetHashInterface
函数的接口,但没有export
指令,确切地说:
例如,如果我将头文件中的函数重新定义为可导出函数
我应该收到一条错误消息:
错误 C2375 'GetHashInterface':重新定义;不同的联动
如果我删除 EXPORT 指令(或删除函数的整个接口预定义),错误消息应该会消失,但无法从我的 DLL 导出函数。
所以请帮助我,告诉我解决问题的方法来导出所需的GetHashInterface
功能。