Приложение специфично изолированное CngKey - PullRequest
0 голосов
/ 08 марта 2019

Я создаю 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.

Как мне достичь своей цели?Я использую правильную вещь для своих целей?

...