Search:

Криптографічний алгоритм 3DES

Симетричний шифр 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).

Параметр hHash дозволяє паралельно із шифруванням/дешифруванням проводити хеширування даних для наступного електронного підпису або його перевірки. Прапор Final визначає, чи є шифрований блок даних останнім. Він необхідний, оскільки дані можна шифрувати по частинам, але для останнього блоку завжди виконується певна деініціалізація алгоритму (звільняються внутрішні структури), і багато алгоритмів роблять додавання (і перевірку коректності при дешифруванні) заповнювача (padding) після основних даних. Параметри pbData й pdwDataLen задають адреса буфера й розмір шифрованих даних. Для блоку даних (Final=FALSE) розмір даних повинен бути завжди кратний розміру шифрованого алгоритмом блоку (для 3DES й DES цей розмір дорівнює 64 бітам). Для останнього блоку допускається порушення цієї умови.

Перейти на сторінку номер:
 1  2  3  4  5  6  7  8 


Подібні реферати:

Особливості алгоритмів роботи вірусів

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

Ідея буферизації

1. Ідея буферизації Дівчині Галі треба кілька склянок води, щоб полити квіти на вікні. Але вона чомусь іде до колодязя з двома здоровенними відрами. Шлях туди не зовсім короткий, відра важкі, але принісши їх, Галя не піде до колодязя за наступними склянками, аж поки не вичерпає з відер усю воду. Такі самі міркування лежать в основі організації обміну даних між фізичними файлами та змінними програми. Фізичний файл можна порівняти з колодязєм. Добування води з нього вимагає багато часу, і вигідно це робити не надто часто та ...

Операційні системи. Файлова система

План Загальні відомості про ОС 1.1. Що таке операційна система? Основні складові частини ОС. Загальні відомості про файлову систему. Що таке файл? Що таке каталог? Повне ім’я файла. Література: 1. Луцюк О.А. “Практикум з інформатики. 2002 р. Київ. Загальні відомості про ОС MS-DOS. Що таке ОС? Операційна система (надалі ОС) керує комп’ютером, запускає програми, забезпечує захист даних, виконує різні сервісні функції. Будь-яка програма користується послугами ОС, а тому може працювати тільки під керуванням тієї ОС, забезпечує ...