Обзор криптографических классов библиотеки Framework Class Libr — КиберПедия 

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Обзор криптографических классов библиотеки Framework Class Libr

2020-04-01 99
Обзор криптографических классов библиотеки Framework Class Libr 0.00 из 5.00 0 оценок
Заказать работу

Введение

.NET Framework - управляемая среда для разработки и исполнения приложений, обеспечивающая контроль типов. Среда контролирует все аспекты выполнения программы: выделяет память, отвечает за освобождение или повторное использование ресурсов, а также разрешает или запрещает программе выполнять те или иные действия. Microsoft.NET Framework состоит из двух основных компонент: библиотеки классов.NET Framework (FCL) и общеязыковой исполняемой среды (CLR - common language runtime). Основная задача CLR - выполнение программ. Среда отвечает за базовые функции, такие как компиляция кода, выделение памяти, управление потоками, проверка разрешений. Кроме того, CLR выполняет строгую проверку типов.

Библиотека классов.NET Framework содержит огромный набор классов. Типы из библиотеки являются полностью объектно-ориентированными и обеспечивают бесшовную интеграцию приложений, написанных на.NET Framework.

В Microsoft.NET Framework Class Library (FCL) существует достаточно большое число классов, созданных для криптографической защиты данных. По сравнению с Microsoft.NET Framework 1.1 версия 2.0 содержит гораздо большее число классов для поддержки использования криптографии с открытым ключом и инфраструктуры открытых ключей.

Библиотека классов в Microsoft.NET Framework организована в виде пространств имен. Пространство имен - это логическая группа, объединяющая типы со сходной функциональностью. Например, классы для работы с разрешениями на доступ, криптографией и защитой по правам доступа к коду находятся в пространстве имен System.Security.Все пространства имен библиотеки классов.NET Framework организованы в виде иерархической структуры. Корневым пространством имен является пространство имен System.


Классы для шифрования и расшифрования данных

 

Классы-форматеры позволяют зашифровать некоторые данные на открытом ключе, а классы-деформатеры позволяют расшифровать данные с помощью соответствующего секретного ключа. Данные классы предназначены для обмена некоторой секретной информацией. В качестве такой информации могут выступать секретные ключи для симметричных алгоритмов шифрования или же любые другие секретные данные.

Для формирования зашифрованного сообщения используются классы, наследованные от класса AsymmetricKeyExchangeFormatter. Для расшифрования данных используются классы, наследованные от класса AsymmetricKeyExchangeDeformatter.

В версии Microsoft.NET Framework 2.0 реализованы два класса для шифрования секретных данных с помощью алгоритма RSA:

• RSAOAEPKeyExchangeFormatter,

•   RSAPKCS1KeyExchangeFormatter;

и два класса для расшифрования:

• RSAOAEPKeyExchangeDeformatter,

•   RSAPKCS1KeyExchangeDeformatter.

Для реализации поддержки других асимметричных алгоритмов обмена ключами необходимо наследовать класс шифрования данных от класса AsymmetricKeyExchange Formatter и класс расшифрования данных от класса AsymmetricKeyExchangeDeformatter.

Классы используются для обмена секретной информацией с использованием алгоритма RSA. Для обмена данными классы используют формат PKCS #1.

Для шифрования данных с помощью класса RSAPKCS1KeyExchangeFormatter необходимо:

) Создать экземпляр класса.

Определить открытый ключ для шифрования данных можно передав в качестве параметра конструктора объект, представляющий алгоритм RSA, содержащий открытый ключ или же вызвав метод SetKey. Кроме того, можно определить, какой датчик случайных чисел использовать при формировании зашифрованных данных. Если не определить свойство Rnd, то датчик используется по умолчанию.

) Зашифровать ключевую информацию.

Для этого используется метод CreateKeyExchange. В качестве параметра он принимает данные, которые необходимые зашифровать.

Для расшифрования информации необходимо:

) Создать экземпляр класса RSAPKCS1KeyExchangeDeformatter.

Определить секретный ключ можно аналогично классу RSAPKCS1KeyExchangeFormatter.

) Расшифровать полученные данные.

Для этого необходимо вызвать метод DecryptKeyExchange, передав зашифрованные данные в качестве параметра.

 

Примеры

 

Симметричное шифрование.

В примере кода для зашифрования файла, заданного строкой inName, используется класс RijndaelManaged с заданным свойством Key и вектором инициализации (IV), а результат зашифрования выводится в файл, заданный строкой outName. Параметры desKey и desIV, передаваемые в данный метод, представляют собой 8-байтовые массивы. Для выполнения этого примера необходимо наличие установленного пакета стойкого шифрования.

Язык Visual C++

 

void EncryptData(String^ inName, String^ outName, array<Byte>^rijnKey, array<Byte>^rijnIV)

{

//Create the file streams to handle the input and output files.^ fin = gcnew FileStream(inName,FileMode::Open,FileAccess::Read);^ fout = gcnew FileStream(outName,FileMode::OpenOrCreate,FileAccess::Write);>SetLength(0);

//Create variables to help with read and write.<Byte>^bin = gcnew array<Byte>(100);rdlen = 0; //This is the total number of bytes written.totlen = (long)fin->Length; //This is the total length of the input file.len; //This is the number of bytes to be written at a time.^ rijn = SymmetricAlgorithm::Create(); //Creates the default implementation, which is RijndaelManaged. ^ encStream = gcnew CryptoStream(fout,rijn->CreateEncryptor(rijnKey, rijnIV),CryptoStreamMode::Write);::WriteLine("Encrypting...");

//Read from the input file, then encrypt and write to the output file.(rdlen < totlen)

{= fin->Read(bin, 0, 100);>Write(bin, 0, len);= rdlen + len;::WriteLine("{0} bytes processed", rdlen);

}>Close();>Close();>Close();

}

 

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

В примере кода показано, как реализовать пользовательский алгоритм асимметричного шифрования, наследуемый от класса AsymmetricAlgorithm. Для демонстрации порядка использования пользовательского класса приведен дополнительный класс.

Язык Visual C++

 

#using <System.Xml.dll>

#using <System.Security.dll>namespace System;namespace System::Xml;namespace System::Text;namespace System::Security::Cryptography;namespace System::Reflection;

[assembly: AssemblyKeyFile("CustomCrypto.snk")];

[assembly: AssemblyVersion("1.0.0.0")];

[assembly: CLSCompliant(true)];Contoso

{

// Define a CustomCrypto class that inherits from the AsymmetricAlgorithm

// class.ref class CustomCrypto:System::Security::Cryptography::AsymmetricAlgorithm

{

// Declare local member variables.:^ cryptoServiceParameters;<KeySizes^>^ customValidKeySizes;

// Initialize a CustomCrypto with the default key size of 8.:()

{= array<KeySizes^>{gcnew KeySizes(8, 64, 8)};>KeySize = 8;

}

// Initialize a CustomCrypto with the specified key size.:(int keySize)

{= array<KeySizes^>{gcnew KeySizes(8, 64, 8)};>KeySize = keySize;

}

// Accessor function for keySizes member variable.:array<KeySizes^>^ LegalKeySizes

{array<KeySizes^>^ get() override

{(array<KeySizes^>^)customValidKeySizes->Clone();

}

}

// Modify the KeySizeValue property inherited from the Asymmetric

// class. Prior to setting the value, ensure it falls within the

// range identified in the local keySizes member variable.:int KeySize

{int get() override

{KeySizeValue;

}void set(int value) override

{(int i = 0; i < customValidKeySizes->Length; i++)

{(customValidKeySizes[i]->SkipSize == 0)

{(customValidKeySizes[i]->MinSize == value)

{= value;;

}

}

{(int j = customValidKeySizes[i]->MinSize;<= customValidKeySizes[i]->MaxSize;+= customValidKeySizes[i]->SkipSize)

{(j == value)

{= value;;

}

}

}

}

// If the key does not fall within the range identified

// in the keySizes member variable, throw an exception.gcnew CryptographicException("Invalid key size.");

}

}

// Initialize the parameters with default values.:InitializeParameters()

{= gcnew CspParameters();>ProviderName = "Contoso";>KeyContainerName = "SecurityBin1";>KeyNumber = 1;>ProviderType = 2;

}

// Parse specified xmlString for values to populate the CspParams

// Expected XML schema:

// <CustomCryptoKeyValue>

// <ProviderName></ProviderName>

// <KeyContainerName></KeyContainerName>

// <KeyNumber></KeyNumber>

// <ProviderType></ProviderType>

// </CustomCryptoKeyValue>:void FromXmlString(String^ xmlString) override

{(xmlString!= nullptr)

{^ document = gcnew XmlDocument();>LoadXml(xmlString);^ firstNode = document->FirstChild;^ nodeList;

// Assemble parameters from values in each XML element.= gcnew CspParameters();

// KeyContainerName is optional.= >GetElementsByTagName("KeyContainerName");(nodeList->Count > 0)

{>KeyContainerName =>Item(0)->InnerText;

}

// KeyNumber is optional.= document->GetElementsByTagName("KeyNumber");(nodeList->Count > 0)

{>KeyNumber =::Parse(nodeList->Item(0)->InnerText);

}

// ProviderName is optional.= document->GetElementsByTagName("ProviderName");(nodeList->Count > 0)

{>ProviderName =>Item(0)->InnerText;

}

// ProviderType is optional.= document->GetElementsByTagName("ProviderType");(nodeList->Count > 0)

{>ProviderType =::Parse(nodeList->Item(0)->InnerText);

}

}

{gcnew ArgumentNullException("xmlString");

}

}

// Create an XML string representation of the parameters in the

// current customCrypto object.:String^ ToXmlString(bool includePrivateParameters) override

{^ keyContainerName = "";^ keyNumber = "";^ providerName = "";^ providerType = "";(cryptoServiceParameters!= nullptr)

{= >KeyContainerName;= cryptoServiceParameters->KeyNumber.ToString();= cryptoServiceParameters->ProviderName;= >ProviderType.ToString();

}^ sb = gcnew StringBuilder();>Append("<CustomCryptoKeyValue>");>Append("<KeyContainerName>");>Append(keyContainerName);>Append("</KeyContainerName>");>Append("<KeyNumber>");>Append(keyNumber);>Append("</KeyNumber>");>Append("<ProviderName>");>Append(providerName);>Append("</ProviderName>");>Append("<ProviderType>");>Append(providerType);>Append("</ProviderType>");>Append("</CustomCryptoKeyValue>");(sb->ToString());

}

// Return the name for the key exchange algorithm.:String^ KeyExchangeAlgorithm

{String^ get() override

{"RSA-PKCS1-KeyEx";

}

}

// Retrieves the name of the signature alogrithm.:String^ SignatureAlgorithm

{String^ get() override

{"http://www.w3.org/2000/09/xmldsig#rsa-sha1";

}

}

// Required member for implementing the AsymmetricAlgorithm class.:~CustomCrypto()

{

}

// Call the Create method using the CustomCrypto assembly name.

// The create function attempts to create a CustomCrypto

// object using the assembly name. This functionality requires

// modification of the machine.config file. Add the following

// section to the configuration element and modify the values

// of the cryptoClass to reflect what isinstalled

// in your machines GAC.

//<mscorlib>

// <cryptographySettings>

// <cryptoNameMapping>

// <cryptoClasses>

// <cryptoClass CustomCrypto="Contoso.CustomCrypto,

// CustomCrypto,

// Culture=neutral,

// PublicKeyToken=fdb9f9c4851028bf,

// Version=1.0.1448.27640" />

// </cryptoClasses>

// <nameEntry name="Contoso.CustomCrypto"

// class="CustomCrypto" />

// <nameEntry name="CustomCrypto" class="CustomCrypto" />

// </cryptoNameMapping>

// </cryptographySettings>

//</mscorlib>:CustomCrypto^ Create()

{Create("CustomCrypto");

}

// Create a CustomCrypto object by calling CrytoConfig's

// CreateFromName method and casting the type to CustomCrypto.

// The create function attempts to create a CustomCrypto object

// using the assembly name. This functionality requires

// modification of the machine.config file. Add the following

// section to the configuration element and modify the values

// of the cryptoClass to reflect what is installed

// in your machines GAC.

//<mscorlib>

// <cryptographySettings>

// <cryptoNameMapping>

// <cryptoClasses>

// <cryptoClass CustomCrypto="Contoso.CustomCrypto,

// CustomCrypto,

// Culture=neutral,

// PublicKeyToken=fdb9f9c4851028bf,

// Version=1.0.1448.27640" />

// </cryptoClasses>

// <nameEntry name="Contoso.CustomCrypto"

// class="CustomCrypto" />

// <nameEntry name="CustomCrypto" class="CustomCrypto" />

// </cryptoNameMapping>

// </cryptographySettings>

//</mscorlib>:CustomCrypto^ Create(String^ algorithmName)

{(CustomCrypto^)::CreateFromName(algorithmName);

}

};

}

 

Хэширование

В следующем примере кода показано, как вычислить хэш SHA1CryptoServiceProvider для массива. В этом примере предполагается существование предварительно определенного массива байтов dataArray[]. SHA1CryptoServiceProvider является производным классом HashAlgorithm.

Язык Visual C++

 

HashAlgorithm^ sha = gcnew SHA1CryptoServiceProvider;

array<Byte>^ result = sha->ComputeHash(dataArray);


Заключение

класс криптографический framework шифрование

В данной работе были рассмотрены криптографические средства Microsoft.NET. Проведен обзор основных криптографических классов библиотеки Framework Class Libr, пространства имен System.Security.Cryptographу, изучена иерархия классов, реализующих различные криптографические алгоритмы. Основное внимание было направлено на три основных разновидности криптографических классов:

- Симметричные алгоритмы шифрования

-   Асимметричные алгоритмы шифрования

    Алгоритмы вычисления значения хеша данных

Проведен обзор основных алгоритмов шифрования, их свойства и методы, использующиеся в среде.NET Framework. Так же изучены такие аспекты, как шифрование и расшифрование данных, формирование и проверка цифровой подписи. Далее были рассмотрены примеры использования изучаемых средств на языке Visual C++ для трех основных разновидностей криптографических классов.

В итоге стоит отметить большие возможности изучаемой среды как для защиты информации, так и для программирования. Устройство библиотек дает широчайшие возможности по работе с криптографическими алгоритмами, позволяя обеспечить совместимость интерфейсов различных реализаций одного и того же криптографического алгоритма.

 

 


Список литературы

 

1. Данные портала <http://msdn.microsoft.com>

. Данные портала <http://www.interface.ru>

3. Джеф Просиз. Программирование для Microsoft.NET. Москва. Microsoft Press (Русская редакция). 2003. 697 стр.

. Курс лекций Учебного Центра безопасности информационных технологий Microsoft Московского инженерно-физического института (государственного университета)

Введение

.NET Framework - управляемая среда для разработки и исполнения приложений, обеспечивающая контроль типов. Среда контролирует все аспекты выполнения программы: выделяет память, отвечает за освобождение или повторное использование ресурсов, а также разрешает или запрещает программе выполнять те или иные действия. Microsoft.NET Framework состоит из двух основных компонент: библиотеки классов.NET Framework (FCL) и общеязыковой исполняемой среды (CLR - common language runtime). Основная задача CLR - выполнение программ. Среда отвечает за базовые функции, такие как компиляция кода, выделение памяти, управление потоками, проверка разрешений. Кроме того, CLR выполняет строгую проверку типов.

Библиотека классов.NET Framework содержит огромный набор классов. Типы из библиотеки являются полностью объектно-ориентированными и обеспечивают бесшовную интеграцию приложений, написанных на.NET Framework.

В Microsoft.NET Framework Class Library (FCL) существует достаточно большое число классов, созданных для криптографической защиты данных. По сравнению с Microsoft.NET Framework 1.1 версия 2.0 содержит гораздо большее число классов для поддержки использования криптографии с открытым ключом и инфраструктуры открытых ключей.

Библиотека классов в Microsoft.NET Framework организована в виде пространств имен. Пространство имен - это логическая группа, объединяющая типы со сходной функциональностью. Например, классы для работы с разрешениями на доступ, криптографией и защитой по правам доступа к коду находятся в пространстве имен System.Security.Все пространства имен библиотеки классов.NET Framework организованы в виде иерархической структуры. Корневым пространством имен является пространство имен System.


Обзор криптографических классов библиотеки Framework Class Libr

 

Пространство имен System.Security.Cryptography содержит большое число классов для осуществления криптографических преобразований, а также классы, помогающие обеспечить эти преобразования. К таким классам относятся классы представления ключей, классы формирования документа с цифровой подписью, получения названия и объектных идентификаторов алгоритмов и т.д.. Кроме того, в пространстве имен присутствуют классы для криптографической защиты памяти и объектов.

В пространстве имен System.Security.Cryptography содержатся вложенные пространства имен Xml и X509Certificates. Пространство имен System.Security. Cryptography.Xml включает классы, связанные с защитой Xml данных. Например, в нем присутствуют классы поддержки стандартов Xml Digital Signature и Xml Encryption.

В Microsoft.NET Framework существуют три основных разновидности криптографических классов:

- Симметричные алгоритмы шифрования

-   Асимметричные алгоритмы шифрования и подписи

    Алгоритмы вычисления значения хеша данных

В Microsoft.NET Framework 2.0 реализованы симметричные алгоритмы шифрования DES, Rijndael(AES), RC2, RC4. Асимметричные алгоритмы представлены только RSA и DSA. Из алгоритмов вычисления хеша данных реализованы SHA1, SHA256, MD5, MD4 и др. (Из вышеперечисленных алгоритмов DES, Rijndael(AES), RC2; RSA и DSA; SHA1, SHA256, MD5 реализованы в виде отдельных классов)

Криптографическая библиотека классов Microsoft.NET Framework спроектирована для поддержки максимальной гибкости в создании новых алгоритмов с помощью механизмов наследования. Иерархия классов, реализующих различные криптографические алгоритмы, содержит три уровня:

– Тип алгоритма (классы первого уровня).

– Класс алгоритма (классы второго уровня). Данные классы наследуются от классов первого уровня.

– На последнем уровне находятся классы, реализующие сами алгоритмы. Они наследуются от классов второго уровня.

Примерами классов первого уровня являются AsymmetricAlgorithm или HashAlgorithm. Классами второго уровня являются RSA или SHA1. Классы третьего уровня реализуют сами алгоритмы. В качестве примера можно привести классы RSACryptoServiceProvider или SHA1Managed. При этом класс RSACryptoServiceProvider, как следует из названия, обращается к криптографическому провайдеру, а класс SHA1Managed полностью реализован на управляемом коде. Таким образом, класс SHA1Managed наследуется от класса SHA1, который, в свою очередь, наследуется от класса HashAlgorithm. Такое устройство библиотеки дает широчайшие возможности по работе с криптографическими алгоритмами, позволяя обеспечить совместимость интерфейсов различных реализаций одного и того же криптографического алгоритма.

 


Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.081 с.