Як зробити інтернет речі безпечними – пояснюємо простими словами складні криптографічні схеми


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

Ілюзія безпеки

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

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

Довіряти можна тільки собі

Річ у тому, що з ключами пов’язано поняття, що називається компрометацією ключа – дуже неприємна подія, коли ключ шифрування стає відомий зловмисникові. Відразу відмітимо, що компрометація ключа – природна річ. Ніяка обфускація коду, шифрування здійснимого файлу або DRM не врятують вас від того, що хакер розпатрає ваш пристрій і розбере програму по байтах. Перш ніж сумніватися, шануйте, як в 2008 році хлопці з Голландії нашаткували лазером смарт-карту, щоб по структурі напівпровідникових переходів вивчити роботу алгоритму шифрування Crypto – 1. Одне з правил безпеки, сформульованих Microsoft, свідчить: якщо зловмисник має фізичний доступ до вашого комп’ютера – це більше не ваш комп’ютер. Коли ви втрачаєте з виду свого агента інтернет речей, відразу ж виходите з того, що усі його ключі шифрування скомпрометовані.

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

Як генерувати ключі шифрування?

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

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

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

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

Інтерполяція полінома

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

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

Нехай нам потрібно розділити секретне значення b між n учасниками, щоб відновити секрет могли як мінімум двоє з них. Згенеруємо випадкове число a і побудуємо функцію f (x) = ax + b. Кожному з n учасників згенеруємо випадкове xi≠0 і вичислимо yi=f (xi). Назвемо yi тінню учасника i. Тінь кожного учасника передається йому і є його маленьким секретом. Усі отримані точки (xi, yi) лежать на одній прямій, тому через будь-кого дві з них можна провести єдину пряму, яка перетинатиме вісь ординат якраз в значенні b. В той же час, через одну точку можна провести нескінченну безліч прямих, тому тільки по своїй тіні ніякий з учасників не може упізнати значення секрету b.

Наприклад, розділимо число 5 між п’ятьма учасниками так, щоб відновити його могли як мінімум двоє з них. Виберемо випадкове число a, наприклад 0.5, тоді f (x) = 0.5x + 5. Згенеруємо п’ять випадкових чисел (- 12, – 8, – 4, 2, 8) і вичислимо значення f (x) від кожного з них. Тоді учасникам дістануться тіні – 1, 1, 3, 6, 9 відповідно. Другий учасник не зможе відновити секрет, знаючи тільки свою точку (- 8; 1). Але разом з третім (- 4; 3) вони відновлять пряму і секрет 5.

Для розділення секрету на більше число учасників досить вибрати поліном більш високої міри. Так, парабола задається поліномом ax2+bx+c і може бути відновлена тільки по трьох точках.

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

Зрозуміло, при використанні цієї схеми в комп’ютері ніхто не креслитиме графіки. Для обчислення значення функції в заданій точці буде використаний описаний ще в 18 столітті інтерполяційний поліном Лагранжа. Крім того, якщо при обчисленнях використати раціональні числа (тип float або double), то втрата точності при округленнях буде неминуча. Тому в реальних пристроях усі обчислення робляться в полях Галуа.

Цей механізм називається пороговою схемою (k, n) (читається “k з n”)а описаний він був знаменитим Ади Шамиром, одним з авторів RSA. Власне, зараз цей прийом відомий як схема Шамира.

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


Коментарі 1

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

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

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