特定于应用程序的隔离CngKey

时间:2019-03-08 13:57:33

标签: c# windows security cryptography cng

我正在创建一个CngKey。密钥已成功生成。我面临的问题是,我想使用沙盒的概念。像在Android或iOS中一样,一个应用程序无法访问另一应用程序的数据。我想要Windows应用程序中的类似行为。这是我创建CngKey的代码:

private CngKey generateKeyPair(string keyId)
    {
        CngKey key = null;
        if (CngKey.Exists(keyId, CngProvider.MicrosoftSoftwareKeyStorageProvider, CngKeyOpenOptions.MachineKey))
        {
            key = CngKey.Open(keyId, CngProvider.MicrosoftSoftwareKeyStorageProvider, CngKeyOpenOptions.MachineKey);

        }
        else
        {
            key = CngKey.Create(CngAlgorithm.ECDsaP256, keyId, new CngKeyCreationParameters
            {
                ExportPolicy = CngExportPolicies.None,
                KeyCreationOptions = CngKeyCreationOptions.MachineKey,
                KeyUsage = CngKeyUsages.AllUsages,
                Provider = CngProvider.MicrosoftSoftwareKeyStorageProvider,
                UIPolicy = new CngUIPolicy(CngUIProtectionLevels.None)
            });
        }
        return key
    }

让我们说这个密钥是由Application_A创建的。但是,如果Application_B知道keyId,则它可以访问相同的密钥。我不要这个我不能使用GenericRead访问规则来限制它:

new CryptoKeyAccessRule(
                    new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null),
                    CryptoKeyRights.GenericRead,
                    AccessControlType.Allow)

因为我必须在Application_A的各个位置访问它。

我如何实现我的目标?我是否出于自己的目的使用了正确的东西?

0 个答案:

没有答案