Интернет магазин китайских планшетных компьютеров



Компьютеры - Криптосервисы .NET Framework - Алгоритмы шифрования

28 апреля 2011


Оглавление:
1. Криптосервисы .NET Framework
2. Алгоритмы шифрования
3. Обмен симметричными ключами
4. Хэширующие алгоритмы
5. Цифровая подпись
6. Ограничения



Симметричные алгоритмы

Есть несколько способов формирования блочных шифров. Наиболее простой и интуитивно понятный способ состоит в том, чтобы разбить исходный текст на блоки соответствующего размера, а затем отдельно каждый блок подвергнуть шифрующему преобразованию. Такой режим использования блочных шифров называют электронной кодовой книгой. Его главный недостаток состоит в том, что одинаковые блоки исходного текста при шифровании дадут одинаковые блоки шифр-текста, а это может существенно облегчить противнику задачу взлома. Поэтому режим ECB не рекомендуется использовать при шифровании текстов, по длине превышающих один блок. В таких случаях лучше воспользоваться одним из режимов, связывающих различные блоки между собой.

По умолчанию в CryptoAPI блочные шифры используются в режиме сцепления блоков шифр-текста. В этом режиме при шифровании очередной блок исходного текста вначале комбинируется с предыдущим блоком шифр-текста, а затем полученная последовательность битов поступает на вход блочного шифра. Образующийся на выходе блок шифр-текста используется для шифрования следующего блока. Самый первый блок исходного текста также должен быть скомбинирован с некоторой последовательностью битов, но «предыдущего блока шифр-текста» еще нет; поэтому режимы шифрования с обратной связью требуют использования еще одного параметра — он называется инициализирующим вектором. IV — несекретное двоичное значение, размер которого равен длине блока шифра. Чтобы сгенерировать новый ключ, нужно вызвать метод GenerateKey, а для вектора инициализации — метод GenerateIV. Например, для алгоритма RC2, поддерживаемого базовым криптопровайдером Microsoft, размер блока составляет 64 бита.

DESCryptoServiceProvider mDES;
mDES = new DESCryptoServiceProvider;

// Генерируем новый ключ и IV случайным образом
mDES.GenerateKey;
mDES.GenerateIV;

SymmetricAlgorithm
|— AES
|      |— AESCryptoServiceProvider
|      |— AESManaged
|— DES
|      |— DESCryptoServiceProvider
|— RC2
|      |— RC2CryptoServiceProvider
|— Rijndael
|      |— RijndaelManaged
|— TripleDES
|      |— TripieDESCryptoServiceProvider
Иерархия симметричных алгоритмов

SymmetricAlgorithm является абстрактным базовым классом, от которого наследуют другие классы, специфичные для конкретных алгоритмов. К числу поддерживаемых симметричных алгоритмов относятся Data Encryption Standard, RC2, Rijndael, Advanced Encryption Standard и Triple Data Encryption Standard. Каждый алгоритм включает какой-нибудь производный от SymmetricAlgorithm абстрактный класс вроде DES и производный от базового управляемый класс или класс провайдера сервиса, например DESCryptoServiceProvider. Свойства KeySize и BlockSize позволяют определять длину ключа и размер блока данных, который может быть зашифрован или расшифрован за одну операцию.

Применение класса RijndaelManaged:

RijndaelManaged oEnc = new RijndaelManaged;
int i;

String strKey = String.Empty; String strlV = String.Empty;

for
  strKey += oEnc.Key.ToString + " ";

for
  strlV += oEnc.lV.ToString + " ";

Console.WriteLine;
Console.WriteLine;
Console.WriteLine);
Console.WriteLine);

.NET Framework поддерживает модель программирования на основе потоков. Классы потоков, производные от System.lO.Stream, представляют данные из различных хранилищ и позволяют считывать данные из соответствующих хранилищ или записывать в них. В основе этой функциональности лежит класс CryptoStream, производный от System.IO.Stream и служащий в качестве модели потоков при криптографических преобразованиях.

DESCryptoServiceProvider mDES = new DESCryptoServiceProvider;
FileStream fsOutput = new FileStream;
Byte arInput = new Byte;
//…

// Создаем DES Encryptor из этого зкземпляра
ICryptoTransform desEncript = mDES.CreateEncryptor;
// Создаем CryptoStream, преобразующий файловый поток
// с применением DES-шифрования
CryptoStream sCrypto = new CryptoStream;
// Записываем зашифрованный файл
sCrypto.Write;
sCrypto.Close;
fsOutput.Close;

Асимметричное шифрование применяется для шифрования небольших объёмов данных, поэтому CryptoStream при асимметричном шифровании не используется.

Асимметричное шифрование

К общеизвестным асимметричным алгоритмам относятся Digital Signature Algorithm и RSA. Эти алгоритмы в конечном счете являются производными от абстрактных классов DSA и RSA, в свою очередь производных от AsymmetricAlgorithm. Так как эти алгоритмы очень сложны, им нужны вспомогательные классы, производные, например, от AsymmetricKeyExchangeFormatter и AsymmetricSignatureFormatter.

AsymmetricAlgorithm
|— DSA
|      |— DSACryptoServiceProvider
|— RSA
|      |— RSACryptoServiceProvider

AsymmetricKeyExchangeFormatter
|— RSAOAEPKeyExchangeFormatter
|— RSAPKCS1KeyExchangeFormatter

AsymmetricKeyExchangeDeformatter
|— RSAOAEPKeyExchangeDeformatter
|— RSAPKCS1KeyExchangeDeformatter

AsymmetricKeySignatureFormatter
|— RSAOAEPSignatureFormatter
|— RSAPKCS1SignatureFormatter

AsymmetricSignatureDeformatter
|— RSAOAEPSignatureDeformatter
|— RSAPKCS1SignatureDeformatter
Иерархия Асимметричных алгоритмов

Вы можете не только позволить исходному конструктору асимметричных алгоритмов сгенерировать пару ключей, но и извлечь уже существующую пару из хранилища, поддерживаемого CSP.

CspParameters cp = new CspParameters;
cp.KeyContainerName = ContainerName;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider;



Просмотров: 3519


<<< Криптос
Криптосистема >>>