Криптографія для найменших: шифрування з прикладами на Python


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

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

Вікіпедія свідчить:

Криптогра́фія (від др.-грецьк. κρυπτός – прихований і γράφω – пишу) – наука про методи забезпечення конфіденційності (неможливості прочитання інформації стороннім), цілісності даних (неможливості непомітної зміни інформації), аутентифікації (перевірки достовірності авторства або інших властивостей об’єкту), а також неможливості відмови від авторства.

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

Симетричне шифрування

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

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

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

# -* - coding: utf - 8 -* - ALPHA = u 'абвгдеєжзиіїйклмнопрстуфхцчшщьюя' def encode (text, step): return text.translate ( str.maketrans (ALPHA, ALPHA[step:] + ALPHA[:step])) def decode (text, step): return text.translate ( str.maketrans (ALPHA[step:] + ALPHA[:step], ALPHA))

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

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

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

Найбільш популярним алгоритмом шифрування з відкритим ключем є RSA. От як виглядає його реалізація на мові Python з використанням бібліотеки RSA:

# -* - coding: utf - 8 -* - import rsa#Боб формує публічний і секретний ключ (bob_pub, bob_priv)  = rsa.newkeys (512) #Аліса формує повідомлення Боба і кодує його в UTF8, #оскільки RSA працює тільки з байтамиmessage = 'hello Bob!'.encode ('utf8') #Аліса шифрує повідомлення публічним ключем Бобаcrypto = rsa.encrypt (message, bob_pub) #Боб розшифровує повідомлення своїм секретним ключомmessage = rsa.decrypt (crypto, bob_priv)
print (message.decode ('utf8'))

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

Висновок

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

Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?


Коментарі 1

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *