Назва: Криптографічний алгоритм 3DES
Тип: Реферати
Мова: Українська
Розмiр: 67,09 KB
Скачувань: 41


Скачати реферат українською    

1 2 3 4 5 6 7 8

Симетричні блокові шифри представлені в .NET класами DESCryptoServiceProvider, TripleDESCryptoServiceProvider, RijndaelManaged. Всі ці класи є нащадками абстрактного класу SymmetricAlgorithm, що описує все сімейство блокових алгоритмів із симетричними ключами. Клас описує властивості, що дозволяють маніпулювати основними параметрами алгоритму: розміром блоку, режимом роботи, ініціалізаціонним вектором, ключем й іншими. І методи CreateEncryptor й CreateDecryptor, що повертають контексти (інтерфейс ICryptoTransform) для криптографічних трансформацій даних. Також є методи GenerateKey й GenerateIV для генерації ключів й ініціалізаційних векторів. Конкретні реалізації успадковуються від цього класу.

Симетричний шифр 3DES

Шифрування - це оборотне перетворення даних з метою їхнього приховання від сторонніх. Методів шифрування було придумано безліч - від шифрів простої заміни (найбільш відомий приклад - "Танцюючі чоловічки" Конан Дойля) до принципових, що розкривають не шифри - Вернама (двійкове додавання вихідного тексту з однократно використовуваною випадковою послідовністю). Майже всі методи шифрування використовують ключ шифрування - секретну кодову послідовність, використовувану в процесі перетворення інформації.

Шифрування виконується наступним кодом:

private SymmetricAlgorithm alg;

alg=(SymmetricAlgorithm)RijndaelManaged.Create(); //приклад створення класу RijndaelManaged

PasswordDeriveBytes pdb=new PasswordDeriveBytes(Password.Text,null); //клас, що дозволяє генерувати ключі на базі паролів

pdb.HashName="SHA512"; //будемо використати SHA512

int keylen=(int)KeySize.SelectedItem; //одержуємо розмір ключа з ComboBox'а

alg.KeySize=keylen; //установлюємо розмір ключа

alg.Key=pdb.GetBytes(keylen>>3); //одержуємо ключ із пароля

alg.Mode=CipherMode.CBC; //використаємо режим CBC

alg.IV=new Byte[alg.BlockSize>>3]; //і порожній ініціалізаційний вектор

ICryptoTransform tr=alg.CreateEncryptor(); //створюємо encryptor

FileStream instream=new

FileStream(inFile.Text,FileMode.Open,FileAccess.Read,FileShare.Read);

FileStream outstream=new

FileStream(outFile.Text,FileMode.Create,FileAccess.Write,FileShare.None);

int buflen=((2<<16)/alg.BlockSize)*alg.BlockSize;

byte []inbuf=new byte[buflen];

byte []outbuf=new byte[buflen];

int len;

while((len=instream.Read(inbuf,0,buflen))==buflen)

{

int enclen=tr.TransformBlock(inbuf,0,buflen,outbuf,0); //властиво шифруємо

outstream.Write(outbuf,0,enclen);

}

instream.Close();

outbuf=tr.TransformFinalBlock(inbuf,0,len);//шифруємо фінальний блок

outstream.Write(outbuf,0,outbuf.Length);

outstream.Close();

alg.Clear(); //здійснюємо зачищення

Як можна бачити, нічого складного в процесі шифрування/дешифрування немає. Використання базового класу SymmetricAlgorithm дозволяє звести все до конкретного алгоритму, до одного рядка - створенню екземпляра класу потрібного алгоритму.

Варто звернути увагу на необхідність явного завдання ініціалізаційного вектора, оскільки, на відміну від CryptoAPI, він не ініціалізується нулем за замовчуванням, а вибирається випадково.

Розмір розшифрованих даних для нефінального блоку може бути меншим розміру шифротекста. Поряд із самостійним читанням файлу й шифруванням його по блоках, можливий ще варіант із використанням стрима CryptoStream. При цьому ви створюєте CryptoStream, передаючи йому на вході стрим для запису й інтерфейс трансформації, а потім просто пишете в цей стрим свої дані.

Більшість сучасних стійких симетричних алгоритмів використовують ключ довжиною 64-256 біт (8-32 байта). Оскільки текст, зашифрований подвійним DES виявляється вразливим при криптографічній атаці - зустріч на середині (meet in the middle), те текст шифрується 3 рази DES. У такий спосіб довжина ключа зростає до 168-битий (56x3).

Симетричний шифр 3DES - це один з деяких симетричних шифрів, наданих стандартними криптопровайдерами CryptoAPI. Оскільки DES й 3DES - це практично той самий алгоритм (3DES - це DES, застосовуваний 3 рази підряд), те ми обмежимося прикладом використання алгоритму 3DES.

Однак помітимо, що для використання алгоритму 3DES потрібно Enhanced провайдер, а для DES цілком достатньо Base. Втім, DES уже не є стійким по сучасних мірках алгоритмом, тому використовувати його варто лише там, де надійність шифрування не дуже критична.

Алгоритм 3DES використовує різні ключі DES для кожної зі своїх операцій. Тому розмір його ключа дорівнює потрійному розміру ключа DES, тобто 192 (64*3) біти. Реально розмір ключа 3DES - 168 (56*3) біт, тому що в DES один байт ключа є контрольним для основних семи. Шифрування й дешифрування виконуються за допомогою функцій:

BOOL WINAPI CryptEncrypt(HCRYPTKEY hKey,HCRYPTHASH hHash,BOOL Final,DWORD dwFlags,BYTE* pbData,DWORD* pdwDataLen,DWORD dwBufLen);

BOOL WINAPI CryptDecrypt(HCRYPTKEY hKey,HCRYPTHASH hHash,BOOL Final,DWORD dwFlags,BYTE* pbData,DWORD* pdwDataLen).


Скачати україномовний реферат    


1 2 3 4 5 6 7 8



Украинская Баннерная Сеть