· void Write(byte[] array, int offset, int count) ‒ запись count байт из буфера array со смещением offset байт относительно его начала;
· long Seek(long offset, SeekOrigin origin) – перемещение указателя текущей позиции файла на offset байт относительно origin (возможные значения перечисления SeekOrigin: Begin – начало файла, Current – текущая позиция, End – конец файла) и возвращение новой текущей позиции;
· void Flush() – запись данных из буфера ввода-вывода в файл (сохранение в нем всех изменений);
· void Dispose() – закрытие потока, освобождение всех связанных с ним ресурсов, запись в файл всех произведенных изменений;
· void Close() – закрытие потока и освобождение всех связанных с ним ресурсов (например, дескриптора файла).
Класс CryptoStream из пространства имен System. Security. Cryptography (поток данных для шифрования и расшифрования) включает основные свойства, аналогичные свойствам класса FileStream, кроме Name и SafeFileHandle. Конструктор класса CryptoStream имеет параметры:
· поток данных, которые будут зашифровываться или расшифровываться (например, объект класса FileStream);
· объект криптографических преобразований, которые будут применяться к данным из потока (например, результат применения метода CreateEncryptor к объекту одного из классов-наследников абстрактного класса SymmetricAlgorithm);
· режим использования открываемого криптографического потока данных (константа перечисления CryptoStreamMode: Read – чтение данных из потока, Write – запись данных в поток).
При ошибке создания объекта класса CryptoStream генерируется исключение ArgumentException.
Основными методами класса CryptoStream являются методы Read, Write, Seek, Flush, Close и Dispose, аналогичные соответствующим методам класса FileStream.
Генерация ключа симметричного шифрования возможна одним из двух способов:
1) из запоминаемой парольной фразы путем ее предварительного хеширования;
2) с помощью генератора случайных чисел.
Для получения ключа симметричного шифрования-расшифрования из парольной фразы может использоваться абстрактный базовый класс библиотеки FCL DeriveBytes и его наследники:
· PasswordDeriveBytes (генерация ключа из пароля по алгоритму PBKDF1, определенному в стандарте PKCS #5 password-based cryptography specification version 2.0 с возможностью использования алгоритмов хеширования SHA1 или MD5);
· Rfc2898DeriveBytes (генерация ключа шифрования из пароля с помощью алгоритма HMACSHA1).
Класс PasswordDeriveBytes из пространства имен System. Security. Cryptography имеет следующие свойства:
· string HashName – имя алгоритма хеширования, который будет использоваться для генерации ключа из парольной фразы (возможна генерация исключения CryptographicException, если задано недопустимое имя алгоритма хеширования);
· int IterationCount – количество итераций при выполнении хеширования парольной фразы;
· byte[] Salt – массив байт примеси при создании криптографического ключа из парольной фразы.
Необходимость использования примеси при создании секретного криптографического ключа из парольной фразы объясняется желанием усложнить задачу криптоанализа (подбора секретного ключа) нескольких перехваченных нарушителем шифротекстов, зашифрованных с помощью одной и той же парольной фразы. В этом случае, естественно, потребуется сохранить (передать) примесь вместе с зашифрованными данными.
Создание объекта класса PasswordDeriveBytes возможно с помощью конструкторов, имеющих следующие параметры:
· парольную фразу и значение примеси;
· парольную фразу, значение примеси и параметры криптопровайдера, предоставляющего реализацию алгоритма хеширования (объект класса CspParameters, который будет описан далее);
· парольную фразу, значение примеси, имя алгоритма хеширования и количество итераций при генерации ключа из парольной фразы;
· парольную фразу, значение примеси, имя алгоритма хеширования, количество итераций при генерации ключа из парольной фразы и параметры криптопровайдера, предоставляющего реализацию алгоритма хеширования.
Класс PasswordDeriveBytes включает следующие методы:
· byte[] CryptDeriveKey(string algname, string alghashname, int keySize, byte[] rgbIV) – получение ключа длиной keySize бит (если указан 0, то используется длина ключа по умолчанию для заданного алгоритма шифрования) для алгоритма шифрования algname с помощью алгоритма хеширования alghashname и начального вектора для операции блочного симметричного шифрования rgbIV;
· byte[] GetBytes(int cb) – получение псевдослучайного ключа длиной cb байт;
· void Reset() – сброс состояния объекта.
Класс CspParameters (параметры криптопровайдера и поддерживаемых им контейнеров ключей) имеет свойства:
· CryptoKeySecurity CryptoKeySecurity – права доступа и параметры аудита для контейнера ключей [10];
· CspProviderFlags Flags – флаги режима работы криптопровайдера (перечисление CspProviderFlags включает значения NoFlags, если никакие флаги не используются, UseMachineKeyStore, если используется контейнер ключей из профиля компьютера, UseDefaultKeyContainer, если используется контейнер ключей по умолчанию, UseNonExportableKey, если используется не экспортируемый из контейнера секретный ключ, UseExistingKey, если используется текущий ключ, UseArchivableKey, если разрешено резервное копирование секретного криптографического ключа, UseUserProtectedKey, если требуется отображение диалогового окна при доступе к закрытому ключу из контейнера, NoPrompt, если криптопровайдер не информирует пользователя об использовании его закрытого ключа, CreateEphemeralKey, если будет создана случайная, эфемерная, пара асимметричных ключей, не сохраняемая при уничтожении объекта класса для асимметричного криптоалгоритма);
· SecureString KeyPassword – пароль (PIN-код), необходимый для доступа к контейнеру ключей на смарт-карте (класс SecureString будет описан далее);
· IntPtr ParentWindowHandle – дескриптор родительского окна для диалога, отображаемого при попытке доступа к контейнеру ключей на смарт-карте.
В классе CspParameters также определены общие (публичные) поля:
· string KeyContainerName – имя контейнера ключей;
· int KeyNumber – тип пары ключей в контейнере (значение 1, Exchange, соответствует ключам, предназначенным для обмена секретными ключами симметричного шифрования, а значение 2, Signature, соответствует ключам вычисления и проверки электронной цифровой подписи; значением по умолчанию является 1);
· string ProviderName – имя криптопровайдера;
· int ProviderType – код типа криптопровайдера (например, для совместимости с криптосистемой DSA используется значение 13, а с криптосистемой RSA – 1).
Класс CspParameters имеет конструктор без параметров, создающий объект для криптопровайдера по умолчанию типа 1 (использование криптосистемы RSA для вычисления и проверки ЭЦП, а также для обмена секретными ключами симметричного шифрования). Другие конструкторы класса CspParameters имеют параметры:
· int dwTypeIn – создание объекта для криптопровайдера по умолчанию заданного параметром типа;
· int dwTypeIn, string strProviderNameIn – создание объекта для криптопровайдера с именем strProviderNameIn типа dwTypeIn;
· int dwTypeIn, string strProviderNameIn, string strContainerNameIn – создание объекта для криптопровайдера с именем strProviderNameIn типа dwTypeIn и контейнером ключей с именем strContainerNameIn;
· int providerType, string providerName, string keyContainerName, CryptoKeySecurity cryptoKeySecurity, IntPtr parentWindowHandle – создание объекта для криптопровайдера с именем providerName типа providerType и контейнером ключей с именем keyContainerName, размещенным на смарт-карте и для доступа к которому используется диалоговое окно, являющимся дочерним окном для окна с дескриптором parentWindowHandle (параметр cryptoKeySecurity задает права доступа и параметры аудита для контейнера ключей);
· int providerType, string providerName, string keyContainerName, CryptoKeySecurity cryptoKeySecurity, SecureString keyPassword) – создание объекта для криптопровайдера с именем providerName типа providerType и контейнером ключей с именем keyContainerName, размещенным на смарт-карте и для доступа к которому используется пароль keyPassword (параметр cryptoKeySecurity задает права доступа и параметры аудита для контейнера ключей).
В классе SecureString (секретный пароль) из пространства имен System. Security определено свойство
int Length (длина пароля).
Класс SecureString имеет конструктор без параметров и следующие методы:
· void AppendChar(char c) – добавление заданного символа в конец пароля;
· void Clear() – удаление всех символов из пароля;
· SecureString Copy() – создание нового объекта с копией пароля из текущего объекта;
· void Dispose() – освобождение ресурсов, связанных с объектом;
· void InsertAt(int index, char c) – вставка символа c в позицию index пароля;
· bool IsReadOnly() – признак возможности использования пароля только для чтения;
· void MakeReadOnly() – определение пароля доступным только для чтения;
· void RemoveAt(int index) – удаление символа в позиции index из пароля;
· void SetAt(int index, char c) – изменение символа пароля в позиции index на значение символа c.
Класс Rfc2898DeriveBytes из пространства имен System. Security. Cryptography имеет свойства IterationCount и Salt, аналогичные соответствующим свойствам класса PasswordDeriveBytes.
Создание объекта класса Rfc2898DeriveBytes возможно с помощью конструкторов, имеющих следующие параметры:
· парольную фразу и значение примеси;
· парольную фразу и длину случайной примеси;
· парольную фразу, значение примеси и количество итераций при генерации ключа из парольной фразы;
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |


