【问题标题】:Can someone explain C# CngKey.Import please?有人可以解释一下 C# CngKey.Import 吗?
【发布时间】:2018-06-14 11:56:33
【问题描述】:

我正在使用 Always Encrypted 和软件 ksp 中的主密钥加密数据库。

密钥是用 CngKey.Create 创建的,我也可以导出它,但之后我就卡住了。使用 CngKey.Import 会创建一个未命名的密钥,即 IsEphemeral=true,因此当没有更多句柄时,该密钥会被销毁。

如何将密钥导入为将被持久化的命名密钥?

最终目标是能够将用作主加密密钥的密钥与 db 一起导出,并将其与 db 备份一起提供给想要使用 db 的方 x。然后该工具应在 x 方的机器中重新创建密钥。

【问题讨论】:

    标签: c# security encryption cng


    【解决方案1】:

    我相信(基于模糊的回忆和a similar answer)您可以同时进行创建导入,除非它是加密的 PKCS#8。

    byte[] exported = key.Export(blobType);
    

    将导出的和 blobType 发送到其他地方。

    var keyParams = new CngKeyCreationParameters();
    // whatever else you want to assign here.
    
    // Add an import to the create step.
    keyParams.Properties.Add(new CngProperty(blobType.Format, exported, CngPropertyOptions.None));
    
    CngKey key = CngKey.Create(algorithm, keyName, keyParams);
    

    【讨论】:

    • 我能够使用链接答案中的代码解决我的问题,谢谢!
    【解决方案2】:

    CnhKey.Create 有一个带名称的重载。

    链接的文档说:

    如果提供了 keyName,则此重载会创建一个持久密钥

    【讨论】:

    • 是的,我知道这一点,我想在另一台机器上重新创建密钥。所以我需要用特定的私钥创建一个密钥
    • @Swifty 好的,来自类概述“此类包装 NCrypt 密钥,而不是 BCrypt 密钥。NCrypt 是 CNG 的子集,提供密钥存储功能。BCrypt 是提供基本加密服务的子集,例如随机数生成、散列函数、签名和加密密钥”。所以CngKey 可能不是正确的起点。您可能应该查看证书(作为存储和共享密钥对的工具)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2016-12-12
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多