我正在创建一个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的各个位置访问它。
我如何实现我的目标?我是否出于自己的目的使用了正确的东西?