·  int keySize – создание объекта на основе случайной пары ключей заданной длины (допустимы размеры ключа 256, 384 и 521 бит) .

В класса ECDsaCng определены методы:

·  byte[] SignData(byte[] data) – вычисление ЭЦП для указанных данных;

·  byte[] SignData(Stream data) – вычисление ЭЦП для данных из указанного потока (с перемещением указателя текущей позиции в конец потока);

·  byte[] SignData(byte[] data, int, int count) – вычисление ЭЦП для данных длиной count из буфера data со смещением offset;

·  byte[] SignHash(byte[] hash) – вычисление ЭЦП для заданного хеш-значения;

·  bool VerifyData(byte[] data, byte[] signature) – проверка ЭЦП signature для данных data;

·  bool VerifyData(Stream data, byte[] signature) – проверка ЭЦП signature для данных из потока data (с перемещением указателя текущей позиции в конец потока);

·  bool VerifyData(byte[] data, int offset, int count, byte[] signature) ‒ проверка ЭЦП signature для данных длиной count из буфера data со смещением offset;

·  bool VerifyHash(byte[] hash, byte[] signature) – проверка ЭЦП signature для хеш-значения hash.

В классе RSACryptoServiceProvider, предназначенном для вычисления и проверки ЭЦП, а также для обмена секретными ключами симметричного шифрования (совместно с классами RSAOAEPKeyExchangeFormatter, RSAOAEPKeyExchangeDeformatter, RSAPKCS1KeyExchangeFormatter и RSAPKCS1KeyExchangeDeformatter, рассмотренными в разделе 1.1) определены следующие свойства:

·  CspKeyContainerInfo CspKeyContainerInfo – дополнительные сведения о контейнере ключей асимметричного шифрования;

НЕ нашли? Не то? Что вы ищете?

·  string KeyExchangeAlgorithm – имя асимметричного криптоалгоритма, используемого для обмена секретными ключами симметричного шифрования (например, строка "RSA-PKCS1-KeyEx");

·  bool PersistKeyInCsp – признак сохранения пары ключей в контейнере;

·  bool PublicOnly – признак использования в объекте класса только открытого ключа;

·  string SignatureAlgorithm – имя асимметричного криптоалгоритма, используемого для вычисления и проверки ЭЦП (в текущей версии Microsoft. Net значением свойства является http://www. w3.org/2000/09/xmldsig#rsa-sha1);

·  bool UseMachineKeyStore – признак сохранения пары ключей в профиле компьютера, а не пользователя.

Класс RSACryptoServiceProvider имеет конструктор без параметров, создающий объект с парой ключей по умолчанию для используемого криптопровайдера или с новой случайной парой ключей. Данный объект будет предназначен для обмена секретными ключами симметричного шифрования. Другие конструкторы данного класса имеют параметры:

·  CspParameters parameters – создание объекта с указанными параметрами, передаваемыми криптопровайдеру (класс CspParameters был рассмотрен в разделе 1.1); по умолчанию связанная с объектом пара ключей предназначена для обмена секретными ключами симметричного шифрования, а для создания пары ключей ЭЦП необходимо задать полю KeyNumber параметра parameters значение Signature (2);

·  int dwKeySize – создание объекта с парой ключей по умолчанию (если она существует) или новой случайной парой ключей заданной длины, предназначенной для обмена ключами симметричного шифрования;

·  int dwKeySize, CspParameters parameters – создание объекта с парой ключей длины dwKeySize бит и параметрами для криптопровайдера parameters (по умолчанию создаваемая пара ключей предназначена для обмена секретными ключами симметричного шифрования, а для создания пары ключей ЭЦП необходимо задать полю KeyNumber параметра parameters значение Signature).

Методы, определенные в классе RSACryptoServiceProvider:

·  byte[] Decrypt(byte[] rgb, bool fOAEP) – расшифрование данных из буфера rgb по алгоритму RSA с учетом заполнения OAEP, если fOAEP==true, или по стандарту PKCS 1 v1.5 в противном случае;

·  byte[] Encrypt(byte[] rgb, bool fOAEP) – шифрование данных из буфера rgb по алгоритму RSA с учетом заполнения OAEP, если fOAEP==true, или по стандарту PKCS 1 v1.5 в противном случае;

·  RSAParameters ExportParameters(bool includePrivateParameters) – экспорт параметров криптосистемы RSA, включая закрытые параметры при значении параметра true (класс RSAParameters будет описан далее);

·  void ImportParameters(RSAParameters parameters) – импорт параметров криптосистемы RSA;

·  byte[] SignData(byte[] buffer, Object halg) – хеширование по алгоритму halg данных из буфера buffer и вычисление ЭЦП для полученного хеш-значения (параметр halg может принимать значения типов String, HashAlgorithm или Type);

·  byte[] SignData(Stream inputStream, Object halg) – хеширование по алгоритму halg данных из потока inputStream и вычисление ЭЦП для полученного хеш-значения (параметр halg может принимать значения типов String, HashAlgorithm или Type);

·  byte[] SignData(byte[] buffer, int offset, int count, Object halg) – хеширование по алгоритму halg данных длиной count из буфера buffer со смещением offset и вычисление ЭЦП для полученного хеш-значения (параметр halg может принимать значения типов String, HashAlgorithm или Type);

·  bool VerifyData(byte[] buffer, Object halg, byte[] signature) – хеширование по алгоритму halg данных из буфера buffer и проверка ЭЦП signature для полученного хеш-значения (параметр halg может принимать значения типов String, HashAlgorithm или Type).

Другие методы класса RSACryptoServiceProvider (ExportCspBlob, ImportCspBlob, SignHash, VerifyHash) аналогичны по своему действию одноименным методам класса DSACryptoServiceProvider, рассмотренным ранее в этом разделе. Единственное отличие заключается в том, что объекты класса RSACryptoServiceProvider могут использовать алгоритмы хеширования SHA1 и MD5.

По умолчанию данные, зашифрованные с помощью класса RSACryptoServiceProvider, нельзя расшифровать с помощью функции CryptoAPI CryptDecrypt, а данные, зашифрованные с помощью функции CryptoAPI CryptEncrypt, нельзя расшифровать с помощью класса RSACryptoServiceProvider. Для обеспечения совместимости с интерфейсом CryptoAPI необходимо вручную изменить порядок зашифрованных байтов на противоположный перед их передачей функциям этого интерфейса. Для изменения порядка байтов массива в управляемом коде на противоположный достаточно вызвать метод Array. Reverse.

В классе RSAParameters (параметры криптосистемы RSA) определены следующие публичные поля:

·  byte[] D – значение закрытого ключа (параметра d) криптосистемы RSA;

·  byte[] Exponent – значение открытого показателя степени e (части открытого ключа);

·  byte[] DP – значение d mod (p - 1);

·  byte[] DQ – значение d mod (q - 1);

·  byte[] InverseQ – значение, мультипликативно обратное к q по модулю p;

·  byte[] Modulus – значение модуля n;

·  byte[] P – значение первого простого числа p;

·  byte[] Q – значение второго простого числа q.

Значение объекта класса RSAParameters никогда не шифруется, поэтому в программе сведения о закрытом ключе из этого объекта следует использовать осторожно.

2.2. Классы для вычисления и проверки ЭЦП

В библиотеке FCL имеются специальные классы для вычисления ЭЦП и ее проверки. Это классы-наследники абстрактных классов AsymmetricSignatureFormatter и AsymmetricSignatureDeformatter:

·  DSASignatureFormatter и DSASignatureDeformatter (вычисление и проверка ЭЦП по алгоритму DSA);

·  RSAPKCS1SignatureFormatter и RSAPKCS1SignatureDeformatter (вычисление и проверка ЭЦП по алгоритму RSA в соответствии со стандартом PKCS 1).

В классе AsymmetricSignatureFormatter определены следующие методы, частично переопределяемые в классах-наследниках:

·  byte[] CreateSignature(byte[] rgbHash) – вычисление ЭЦП для заданных данных;

·  byte[] CreateSignature(HashAlgorithm hash) – вычисление ЭЦП заданного объекта класса алгоритма хеширования;

·  void SetHashAlgorithm(string strName) – задание имени алгоритма хеширования, используемого при вычислении ЭЦП;

·  void SetKey(AsymmetricAlgorithm key) – задание ключа, используемого при вычислении ЭЦП.

Класс DSASignatureFormatter имеет конструктор без параметров и конструктор с параметром типа AsymmetricAlgorithm для создания объекта с указанным ключом для вычисления ЭЦП по алгоритму DSA.

В методе SetHashAlgorithm класса DSASignatureFormatter можно использовать только алгоритм хеширования SHA1, в противном случае генерируется исключение CryptographicUnexpectedOperationException.

Класс RSAPKCS1SignatureFormatter также имеет конструктор без параметров и конструктор с параметром типа AsymmetricAlgorithm, создающий объект класса для заданного ключа вычисления ЭЦП по алгоритму RSA.

В классе AsymmetricSignatureDeformatter определены следующие методы, частично переопределяемые в классах-наследниках:

·  void SetHashAlgorithm(string strName) – задание имени алгоритма хеширования, используемого при проверке ЭЦП;

·  void SetKey(AsymmetricAlgorithm key) – задание ключа, используемого при проверке ЭЦП;

·  bool VerifySignature(byte[] rgbHash, byte[] rgbSignature) – проверка ЭЦП rgbSignature для данных rgbHash;

·  bool VerifySignature(HashAlgorithm hash, byte[] rgbSignature) – проверка ЭЦП rgbSignature для объекта алгоритма хеширования hash.

Класс DSASignatureDeformatter содержит конструктор без параметров и конструктор с параметром типа AsymmetricAlgorithm, создающий объект для заданного ключа проверки ЭЦП по алгоритму DSA.

В методе SetHashAlgorithm класса DSASignatureDeformatter можно использовать только алгоритм хеширования SHA1, в противном случае генерируется исключение CryptographicUnexpectedOperationException.

В классе RSAPKCS1SignatureDeformatter также определены конструктор без параметров и конструктор с параметром типа AsymmetricAlgorithm, создающий объект для заданного ключа проверки ЭЦП по алгоритму RSA.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15