Я создаю 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 знает идентификатор ключа, он может получить доступ к тому же ключу.Я не хочу этогоЯ не могу использовать правило доступа GenericRead, чтобы ограничить его:
new CryptoKeyAccessRule(
new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null),
CryptoKeyRights.GenericRead,
AccessControlType.Allow)
Так как я должен получить к нему доступ в различных точках Application_A.
Как мне достичь своей цели?Я использую правильную вещь для своих целей?