40817

Компютерні системи захисту інформації

Лекция

Информатика, кибернетика и программирование

Теоретичні моделі захисту інформації. Модель захисту мережі Категорії інформаційної безпеки Теоретичні моделі захисту інформації Модель захисту мережі Класифікація криптоалгоритмів. Зловмисники використовують як помилки в написанні і адмініструванні програм так і методи соціальної психології для отримання бажаної інформації.

Украинкский

2013-10-22

404.59 KB

25 чел.

Курс лекцій
“Комп'ютерні системи захисту інформації”


ЗМІСТ

Основні види атак на інформацію та методи їх захисту

Сучасна ситуація в області інформаційної безпеки

  1. Найбільш поширені методи атак на інформацію

Комплексний пошук можливих методів доступу

  1. Термінали захищеної інформаційної системи. Вимоги до терміналів
    1. Отримання доступу на основі помилок адміністратора і користувачів
    2. Отримання доступу на основі помилок в реалізації
    3. Соціальна психологія та інші способи отримання доступу
  2. Категорії інформаційної безпеки. Теоретичні моделі захисту інформації. Модель захисту мережі
  3. Категорії інформаційної безпеки
  4. Теоретичні моделі захисту інформації
  5. Модель захисту мережі

Класифікація криптоалгоритмів. Симетричні алгоритми: скремблери, блочні шифри. Архівація. Хешування паролів. Транспортне кодування

Класифікація криптоалгоритмів

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

Скремблери

Шифр Вернама

Блочні шифри

Шифр Фейштеля

Шифр TEA

Стандарт шифрування AES

Симетрична криптографічна система

Архівація

Алгоритм Хаффмана

Алгоритм Лемпеля-Зіва

Хешування паролів

Транспортне кодування

Загальна схема симетричної криптосистеми


1. Основні види атак на інформацію та методи їх захисту

1.1. Сучасна ситуація в області інформаційної безпеки

У сучасному комп’ютерному світі атаки на інформацію стали буденною практикою. Зловмисники використовують як помилки в написанні і адмініструванні програм, так і методи соціальної психології для отримання бажаної інформації.

Атака на інформацію – це умисне порушення правил роботи з інформацією. Атаки на інформацію можуть принести підприємству величезні збитки. На сьогоднішній день приблизно 90% всіх атак на інформацію проводять нині працюючі або звільнені з підприємства співробітники.

Останнім часом повідомлення про атаки на інформацію, про хакерів і комп’ютерні атаки наповнили всі засоби масової інформації. Що ж таке “атака на інформацію”? Дати визначення цій дії насправді дуже складно, оскільки інформація, особливо в електронному вигляді, представлена сотнями різних видів. Інформацією можна вважати окремий файл, базу даних, один запис в ній, і цілком програмний комплекс. І всі ці об’єкти можуть піддатися і піддаються атакам з боку деякої соціальної групи.

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

Атаки на інформацію можуть причинити наступні економічні втрати:

Розкриття комерційної інформації може привести до серйозних збитків на ринку.

Звістка про крадіжку великого об’єму інформації зазвичай серйозно впливає на репутацію фірми, приводячи побічно до втрат в об’ємах торгових операцій.

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

Підміна інформації як на етапі передачі так і на етапі зберігання може привести до величезних збитків.

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

Комп’ютерні атаки можуть принести і величезний моральний збиток. Поняття конфіденційного спілкування давно вже стало відомим широкому загалу. Само собою зрозуміло, що жодному користувачеві комп’ютерної мережі не хочеться, щоб його листи окрім адресата отримували ще 5÷10 чоловік або, наприклад, весь текст, що набирається на клавіатурі, копіювався в буфер, а потім при підключенні до Інтернету відправлявся на певний сервер. А саме так і відбувається в тисячах і десятках тисяч випадків.

Ось декілька цікавих цифр про атаки на інформацію. Вони були отримані дослідницьким центром DataPro Research в 1998 році. Основні причини пошкоджень електронної інформації можна розподілилися таким чином: ненавмисна помилка людини – 52% випадків, умисні дії людини – 10% випадків, відмова техніки – 10% випадків, пошкодження в результаті пожежі – 15% випадків, пошкодження водою – 10% випадків. Отже, кожен десятий випадок пошкодження електронних даних пов’язаний з комп’ютерними атаками.

Виконавцем цих дій у 81% випадків був поточний кадровий склад установ і тільки у 13% випадках – абсолютно сторонні люди, а в 6% випадків – колишніх працівників цих же установ. Частка атак, вироблюваних співробітниками фірм і підприємств, просто приголомшує і примушує пригадати не тільки про технічні, але і про психологічні методи профілактики подібних дій.

І, нарешті, що ж саме роблять зловмисники, діставшись до інформації: у 44% випадків зломи були здійснені для безпосередньої крадіжки грошей з електронних рахунків, в 16% випадків – виводили з ладу програмне забезпечення, також в 16% випадків – проводилася крадіжка інформації з різними наслідками, в 12% випадків інформація була сфальсифікована, а в 10% випадків зловмисники за допомогою комп’ютера скористалися або замовили послуги, до яких в принципі не повинні були мати доступу.

1.2 Найбільш поширені методи атак на інформацію

Часто зловмисники проникають в систему не безпосередньо взломуючи системами шифрування або ідентифікації, а “в обхід”, використовуючи або явні помилки розробників, що залишили без уваги який-небудь дуже простий метод “обходу” систему, або помилки в реалізації програм захисту. Також зловмисники широко використовують психологічні прийоми для того, щоб отримати потрібну ним інформацію у рядових співробітників фірм.

1.2.1 Комплексний пошук можливих методів доступу

Зловмисники дуже ретельно вивчають системи безпеки перед проникненням в неї. Дуже часто вони знаходять очевидні і дуже прості методи “злому” системи, які розробники незамітили, створюючи можливо дуже хорошу систему ідентифікації або шифрування.

Розглянемо найбільш популярні і очевидні технологій несанкціонованого доступу. Вивчення цих методів є дуже важливим, тому що “міцність ланцюга не вища за міцність найслабкішої її ланки”. Ця аксіома постійно цитується, коли мова йде про комп’ютернц безпеку. Наприклад, яка б не була надійна система захисту, якщо пароль на доступ до неї лежить в текстовому файлі в центральному каталозі або записаний на екрані монітора – це вже не конфіденційна система.

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

Приблизно та ж проблема існує в мережі Novell NetWare 3.11 – в ній сервер може підтримувати одночасно до 254 станцій і при цьому, за наявності могутньої системи ідентифікації, аутентифікація пакету ведеться тільки по номеру станції. Це дозволяло проводити наступну атаку – в присутності у мережі клієнта-супервізора зловмисникові досить послати 254 пакети з командою серверу, яку він хоче виконати, просто по черзі підміняючи справжнє значення свого номера одним із 254 можливих. Один з відправлених пакетів співпаде з номером з’єднання на якому зараз дійсно знаходиться клієнт-супервізор і команда буде прийнята сервером до виконання, а решту – 253 пакети, просто проігноровано.

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

Все це примушує розробників захищених систем постійно пам’ятати і про найпростіші і очевидніші способи проникнення в систему і попереджати їх в комплексі.

1.2.2. Термінали захищеної інформаційної системи

Термінали – це точка входу користувача в інформаційну мережу. У тому випадку, коли до них мають доступ декілька чоловік або взагалі будь-який охочий, при їх проектуванні і експлуатації необхідно ретельно дотримуватися цілого комплексу заходів безпеки.

Найочевиднішим і все-таки найбільш поширеним способом входу в систему при атаках на інформацію залишається вхід через офіційний log-in запит системи. Обчислювальна техніка, яка дозволяє провести вхід в систему, називається в теорії інформаційної безпеки терміналом. Термінологія береться з часів “Супер ЕОМ” і тонких “термінальних” клієнтів. Якщо система складається всього з одного персонального комп’ютера, то він одночасно вважається і терміналом і сервером. Доступ до терміналу може бути фізичним, у тому випадку, коли термінал – це ЕОМ з клавіатурою і дисплеєм, або віддаленим – найчастіше по телефонній лінії, у цьому випадку терміналом є модем, підключений або безпосередньо до системи, або до її фізичного терміналу.

При використанні терміналів з фізичним доступом необхідно дотримуватися наступних вимоги:

  1. Захищеність терміналу повинна відповідати захищеності приміщення: термінали без пароля можуть бути присутніми тільки в тих приміщеннях, куди мають доступ особи відповідного або більш високого рівня доступу. Відсутність імені реєстрації можлива тільки в тому випадку, якщо до терміналу має доступ тільки одна людина або, якщо на групу осіб, що мають до нього доступ, розповсюджуються загальні заходи відповідальності. Термінали, встановлені в публічних місцях повинні завжди запрошувати ім’я реєстрації і пароль.
  2. Системи контролю за доступом в приміщення із встановленим терміналом повинні працювати повноцінно і відповідно до загальної схеми доступу до інформації.
  3. У разі встановлення терміналу в місцях з великим скупченням людей клавіатура, а якщо необхідно, то і дисплей повинні бути обладнані пристроями, що дозволяють бачити їх тільки клієнтові, що працює в даний момент (непрозорі скляні або пластмасові огорожі, шторки, “втоплена” модель клавіатури).

При використанні віддалених терміналів необхідно дотримуватися наступних правил:

  1. Будь-який віддалений термінал повинен запрошувати ім’я реєстрації і пароль (пароль необхідний тому, що незнання вашого імені не є достатнім для збереження конфіденційності системи). Вся річ у тому, що за наявності програмного забезпечення, яке доволі просто можна знайти в мережі Інтернет, дозволяє здійснити несанкціонований вхід у ситему. Тоновий набір для одного дзвінка відбувається блозько 4 секунд. Це означає, що за 1 хвилину можна перебрати близько 15 номерів телефонної станції з тим, щоб дізнатися чи існує на цьому телефонному номері модем. За годину таким чином можна перебрати 1000 номерів, а за робочий день і з повтором в нічний час (це стандартна методика) всю АТС (10000 номерів). Зазвичай в місті існує близько 9-ти АТС. Таким чином, за 10 днів можна перевірити всі телефони середнього за величиною міста. Подібні операції проводяться досить часто, особливо відносно фірм, пов’язаних з комп’ютерами і комп’ютерними мережами, а також відносно промислових підприємств. Так, якийсь час назад, поширеним був список з 15 телефонних номерів одного із дуже великих промислових підприємст, на яких знаходилися модеми з доступом в їх внутрішню мережу.
  2. Другою вимогою є своєчасне відключення всіх модемів не потрібних в даний момент фірмі (наприклад, вечорами або під час обідньої перерви) або не контрольованих в даний момент співробітниками.
  3. По можливості рекомендується використовувати схему зворотнього дзвінка від модему, оскільки ця методика гарантує, що достіп відбувся з певного телефонного номера.
  4. З log-in запиту терміналу рекомендується прибрати всі безпосередні згадки імені фірми, її логотипи і тому подібне – це не дозволить комп’ютерним вандалам, що просто перебирають номери з модемами, дізнатися log-in екран якої фірми вони виявили. Для перевірки правильності з’єднання замість імені фірми можна використовувати неординарну вітальну фразу, який-небудь афоризм або просто фіксовану послідовність букв і цифр, які запам’ятовуватимуться постійними операторами цього терміналу.
  5. Також на вході в систему рекомендується виводити на екран попередження про те, що вхід в систему без повноважень переслідується згідно із законом. По-перше, це послужить ще одним застереженням зловмисникам-початківцям, а по-друге, буде надійним аргументом на користь атакованої фірми в судовому розгляді, якщо таке проводитиметься.

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

1.2.3. Отримання пароля на основі помилок адміністратора і користувачів

Подальші дії взломшика, що дістав доступ до термінальної точки входу, можуть розвиватися по двох основних напрямах: спроби з’ясування пароля прямо або побічно.

Перебір паролів по словнику був якийсь час одній з найпоширеніших технік підбору паролів. В даний час, як хоч найменший результат пропаганди інформаційної безпеки, він почав здавати свої позиції. Хоча розвиток швидкодії обчислювальної техніки і все більш складні алгоритми складання слів-паролів не дають “загинути” цьому методу. Технологія перебору паролів народилася в той час, коли найскладнішим паролем було скажемо слово “brilliant”, а в русифікованих ЕОМ воно ж, але для “хитрості” набране в латинському режимі, але дивлячись на російські букви (ця тактика на жаль до цих пір надзвичайно поширена, хоча і збільшує інформаційну насиченість пароля всього на 1 біт). У той час простенька програма із словником в 5000 іменників давала позитивний результат в 60% випадків. Величезне число інцидентів із зломами систем змусило користувачів додавати до слів 1-2 цифри з кінця, записувати першу і/або останню букву у верхньому регістрі, але це збільшило час на перебір варіантів з урахуванням зростання швидкодії ЕОМ всього у декілька разів. Так в 1998 році було офіційно заявлено, що навіть складання двох абсолютно не зв’язаних осмислених слів підряд не збільшує реальній надійность пароля. До цього ж часу набули широкого поширення мови складання паролів, основні принципи складання паролів середньостатистичними користувачами ЕОМ, що записують в абстрактній формі.

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

Основні вимоги до інформаційної безпеки, засновані на аналізі даного методу, наступні:

  1. Вхід всіх користувачів в систему повинен підтверджуватися введенням унікального для клієнта пароля.
  2. Пароль повинен ретельно підбиратися так, щоб його інформаційна величина відповідала часу повного перебору пароля. Для цього необхідно детально інструктувати клієнтів про поняття “Простий для підбору пароль” або передати задачу вибору пароля інженера по безпеці.
  3. Паролі за умовчанням повинні бути змінені до офіційного запуску системи і навіть до публічних випробувань програмного комплексу. Особливо це відноситься до мережевого програмного забезпечення.
  4. Всі помилкові спроби увійти до системи повинні враховуватися, записуватися у файл журналу подій і аналізуватися через “розумний” проміжок часу. Якщо в системі передбачена можливість блокування клієнта або всієї системи після певної кількості невдалих спроб входу, цією можливістю необхідно скористатися. Якщо ж Ви є розробником системи безпеки, дану можливість поза сумнівом необхідно передбачити, оскільки вона є основним бар’єром до підбору паролів повним перебором. Розумно блокувати клієнта після 3-ї підряд неправильної спроби набору пароля і відповідно, блокувати систему після невдалих спроб входу за деякий період (годину, зміну, добу). У цій формулі N – середня кількість тих, що підключаються за цей період до системи клієнтів, 0.1 – 10% межа “забудькуватості пароля”, 3 – ті ж самі три спроби на згадку пароля. Природно, інформація про блокування клієнта або системи повинна автоматично поступати на пульт контролю за системою.
  5. У момент відправки пакету підтвердження або відкидання пароля в системі повинна бути встановлена розумна затримка (2÷5 секунд). Це не дозволить зловмисникові, потрапивши на лінію з хорошим зв’язком до об’єкту атаки, перебирати по сотні тисяч паролів за секунду.
  6. Всі дійсні в системі паролі бажано перевіряти сучасними програмами підбору паролів або оцінювати особисто адміністратором системи.
  7. Через певні проміжки часу необхідна примусова зміна пароля у клієнтів. Найбільш часто використовуваними інтервалами зміни пароля є рік, місяць і тиждень (залежно від рівня конфіденційності інформації і частоти входу в систему).
  8. Всі невживані протягом довгого часу імена реєстрації повинні переводитися в закритий (недоступний для реєстрації) стан. Це відноситься до співробітників, що знаходяться у відпустці, на лікарняному, у відрядженні, а також до імен реєстрації, створених для тестів, випробувань системи і тому подібне.
  9. Від співробітників і всіх операторів терміналу необхідно вимагати строге нерозголошування паролів, відсутність яких-небудь взаємозв’язків пароля з широковідомими фактами і даними і відсутність паперових записів пароля “через погану пам’ять”.

1.2.4. Отримання пароля на основі помилок в реалізації

Спроби входу в систему абсолютно без знання пароля, грунтуючись на помилках в реалізації програмного або апаратного забезпечення.

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

Перша група методів заснована на тому, що будь-якій системі доводиться де-небудь зберігати оригінали паролів всіх клієнтів для того, щоб звіряти їх у момент реєстрації. При цьому паролі можуть зберігатися як у відкритому текстовому вигляді, як це має місце в багатьох клонах UNIX, так і представлені у вигляді малозначних контрольних сум (хеш-значений), як це реалізовано в ОС Windows, Novell NetWare і багато інших. Проблема в тому, що в даному випадку для зберігання паролів на носієві не може бути використана основна методика захисту – шифрування. Оскільки, якщо всі паролі зашифровані яким-небудь ключем, то цей ключ теж повинен зберігатися в самій системі для того, щоб вона працювала автоматично, не питаючи кожного разу у адміністратора дозвіл “Пускати або не пускати користувача Anton, Larisa, Victor і т.д.?”. Тому, діставши доступ до подібної інформації, зловмисник може або відновити пароль в читабельному вигляді (що буває досить рідко), або відправляти запити, підтверджені даним хеш-значением, не декодовуючи його. Всі рекомендації по запобіганню розкраданням паролів полягають в перевірці чи не доступний файл з паролями або таблиця в базі даних, що зберігає ці паролі, кому-небудь ще окрім адміністраторів системи, чи не створюється системою резервних файлів, в місцях доступних іншим користувачам і тому подібне . В принципі, оскільки крадіжка паролів є найгрубішим вторгненням в систему, розробники приділяють їй досить пильну увагу і дотримання всіх рекомендацій по використанню системи зазвичай достатньо для запобігання подібним ситуаціям.

Діставання доступу до паролів завдяки недокументованим можливостям систем зустрічається в даний час дуже рідко. Раніше ця методика використовувалася розробниками набагато частіше в основному в цілях відладки (debug) або для екстреного відновлення працездатності системи. Але поступово з розвитком як технологій зворотної компіляції, так і інформаційної зв’язаності світу вона поступово почала зникати. Будь-які недокументовані можливості рано чи пізно стають відомими, після чого новина про це із великою швидкістю облітає світ і розробникам доводиться розсилати всім користувачам скомпрометованої системи патчі (patch) або нові версії програмного продукту. Єдиною мірою профілактики даного методу є постійний пошук на серверах, присвячених комп’ютерній безпеці, оголошень про всі неприємності з програмним забезпеченням, встановленим в установі. Розробникам необхідно пам’ятати, що будь-яка подібна вбудована можливість може на порядок понизити загальну безпеку системи, якби добре вона не була завуальована в коді програмного продукту.

Наступною поширеною технологією отримання паролів є копіювання буфера клавіатури у момент набору пароля на терміналі. Цей метод використовується рідко, так як для нього необхідний доступ до термінальної машини з можливістю запуску програм. Але якщо зловмисник все-таки дістає подібний доступ, дієвість даного методу дуже висока:

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

Двома основними методами боротьби з копіюванням паролів є:

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

Сканування сучасними антивірусними програмами також може допомогти у виявленні “троянських” програм, але тільки тих з них, які набули широкого поширення по країні. А отже, програми, написані зловмисниками спеціально для атаки на конкретну систему, будуть пропущені антивірусними програмами без яких-небудь сигналів.

Наступний метод отримання паролів відноситься тільки до мережевого програмного забезпечення. Проблема полягає в тому, що в багатьох програмах не враховується можливість перехоплення будь-якої інформації, що йде по мережі – так званого мережевого трафіку. Спочатку, з впровадженням локальних комп’ютерних мереж так воно і було. Мережа розташовувалася в межах 2÷3 кабінетів або будівлі з обмеженим фізичним доступом до кабелів. Проте, стрімкий розвиток глобальних мереж вимагає винесиння на спільний ринок тих же версії програмного забезпечення без якого-небудь зволікання для посилення безпеки. Тепер ми пожинаємо плоди цієї тенденції. Більше половини протоколів мережі Інтернет передають паролі в нешифрованому вигляді – відкритим текстом. До них відносяться протоколи передачі електронної пошти SMTP і POP3, протокол передачі файлів FTP, одна з схем авторизації на WWW-серверах.

Сучасне апаратне і програмне забезпечення дозволяє отримувати всю інформацію, що проходить по сегменту мережі, до якого підключений конкретний комп’ютер, і аналізувати її в реальному масштабі часу. Можливі декілька варіантів прослуховування трафіку: це може зробити службовець компанії зі свого робочого комп’ютера, зловмисник, що підключився до сегменту за допомогою портативної ЕОМ або мобільнішого пристрою. Трафік, що йде від одного комп’ютера до іншого, технічно може прослуховуватися з боку безпосереднього провайдера, з боку будь-якої організації, що надає транспортні послуги для мережі Інтернет (листування усередині країни в середньому йде через 3÷4 компанії, за межі країни – через 5÷8). Крім того, якщо в належній мірі реалізовуватиметься план СОРМ (система оперативно-розшукових заходів в комп’ютерних мережах), то можливе прослуховування і з боку силових відомств країни.

Для комплексного захисту від подібної можливості крадіжки паролів необхідно виконувати наступні заходи:

  1. Фізичний доступ до мережевих кабелів повинен відповідати рівню доступу до інформації.
  2. При визначенні топології мережі потрібно при будь-яких можливостях уникати широкомовних топологій. Оптимальною одиницею сегментації є група операторів з рівними правами доступу або, якщо ця група складає більше 10 чоловік, то кімната або відділ усередині групи. У жодному випадку на одному кабелі не повинні знаходитися оператори з різними рівнями доступу, якщо тільки весь передаваний трафік не шифрується, а ідентифікація не проводиться по прихованій схемі без відкритої передачі пароля.
  3. До всіх інформаційних потоків, що виходять за межі фірми, повинні застосовуватися ті ж правила, що були описані вище для об’єднання різнорівневих терміналів.

1.2.5. Соціальна психологія і інші способи отримання паролів

Іноді зловмисники вступають і в прямий контакт з особами, що володіють потрібною їм інформацією, розігруючи досить переконливі сцени. “Жертва” обману, що повірила в реальність розказаної їй по телефону або в електронному листі ситуації, сама повідомляє пароль зловмисникові.

Короткий огляд ще декілька досить методів, що часто зустрічаються.

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

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

Вище згадані методи відносяться до групи “атака по соціальній психології” і можуть приймати самі різні форми. Їх профілактикою може бути тільки ретельне роз’яснення всім співробітникам і в особливо важливих випадках введення адміністративних заходів і особливого регламенту запиту і зміни пароля.

Необхідно ретельно інструктувати співробітників про небезпеку залишення робочих станцій, не закритих паролем. В першу чергу це, звичайно, відноситься до терміналів, що працюють в публічних місцях і офісах з нижчим рівнем доступу до інформації, проте, і при роботі в приміщеннях з рівним рівнем доступу не рекомендується давати можливість співробітникам працювати за іншими ЕОМ тим більше у відсутність власника. Як програмні профілактичні заходи використовуються екранні заставки з паролем, відсутність робочої активності, що з’являється через 5÷10 хвилин, автоматичне відключення сервером клієнта через такий же проміжок часу. Співробітники повинні здійснювати вихід із системи, як на серверах, так і на робочих станціях при виключенні ЕОМ або закриття їх паролем при залишенні без нагляду.

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

Трохи слів про захищеність самих носіїв інформації. На сьогоднішній день не існує прийнятних по критерію “ціна/надійність” носіїв інформації не доступних для злому. Будова файлів, їх заголовки і розташування в будь-якій операційній системі може бути прочитане при використанні відповідного програмного забезпечення. Практично нерозкриваним може бути тільки незалежний носій, що автоматично руйнує інформацію при спробі несанкціонованого підключення до будь-яких роз’ємів, окрім дозволених, при розгерметизації і так далі. Проте, все це з області “божевільних” цін і військових технологій.

Для бізнес класу і приватного листування дана проблема вирішується набагато простіше і дешевше – за допомогою криптографії. Будь-який об’єм інформації від байта до гігабайта, будучи зашифрований за допомогою більш менш стійкої криптосистеми, недоступний для прочитання без знання ключа. І вже абсолютно не важливо, зберігається він на жорсткому диску, на дискеті або компакт-диску, не важливо під управлінням якої операційної системи. Проти самих новітніх технологій і мільйонних витрат тут протистоїть математика, а цей бар’єр до цих пір неможливо подолати. От чому силові відомства практично всіх країн, будучи не в змозі протистояти законам математики, застосовують адміністративні заходи проти так званої “стійкої криптографії”.


2. Категорії інформаційної безпеки. Теоретичні моделі захисту інформації. Модель захисту мережі

2.1. Категорії інформаційної безпеки

У тих випадках, коли йде мова про безпеку, відносно інформації і інформаційно-обчислювальних систем застосовуються загальноприйняті терміни про властивості цих об’єктів – категорії.

Інформація з погляду інформаційної безпеки володіє наступними категоріями:

  1. Конфіденційність – гарантія того, що конкретна інформація доступна тільки тому колу осіб, для яких вона призначена; порушення цієї категорії називається розкраданням або розкриттям інформації.
  2. Цілісність – гарантія того, що інформація зараз існує в її початковому вигляді, тобто при її зберіганні або передачі не було проведено несанкціонованих змін; порушення цієї категорії називається фальсифікацією повідомлення.
  3. Автентичність – гарантія того, що джерелом інформації є саме та особа, яка заявлена як її автор; порушення цієї категорії також називається фальсифікацією, але вже автора повідомлення.
  4. Авторство – досить складна категорія, але часто вживана в електронній комерції – гарантія того, що при необхідності можна буде довести, що автором повідомлення є саме заявлена людина і не може бути ніхто інший; відмінність цієї категорії від попередньої в тому, що при підміні автора, хтось інший намагається заявити, що він автор повідомлення, а при порушенні авторства – сам автор намагається відмовитися від своїх слів, підписаних ним же одного разу.

Відносно інформаційних систем застосовуються інші категорії:

  1. Надійність – гарантія того, що система поводиться в нормальному і позаштатному режимах так, як заплановано.
  2. Точність – гарантія точного і повного виконання всіх команд.
  3. Контроль доступу – гарантія того, що різні групи осіб мають різний доступ до інформаційних об’єктів і ці обмеження доступу постійно виконуються.
  4. Контрольованість – гарантія того, що у будь-який момент може бути проведена повноцінна перевірка будь-якого компоненту програмного комплексу.
  5. Контроль ідентифікації – гарантія того, що клієнт, підключений в даний момент до системи, є саме тим, за кого себе видає.
  6. Стійкість до умисних збоїв – гарантія того, що при умисному внесенні помилок, в межах заздалегідь обумовлених норм, система поводитиметься так, як обумовлено заздалегідь.

2.2. Теоретичні моделі захисту інформації

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

Однією з перших моделей була опублікована в 1977 модель Біба (Biba). Згодне неї всі суб’єкти і об’єкти заздалегідь розділяються по декількох рівнях доступу, а потім на їх взаємодію накладаються наступні обмеження:

  1. Суб’єкт не може викликати на виконання суб’єкти з нижчим рівнем доступу.
  2. Суб’єкт не може модифікувати об’єкти з вищим рівнем доступу.

Як можна замітити, ця модель дуже нагадує обмеження, введені в захищеному режимі мікропроцесорів Intel 80386+ щодо рівнів привілеїв.

Модель Гогена-Мезігера (Goguen-Meseguer), представлена ними в 1982 році, заснована на теорії автоматів. Згідно їй система може при кожній дії переходити з одного дозволеного стану тільки в деякий інший. Суб’єкти і об’єкти в даній моделі захисту розбиваються на групи – домени, і перехід системи з одного стану в інше виконується тільки відповідно до так званої таблиці дозволів, в якій вказано, які операції може виконувати суб’єкт, скажімо, з домена C над об’єктом з домена D. У даній моделі під час переходу системи з одного дозволеного стану в інший використовуються транзакції, що забезпечує загальну цілісність системи.

Сазерлендська модель (від англ. Sutherland) захисту, опублікована в 1986 році, робить акцент на взаємодії суб’єктів і потоків інформації. Так само як і в попередній моделі, тут використовується машина станів з безліччю дозволених комбінацій станів і деяким набором початкових позицій. У даній моделі досліджується поведінка множинних композицій функцій переходу з одного стану в інший.

Важливу роль в теорії захисту інформації грає модель Кларка-Вільсона (Clark-Wilson), опублікована в 1987 році і модифікована в 1989. Заснована дана модель на постійному використанні транзакцій і ретельному оформленні прав доступу суб’єктів до об’єктів. Але в даній моделі вперше досліджена захищеність третьої сторони в даній проблемі – сторони, що підтримує всю систему безпеки. Цю роль в інформаційних системах зазвичай грає програма-супервізор. Крім того, в моделі Кларка-Вільсона транзакції вперше були побудовані по методу верифікації, тобто ідентифікація суб’єкта проводилася не тільки перед виконанням команди від нього, але і повторно після виконання. Це дозволило зняти проблему підміни автора в момент між його ідентифікацією і власне командою. Модель Кларка-Вільсона вважається однією з найдосконаліших відносно підтримки цілісності інформаційних систем.

2.3. Модель захисту мережі

Нехай потрібно передати повідомлення від однієї сторони, що бере участь в передачі, до іншої через якусь мережу, що їх звязує. Обидві сторони, транзакції, ініціатори, повинні вступити у взаємодію, щоб обмін інформацією відбувся. З цією метою створюється логічний інформаційний канал, для чого визначається маршрут проходження даних від джерела до адресата в мережі і погоджується обома ініціаторами використовуваний комунікаційний протокол (наприклад, ТCP/IP). Модель захисту мережі зображена на рис. 2.1.

Питання безпеки виникають в тих випадках, коли необхідно або бажано забезпечити захист передаваної інформації від деякого супротивника, який може загрожувати конфіденційності, автентичності і тому подібне В цьому випадку будь-яка технологія захисту повинна включати наступні дві складові:

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

Рисунок 2.1 – Модель захисту мережі

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

З приведеної на рис. 2.1 загальної моделі витікає, що при розробці конкретного засобу захисту необхідно вирішити наступні чотири основні завдання:

  1.  Розробити алгоритм для перетворення інформації, що забезпечує захист. Алгоритм повинен бути таким, щоб супротивник не зміг розгадати його суть.
  2.  Створити секретну інформацію, яка використовуватиметься з алгоритмом.
  3.  Розробити методи доставки і сумісного використання цієї секретної інформації.
  4.  Вибрати протокол, за допомогою якого обидва ініціатори зможуть використовувати розроблений алгоритм і створену секретну інформацію, щоб забезпечити необхідний рівень захисту.

Існують і інші ситуації, які відносяться до питань забезпечення безпеки, але які невідображають адекватно моделлю зображеною на рис. 2.1. Загальна модель для таких ситуацій показана на рис. 2.2, ця модель схематично представляє захист інформаційної системи від небажаного доступу. Усі, напевно, чули про проблеми повязані з існуванням хакерів, що намагаються проникати в системи, підключені до мережі. Хакером може бути людина, якій просто подобається зламувати захист систем і входити в захищені системи, без будь-яких недоброзичливих намірів. Але порушником може виявитися і незадоволений службовець, що вирішив завдати збитку компанії і злочинець, що має намір використовувати наявні в комп’ютерній системі дані з метою збагачення (наприклад, отримати номери платоспроможних кредитних карток або здійснити незаконний переказ грошей).

Ще одним типом небажаної дії є проникнення в комп’ютерну систему програмної логіки, яка використовує вразливі місця системи і втручається в роботу програм і утиліт, наприклад редакторів і компіляторів. Програми можуть створювати загрози двох наступних типів:

  1.  Загроза несанкціонованого доступу до інформації означає перехоплення або модифікацію даних користувачами, які не повинні мати доступу до цих даних.
  2.  Загроза зловмисного використання сервісу захисту заснована на недоліках засобів захисту і полягає в створенні перешкод в їх застосуванні легальними користувачами.

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

Рисунок 2.2 – Модель захисту доступу до мережі

Захисні механізми, необхідні для протидії спробам небажаного доступу, можна розділити на два великі класи (див.рис. 2.2). Захисні механізми першого класу грають роль “сторожа”, який являє собою виконання вимагаючих паролів процедур входу в систему, призначених для заборони доступу всім, окрім легальних користувачів, а також використання екрануючої програмної логіки, призначеної для виявлення і припинення спроб проникнення в систему “черв’яків”, вірусів і інших подібних об’єктів. Якщо ж порушникові або програмному забезпеченню все ж таки вдалося дістати доступ до системи, повинна спрацювати “друга лінія оборони”, що складається з різних внутрішніх засобів контролю, що відстежують основні характеристики системи і що аналізують інформацію, що зберігається в системі, з метою виявлення присутності порушників.


3. Класифікація криптоалгоритмів. Симетричні алгоритми: скремблери, блочні шифри. Архівація. Хешування паролів. Транспортне кодування

Криптографія – це наука про способи двонаправленого перетворення інформації з метою конфіденційної передачі її по незахищеному каналу між двома станціями, розділеними в просторі і/або часі. Криптографія, використовуючи досягнення в першу чергу математики, дозволяє модифікувати дані таким чином, що ніякі найсучасніші ЕОМ за розумний період часу не можуть відновити початковий текст, відомий тільки відправникові і одержувачеві.

3.1. Класифікація криптоалгоритмів

Залежно від наявності або відсутності ключа кодуючі алгоритми діляться на тайнопис і криптографію. Залежно від відповідності ключів шифрування і дешифрування – на симетричні і асиметричні. Залежно від типу використовуваних перетворень – на підстановочні і перестановочні. Залежно від розміру шифрованого блоку – на потокові і блокові шифри.

Розглянемо тепер цю класифікацію детальніше.

Відносно криптоалгоритмов існує декілька схем класифікації, кожна з яких заснована на групі характерних ознак. Таким чином, один і той же алгоритм “проходить” відразу по декількох схемах, опиняючись в кожній з них в якій-небудь з підгруп.

Основною схемою класифікації всіх криптоалгоритмов є наступна:

1. Тайнопис.

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

2. Криптографія з ключем.

Алгоритм зміни даних, що передаються, відомий всім стороннім особам, але він залежить від деякого параметра – “ключа”, яким володіють тільки відправник і одержувач.

1. Симетричні криптоалгоритми.

Для шифрування і дешийрування повідомлення використовується один і той же блок інформації (ключ).

2. Асиметричні криптоалгоритми.

Алгоритм такий, що для шифрування повідомлення використовується один (“відкритий”) ключ, відомий всім, а для дешифрування – інший (“закритий”), що існує тільки у одержувача.

Весь подальший матеріал буде присвячений криптографії з ключем, оскільки більшість фахівців саме по відношенню до цих криптоалгоритмів використовують термін криптографія, що цілком виправдане. Так, наприклад, будь-який криптоалгоритм з ключем можна перетворити на тайнопис, просто “зашивши” в початковому коді програми деякий фіксований ключ. Зворотне ж перетворення практично неможливе.

Залежно від характеру дій, здійснюваних над даними, алгоритми підрозділяються на:

1. Переставочні.

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

2. Підстановлювальні.

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

Будь-які криптографічні перетворення не збільшують об’єм інформації, а лише змінюють її предаставлення. Тому, якщо програма шифрування значно (більше ніж на довжину заголовка) збільшує об’єм вихідного файлу, то в її основі лежить неоптимальний, а можливо і взагалі некоректний криптоалгоритм. Зменшення об’єму закодованого файлу можливе тільки за наявності вбудованого алгоритму архівації в криптосистемі і за умови стисливості інформації (так, наприклад, архіви, музичні файли формату MP3, відеозображення формату JPEG стискатися більш ніж на 2÷4% не будуть).

Залежно від розміру блоку інформації криптоалгоритми поділяються на:

1. Потокові шифри.

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

2. Блокові шифри

Одиницею кодування є блок з декількох байтів (в даний час 4-32). Результат кодування залежить від всіх початкових байтів цього блоку. Схема застосовується при пакетній передачі інформації і кодуванні файлів.

3.2. Симетричні алгоритми

Симетричні криптоалгоритми виконують перетворення невеликого (1 біт або 32÷128 біти) блоку даних залежно від ключа таким чином, що прочитати початкове повідомлення можна тільки знаючи цей секретний ключ.

3.2.1. Скремблери

Скремблерами називаються програмні або апаратні реалізації алгоритму, що дозволяє шифрувати побітно безперервні потоки інформації. Сам скремблер являє собою набір бітів, що змінюються на кожному кроці по певному алгоритму. Після виконання кожного чергового кроку на його виході з’являється шифруючий біт – 0 або 1, який накладається на поточний біт інформаційного потоку логічною операцією XOR (“виключаючи АБО”).

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

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

Генерація кодуючої послідовності бітів проводиться циклічно з невеликого початкового об’єму інформації – ключа, по наступному алгоритму. З поточного набору біт вибираються значення певних розрядів і складаються по XOR між собою. Всі розряди зміщаються на 1 біт, а тільки що отримане значення (“0” або ”1”) поміщається в самий молодший розряд, що звільнився. Значення, що знаходилося в самому старшому розряді до зміщення, додається в кодуючу послідовність, стаючи черговим її бітом (див. рис. 3.1).

Рисунок 3.1 – Схема роботи скремблера

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

Декодування заскрембльованої послідовності відбувається по тій же самій схемі, що і кодування.

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

  1. Додавання в потік інформації синхронізуючих бітів, заздалегідь відомих приймальній стороні, що дозволяє їй при незнаходженні такого біта активно почати пошук синхронізації з відправником.
  2. Використання високоточних генераторів тимчасових імпульсів, що дозволяє в моменти втрати синхронізації проводити декодування бітів інформації, що приймаються, “по пам’яті” без синхронізації.

Число бітів, охоплених зворотним зв’язком, тобто розрядність пристрою пам’яті для тих, що породжують кодуючу послідовність біт називається розрядністю скремблера. Зображений вище скремблер має розрядність 5. Відносно параметрів криптостойкості дана величина повністю ідентична довжині ключа блокових шифрів, які будуть проаналізований далі. На даному ж етапі важливо відзначити, що чим більше розрядність скремблера, тим вище криптостойкость системи, заснованої на його використанні.

При достатньо довгій роботі скремблера неминуче виникає його зациклення. Після виконання певного числа тактів в комірках скремблера створиться комбінація бітів, яка в нім вже одного разу була і з цієї миті кодуюча послідовність почне циклічно повторюватися з фіксованим періодом. Дана проблема неусувна за своєю природою, оскільки в N розрядах скремблера не може перебувати більш ніж 2N комбінації бітів і, отже, максимум через 2N-1 циклів повтор комбінації обов’язково відбудеться. Комбінація “всі нулі” відразу ж виключається з ланцюжка графа станів скремблера – вона приводить скремблер до такого ж положення “всі нулі”. Це указує ще і на те, що ключ “всі нулі” непридатний для скремблера. Кожен згенерований при зсуві біт залежить тільки від декількох бітів, що зберігається в даний момент скремблером. Тому після повторення деякої ситуації, що одного разу вже зустрічалася в скремблері, всі наступні за нею в точності повторюватимуть ланцюжок, що вже пройшов раніше в скремблері.

Можливі різні типи графів стану скремблера. На рис 3.2 приведені зразкові варіанти для 3-х розрядного скремблера. У випадку “а” окрім завжди присутнього циклу “000”>>“000” ми бачимо ще два цикли – з 3-мя станами і 4-мя. У разі “б” ми бачимо ланцюжок, який сходиться до циклу з 3-х станів і вже ніколи звідти не виходить. І нарешті, у разі “в” всі можливі стани окрім нульового, об’єднані в один замкнутий цикл. Очевидно, що саме в цьому випадку, коли всі 2N-1 стани системи утворюють цикл, період повторення вихідних комбінацій максимальний, а кореляція між довжиною циклу і початковим станом скремблера (ключем), яка привела б до появи слабкіших ключів, відсутній.

Рисунок 3.2 – Можливі графи стану скремблера

І ось тут математика піднесла прикладній науці, якою є криптографія, черговий подарунок. Наслідком однієї з теорем доводиться (в термінах стосовно скремблювання), що для скремблера будь-якої розрядності N завжди існує такий набір охоплених зворотним зв’язком розрядів, що послідовність біт, що генеруються ним, матиме період, рівний 2N-1 біт. Так, наприклад, в 8 бітному скремблері, при виборі 0-го, 1-го, 6-го і 7-го розрядів за час генерації, 255 біт послідовно проходять всі числа від 1 до 255, не повторюючись жодного разу.

Схеми з вибраними по цьому закону зворотними зв’язками називаються генераторами послідовностей найбільшої довжини (ПНД) і саме вони використовуються в скремблюющій апаратурі. З безлічі генераторів ПНД заданої розрядності в часи, коли вони реалізовувалися на електричній або мінімальній електронній базі вибиралися ті, у яких число розрядів, що беруть участь в створенні чергового біта, було мінімальним. Зазвичай генератора ПНД вдавалося досягти за 3 або 4 зв’язки. Сама ж розрядність скремблерів перевищувала 30  бітів, що давало можливість передавати до 240 бітів = 100 Мбайт інформації без побоювання початку повторення кодуючої послідовності.

ПНД нерозривно пов’язані з математичною теорією неприведених поліномів. Виявляється, достатньо щоб поліном степеня N не можна було представити по модулю 2 у вигляді суми ніяких інших поліномів, для того, щоб скремблер, побудований на його основі, створював ПНД. Наприклад, єдиним неприведеним поліномом степеня 3 є x3+x+1, в двійковому вигляді він записується як 10112 (одиниці відповідають присутнім розрядам). Скремблери на основі неприведених поліномів утворюються відкиданням самого старшого розряду (він завжди присутній, а отже, несе інформацію тільки про степінь полінома), так на основі вказаного полінома, ми можемо створити скремблер 0112 з періодом зациклення 7(=23-1). Природньо, що на практиці застосовуються поліноми значно вищих порядків. Таблиці неприведених поліномів будь-яких порядків, можна завжди знайти в спеціалізованих математичних довідниках.

Істотним недоліком скремблирующих алгоритмів є їх нестійкість до фальсифікації.

3.2.2. Шифр Вернама

Шифр Вернама (інша назва схема одноразових блокнотів) – у криптографії, система симетричного шифрування, винайдена в 1917 році співробітниками AT&T Мейджором Джозефом Моборном і Гільбертом Вернамом. Шифр Вернама є єдиною системою шифрування, для якої доведена абсолютна криптографічна стійкість.

Для шифрування відкритий текст об’єднується операцією “виключаюче АБО” з ключем (названим одноразовим блокнотом або шифроблокнотом). При цьому ключ повинен володіти трьома критично важливими властивостями:

  1.  Бути справді випадковим.
  2.  Збігатися з розміром з заданим відкритим текстом.
  3.  Застосовуватися тільки один раз.

Шифр названий на честь телеграфіста AT&T Гільберта Вернама, що в 1917 році побудував телеграфний апарат, який виконував цю операцію автоматично – треба було тільки подати на нього стрічку з ключем. Не будучи шифрувальником, тим не менше, Вернам вірно помітив важливу властивість свого шифру – кожна стрічка повинна використовуватися тільки один раз і після цього знищуватися. Це було важко застосувати на практиці – тому апарат був перероблений на кілька зациклених стрічок з взаємно простими періодами.

3.2.2.1. Розвиток алгоритму

На початку XX ст. для передачі повідомлень все ширше і ширше використовувалися телетайпи. Тому потрібні були методи, що дозволяли шифрувати текст не до того, як він потрапляв до телеграфіста, а безпосередньо в момент передачі, і, відповідно, розшифровувати в момент прийому. Дуже хотілося доручити цю справу машині. Як виявилося, коливання струму в лінії передачі можна легко записати за допомогою осцилографа і потім перетворити у літери переданого повідомлення. Змінивши з’єднання проводів телетайпа, телеграфісти отримували повідомлення, зашифроване методом одноалфавітної заміни. Всі розуміли, що такий захист надто слабкий, але, не зумівши вигадати нічого іншого, користувалися ним до тих самих пір, поки Вернам не запропонував використовувати для кодування повідомлень особливості телетайпного коду, в якому знак, що кодується виражається у вигляді п’яти елементів. Кожен з цих елементів символізує наявність (“плюс”) або відсутність (“мінус”) електричного струму в лінії зв’язку. Наприклад, літера “А” відповідає комбінація “+ - - - -”. Підготовлене до відправки повідомлення набивається на перфострічці: отвору відповідає “плюс” коду, його відсутність – “мінус”. В процесі передачі металеві щупи телетайпа проходять через отвори, замикаючись у ланцюг, і посилають імпульси струму (“+”). Там, де отворів немає і папір не дозволяє щупам замкнути ланцюг, імпульс не передається.

Для шифрування Вернам запропонував заздалегідь готувати “гаму” – перфострічку з випадковими знаками – і потім електромеханічно складати її імпульси з імпульсами знаків відкритого тексту. Отримана сума представляла собою шифртекст. На приймальному кінці імпульси, отримані по каналу зв’язку, складалися з імпульсами тієї ж самої “гами”, в результаті чого відновлювалися вихідні імпульси повідомлення. А якщо повідомлення перехоплювати, то без “гами” розшифрувати його було неможливо, противник бачив тільки нічого не значущу послідовність “плюсів” і “мінусів”.

Подальше вдосконалення методу, запропонованого Вернамом, належить майбутньому начальнику зв’язку військ США Джозеф Моборну, що об’єднав хаотичність “гами”, на яку спирався Вернам у своїй системі “автоматичного шифрування”, з використовуваним у той час у військах правилом “одноразового шифрблокнота”. Ідея Моборна полягала в тому, що кожна випадкова “гама” повинна використовуватися один, і тільки один раз. При цьому для шифрування кожного знака всіх текстів, які вже передані або будуть передані в найближчому майбутньому, повинен застосовуватися абсолютно новий і такий, що не піддається передбаченню знак “гами”.

3.2.2.2. Властивості

В 1949 році Клод Шеннон опублікував роботу, в якій довів абсолютну стійкість шифру Вернама. Інших шифрів з цією властивістю не існує. Це по суті означає, що шифр Вернама є найбезпечнішою криптосистемою з усіх можливих. При цьому умови, яким повинен задовольняти ключ, настільки сильні, що практичне використання шифру Вернама є важко здійсненним. Тому він використовується тільки для передачі повідомлень найвищої секретності.

3.2.2.3. Технічне застосування

У період між двома світовими війнами в більшості країн з’явилися електромеханічні шифратори. Вони були двох типів. Перший – пристрій, що складається з комутаційних дисків та механізму зміни їх кутових положень. За обома сторонами комутаційного диска розміщені контакти, відповідні алфавіту відкритого та шифрованого тексту. Контакти ці з’єднуються між собою відповідно до деякого правила підстановки, що зветься комутацією диска. Ця комутація визначає заміну літер в початковому кутовому положенні. При зміні кутового положення диска змінюється і правило підстановки. Таким чином, ключ шифрування містить кілька невідомих: схему з’єднання контактів і початкове кутове положення. Якщо після шифрування кожної літери міняти кутове положення диска – отримаємо многоалфавітное шифрування. Ще більш складний пристрій отримаємо, з’єднавши послідовно кілька дисків, кутові положення яких змінюються з різною швидкістю.

Широко відома шифрмашина “Енігма”, якою були оснащені німецькі війська часів Другої світової війни, є типовим прикладом пристрою на комутаційних дисках. Конструктивно “Енігма” була схожа на звичайну друкарську машинку, тільки натискання клавіші призводило не до удару молоточка по папері, а створювало електричний імпульс, що надходив у схему криптоперетворення. Американська шифрмашина М-209 – типовий приклад другого типу шифратора – шифратора на цівочних дисках.

Цікаво, що Радянський Союз виробляв шифрмашини обох названих типів.

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

3.2.2.3. Недоліки

  1.  Для роботи шифру Вернама необхідна дійсно випадкова послідовність нулів та одиниць (ключ). За визначенням, послідовність, отримана з використанням будь-якого алгоритму, є не зовсім випадковою, а псевдовипадковою. Тобто, потрібно отримати випадкову послідовність неалгорітмічно (наприклад, використовуючи радіоактивний розпад ядер, створений електронним генератором білий шум або інші досить випадкові події). Щоб зробити розподіл гранично близьким до рівномірного, випадкову послідовність зазвичай проганяються через хеш-функцію на кшталт MD5.
  2.  Проблемою є таємна передача послідовності та збереження її в таємниці. Якщо існує надійно захищений від перехоплення канал передачі повідомлень, шифри взагалі не потрібні: секретні повідомлення можна передавати по цьому каналу. Якщо ж передавати ключ системи Вернама за допомогою іншого шифру (наприклад, DES), то отриманий шифр буде захищеним рівно настільки, наскільки захищений DES. При цьому, оскільки довжина ключа така ж, як і довжина повідомлення, передати його не простіше, ніж повідомлення. Шифроблокнот на фізичному носії можна вкрасти або скопіювати.
  3.  Можливі проблеми з надійним знищенням використаної сторінки. Цю проблему мають як паперові сторінки блокнота, так і сучасні електронні реалізації з використанням компакт-дисків або флеш-пам’яті.
  4.  Якщо третя сторона якимось чином дізнається повідомлення, вона легко відновить ключ і зможе підмінити повідомлення на інше такої ж довжини.
  5.  Шифр Вернама чутливий до будь-якого порушення процедури шифрування. Наприклад, контррозвідка США часто розшифровувала радянські та німецькі послання із-за неточностей генератора випадкових чисел (програмний генератор псевдовипадкових чисел у німців і друкарка, що б’є по клавішах, в СРСР). Бували випадки, коли одна і та ж сторінка блокнота застосовувалася двічі – США також розшифровувати такі послання.

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

3.2.3. Блочні шифри

Блочні шифри шифрують цілі блоки інформації (від 4 до 32 байт) як єдине ціле – це значно збільшує стійкість перетворень до атаки повним перебором і дозволяє використовувати різні математичні і алгоритмічні перетворення.

На сьогоднішній день розроблено достатньо багато стійких блочних шифрів. Практично всі алгоритми використовують для перетворень певний набір бієктивних (оборотних) математичних перетворень.

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

Ключ Key є параметром блочного криптоалгоритму і є деяким блоком двійкової інформації фіксованого розміру. Початковий (X) і зашифрований (Z) блоки даних також мають фіксовану розрядність, рівну між собою, але необов’язково рівну довжині ключа.

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

В таблиці 3.1 приводяться деякі з всесвітньо відомих криптоалгоритмів, згадки про ефективні методи криптоаналізу яких на момент написання не були поширеними в засобах масової інформації.

Таблиця 3.1 – Широковідомі стійкі криптоалгоритми

Назва алгоритму

Автор

Розмір блоку

Довжина ключа

IDEA

Xuejia Lia and James Massey

64 біти

128 бітів

CAST128

64 біти

128 бітів

BlowFish

Bruce Schneier

64 біти

128 ÷ 448 бітів

ГОСТ

64 біти

256 бітів

TwoFish

Bruce Schneier

128 бітів

128 ÷ 256 бітів

MARS

Корпорація IBM

128 бітів

128 ÷ 1048 бітів

Криптоалгоритм називається ідеально стійким, якщо прочитати зашифрований блок даних можна тільки перебравши всі можливі ключі, до тих пір, поки повідомлення не виявиться осмисленим. Оскільки, згідно теорії ймовірності шуканий ключ буде знайдений з вірогідністю 1/2 після перебору половини всіх ключів, то на злом ідеально стійкого криптоалгоритма з ключем довжини N буде потрібно в середньому 2N-1 перевірка. Таким чином, в загальному випадку стійкість блокового шифру залежить тільки від довжини ключа і зростає експоненціально з її зростанням. Навіть припустивши, що перебір ключів проводиться на спеціально створеній багатопроцесорній системі, в якій завдяки діагональному паралелізму на перевірку 1 ключа витрачатиметься тільки 1 такт, то на злом 128 бітового ключа сучасній техніці буде потрібно не менше 1021 рік. Природно, що все сказане відноситься тільки до ідеально стійких шифрів, якими, наприклад, з великою часткою упевненості є приведені в таблиці вище алгоритми.

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

Таким чином, на функцію стійкого блокового шифру накладаються наступні вимоги:

  1. Функція EnCrypt повинна бути оборотною.
  2. Не повинно існувати інших методів прочитання повідомлення X по відомому блоку Z, окрім як повним перебором ключів Key.
  3. Не повинно існувати інших методів визначення яким ключем Key було проведено перетворення відомого повідомлення X в повідомлення Z, окрім як повним перебором ключів.

Розглянемо методи, за допомогою яких розробники блочних криптоалгоритмів добиваються одночасного виконання цих трьох умов з дуже великою часткою достовірності.

Всі дії, здійснювані блочним криптоалгоритмом над даними, засновані на тому факті, що перетворюваний блок може бути представлений у вигляді цілого невід’ємного числа з діапазону, відповідного його розрядності. Так, наприклад, 32-х бітний блок даних можна інтерпретувати як число з діапазону 0..4294967295 (232-1). Крім того, блок, розрядність якого зазвичай є “степенем двійки”, можна трактувати як декілька незалежних невід’ємних чисел з меншого діапазону (розглянутий вище 32-бітовий блок можна також представити у вигляді 2 незалежних чисел з діапазону 0..65535 або у вигляді 4 незалежних чисел з діапазону 0..255).

Над цими числами блочним криптоалгоритмом проводяться по певній схемі дії описані в таблиці 3.2 (зліва дані умовні позначення цих операцій на графічних схемах алгоритмів):

Таблиця 3.2 – Елементарні операції, які використовуються блочними криптоалгоритмами

Бієктівні математичні функції

Додавання

X’=X+V

Виключає АБО

X’=X XOR V

Множення по модулю 2N+1

X’=(X*V) mod (2N+1)

Множення по модулю 2N

X’=(X*V) mod (2N)

Бітові зсуви

Арифметичний зсув вліво

X’=X SHL V

Арифметичний зсув вправо

X’=X SHR V

Циклічний зсув вліво

X’=X ROL V

Циклічний зсув вправо

X’=X ROR V

Табличні підстановки

S-box (англ. substitute)

X’=Table[X,V]

Як параметр V для будь-якого з цих перетворень може використовуватися:

  1. фіксоване число (наприклад, X’=X+125)
  2. число, що отримується з ключа (наприклад, X’=X+F(Key))
  3. число, що отримується з незалежної частини блоку (наприклад, X2’=X2+F(X1))

Останній варіант використовується в схемі, названій на ім’я її творця – мережею Фейштеля.

Послідовність виконуваних над блоком операцій – це комбінації перерахованих вище варіантів V і самі функції F являють собою “ноу-хау” кожного конкретного блочного криптоалгоритму. Один ÷ два рази на рік дослідницькі центри світу публікують черговий блочний шифр, який через потужну атаку криптоаналітиків або набуває за декілька років статусу стійкого криптоалгоритму або (що відбувається набагато частіше) безславно йде в історію криптографії.

Характерною ознакою блочних алгоритмів є багатократне і непряме використання ключа. Це диктується в першу чергу вимогою неможливості зворотного декодування, відносно ключа, при відомих початковому і зашифрованому текстах. Для вирішення цього завдання в приведених вище перетвореннях найчастіше використовується не саме значення ключа або його частини, а деяка, іноді необоротна (небиективная) функція від бітів ключа. Більш того, в подібних перетвореннях один і той же блок або елемент ключа використовується багато разів. Це дозволяє при виконанні умови оборотності функції щодо величини X зробити функцію необоротною відносно ключа Key.

Оскільки операція шифрування або дешифрування окремого блоку в процесі кодування пакету інформації виконується багато разів (іноді до сотень тисяч разів), а значення ключа і, отже, функцій Vi(Key) залишається незмінним, то іноді стає доцільно заздалегідь одноразово обчислити дані значення і зберігати їх в оперативній пам’яті спільно з ключем. Оскільки ці значення залежать тільки від ключа, то вони у криптографії називаються матеріалом ключа. Необхідно відзначити, що дана операція жодним чином не змінює ні довжину ключа, ні криптостійкість алгоритму в цілому. Тут відбувається лише оптимізація швидкості обчислень шляхом кешування (англ. caching) проміжних результатів. Описані дії зустрічаються практично в багатьох блочних криптоалгоритмах і носять назву розширення ключа (англ. key scheduling).

3.2.4. Шифр Фейштеля

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

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

Класична мережа Фейштеля має структуру зображену на рис. 3.3.

Рисунок 3.3 – Загальна схема роботи мережі Фейштеля

Незалежні потоки інформації, породжені з початкового блоку, називаються гілками мережі. У класичній схемі їх дві. Величини Vi називаються параметрами мережі, зазвичай це функції від матеріалу ключа. Функція F називається створюючою. Дія, що складається з одноразового обчислення створюючої функції і подальшого накладення її результату на іншу гілку з обміном їх місцями, називається циклом або раундом (англ. round) мережі Фейштеля. Оптимальне число раундів K коливається від 8 до 32. Важливе те, що збільшення кількості раундів значно збільшує криптостійкість будь-якого блокового шифру до криптоаналізу. Можливо, ця особливість і вплинула на таке активне розповсюдження мережі Фейштеля – адже при виявленні, скажімо, якого-небудь слабкого місця в алгоритмі, майже завжди досить збільшити кількість раундів на 4 ÷ 8, не переписуючи сам алгоритм. Часто кількість раундів не фіксується розробниками алгоритму, а лише вказуються розумні межі (обов’язково нижня і не завжди верхня межа) цього параметра.

Відразу ж виникає питання, чи є дана схема оборотної? Очевидно, так. Мережа Фейштеля володіє тією властивістю, що навіть, якщо створююча функція F буде необоротною, то і в цьому випадку весь ланцюжок буде відновлений. Це відбувається внаслідок того, що для зворотного перетворення мережі Фейштеля не потрібно обчислювати функцію F-1.

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

З незначними доопрацюваннями мережу Фейштеля можна зробити і абсолютно симетричною, тобто для виконання функцій шифрування і дешифрування буде використовуватися один і то й же набір операцій. Математичною мовою це записується як “Функция EnCrypt тотожно рівна функції DeCrypt”. Якщо ми розглянемо граф станів криптоалгоритму, на якому точками відмічені блоки вхідної і вихідної інформації, то при якомусь фіксованому ключі для класичної мережі Фейштеля ми матимемо картину, зображену на рис. 3.4, а, а в другому випадку кожна пара точок отримає унікальний зв’язок, як зображено на рис. 3.5, б. Модифікація мережі Фейштеля, що володіє подібними властивостями приведена на рис. 3.6. Основна хитрість в цьому випадку у повторному використанні даних ключа в зворотному порядку в другій половині циклу. Необхідно відмітити, проте, що саме із-за цієї недостатньо дослідженої специфіки такої схеми (тобто потенційній можливості ослаблення зашифрованого тексту зворотними перетвореннями) її використовують в криптоалгоритмах з великою обережністю.

Рисунок 3.5 – Граф станів криптоалгоритму

Рисунок 3.6 – Модифікована мережа Фейштеля

Зображену на рис. 3.7 модифікацію мережі Фейштеля для більшого числа віток застосовують набагато частіше. Це в першу чергу пов’язано з тим, що при великих розмірах кодованих блоків (128 і більше бітів) стає незручно працювати з математичними функціями по модулю 64 і вище. Як відомо, основні одиниці інформації оброблювані процесорами на сьогоднішній день – це байт і подвійне машинне слово 32 біта. Тому все частіше і частіше в блочних криптоалгоритмах зустрічається мережа Фейштеля з 4-ма вітками. Для швидшого перемішування інформації між гілками (а це основна проблема мережі Фейштеля з великою кількістю гілок) застосовуються дві модифіковані схеми, так звані “type-2” і “type-3”. Вони зображені на рис. 3.7, б і рис. 3.7, в.

Рисунок 3.7 – Модифікована багатовіткова мережа Фейштеля

Мережа Фейштеля надійно зарекомендувала себе як криптостійка схема перетворень і її можна знайти практично в будь-якому сучасному блочному шифрі. Незначні модифікації стосуються зазвичай додаткових початкових і кінцевих перетворень (англомовний термін – whitening) над шифрованим блоком. Подібні перетворення, що виконуються зазвичай “виключає АБО” або додвання мають на меті підвищити початкову рандомізацію вхідного тексту. Таким чином, криптостійкість блочного шифру, що використовує мережу Фейштеля, визначається на 95% функцією F і правилом обчислення Vi з ключа. Ці функції і є об’єктом все нових і нових досліджень фахівців в області криптографії.

3.2.5. Шифр TEA

Блочний алгоритм TEA (Tiny Encryption Algorithm) представлений як приклад одного з найпростіших в реалізації стійких криптоалгоритмів.

Параметри алгоритму:

  1. Розмір блоку – 64 біта.
  2. Довжина ключа – 128 біти.
  3. У алгоритмі використана мережа Фейштеля з двома вітками в 32 біта кожна.
  4. Функція твірної F оборотна.
  5. Мережа Фейштеля несиметрична із-за використання операції накладення не “виключаюче АБО”, а арифметичне додавання.

Нижче приведений код реалізації криптоалгоритму на мові програмування PASCAL:

type TLong2=array[0.. 1] of longint;

  TLong2x2=array[0.. 1] of TLong2;

const Delta=$9E3779B9;

var   key:TLong2x2;

procedure EnCryptRouting(var data);

var у,z,sum:longint; a:byte;

begin

y:=TLong2(data)[0];z:=TLong2(data)[1];sum:=0;

for a:=0 to 31 do

 begin

 inc(sum,Delta);

 inc(у,((z shl 4)+key[0,0]) xor (z+sum) xor ((z shr 5)+key[0,1]));

 inc(z,((у shl 4)+key[1,0]) xor (y+sum) xor ((у shr 5)+key[1,1]));

 end;

TLong2(data)[0]:=y;TLong2(data)[1]:=z

end;

Схема роботи алгоритму приведена на рис 3.8.

Рисунок 3.8 – Схема роботи алгоритму TEA

Відмінною рисою криптоалгоритма TEA є його розмір. Простота операцій, відсутність табличних підстановок і оптимізація під 32-х розрядну архітектуру процесорів дозволяє реалізувати його на мові ASSEMBLER задопомогою доволі малої кількості інструкцій. Недоліком алгоритму є деяка повільність, викликана необхідністю повторювати цикл Фейштеля 32 рази (це необхідно для ретельного “перемішування даних” через відсутність табличних підстановок).

3.2.6. Стандарт шифрування AES

У 80-х роках в США був прийнятий стандарт симетричного криптоалгоритму для внутрішнього застосування DES (Data Encryption Standard), який набув достатньо широкого поширення свого часу. Проте на даний момент цей стандарт повністю неприйнятний для використання по двох причинах:

  1.  Основна – довжина його ключа складає 56 бітів, що надзвичайно мало на сучасному етапі розвитку ЕОМ.
  2.  Другорядна – при розробці алгоритм був орієнтований на апаратну реалізацію, тобто містив операції, що виконуються на мікропроцесорах за дуже великий час (наприклад, такі як перестановка бітів всередині машинного слова по певній схемі).

Все це сподвигло Американський інститут стандартизації NIST – National Institute of Standards & Technology, на оголошення в 1997 році конкурсу на новий стандарт симетричного криптоалгоритму. Цього разу вже були враховані основні промахи шифру-попередника, а до розробки були підключені найбільші центри по криптології із всього світу. Тим самим, переможець цього змагання, названого AES – Advanced Encryption Standard, мав стати де-факто світовим криптостандартом на найближчих 10-20 років.

Вимоги, пред’явлені до кандидитам на AES в 1998 році, були гранично прості:

  1. Алгоритм повинен бути симетричним.
  2. Алгоритм повинен бути блочним шифром.
  3. Алгоритм повинен мати довжину блоку 128 бітів і підтримувати три довжини ключа: 128, 192 і 256 бітів.

Додатково кандидатам рекомендувалося:

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

На першому етапі в оргкомітет змагання поступило 15 заявок з абсолютно різних куточків світу. Протягом 2 років фахівці комітету, досліджуючи самостійно і вивчаючи публікації інших дослідників, вибрали 5 кращих представників, що пройшли в “фінал” змагання.

Таблиця 3.3 – Фіналісти конкурсу AES

Алгоритм

Творець

Країна

Швидкодія (asm, 200МГц)

MARS

IBM

US

8 Мбайт/с

RC6

R.Rivest & Co

US

12 Мбайт/с

Rijndael

V.Rijmen & J.Daemen

BE

7 Мбайт/с

Serpent

Universities

IS, UK, NO

2 Мбайт/с

TwoFish

B.Schneier & Co

US

11 Мбайт/с

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

2 жовтня 2000 року NIST оголосив про свій вибір – переможцем конкурсу став бельгійський алгоритм RIJNDAEL. З цієї миті з алгоритму-переможця зняті всі патентні обмеження – його можна буде використовувати в будь-якій криптопрограмі без відрахування яких-небудь засобів творцеві.

Нижче буде розглянуто основні (робочі) частини алгоритмів переможців першого етапу. Повний опис всіх 15 алгоритмів претендентів на AES, включаючи дослідження по їх криптостойкости можна знайти на сервері інституту NIST.

3.2.6.1. Фіналіст AES – шифр MARS

Розробка корпорації IBM, заснована на класичній мережі Фейштеля і численних математичних операціях.

Шифр складається з трьох видів операцій, які повторюються спочатку в прямому, а потім в інверсному порядку. На першому кроці йде класичне вхідне “забілення”: до всіх байтів початкового тексту додаються байти з матеріалу ключа.

Другий етап: пряме перемішування, однотипна операція, що має структуру мережі Фейштеля, повторюється 8 разів. Проте, на цьому етапі не проводиться додавання матеріалу ключа. Мета даного перетворення – ретельна рандомізація даних і підвищення стійкості шифру до деяких видів атак (рис. 3.9).

Третій етап: власне шифрування. У нім використовується мережа Фейштеля треьего типу з 4 вітками, тобто значення трьох функцій, обчислених від однієї гілки накладаються відповідно на три інших, потім йде перестановка машинних слів. Ця операція також повторюється 8 разів (рис. 3.9). Саме на цьому етапі відбувається змішування тексту з основною (більшою) частиною матеріалу ключа. Самі функції, що накладаються на вітки, зображені на рис. 3.10. Можна замітити, що в алгоритмі MARS використані практично всі види операцій, використовуваних в криптографічних перетвореннях: додвання, “виключаюче АБО”, зсув на фіксоване число бітів, зсув на змінне число бітів, множення і табличні підстановки.

У другій частині операції шифрування повторюються, ті ж операції, але у зворотному порядку: спочатку шифрування, потім перемішування, і, нарешті, “забілення”. При цьому до других варіантів всіх операцій внесені деякі зміни так, щоб криптоалгоритм в цілому став абсолютно симетричним. Тобто, в алгоритмі MARS для будь-якого X виконується вираз EnCrypt(EnCrypt(X))=X.

Рисунок 3.9 – Загальна схема роботи шифру MARS

Рисунок 3.10 – Схема роботи F-функції

3.2.6.2. Фіналіст AES – шифр RC6

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

Алгоритм є мережею Фейштеля з 4 вітками змішаного типу: у ньому два парні блоки використовуються для одночасної зміни вмісту двох непарних блоків. Потім проводиться звичайний для мережі Фейштеля зсув на одне машинне слово, що міняє парні і непарні блоки місцями. Сам алгоритм гранично простий і зображений на рис. 3.11. Розробники рекомендують при шифруванні використовувати 20 раундів мережі, хоча в принципі їх кількість не регламентується. При 20 повторах операції шифрування алгоритм має найвищу швидкість серед 5 фіналістів AES.

Рисунок 3.11 – Загальна схема роботи криптоалгоритму RC6

Перетворення дуже просте: . Воно використовується як нелінійне перетворення з хорошими показниками перемішування бітового значення вхідної величини.

3.2.6.3. Фіналіст AES – шифр Serpent

Шифр використовує тільки операції табличних підстановок, “виключаюче АБО” і бітових зсувів в ретельно підібраній послідовності.

Алгоритм розроблений групою учених з декількох дослідницьких центрів світу. Алгоритм є мереж Фейштеля для чотирьох віток змішаного типу: 2 парних вітки змінюють спільно значення непарних, потім міняються місцями. Алгоритм складається з 32 раундів. Самі раунди складені таким чином, що додавання до вітки матеріалу ключа на першому і останньому раундах утворює вхідне і вихідне “забілення”.

Рисунок 3.12 – Загальна схема роботи криптоалгоритму Serpent

3.2.6.4. Фіналіст AES – шифр TwoFish

Алгоритм розроблений компанією Counterpain Security Systems, очолюваною Брюсом Шнаєром (англ. Bruce Schneier). Попередня програмна розробка цієї фірми, BlowFish, є і до цих пір визнаним криптостійким алгоритмом.

В алгоритмі TwoFish розробники залишили деякі вдалі рішення з проекту-попередника, окрім цього провели ретельні дослідження по перемішуванню даних в мережі Фейштеля. Алгоритм є мережею Фейштеля змішаного типу: перша і друга вітки на непарних раундах проводять модифікацію третьої і четвертої, на парних раундах ситуація міняється на протилежну. У алгоритмі використовується шифроперетворення Адамара (англ. Pseudo-Hadamar Transform) – оборотне арифметичне додавання першого потоку з другим, а потім другого з першим.

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

Рисунок 3.12 - Загальна схема роботи криптоалгоритму TwoFish

3.2.6.5. Фіналіст AES – шифр Rijndael

Блочний шифр реалізований не за принципом мережі Фейштеля, має під собою надійну математичну базу перетворень. Структура алгоритму дозволяє досягти дуже високого ступеня оптимізації на персональних ЕОМ і серверах, і в той же час не дуже уповільнює виконання на електронних пристроях з обмеженими ресурсами.

Даний алгоритм розроблений двома фахівцями з криптографії з Бельгії. Він є нетрадиційним блочним шифром, оскільки не використовує мережу Фейштеля для шифроперетворень. Алгоритм представляє кожен блок кодованих даних у вигляді двовимірного масиву байт розміром 4х4, 4х6 або 4х8 залежно від встановленої довжини блоку. Далі, на відповідних етапах, перетворення проводяться над незалежними стовпцями або над незалежними рядками, або взагалі над окремими байтами в таблиці.

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

Алгоритм складається з деякої кількості раундів (від 10 до 14 – це залежить від розміру блоку і довжини ключа), в яких послідовно виконуються наступні операції:

  1. ByteSub – таблична підстановка 8х8 бітів (рис. 3.13).

Рисунок 3.13 – ByteSub

  1. ShiftRow – зміщення рядків у двовимірному масиві на різні позиції (рис. 3.14).

Рисунок 3.14 – ShiftRow

  1. MixColumn – математичне перетворення, що перемішує дані всередині стовпця (рис. 3.15).

Рисунок 3.15 – MixColumn

  1. AddRoundKey – додавання матеріалу ключа операцією XOR (рис. 3.16).

Рисунок 3.16 – AddRoundKey

У останньому раунді операція перемішування стовпців відсутня, що робить всю послідовність операцій симетричної.

3.2.7. Симетрична криптографічна система

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

Весь опис, який був проведений раніше, стосувалися тільки криптоалгоритмів, тобто методів перетворення невеликого блоку даних (від 4 до 32 байт) в зашифрований вигляд залежно від заданого двійкового ключа. Криптоалгоритми, поза сумнівом, є “серцем” криптографічних систем, але їх безпосереднє застосування без певних модифікацій для шифрування великих об’ємів даних насправді не дуже зручне.

Всі недоліки безпосереднього застосування криптоалгоритмів усуваються в криптосистемах. Криптосистема – це завершена комплексна модель, що здатна проводити двосторонні криптоперетворення даних довільного об’єму і підтверджувати час відправки повідомлення, володіє механізмом перетворення паролів і ключів і системою транспортного кодування. Таким чином, криптосистема виконує три основні функції:

  1. посилення захищеності даних
  2. полегшення роботи з криптоалгоритмом з боку людини
  3. забезпечення сумісності потоку даних з іншим програмним забезпеченням.

Конкретна програмна реалізація криптосистеми називається криптопакетом.

3.2.7.1. Алгоритми створення ланцюжків

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

Перше завдання, з яким можна зіткнутися при шифруванні даних криптоалгоритмом, – це дані з довжиною не рівною дивжині блоку шифрування криптоалгоритма. Ця ситуація матиме місце практично завжди.

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

Проблема друга: а що коли даних не 24 байти, а 21 байт. Не шифрувати останні 5 байт або чимось заповнювати ще 3 байти, а потім при дешифровці їх викидати. Перший варіант взагалі нікуди не годиться, а при використанні другого виникає питання чим заповнювати недостающі байти.

Для вирішення цих проблем і були введені в криптосистеми алгоритми створення ланцюжків (англ. chaining modes). Найпростіший метод вже, в принципі, був описаний. Це метод ECB (Electronic Code Book). Шифрований блок даних тимчасово розділяється на блоки, рівні блокам алгоритму, кожен з них шифрується незалежно, а потім із зашифрованих пакетів даних компонується в тій же послідовності вхідний блок, який відтепер надійно захищений криптоалгоритмом. Назву алгоритм отримав через те, що через свою простоту він широко застосовувався в простих портативних пристроях для шифрування – електронних шифрокнижках. Схема даного методу приведена на рис. 3.17.

Рисунок 3.17 – Схема роботи ECB

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

Вказаним вище недоліком цієї схеми є те, що при повторі в початковому тексті однакових символів протягом більш, ніж 2*N байт (де N – розмір блоку криптоалгоритму), у вихідному файлі будуть присутні однакові зашифровані блоки. Тому, для “могутнішого” захисту великих пакетів інформації за допомогою блочних шифрів застосовуються декілька оборотних схем “створення ланцюжків”. Всі вони майже рівнозначні по криптостійкості, кожна має деякі переваги і недоліки, залежні від виду початкового тексту.

Всі схеми створення ланцюжків засновані на ідеї залежності результуючого зашифровуваного блоку від попередніх або від позиції його в початковому блоці даних. Це досягається за допомогою блоку “пам’яті” – пакету інформації довжини, рівній довжині блоку алгоритму. Блок пам’яті (до нього застосовують термін IV – англ. Initial Vector) обчислюється за певним принципом зі всіх минулих шифрування блоків, а потім накладається за допомогою якої-небудь оборотної функції (зазвичай XOR) на оброблюваний текст на одній із стадій шифрування. В процесі дешифрування на приймальній стороні операція створення IV повторюється на основі прийнятого і розшифрованого тексту, унаслідок чого алгоритми створення ланцюжків повністю оборотний.

Два найбільш поширених алгоритму створення ланцюжків – CBC і CFB. Їх структура приведена на рис. 3.18 і рис. 3.19. Метод CBC отримав назву від англійської абревіатури Cipher Block Chaining – об’єднання в ланцюжок блоків шифру, а метод CFB – від Cipher FeedBack – зворотний зв’язок по шифроблоку.

Рисунок 3.18 – Схема роботи CBC

Рисунок 3.19 – Схема роботи CFB

Ще один метод OFB (англ. Output FeedBack – зворотній зв’язок по виходу) має дещо іншу структуру (вона зображена на рис. 3.20.): у ній значення накладуване на шифрований блок не залежить від попередніх блоків, а тільки від позиції шифрованого блоку (у цьому сенсі він повністю відповідає скремблерам), і через це він не поширює перешкоди на подальші блоки. Очевидно, що всі алгоритми створення ланцюжків однозначно відновлювальні.

Рисунок 3.20 – Схема роботи OFB

Таблиця 3.4 – Порівняльна характеристика створення ланцюжків

Метод

Шифрування блоку залежить від

Спотворення одного біта при передачі

Чи кодується некратне блоку число байт без доповнення?

На вихід криптосистеми поступає

ECB

поточного блоку

спотворює весь поточний блок

немає

вихід криптоалгоритму

CBC

всіх попередніх блоків

спотворює весь поточний і всі подальші блоки

немає

вихід криптоалгоритму

CFB

всіх попередніх блоків

спотворює один біт поточного блоку і всі подальші блоки

так

XOR маска з початковим текстом

OFB

позиції підблоку у вхідному блоці

спотворює тільки один біт поточного блоку

так

XOR маска з початковим текстом

3.2.7.2. Методи рандомізації повідомлень

Двома основними методиками внесення випадковості в процес шифрування є:

  1. Внесення випадкових біт до самого шифрованого файлу з ігноруванням їх на дешифруючій стороні.
  2. Шифрування початкового файлу випадковим ключем.

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

В цьому випадку необхідне введення якої-небудь випадкової величини в процес шифрування. Це можна зробити декількома способами:

  1. Записом в початок вхідного блоку даних псевдовипадкової послідовності байт заздалегідь обумовленої довжини з відкиданням її при дешифровці – цей метод працюватиме тільки при застосуванні алгоритмів створення ланцюжків з пам’яттю (CBC,CFB,OFB).
  2. Застосуванням модифікованих алгоритмів створення ланцюжків, які при шифруванні кожного блоку змішують з ним або фіксовану випадкову величину, прикріплену на початок зашифрованого блоку даних, або значення, що обчислюються за допомогою того ж шифру і ключа від заздалегідь обумовленої величини.
  3. Створенням спеціально для кожного вхідного блоку даних абсолютно випадкового ключа, так званого ключа сеансу, яким і шифрується весь цей блок (сам же ключ сеансу шифрується первинним ключем, так званим в цьому випадку мастер-ключом і поміщається на початку зашифрованого блоку).

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

3.2.7.3. Генератори випадкових і псевдовипадкових послідовностей

Генератори випадкових послідовностей грають велику роль в сучасній криптографії. У тому випадку, коли послідовність, що генерується, заснована тільки на стані ЕОМ, вона називається псевдовипадковою. Дійсно випадковими є тільки деякі фізичні процеси і людський чинник.

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

Розглянемо проблему створення випадкових і псевдовипадкових чисел детальніше. Найчастіше в прикладних завданнях результат формують з лічильника тактів – системного годинника. В цьому випадку дані про поточну годину несуть приблизно 16 біт інформації, значення лічильника тактів – ще 16 бітів. Це дає разом 32 біта інформації – на сьогоднішній день межею стійкої криптографії є значення в 40 бітів, при реальних довжинах ключів в 128 бітів. Далі, до 32 біт можна додати ще 16 бітів з надшвидкого таймера, що працює на частоті 1,2 МГц в комп’ютерах архітектури IBM РС AT і цього ще недостатньо. Крім того, навіть якщо можна буде набрати довжину ключа в 128 бітів (що дуже сумнівно), вона нестиме псевдовипадковий характер, оскільки заснована на стані тільки даної ЕОМ на момент початку шифрування. Джерелами по-справжньому випадкових величин можуть бути тільки зовнішні об’єкти, наприклад, людина.

Два найчастіше вживаних методи створення випадкових послідовностей за допомогою людини засновані на введенні з клавіатури. У обох випадках користувача просять, не замислюючись, понабирати на клавіатурі безглузді поєднання букв.

По першому методу над самими введеними значеннями проводяться дії, що підвищують випадковість вихідного потоку. Так, наприклад, обов’язково видаляються верхні 3 біта введеного символу ASCII, часто видаляється ще один верхній і ще один нижний біт. Потім, об’єм отриманої послідовності зменшується ще в три рази накладенням першого і другого біта на третій операцією XOR. Це, в принципі, генерує достатньо випадкову послідовність бітів.

По другому методу на введені символи алгоритм не звертає ніякої уваги, зате конспектує інтервали часу, через які відбулися натиснення. Запис моментів проводиться по відліках швидкого системного таймера (частота 1,2 МГц) або внутрішньому лічильнику процесора, що з’явився в процесорах, починаючи з Intel Pentium (частота відповідає частоті процесора). Оскільки верхні і молодші біти мають певну кореляцію між символами (перші із-за фізичних характеристик людини, другі із-за особливостей операційної системи), то вони відкидаються (зазвичай видаляються 0 ÷ 8 старших біта і 4 ÷ 10 молодших).

Деколи можна зустріти і інші методи генерування випадкової послідовності, яеі базуються на: комбінаціях обох клавіатурних методів і на заснованні маніпулятора “миша” – він видає випадкову інформацію із зсувів користувачем покажчика миші.

У могутніх криптосистемах військового застосування використовуються дійсно випадкові генератори чисел, засновані на фізичних процесах. Вони є платами або зовнішніми пристроями, що підключаються до ЕОМ через порт вводу-виводу. Два основні джерела білого шуму Гауса – високоточне вимірювання теплових флуктуацій і запис радіоефіру на частоті вільній від радіомовлення.

3.3. Архівація

Архівація (стиснення даних) – це процес представлення інформації в іншому вигляді (перекодування) з потенційним зменшенням об’єму, потрібного для її зберігання. Існує безліч класів різних алгоритмів стиснення даних, кожен з яких орієнтований на свою область застосування.

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

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

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

Всі алгоритми стиснення даних якісно діляться на:

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

У криптосистемах, природньо, використовується тільки перша група алгоритмів.

Існує два основні методи архівації без втрат:

  1. Алгоритм Хаффмана (англ. Huffman), орієнтований на стиснення послідовностей байт, не зв’язаних між собою.
  2. Алгоритм Лемпеля-Зіва (англ. Lempel, Ziv), орієнтований на стиснення будь-яких видів текстів, тобто використовуючий факт неодноразового повторення “слів” – послідовностей байт.

Практично всі популярні програми архівації без втрат (ARJ, RAR, ZIP і тому подібне) використовують об’єднання цих двох методів – алгоритм LZH.

3.3.1. Алгоритм Хаффмана

Алгоритм стиснення орієнтований на неосмислені послідовності символів якого-небудь алфавіту. Необхідною умовою для стиснення є різна вірогідність появи цих символів.

Алгоритм заснований на тому факті, що деякі символи із стандартного 256-символьного набору в довільному тексті можуть зустрічатися частіше за середній період повтору, а інші, відповідно, – рідше. Отже, якщо для запису поширених символів використовувати короткі послідовності бітів, завдовжки менше 8, а для запису рідкісних символів – довгі, то сумарний об’єм файлу зменшиться.

Хаффман запропонував дуже простий алгоритм визначення того, який символ необхідно кодувати яким кодом для отримання файлу з довжиною, дуже близькою до його ентропії (тобто інформаційній насиченості). Нехай є список всіх символів, що зустрічаються в початковому тексті, причому відома кількість появ кожного символу в нім. Необхідно виписати їх вертикально в ряд у вигляді вершин майбутнього графа по правому краю листа (рис. 3.21, а). Вибрати два символи з найменшою кількістю повторень в тексті (якщо три або більше число символів мають однакові значення, вибирати будь-які два з них). Провести від них лінії вліво до нової вершини графа і записати в неї значення, рівне сумі частот повторення кожного з об’єднуваних символів (рис. 3.21, б). Відтепер не потрібно брати до уваги при пошуку найменших частот повторення два об’єднані вузли (для цього потрібно стерти числа в цих двох вершин), але потрібно розглядати нову вершину як повноціну з частотою появи, рівній сумі частот появи двох вершин, що з’єдналися. Повторювати операцію об’єднання вершин до тих пір, поки не відбудеться сходження до однієї вершини з числом (рис. 3.21, в і рис. 3.21, г). Тепер потрібно розставити на двох ребрах графа, виходящих з кожної вершини, біти 0 і 1 довільно – наприклад, на кожному верхньому ребрі 0, а на кожному нижнем – 1. Тепер для визначення коду кожної конкретної букви необхідно просто пройти від вершини дерева до неї, виписуючи нулі і одиниці по маршруту проходження. Для рис 3.21 символ “А” отримує код “000”, символ “Б” – код “01”, символ “К” – код “001”, а символ “О” – код “1”.

Рисунок 3.21 – Схема роботи алгоритму Хаффмана

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

3.3.2. Алгоритм Лемпеля-Зіва

Цей алгоритм стиснення заснований навпаки на кореляціях між розташованими поряд символами алфавіту (словами, послідовностями, заголовками файлів фіксованої структури).

Класичний алгоритм Лемпеля-Зіва – LZ77, названий так по року своєї публікації, гранично простий. Він формулюється таким чином: “якщо в тому, що пройшов раніше вихідному потоці вже зустрічалася подібна послідовність байт, причому запис про її довжину і зсув від поточної позиції коротше чим сама ця послідовність, то у вихідний файл записується посилання (зсув, довжина), а не сама послідовність”. Так фраза “КОЛОКОЛ_ОКОЛО_КОЛОКОЛЬНИ закодується як “КОЛО(-4,3)_(-5,4)О_(-14,7)ЬНИ”.

Поширений метод стиснення RLE (англ. Run Length Encoding), який полягає в записі замість послідовності однакових символів одного символу і їх кількості, є підкласом даного алгоритму. Розглянемо, наприклад, послідовність “ААААААА. За допомогою алгоритму RLE вона буде закодована як “(А,7)”, в той же час її можна досить добре стиснути і за допомогою алгоритму LZ77: “А(-1,6)”. Дійсно, ступінь стиснення саме такої послідовності ним гірше (приблизно на 30 ÷ 40%), але сам по собі алгоритм LZ77 більш універсальний, і може набагато краще обробляти послідовності взагалі нестискувані методом RLE.

3.4. Хешування паролів

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

При розробці будь-якого криптоалгоритму слід враховувати, що в половині випадків кінцевим користувачем системи є людина, а не автоматична система. Це ставить питання про те, зручно, і взагалі чи реально людині запам’ятати 128-бітовий ключ (32 шістнадцяткових цифри). Насправді межа запомятованості лежить на межі 8÷12 символів, а, отже, якщо примушувати користувача оперувати саме ключем, то тим самим він практично буде змушений записатина його на якому-небудь листку паперу або електронному носієві, наприклад, в текстовому файлі. Це, природно, різко знижує захищеність системи.

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

  1.  Хеш-функція має нескінченну область визначення.
  2.  Хеш-функція має кінцеву область значень.
  3. Вона необоротна.
  4. Зміна вхідного потоку інформації на один біт міняє близько половини всіх біт вихідного потоку, тобто результат хеш-функції.

Ці властивості дозволяють подавати на вхід хеш-функції паролі, тобто текстові рядки довільної довжини на будь-якій національній мові і, обмеживши область значень функції діапазоном 0..2N-1, де N – довжина ключа в бітах, отримувати на виході досить рівномірно розподілені по області значення блоки інформації – ключі.

Необхідно відмітити, що вимоги, 3 і 4 подібні вимогам до блочних шифрів. Це вказує на один з можливих шляхів реалізації стійких хеш-функций – проведення блочних криптоперетворень над матеріалом рядка-пароля. Цей метод і використовується в різних варіаціях практично у всіх сучасних криптосистемах. Матеріал рядка-пароля багато разів послідовно використовується як ключ для шифрування деякого заздалегідь відомого блоку даних – на виході виходить зашифрований блок інформації, що однозначно залежний тільки від пароля і при цьому має достатньо хороші статистичні характеристики. Такий блок або декілька таких блоків і використовуються як ключ для подальших криптоперетворень.

Характер застосування блочного шифру для хешування визначається відношенням розміру блоку використовуваного криптоалгоритму і розрядністю необхідного хеш-результата.

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

,

де – використовуваний блочний шифр (рис. 3.22).

Останнє значення Hk використовується як шуканий результат.

Рисунок 3.22 – Схема хешування

У тому випадку, коли довжина ключа рівно в два рази перевищує довжину блоку, а подібна залежність досить часто зустрічається в блочних шифрах, використовується схема, що нагадує мережу Фейштеля. Характерним недоліком приведеної вище формули і хеш-функції, заснованою на мережі Фейштеля, є велика ресурсоемкость відносно пароля. Для проведення тільки одного перетворення, наприклад, блочним шифром з ключем завдовжки 128 біт використовується 16 байт рядка-пароля, а сама довжина пароля рідко перевищує 32 символи. Отже, при обчисленні хеш-функции над паролем будуть проведено максимум 2 “повноцінних” криптоперетворення.

Вирішення цієї проблеми можна досягти двома шляхами:

  1. Заздалегідь “розмножити” рядок-пароль, наприклад, записавши його багато разів послідовно для досягнення довжини, скажімо, в 256 символів.
  2. Модифікувати схему використання криптоалгоритма так, щоб матеріал рядка-пароля “повільніше” витрачався при обчисленні ключа.

По іншому шляху пішли дослідники Девіс і Майер, що запропонували алгоритм також на основі блочного шифру, але використовуючи матеріал рядка-пароля багато разів і невеликими порціями. У цьому способі є присутні елементи обох приведених вище схем, але криптостійкість цього алгоритму підтверджена численними реалізаціями в різних криптосистемах. Алгоритм отримав назву “Tandem DM” (рис. 3.23):

G0=0;

H0=0;

FOR J = 1 TO N DO

BEGIN

 TMP=EnCrypt(H[G,PSWj]);

 H’=H XOR TMP;

 TMP=EnCrypt(G[PSWj,TMP]);

 G’=G XOR TMP;

END;

Key=[Gk,Hk];

Квадратними дужками (X16=[A8,B8]) тут позначено просте об’єднання (склеювання) двох блоків інформації рівної величини в один – подвоєної розрядності. А як процедура EnCrypt(X, Key) знову може бути вибраний будь-який стійкий блочний шифр. Як видно з формул, даний алгоритм орієнтований на те, що довжина ключа двократно перевищує розмір блоку криптоалгоритму. А характерною особливістю схеми є той факт, що рядок пароля прочитується блоками по половині довжини ключа, і кожен блок використовується в створенні хеш-результата двічі. Таким чином, при довжині пароля в 20 символів і необхідності створення 128 бітового ключа внутрішній цикл хеш-функції повториться 3 рази.

Рисунок 3.32 – Схема роботи хеш-функції Tandem DM

3.5. Транспортне кодування

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

Оскільки системи шифрування даних часто використовуються для кодування текстової інформації: листування, рахунків, платежів електронної комерції і при цьому криптосистема повинна бути абсолютно прозорою для користувача, то над вихідним потоком криптосистеми часто проводиться транспортне кодування, тобто додаткове кодування (не шифрування) інформації лише для забезпечення сумісності з протоколами передачі даних.

Вся річ у тому, що на виході криптосистеми байт може приймати всі 256 можливих значень, незалежно від того чи був вхідний потік текстовою інформацією чи ні. А при передачі поштових повідомлень багато систем орієнтовано на те, що допустимі значення байтів тексту лежать у вужчому діапазоні: всі цифри, розділові знаки, алфавіт латиниці і, можливо, національної мови. Перші 32 символи набору ASCII служать для спеціальних цілей. Для того, щоб вони і деякі інші службові символи ніколи не з’явилися у вихідному потоці використовується транспортне кодування.

Найбільш простий метод полягає в записі кожного байта двома шістнадцятковими цифрами-символами. Так байт 252 буде записаний двома символами ‘FC’; байт з кодом 26, що потрапляє на спеціальний символ CTRL-Z, буде записаний двома допустимими символами ‘1A’. Але ця схема дуже надмірна: у одному байті передається тільки 4 біта інформації.

Насправді практично в будь-якій системі комунікації без проблем можна передавати близько 68 символів (латинський алфавіт рядковий і прописний, цифри і розділові знаки). З цього виходить, що цілком реально створити систему з передачею 6 бітів в одному байті, тобто кодувати 3 байти довільного змісту 4-ма байтами з виключно дозволених (так званих друкарських) символів. Подібна система була розроблена і стандартизована на рівні протоколів мережі Інтернет – це система Base64.

Процес кодування перетворює 4 вхідних символи у вигляді 24-бітової групи, обробляючи їх зліва направо. Ці групи потім розглядаються як 4 сполучених 6-бітових групи, кожна з яких транслюється в одиночну цифру алфавіту Base64. При кодуванні Base64 вхідний потік байтів повинен бути впорядкований старшими бітами вперед.

Кожна 6-бітова група використовується як індекс для масиву 64-х друкарських символів. Символ, на який указує значення індексу, поміщається у вихідний рядок. Ці символи вибрані так, щоб їх можна було універсально представити і виключають символи, що мають спеціальне значення (“.”, CR, LF).

                       Алфавит Base64

   Значение Код    Значение Код    Значение Код    Значение Код

          0 A            17 R            34 i            51 z

          1 B            18 S            35 j            52 0

          2 C            19 T            36 k            53 1

          3 D            20 U            37 l            54 2

          4 E            21 V            38 m            55 3

          5 F            22 W            39 n            56 4

          6 G            23 X            40 o            57 5

          7 H            24 Y            41 p            58 6

          8 I            25 Z            42 q            59 7

          9 J            26 a            43 r            60 8

         10 K            27 b            44 s            61 9

         11 L            28 c            45 t            62 +

         12 M            29 d            46 u            63 /

         13 N            30 e            47 v    заповнювач =

         14 O            31 f            48 w

         15 P            32 g            49 x

         16 Q            33 h            50 y

Вихідний потік (закодовані байти) повинен мати довжину рядків не більше 76 символів. Всі ознаки перекладу рядка і інші символи, відсутні в таблиці приведеній вище, повинні бути проігноровані декодером Base64 і про них повинно бути сповіщено користувачеві як про помилку.

Якщо у кінці потоку кодованих даних залишилося менше, ніж 24 біта, справа додаються нульові біти до утворення цілого числа 6-бітових груп. А до кінця 24-бітової групи може залишатися тільки від 0 до 3-х недостатніх 6-бітових груп, замість кожної з яких ставиться символ-заповнювач “=“. Оскільки всім вхідним потоком є ціле число 8-бітових груп, то можливі лише наступні випадки:

  1. Вхідний потік закінчується рівно 24-бітовою групою (довжина даних кратна 3). У такому випадку вихідний потік закінчуватиметься чотирма символами Base64 без будь-яких додаткових символів.
  2. Останній блок вхідного потоку має довжину 8 бітів. Тоді в кінці вихідного коду будуть два символи Base64, з додаванням двох символів “=“.
  3. Останній блок вхідного потоку має довжину 16 бітів. Тоді в кінці вихідного потоку стоятимуть три символи Base64 і один символ “=“.

Оскільки символ “=“ є хвостовим заповнювачем, його поява в тілі повідомлення може означати тільки те, що кінець даних досягнутий. Але спиратися на пошук символу “=“ для виявлення кінця файлу невірно, оскільки, якщо число переданих бітів кратне 24, то у вихідному файлі не з’явиться жодного символу “=“.

3.6. Загальна схема симетричної криптосистеми

Загальна схема симетричної криптосистеми з урахуванням всіх розглянутих вище пунктів зображена на рис. 3.33. Згідно цієї схеми вхідний потік даних в процесі захисту спочатку може архівуватися з метою розсіювання статистичних характеристик вхідних даних (до статистичних характеристик належить, наприклад, частота появлення букв у тексті). Архівація є не обовязковим етапом, але бажаним, оскільки підвищує стійкість системи до взлому. Наступним етапом є безпосередньо шифрування. Блок шифрування має два входи і один вихід – зашифрований потік даних (закритий текст). На один з входів блоку шифрування подається відкритий текст (можливо попередньо архівований), а на інший – ключ шифрування. Ключ шифрування може генеруватися певним випадковим чином (криптографічна стійкість алгоритму генерування випадкових паролів теж відіграє важливу роль), або створюватися з пароля, за допомогою його хешування. Після шифрування закритий текст може бути підданий транспортному кодуванню, яке дозволяє передавати довільний потік байтів, за допомогою протоколів, які підтримують лише алфавітно-цифрову інформацію, наприклад, POP3.

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

Рисунок 3.33 – Загальна схема симетричної криптосистеми


 

А также другие работы, которые могут Вас заинтересовать

34661. Доступ к системным ресурсам. Определение переменной как Absolute. Предопределенные массивы MEM. Прерывания. Обработка прерываний 66 KB
  Прерывания. Прерывания Прерывание это особое состояние вычислительного процесса. В момент прерывания нарушается нормальный порядок выполнения команд программы и управление передается специальной процедуре которая входит в состав ДОС и называется процедурой обработки прерывания. В архитектуре центрального процессора ПК предусмотрены прерывания двух типов аппаратные и программные.
34662. Введение. История развития языков программирования 38.76 KB
  На занятиях по дисциплине АО мы будем изучать язык Паскаль. Паскаль язык программирования который относительно прост в изучении довольно ясен и логичен и будучи первым изучаемым языком программирования приучает к хорошему стилю. Паскаль стал наследником Алгола. Время рождения языка Паскаль начало 70х годов.
34663. Итерационные алгоритмы 41 KB
  Особенностью итерационного цикла является то что число повторений операторов тела цикла заранее неизвестно. Выход из итерационного цикла осуществляется в случае выполнения заданного условия. Особенностью же нашей конкретной задачи является то что число слагаемых а следовательно и число повторений тела цикла заранее неизвестно. Поэтому выполнение цикла должно завершиться в момент достижения требуемой точности.
34664. Основы комбинаторики 56 KB
  При выборе m элементов из n различных элементов принято говорить что они образуют соединение из n элементов по m. Перестановка Соединение каждое из которых содержит n различных элементов взятых в определенном порядке называются перестановками из n элементов n=m. Сочетание Соединения отличающиеся друг от друга каждое из которых содержит m элементов взятых из n элементов называется сочетанием из n элементов по m n m. Размещение с повторением Размещение из n элементов в каждое из которых входит m элементов причем один и тот же...
34665. Компоненты страницы Win32, их назначение, свойства, примеры применения 1.34 MB
  Свойства компонента: property DisplyRect: TRect; Определяет рабочую зону компонента предназначенную для размещения других компонентов. Клиентская часть компонента содержит зону закладок и рабочую зону property HotTrck: Boolen; Если содержит True название закладки автоматически выделяется цветом при перемещении над ней указателя мыши property Imges: TCustomImgeList; Определяет объект хранилище изображений которые будут прорисовываться слева от текста property MultiLine: Boolen; Разрешает расположение закладок в несколько рядов. Если...
34666. Массивы: определение, описание, размещение в памяти, использование 55 KB
  Структурная схема массива. Type имя типа = RRY [ тип индекса ] OF тип элементов VR имя переменной : имя типа ; При таком способе описания в разделе Type описывается тип массива который будет использоваться в программе то есть его размер и тип элементов. С отдельным элементом массива можно делать все что с любой переменной. Обращаться к элементу массива надо указывая имя переменной с номером элемента в квадратных скобках.
34667. Метод пошаговой детализации в программировании 407.08 KB
  Полностью закончив детализацию всех блоков получаем решение задачи в целом. Детализируем операцию определения x: Определить x Определить x1 такое что fx1 =y Определить x2 такое что fx2 =y Определить x на интервале [x1 x2] Все. Таким образом определим значение x1 удовлетворяющее данному условию: Определить x1: x1:=1 цикл пока fx1 y x1:=x1 2 Все цикл Все 4 этап. Определить x2: x2:=1 цикл пока fx2 y x2:=x22 Все цикл Все.
34668. Объектно-ориентированное программирование. Виртуальные методы и полиморфизм 71.5 KB
  Объектное и объектно-ориентированное программирование (ООП) возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Кроме того, в современном объектно-ориентированном программировании часто большое значение имеют понятия события
34669. Организация библиотек 81.5 KB
  Заголовок модуля и связь модулей друг с другом. Доступ к объявленным в модуле объектам Стандартные модули Понятие модуля Стандартный Паскаль не предусматривает механизмов раздельной компиляции частей программы с последующей их сборкой перед выполнением. Здесь UNIT зарезервированное слово единица; начинает заголовок модуля; имя имя модуля правильный идентификатор; INTERFCE зарезервированное слово интерфейс; начинает интерфейсную часть модуля; IMPLEMENTTION зарезервированное слово выполнение; начинает исполняемую...