Класс ECDiffieHellmanCng имеет следующие дополнительные свойства:
· CngAlgorithm HashAlgorithm – алгоритм хеширования, используемый при генерации секретного ключа (по умолчанию SHA256, другие возможные алгоритмы: MD5, SHA1, SHA384, SHA512; могут использоваться и дополнительные алгоритмы хеширования, это свойство может использоваться в программе, если свойство KeyDerivationFunction имеет значения Hash или Hmac);
· ECDiffieHellmanKeyDerivationFunction KeyDerivationFunction – функция генерации секретного ключа (перечисление ECDiffieHellmanKeyDerivationFunction включает значения Hash при использовании функции хеширования, Hmac при использовании основанного на хешировании алгоритма вычисления кода аутентификации сообщения, Tls при использовании протокола TLS, transport layer security);
· byte[] HmacKey – секретный ключ при использовании HMAC для генерации секретного ключа симметричного шифрования;
· CngKey Key – пара асимметричных ключей (класс CngKey будет описан далее);
· byte[] Label – идентификатор, используемый при генерации секретного ключа по протоколу TLS (по умолчанию null);
· ECDiffieHellmanPublicKey PublicKey – открытый ключ асимметричной криптосистемы (класс ECDiffieHellmanPublicKey будет описан далее);
· byte[] SecretAppend – секретная завершающая часть, используемая при генерации секретного ключа с помощью хеширования или конструкции HMAC (по умолчанию null);
· byte[] SecretPrepend – секретная начальная часть, используемая при генерации секретного ключа с помощью хеширования или конструкции HMAC (по умолчанию null);
· byte[] Seed – данные, используемые при генерации секретного ключа по протоколу TLS (по умолчанию null);
· bool UseSecretAgreementAsHmacKey – признак использования секретных частей при генерации секретного ключа с помощью HMAC (по умолчанию false).
Класс ECDiffieHellmanCng содержит конструктор без параметров и конструкторы с параметрами:
· CngKey key – создание объекта класса для заданной параметром пары ключей;
· int keySize – создание объекта класса со случайным ключом заданной длины.
Дополнительные методы класса ECDiffieHellmanCng:
· byte[] DeriveKeyMaterial(CngKey otherPartyPublicKey) – получение секретного ключа в результате соглашения между двумя участниками защищенной связи (параметр метода задает открытый ключ второго участника);
· byte[] DeriveKeyMaterial (ECDiffieHellmanPublicKey otherPartyPublicKey) – действие аналогично предыдущему методу;
· SafeNCryptSecretHandle DeriveSecretAgreementHandle (CngKey otherPartyPublicKey) – получение дескриптора (системного указателя) секретного ключа, согласованного двумя участниками защищенной связи (класс SafeNCryptSecretHandle определен в пространстве имен Microsoft. Win32.SafeHandles и будет описан далее);
· SafeNCryptSecretHandle DeriveSecretAgreementHandle (ECDiffieHellmanPublicKey otherPartyPublicKey) – действие аналогично предыдущему методу.
Класс CngKey (объектами его являются пары асимметричных ключей для так называемой криптографии нового поколения CNG, cryptography new generation, основанной на эллиптических кривых EC, elliptic curve [1]) включает следующие свойства:
· CngAlgorithm Algorithm – алгоритм асимметричного шифрования (класс CngAlgorithm будет описан далее);
· CngAlgorithmGroup AlgorithmGroup – группа асимметричных криптоалгоритмов (класс CngAlgorithmGroup будет описан далее);
· CngExportPolicies ExportPolicy – правила экспорта криптографического ключа (перечисление CngExportPolicies включает значения None при отсутствии правил экспорта, AllowExport при разрешении многократного экспорта закрытого ключа, AllowPlaintextExport при разрешении многократного экспорта закрытого ключа как открытого текста, AllowArchiving при разрешении однократного экспорта закрытого ключа в целях его резервного копирования, AllowPlaintextArchiving при разрешении однократного экспорта закрытого ключа в виде открытого текста);
· SafeNCryptKeyHandle Handle – получение дескриптора пары ключей;
· bool IsEphemeral – признак эфемерности (существования только до конца работы программы) криптографического ключа;
· bool IsMachineKey – признак сохранения ключа в профиле компьютера, а не пользователя;
· string KeyName – имя владельца ключа (null при его эфемерности);
· int KeySize – длина ключа в битах;
· CngKeyUsages KeyUsage – назначение ключа (перечисление CngKeyUsages включает значения None при отсутствии целей использования ключа, Decryption при использовании для шифрования и расшифрования, Signing при использовании для вычисления и проверки электронной цифровой подписи, KeyAgreement при использовании для согласования секретного ключа симметричного шифрования, AllUsages при использовании пары ключей в любых целях);
· IntPtr ParentWindowHandle – дескриптор родительского окна при отображении пользовательского интерфейса для подтверждения прав доступа к закрытому ключу (например, при запросе PIN-кода), по умолчанию null;
· CngProvider Provider – криптопровайдер, управляющий доступом к паре ключей (класс CngProvider будет описан далее);
· SafeNCryptProviderHandle ProviderHandle – дескриптор криптопровайдера, управляющего доступом к паре ключей;
· CngUIPolicy UIPolicy – параметры элемента управления пользовательского интерфейса, используемого при проверки прав доступа к закрытому ключу (класс CngUIPolicy будет описан далее);
· string UniqueName ‒ уникальное (альтернативное) имя владельца пары ключей (при их эфемерности null).
Методы класса CngKey:
· static CngKey Create(CngAlgorithm algorithm) – создание объекта для заданного криптоалгоритма с эфемерным ключом;
· static CngKey Create(CngAlgorithm algorithm, string keyName) – создание объекта для заданного криптоалгоритма с ключом с заданным именем владельца;
· static CngKey Create(CngAlgorithm algorithm, string keyName, CngKeyCreationParameters creationParameters) – создание объекта для заданного криптоалгоритма с ключом с заданным именем владельца и указанными параметрами создания (класс CngKeyCreationParameters будет описан далее);
· void Delete() – удаление связанного с объектом ключа;
· void Dispose() – освобождение всех связанных с объектом ресурсов;
· static bool Exists(string keyName) ‒ проверка наличия ключа с указанным именем в контейнере ключей по умолчанию;
· static bool Exists(string keyName, CngProvider provider) ‒ проверка наличия ключа с указанным именем в контейнере ключей заданного криптопровайдера;
· static bool Exists(string keyName, CngProvider provider, CngKeyOpenOptions options) ‒ проверка наличия ключа с указанным именем в контейнере ключей заданного криптопровайдера, открытого с указанными опциями (перечисление CngKeyOpenOptions содержит значения None, если при открытии доступа к ключу опции не определяются, UserKey, если ключ открывается в профиле пользователя, MachineKey, если ключ открывается в профиле компьютера, Silent, если при открытии ключа не отображается пользовательский интерфейс проверки прав доступа; такой интерфейс обязателен, например, при хранении закрытого ключа на смарт-карте);
· byte[] Export(CngKeyBlobFormat format) – получение блоба экспортируемых ключей (класс CngKeyBlobFormat будет описан далее);
· CngProperty GetProperty(string name, CngPropertyOptions options) – получение значения свойства пары ключей с именем свойства name и параметрами свойства options (перечисление CngPropertyOptions включает значения None, если параметры свойства не заданы, CustomProperty, если свойство определено вне CNG, Persist, если свойство должно быть сохранено вместе с парой ключей; класс CngProperty будет рассмотрен далее);
· bool HasProperty(string name, CngPropertyOptions options) – проверка наличия заданного свойства с заданными параметрами;
· static CngKey Import(byte[] keyBlob, CngKeyBlobFormat format) – импорт ключа из блоба keyBlob формата format;
· static CngKey Import(byte[] keyBlob, CngKeyBlobFormat format, CngProvider provider) – импорт ключа из блоба keyBlob формата format в криптопровайдер provider;
· static CngKey Open(string keyName) – создание объекта для пары существующих ключей с именем владельца keyName;
· static CngKey Open(SafeNCryptKeyHandle keyHandle, CngKeyHandleOpenOptions keyHandleOpenOptions) – создание объекта для существующей пары ключей с дескриптором keyHandle (перечисление CngKeyHandleOpenOptions задает тип заданной пары ключей: None, если ключ не эфемерный, и EphemeralKey, если ключ эфемерный);
· static CngKey Open(string keyName, CngProvider provider) – создание объекта для существующей пары ключей с именем владельца keyName из контейнера ключей криптопровайдера provider;
· static CngKey Open(string keyName, CngProvider provider, CngKeyOpenOptions openOptions) ‒ создание объекта для существующей пары ключей с именем владельца keyName из контейнера ключей криптопровайдера provider (перечисление CngKeyOpenOptions содержит параметры открытия ключа);
· void SetProperty(CngProperty property) – задание значения указанному свойству пары ключей.
Абстрактный базовый класс ECDiffieHellmanPublicKey (открытый ключ асимметричной системы Диффи-Хеллмана) имеет наследника ECDiffieHellmanCngPublicKey, который имеет свойство
CngKeyBlobFormat BlobFormat – формат блоба при экспорте открытого ключа.
Класс ECDiffieHellmanCngPublicKey не имеет собственного конструктора и содержит следующие методы:
· static ECDiffieHellmanPublicKey FromByteArray(byte[] publicKeyBlob, CngKeyBlobFormat format) – создание объекта класса из блоба формата format с открытым ключом publicKeyBlob);
· CngKey Import() – импорт открытого ключа в объект класса CngKey;
· byte[] ToByteArray() – представление открытого ключа в виде массива байт.
Класс SafeNCryptSecretHandle из пространства имен Microsoft. Win32. SafeHandles представляет средства для работы в программе с дескрипторами (системными указателями) объектов Windows. Этот класс содержит свойства:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |


