Інтернет: шифрування й відкриті ключі
Привіт! Мене звати Міа Гіл-Епнер, моя
спеціальність — комп’ютерні науки в УК Берклі,
і я працюю в Міністерстві оборони США над
зберіганням даних у безпеці. Інтернет —
це відкрита й публічна система. Ми всі
надсилаємо й отримуємо дані через спільні
провідні комунікації. Та хоча це відкрита
система, ми все ж обмінюємося великою
кількістю приватних даних. Це номери кредитних
карток, банківські дані, паролі, імейли, тощо.
Тож як усі ці приватні дані зберігаються
в таємниці? Будь-які дані можна зберігати
в таємниці завдяки процесу під назвою "шифрування",
"кодування", або "заміна повідомлення
для приховування оригінального тексту".
Дешифрування — процес декодування цього
повідомлення, щоб воно було читабельним.
Люди роблять це століттями. Одним з перших
відомих методів шифрування був шифр Цезаря.
Названий на честь римського генерала Юлія Цезаря,
який шифрував свої військові команди,
щоб повідомлення не перехопили вороги
і не могли його прочитати. Шифр Цезаря —
це алгоритм, який замінює кожну букву
в оригінальному повідомленні на букву,
що стоїть на кілька кроків далі за алфавітом.
Якщо цифра відома лише відправникові
й отримувачеві, вона називається ключем.
Це дозволяє читачеві розблокувати секретне
повідомлення. Наприклад, якщо оригінальне
повідомлення — "HELLO", то, за алгоритмом
шифру Цезаря з ключем 5, зашифроване слово
було б таким... Щоб розшифрувати повідомлення,
одержувач просто скористався б новим ключем
і змінив процес. Але з шифром Цезаря є значна
проблема: будь-хто може легко зламати код
чи розшифрувати повідомлення, спробувавши
всі можливі ключі, а в англійському алфавіті
лише 26 літер, і це означає, що вам потрібно
буде спробувати максимум 26 клавіш, щоб
розшифрувати повідомлення. Спробувати
26 ключів не дуже складно, це займе не більше
пари годин. Тож ускладнімо завдання. Замість
перенесення кожної букви на одну й ту саму
кількість кроків, змістимо їх на іншу кількість
кроків. У цьому прикладі десятизначний ключ
показує, на скільки кроків буде змінено
кожну наступну букву, щоб зашифрувати довше
повідомлення. Вгадати цей ключ дуже важко.
Для десятизначного шифру може бути 10 мільярдів
рішень. Звичайно, жодна людина не могла б
це вирішити, це займе багато століть.
Але звичайному комп’ютеру сьогодні знадобиться
лише кілька секунд, щоб спробувати всі
10 мільярдів можливостей. Оскільки сьогодні
злодії озброєні комп’ютерами замість олівців,
то як можна зашифрувати повідомлення так
надійно, щоб їх було занадто важко зламати?
"Занадто важко" означає забагато можливостей
для обчислення за розумну кількість часу.
Сьогодні безпечна комунікація шифрується
за допомогою 256-бітних ключів. Це означає,
що комп’ютер злодія, який перехоплює ваше
повідомлення, має спробувати стільки варіантів...
поки не виявить ключ і не зламає повідомлення.
Навіть якби у вас було 100 000 суперкомп'ютерів,
і кожен з них пробував би мільйон мільярдів
ключів щосекунди, то на кожен варіант знадобилося б
трильйони трильйонів років, просто щоб зламати
одне повідомлення з 256-бітним шифруванням.
Звичайно, комп'ютерні чіпи стають вдвічі
швидшими і вдвічі меншими щороку. Якщо цей
темп експоненціального прогресу продовжиться,
сьогоднішні неможливі задачі буде вирішено
лише за кілька сотень років у майбутньому,
і 256 біт буде недостатньо для безпечності.
І нам уже довелося збільшити стандартну довжину
ключів, щоб не відставати від швидкості комп'ютерів.
Хороша новина в тому, що використання
довшого ключа не надто ускладнює шифрування
повідомлень, але це експоненціально збільшує
кількість здогадок для злому шифру. Коли
відправник і одержувач мають один і той самий
ключ для кодування й декодування повідомлення,
це називається "симетричне шифрування".
При ньому, як і в шифрі Цезаря, секретний ключ
має бути заздалегідь узгоджений між двома
особами. Це зручно для людей, але Інтернет
є відкритим і загальнодоступним, тому неможливо,
щоб два комп’ютери «зустрілися» приватно і
домовились про секретний ключ. Натомість
комп'ютери використовують асиметричні ключі:
відкритий ключ, який можна надати кому завгодно,
і приватний ключ, що не розкривається. Відкритий
ключ використовується для шифрування даних,
і будь-хто може зашифрувати ним повідомлення,
але секрет може розшифровати лише комп'ютер з
доступом до приватного ключа. Це працює
математично, але це інша історія. Просто
уявіть, ніби у вас є особиста поштова скринька,
куди кожен може класти листи, але для цього
їм потрібен ключ. Ви можете зробити багато
копій ключа й надіслати його своєму другу або
навіть просто зробити ключ загальнодоступним.
Ваш друг або навіть незнайомець може
скористатися відкритим ключем, щоб отримати
доступ до вашої скриньки й покласти листа. Але
лише ви можете відкрити скриньку своїм приватним
ключем і отримати доступ до секретних повідомлень.
І ви можете відправити захищене повідомлення
назад своєму другові, скориставшись відкритим
ключем до його скриньки. Так ми обмінюваємось
захищеними повідомленнями без узгодження
приватного ключа. Криптографія відкритого ключа
є основою всіх захищених повідомлень у відкритому
інтернеті, включаючи протоколи безпеки, відомі
як SSL та TLS, які захищають нас під час
перегляду веб-сторінок. Ваш комп'ютер
використовує це сьогодні, якщо ви бачите замочок
або букви "https" в адресному рядку браузера.
Це означає, що ваш комп'ютер використовує
шифрування відкритого ключа для безпечного
обміну даними з веб-сайтом. Усе більше людей
користується інтернетом, тож передаватиметься
все більше приватних даних, і необхідність
у безпечності цих даних буде ще важливішою.
Адже комп’ютери стають усе швидшими, нам
доведеться розробити нові способи зробити
шифрування заважким для його зламу комп'ютером.
Це моє завдання, і воно завжди змінюється.