|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Програмна реалізація криптографічного алгоритму RC5Програмна реалізація криптографічного алгоритму RC5НАЦІОНАЛЬНИЙ АВІАЦІЙНИЙ УНІВЕРСИТЕТ Інститут інформаційно-діагностичних систем захисту інформації Факультет телекомунікацій та захисту інформації Кафедра комп'ютеризованих систем захисту інформації КУРСОВА РОБОТАСПЕЦІАЛЬНОСТІ 7.160105"Захист інформації в комп'ютерних системах і мережах"Тема: Програмна реалізація криптографічного алгоритму RC5 Київ 2010 Зміст
Звичайно, частіше за все, в свої проекти необхідно включати шифрування даних. Найпростіший спосіб - xor шифрування, але він підходить тільки коли необхідно забезпечити малий рівень захисту. Але іноді необхідні серйозніші алгоритми, такі як RC5. Часто, працюючи, наприклад над архіваторами файлів (наприклад, WinRar), встає питання про шифрування файлів, в таких програмах як архіватор це просто необхідно. Отже, існує ряд алгоритмів симетричного шифрування - коли один і той же ключ використовується для шифрування і дешифрування. Ці алгоритми, як правило, дуже добре вивчені і їх стійкість до різного роду атакам підтверджена результатами математичних досліджень. Алгоритм RC5 був розроблений Рональдом Рівестом (Ronald L. Rivest) для компанії RSA Data Security. На основі RC5 свого часу був створений алгоритм шифрування RC6, який брав участь в конкурсі на звання AES (Advanced Encryption Standard - "Кращий" алгоритм шифрування), оголошеному національним інститутом стандартизації і технологій для заміни вже застарілого алгоритму DES. Тоді RC6 не виграв тільки із-за низької продуктивності апаратних реалізацій алгоритму. А програмні реалізації RC5 і RC6 є, мабуть, найшвидшими серед всіх алгоритмів шифрування, що забезпечують достатню стійкість перед атаками. Наприклад, за деякими даними швидкість грамотно побудованої апаратної реалізації алгоритму RC5 на комп'ютері із швидкістю процесора 200 Мгц може досягати 10..11 Мбайт/сек, а алгоритму RC6 - 11..12 Мбайт/сек. Для порівняння - швидкість роботи алгоритму Rijndael (переможець конкурсу на звання AES) при вищезазначених характеристиках процесора може досягати максимум 7 Мбайт/сек. Якщо встає необхідність впровадження алгоритмів шифрування в свої комерційні проекти - на мій погляд кращий вибір це RC5 або RC6. І не тільки тому, що вони значно простіше в реалізації, чим, наприклад, IDEA, але і тому, що RC5 і RC6 - вільні алгоритми і при цьому немає необхідності відраховувати частину прибутку при комерційному використанні алгоритму. Отже, RC5 працює з блоками по 8 (вісім) байт - два 32 бітових слова. У відмінності від IDEA і Rijndael в RC5 після розгортання ключа обчислюється один підключ, який використовується і при шифруванні, і при дешифровці. RC5, як і більшість алгоритмів - раундовий алгоритм, іншими словами, при шифруванні блоку над ним проводяться одні і ті ж операції кілька разів, в RC5 таких раундів 12. 3. Аналіз типів можливих погроз інформаційної безпеці та визначення рівня можливостей порушника Умисні чинники збереження інформації в СОД зарубіжні фахівці підрозділяють на погрози з боку користувачів ЕОМ і осіб, що не є користувачами. Несанкціонований доступ до інформації може включити неавторизоване користування інформацією системи і активну інфільтрацію. Неавторизоване користування інформацією ототожнюється з ситуацією, коли неавторизований користувач дістає можливість ознайомитися з інформацією, що зберігається в системі, і використовувати її в своїх цілях (прослуховування ліній зв'язку користувачів з ЕОМ, аналіз інформаційних потоків, використання програм, що є чужою власністю). Під активною інфільтрацією інформації маються на увазі такі дії, як проглядання чужих файлів через видалені термінали, маскування під конкретного користувача, фізичний збір і аналіз файлів на картах, магнітних стрічках і дисках, флеш-дисках і так далі Навмисні спроби проникнення в СОД можуть бути класифіковані як пасивні і активні. Пасивне проникнення - це підключення до ліній зв'язку або збір електромагнітних випромінювань цих ліній в будь-якій точці системи особою, що не є користувачем конкретної ЕОМ. Активне проникнення в систему є прямим використанням інформації з файлів, що зберігаються в СОД. Таке проникнення реалізується звичайними процедурами доступу: використанням відомого способу доступу до системи або її частини з метою ставлення заборонених питань, звернення до файлів, що містять інформацію, що цікавить; маскуванням під дійсного користувача після отримання характеристик (ідентифікаторів) доступу; використанням службового положення, тобто незапланованого перегляду (ревізії) інформації файлів співробітниками обчислювальної установки. Активне проникнення в СОД може здійснюватися скритно, тобто в обхід контрольних програм забезпечення збереження інформації. Найбільш характерні прийоми проникнення: використання точок входу, встановлених в системі програмістами, обслуговуючим персоналом, або точок, виявлених при перевірці ланцюгів системного контролю; підключення до мережі зв'язку спеціального терміналу, що забезпечує вхід в систему шляхом перетину лінії зв'язку законного користувача з ЕОМ з подальшим відновленням зв'язку за типом помилкового повідомлення, а також в мить, коли законний користувач не проявляє активності, але продовжує займати канал зв'язку; анулювання сигналу користувача про завершення роботи з системою і подальше продовження роботи від його імені. За допомогою цих прийомів порушник, підміняючи на час його законного користувача, може використовувати тільки доступні цьому користувачеві файли; неавторизована модифікація - неавторизований користувач вносить зміни до інформації в файлах, що зберігаються в системі. В результаті користувач, якому ця інформація належить, не може дістати до неї доступ. Поняття "неавторизований" означає, що перераховані дії виконуються всупереч вказівкам користувача, відповідального за зберігання інформації, або навіть в обхід обмежень, що накладаються на режим доступу в цій системі. Подібні спроби проникнення можуть бути викликані не тільки простим задоволенням цікавості грамотного програміста (користувача), але і навмисним отриманням інформації обмеженого використання. Можливі і інші види порушень, що приводять до втрати або просочування інформації. Так, електромагнітні випромінювання при роботі ЕОМ і інших технічних засобів СОД можуть бути перехоплені, декодовані і представлені у вигляді бітів, що складають потік інформації. Тому потрібний рівень захисту від порушника не нижче 3-го класу захисту. 4. Клас засобів КЗІ Розглянутий комплекс захисту інформації можна віднести до комплексу не нижче 3 класу захищеності систем, що визначений шляхом співставлення: Ш цілей безпеки з функціональних послуг безпеки НК; Ш функцій сервісів безпеки об'єкту експертизи (ОЕ) з функціональними послугами безпеки НК. Для співставлення з функціональним програмним забезпеченням функціонального профілю захищеності (ФПЗ) об'єкту експертизи (ОЕ) у якості базового профілю визначено стандартний ФПЗ 2.КЦД.2а, який згідно ?? ??? 2.5-008-2002 [12] встановлює мінімально необхідний перелік функціональних послуг безпеки та рівнів їх реалізації у комплексах засобів захисту інформації в системах класу безпеки 2 при обробці конфіденційної інформації під час застосування технології, що вимагає підвищених вимог до забезпечення конфіденційності, цілісності та доступності оброблюваної інформації. 5. Блок-схема алгоритму функціонування прикладної програми криптозахисту Блок-схема алгоритму функціонування прикладної програми криптозахисту наведена на рис.1, 2, 3, 4 і 5. Рис.1. Загальний алгоритм Рис.2. Алгоритм процедури EncriptCopy Рис.3. Алгоритм процедури DecriptCopy Рис.4. Алгоритм процедури EncriptStream Рис.4. Алгоритм процедури DecriptStream 6. Листінг тесту програми unit RC5; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TRC5Block = array[1..2] of LongWord; TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; StaticText1: TStaticText; StaticText2: TStaticText; Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; const Rounds = 12; BlockSize = 8; BufferSize = 2048; KeySize = 64; KeyLength = 2 * (Rounds + 1); P32 = $b7e15163; Q32 = $9e3779b9; var Form1: TForm1; Key : string; KeyPtr : PChar; S : array[0..KeyLength-1] of LongWord; /////////////////////////////////////////////////////////////////////////////// Додаткові функції procedure Initialize(AKey: string); // Інійіалізація procedure CalculateSubKeys; // Підготовлення підключей function EncipherBlock(var Block): Boolean; // Шифрування блока (8 байт) function DecipherBlock(var Block): Boolean; // Дешифрування блока /////////////////////////////////////////////////////////////////////////////// Головні функції function EncryptCopy(DestStream, SourseStream : TStream; Count: Int64; Key : string): Boolean; // Зашифрувати дані з одного потоку в іншій function DecryptCopy(DestStream, SourseStream : TStream; Count: Int64; Key : string): Boolean; // Розшифрувати дані з одного потоку в іншій function EncryptStream(DataStream: TStream; Count: Int64; Key: string): Boolean; // Зашифрувати вміст потоку function DecryptStream(DataStream: TStream; Count: Int64; Key: string): Boolean; // Розшифрувати вміст потоку implementation {$R *.dfm} //////////////////////////////////////////////////////////////////////////////// function ROL(a, s: LongWord): LongWord; asm mov ecx, s rol eax, cl end; //////////////////////////////////////////////////////////////////////////////// function ROR(a, s: LongWord): LongWord; asm mov ecx, s ror eax, cl end; //////////////////////////////////////////////////////////////////////////////// procedure InvolveKey; var TempKey : string; i, j : Integer; K1, K2 : LongWord; begin // Розгортання ключа до довжини 64 символи TempKey := Key; i := 1; while ((Length(TempKey) mod KeySize) <> 0) do begin TempKey := TempKey + TempKey[i]; Inc(i); end; // Зараз скоротіть ключ знизу до одного KeySize блоку об'єднуючи байти i := 1; j := 0; while (i < Length(TempKey)) do begin Move((KeyPtr+j)^, K1, 4); Move(TempKey[i], K2, 4); K1 := ROL(K1, K2) xor K2; Move(K1, (KeyPtr+j)^, 4); j := (j + 4) mod KeySize; Inc(i, 4); end; end; //////////////////////////////////////////////////////////////////////////////// procedure Initialize(AKey: string); begin Key := AKey; GetMem(KeyPtr, KeySize); FillChar(KeyPtr^, KeySize, #0); InvolveKey; end; //////////////////////////////////////////////////////////////////////////////// {$R-,Q-} procedure CalculateSubKeys; var i, j, k : Integer; L : array[0..15] of LongWord; A, B : LongWord; begin // Copy the key into L Move(KeyPtr^, L, KeySize); // Зараз ініціалізуйте S S[0] := P32; for i := 1 to KeyLength-1 do S[i] := S[i-1] + Q32; // Зараз видирається таблиця S з ключем i := 0; j := 0; A := 0; B := 0; for k := 1 to 3*KeyLength do begin A := ROL((S[i] + A + B), 3); S[i] := A; B := ROL((L[j] + A + B), (A + B)); L[j] := B; i := (i + 1) mod KeyLength; j := (j + 1) mod 16; end; end; //////////////////////////////////////////////////////////////////////////////// function EncipherBlock(var Block): Boolean; var RC5Block : TRC5Block absolute Block; i : Integer; begin Inc(RC5Block[1], S[0]); Inc(RC5Block[2], S[1]); for i := 1 to Rounds do begin RC5Block[1] := ROL((RC5Block[1] xor RC5Block[2]), RC5Block[2]) + S[2*i]; RC5Block[2] := ROL((RC5Block[2] xor RC5Block[1]), RC5Block[1]) + S[2*i+1]; end; Result := TRUE; end; //////////////////////////////////////////////////////////////////////////////// function DecipherBlock(var Block): Boolean; var RC5Block : TRC5Block absolute Block; i : Integer; begin for i := Rounds downto 1 do begin RC5Block[2] := ROR((RC5Block[2]-S[2*i+1]), RC5Block[1]) xor RC5Block[1]; RC5Block[1] := ROR((RC5Block[1]-S[2*i]), RC5Block[2]) xor RC5Block[2]; end; Dec(RC5Block[2], S[1]); Dec(RC5Block[1], S[0]); Result := TRUE; end; //////////////////////////////////////////////////////////////////////////////// // Реалізація головних функції function EncryptCopy(DestStream, SourseStream : TStream; Count: Int64; Key : string): Boolean; var Buffer : TRC5Block; PrCount : Int64; AddCount : Byte; begin Result := True; try if Key = '' then begin DestStream.CopyFrom(SourseStream, Count); Exit; end; Initialize(Key); CalculateSubKeys; PrCount := 0; while Count - PrCount >= 8 do begin SourseStream.Read(Buffer, BlockSize); EncipherBlock(Buffer); DestStream.Write(Buffer, BlockSize); Inc(PrCount, 8); end; AddCount := Count - PrCount; if Count - PrCount <> 0 then begin SourseStream.Read(Buffer, AddCount); DestStream.Write(Buffer, AddCount); end; except Result := False; end; end; //////////////////////////////////////////////////////////////////////////////// function DecryptCopy(DestStream, SourseStream : TStream; Count: Int64; Key : string): Boolean; var Buffer : TRC5Block; PrCount : Int64; AddCount : Byte; begin Result := True; try if Key = '' then begin DestStream.CopyFrom(SourseStream, Count); Exit; end; Initialize(Key); CalculateSubKeys; PrCount := 0; while Count - PrCount >= 8 do begin SourseStream.Read(Buffer, BlockSize); DecipherBlock(Buffer); DestStream.Write(Buffer, BlockSize); Inc(PrCount, 8); end; AddCount := Count - PrCount; if Count - PrCount <> 0 then begin SourseStream.Read(Buffer, AddCount); DestStream.Write(Buffer, AddCount); end; except Result := False; end; end; //////////////////////////////////////////////////////////////////////////////// function EncryptStream(DataStream: TStream; Count: Int64; Key: string): Boolean; var Buffer : TRC5Block; PrCount : Int64; begin Result := True; try if Key = '' then begin DataStream.Seek(Count, soFromCurrent); Exit; end; Initialize(Key); CalculateSubKeys; PrCount := 0; while Count - PrCount >= 8 do begin DataStream.Read(Buffer, BlockSize); EncipherBlock(Buffer); DataStream.Seek(-BlockSize, soFromCurrent); DataStream.Write(Buffer, BlockSize); Inc(PrCount, 8); end; except Result := False; end; end; //////////////////////////////////////////////////////////////////////////////// function DecryptStream(DataStream: TStream; Count: Int64; Key: string): Boolean; var Buffer : TRC5Block; PrCount : Int64; begin Result := True; try if Key = '' then begin DataStream.Seek(Count, soFromCurrent); Exit; end; Initialize(Key); CalculateSubKeys; PrCount := 0; while Count - PrCount >= 8 do begin DataStream.Read(Buffer, BlockSize); DecipherBlock(Buffer); DataStream.Seek(-BlockSize, soFromCurrent); DataStream.Write(Buffer, BlockSize); Inc(PrCount, 8); end; except Result := False; end; end; // Завершення головних функції ... //////////////////////////////////////////////////////////////////////////////// {$R+,Q+} procedure TForm1.Button1Click(Sender: TObject); var SourseStream : TFileStream; begin SourseStream := TFileStream.Create(Edit1.Text, fmOpenReadWrite); EncryptStream(SourseStream, SourseStream.Size, Edit2.Text); SourseStream.Free; end; procedure TForm1.Button2Click(Sender: TObject); var SourseStream : TFileStream; begin SourseStream := TFileStream.Create(Edit1.Text, fmOpenReadWrite); DecryptStream(SourseStream, SourseStream.Size, Edit2.Text); SourseStream.Free; end; procedure TForm1.Button3Click(Sender: TObject); begin Close end; end. 7. Інструкція зі користування програмою Нижченаведений інтерфейс програми-шифрувальника, що створений засобами Delphi організовує шифрування / дешифрування файлу (рис.6) з використанням функцій EncryptStream / DecryptStream (): Рис.6. Вікно програми-шифрувальника До поля „Файл-Джерело” вводиться шлях до файлу з розширенням *.txt чи *.doc, що необхідно зашифрувати, наприклад, C:\instLog.txt, а до поля „Ключ” вводиться ключ шифрування, наприклад, 135 (рис.7). Рис.7. Введення вхідних даних до полів вікна програми шифрувальника При натисканні кнопки „Зашифрувати”, здійснюється шифрування змісту файла instLog.txt (рис.8). Рис.8. Шифрування змісту файла instLog.txt Для розшифровування файлу також до поля „Файл-Джерело” вводиться шлях до зашифрованого файлу з розширенням *.txt, наприклад, C:\instLog.txt, а до поля „Ключ” вводиться тій же ключ шифрування, 135 та натискується кнопка „Розшифрувати”, файл стає розшифрованим, яким й був (рис.9). Рис.9. Розшифрований файл instLog.txt. Для виходу з програми треба натиснути кнопку „Вихід” Висновки та рекомендації В даній курсовій роботі була розроблена програмна реалізація криптографічного алгоритму RC5. Була написана програма-шифрувальник на підставі криптографічного алгоритму RC5 у середовищі Delphi. Але завжди Проблеми забезпечення збереження значно ускладнюються при організації машинної обробки інформації в умовах колективного користування, де зосереджена, обробляється і накопичується інформація різного призначення і приналежності. Не існує яких-небудь причин, по яких в системах машинної обробки даних, що базуються на сучасних засобах обчислювальної техніки, неможливо було б забезпечити великий ступінь захисту і збереження даних, чим в звичайних системах збору, накопичення і обробки інформації. Система повинна захищати своїх користувачів один від одного як від випадкових, так і цілеспрямованих погроз порушення збереженню інформації. Крім того, прийняті механізми забезпечення збереження повинні надавати користувачеві засобу для захисту його програм і даних також і від нього самого. Вдосконалення технології обробки інформації привело до створення інформаційних баз даних і знань, що містять великі обсяги різноманітної інформації, що теж пред'являє додаткові вимоги до забезпечення збереження і захисту інформації. У системах колективного користування, що мають розвинену мережу терміналів, основна складність забезпечення безпеки полягає в тому, що потенційний порушник є (може бути) повноправним абонентом системи. Тому під терміном "захист" мається на увазі спосіб забезпечення безпеки в СОД. Захист інформації зазвичай зводиться до вибирання засобів контролю за виконанням програм, що мають доступ до інформації (файлів), що зберігається в системі обробки даних (СОД). Список використаної літератури 1. Наказ ДСТСЗІ СБ України від 29 грудня 1999 року № 62 „Про затвердження Положення про державну експертизу в сфері технічного захисту інформації”. 2. НД ТЗІ 2.5-005-99 Класифікація автоматизованих систем і стандартні функціональні профілі захищеності оброблюваної інформації від несанкціонованого доступу. 3. НД ТЗІ 2.5-004-99 Критерії оцінки захищеності інформації в комп'ютерних системах від несанкціонованого доступу. 4. Наказ ДСТСЗІ СБ України від 25.12.2000 року № 62 про введення в дію нормативного документу "Положення про державну експертизу у сфері криптографічного захисту інформації". 5. Державна експертиза з технічного захисту інформації операційної системи Windows XP Professional SP2. Перелік свідоцтв. 6. ГОСТ Р ИСО/МЭК 15408-1-02 Информационная технология. Методы и средства обеспечения безопасности. Критерии оценки безопасности информационных технологий. - Госстандарт России. - Москва - 2002. 7. Операционная система Microsoft Windows Professional Service Pack 1A. Задание по безопасности MS.Win_XP_SP1A.ЗБ. Версия 1.0. 8. Нормативний документ Гостехкомісії Росії. Безопасность информационных технологий. Операционные системы. Клиентские операционные системы. Профиль защищенности. Версия 1.0, 2003. 9. [CTCPEC] Canadian Trusted Computer Product Evaluation Criteria, Version 3.0, Canadian System Security Centre, Communications Security Establishment, Government of Canada, January 1993. 10. [FC] Federal Criteria for Information Technology Security, Draft Version 1.0, (Volumes I and II), jointly published by the National Institute of Standards and Technology and the National Security Agency, US Government, January 1993. 11. [ITSEC] Information Technology Security Evaluation Criteria, Version 1.2, Office for Official Publications of the European Communities, June 1991 12. ?? ??? 2.5-008-2002 ?????? ?? ??????? ?????????????? ?????????? ??? ????????????????? ??????? ??? ??? ?????????? ? ??????????????? ???????? ????? 2. 13. Microsoft® Windows® Internals, Fourth Edition: Microsoft Windows Server™ 2003, Windows XP, and Windows 2000 / David A. Solomon, Mark Russinovich. Microsoft Press A Division of Microsoft Corporation One Microsoft Way Redmond, Washington, - 2004. 14. Microsoft Trainig and Certification. 2272B: Implemeting and Supporting Microsoft Windows XP Professional. Microsoft 2001. 15. Microsoft Trainig and Certification. 2823A: Implemeting and Administering Security in a Microsoft Windows Server 2003 Network. Microsoft 2004. 16. НД ТЗІ 1.1-003-99 Термінологія в галузі захисту інформації в комп'ютерних системах від несанкціонованого доступу. 17. НД ТЗІ 1.1-002-99 Загальні положення щодо захисту інформації в комп'ютерних системах від несанкціонованого доступу. 18. Гайкович В, Першин А. Безопасность электронных банковских систем. - М.,1999. 19. Груздев С. "16 вариантов русской защиты" /КомпьютерПресс №392 20. Карасик И. Программные и аппаратные средства защиты информации для персональных компьютеров / /КомпьютерПресс №3, 1995 21. Мафтик С. Механизмы защиты в сетях ЭВМ. /пер. с англ. М.: МИР, 1993. Петров В.А., Пискарев С.А., Шеин А.В. Информационная безопасность. Защита информации от несанкционированного доступа в автоматизированных системах. - М., 1998. Спесивцев А.В. и др. Защита информации в персональных ЭВМ. - М.: Радио и связь, 1993. Грибунин В.Г. Политика безопасности: разработка и реазизация // «Информационная безопасность», 2005, №1. Домарев В.В. Безопасность информационных технологий. Системный подход. - К.: ООО ТИД «Диасофт», 2004. - 992 с. Ярочкин В.И. Информационная безопасность: Учебник для студентов Вузов. М.: Академический Проект; Фонд "Мир", 2003, 640 с. |
РЕКЛАМА
|
|||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |