You are on page 1of 29

ЛЕКЦІЯ № 16

з навчальної дисципліни
«Архітектура та технології ІоТ»

Тема лекції: Безпека Інтернету речей

Питання лекції
1. Загальновживані поняття кібербезпеки
2. Анатомія кібератак на IoT-пристрої
3. Фізична і апаратна безпека
4. Криптографія
5. Програмно-визначаємий периметр
6. Блокчейн і криптовалюта в Інтернеті речей

ВСТУП

На сьогоднішній день існують мільярди пристроїв, що з'єднують аналоговий світ з


Інтернетом, і за короткий час це число збільшилося на десятки відсотків, роблячи IoT
найбільшим об'єктом для атаки на планеті. Уже зараз відбувається розробка, розгортання і
глобальне поширення експлойтів і шкідливих програм, які ускладнюють життя
незліченим підприємствам, мережам і окремим людям. Ми як архітектори повинні
розбиратися в стеку технологій IoT і вміти їх захищати. Ми відповідаємо за безпеку
інтернет-пристроїв, які ніколи раніше не підключалися до мережі.
Окрему проблему представляють екземпляри IoT, за безпеку яких думали в останню
чергу. Часто такі прості системи, як датчики, настільки обмежені, що реалізація
механізмів захисту промислового рівня, традиційних для ПК, виявляється занадто
складною, а іноді і зовсім неможливою. Ми звертаємося до теми безпеки вже після
знайомства з іншими технологіями, але вона так чи інакше вже зачіпалася в кожній темі.
На цій лекції ми розглянемо особливо злісні види атак на Інтернет речей і покажемо,
наскільки слабо захищені IoT-пристрої і скільки шкоди ще можна заподіяти. Далі ми
поговоримо про організацію безпеки на кожному рівні стека: апаратному,
комунікаційному і мережевому. Ми також приділимо увагу програмно-визначеним
периметрах і блокчейнам, які використовуються для захисту цінних даних в IoT.
Найважливіше в безпеці - застосовувати її на всіх рівнях: від датчиків до
комунікаційних систем, маршрутизаторів і хмарних платформ.

1. Загальновживані поняття кібербезпеки

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

Терміни, пов'язані з атакою

Нижче перераховані терміни та визначення, що відносяться до різних атак і


кіберзагроз:
атака за рахунок посилення - примножує кількість трафіку, спрямованого жертві.
Для проектування атаки зловмисники часто використовують легальні сервіси, такі як NTP,
Steam або DNS. Коефіцієнт множення в NTP може досягати 556, а DNS може збільшити
обсяг трафіку в 179 разів;
підміна ARP - виражається у відправці підробленого ARP-повідомлення, що
дозволяє зловмисникові зв'язати свою MAC-адресу з IP нешкідливої системи;
сканування банерів - ця методика зазвичай використовується для складання списку
систем в мережі, за допомогою яких можна зібрати інформацію про потенційні цілі атаки.
Для цього аналізуються дані про ОС і комп'ютери, повернуті у відповідь на HTTP-запити
(наприклад, nc www.target.com 80);
ботнети - зламані і заражені пристрої, підключені до Інтернету, контролюються для
виконання спільних завдань - зазвичай для відправки запитів в унісон, щоб згенерувати
величезний трафік з різних клієнтів. Можлива також розсилка спаму і шпигунського ПЗ;
простий перебір - отримання доступу до системи або злом шифрування методом
проб і помилок;
переповнення буфера - використовує помилку або дефект в робочому програмному
забезпеченні, направляючи в буфер або блок пам'яті дані, обсяг яких перевищує виділений
простір. Це дозволяє перезаписати іншу інформацію, що зберігається в сусідніх адресах.
Зловмисник може помістити туди шкідливий код і виконати його, перенаправивши на
нього покажчик поточної інструкції. Компільовані мови, такі як C і C ++, особливо
схильні до переповнення буфера, так як у них немає внутрішнього захисту. Більшість
подібних помилок виникають через погано написаний код, який не перевіряє межі
значень, що вводяться;
C2 - керуючий сервер, який розсилає команди ботнет;
кореляційний аналіз енергоспоживання - чотирьохетапна атака, яка дозволяє
виявити секретні криптографічні ключі, що зберігаються на пристрої. Спочатку
аналізується динамічне енергоспоживання; показники записуються для кожної фази
звичайного процесу шифрування. Потім цільовому пристрою передають для шифрування
кілька простих текстових фрагментів і записують споживання енергії. Далі зламуються
невеликі відрізки ключа (підключи) шляхом перебору всіх можливих комбінацій і
обчислення коефіцієнта кореляції Пірсона між змодельованим і реальним струмом. В
кінці збирається найвдаліше з'єднання, яке використовується для отримання цілого ключа;
перебір по словнику - злом мережі шляхом систематичного введення імен
користувачів і паролів з готового словника;
DDoS-атака - спроба порушити роботу Інтернет-сервісу або зробити його
недоступним шляхом відправки йому великої кількості запитів з різних (розподілених)
джерел;
внесення несправностей - ця атака полягає у відправці пристрою дефектних або
нестандартних даних і спостереженні за його реакцією. Наприклад, якщо пристрій
починає погано працювати або показує ознаки несправності, атака могла виявити слабке
місце;
атака посередника - найпоширеніший різновид атак, яка складається в розміщенні
пристрою посеред комунікаційного потоку між двома нічого не підозрюють сторонами.
Пристрій відстежує, фільтрує і виокремлює передану інформацію, відсилаючи
приймаючій стороні її видозмінену копію. Зловмисник може діяти зсередини, виконуючи
роль ретранслятора, або просто прослуховувати дані зовні, залишаючи їх без зміни;
NOP-зсув - послідовність ассемблерних інструкцій NOP, яка дозволяє «зрушити»
покажчик поточної інструкції процесора в область шкідливого коду. Зазвичай є частиною
переповнення буфера;
атака повторного відтворення - мережева атака зі зловмисним повторенням або
циклічним відтворенням даних з боку оригінального відправника або зловмисника, який
ці дані перехоплює, зберігає і передає на свій розсуд;
експлойт для віддаленого виконання коду (англ. remote code execution, або RCE) -
дозволяє зловмиснику виконувати довільний код. Зазвичай відбувається у вигляді
переповнення буфера по HTTP або іншому мережевому протоколу з впровадженням
шкідливого коду;
зворотно-орієнтоване програмування (ROP-атака) - це складний експлойт, що
дозволяє зруйнувати систему безпеки за допомогою невиконуємої пам'яті або шляхом
виконання коду з пам'яті, призначеної тільки для читання. Якщо зловмисник отримає
доступ до стека процесора через переповнення буфера або якимось іншим шляхом, він
зможе переходити до оригінальних, вже існуючих ланцюжків інструкцій. Зловмисника
цікавлять інструкції для виконання запитів до пристроїв, які можна використовувати для
підготовки спільних атак;
атака повернення в бібліотеку - ця атака починається з переповнення буфера.
Зловмисник вставляє в пам'ять процесу інструкції переходу до libc або іншої популярної
бібліотеки з метою прямого виконання системних викликів. Обходить захист, заснований
на невиконуємій пам'яті і безпечних адресних просторах. Це різновид ROP-атаки;
руткит - як правило, шкідливе програмне забезпечення (хоча часто застосовується
для розблокування смартфонів), що дозволяє приховати присутність інших програм. У
руткітів використовується декілька вузьконаправлених методик, таких як переповнення
буфера в компонентах ядра, гіпервізора і користувацьких додатках;
атака по стороннім каналам - вилучення інформації з системи жертви шляхом
спостереження за непрямими ознаками її фізичної активності; не має на увазі пошук
свіжих вразливостей або підбір експлойтів. Атака по стороннім каналам включає в себе
кореляційний аналіз енергоспоживання, акустичний аналіз і читання залишкових даних
після їх видалення з пам'яті;
спуфинг (підміна) - зловмисник видає себе за іншого користувача або підміняє
пристрій в мережі;
SYN-флуд - зловмисник перехоплює і підробляє пакет TCP:SYN, відправлений
комп'ютером. Таким чином створюються численні напіввідкриті з'єднання з неіснуючими
адресами, через що у комп'ютера можуть закінчитися ресурси;
вразливості нульового дня (zero-day) - дірки в безпеці або помилки в
комерційному/промисловому ПО, невідомі розробникам або виробникам.

Терміни, пов'язані із захистом

Нижче перераховані терміни та визначення, що відносяться до різних кіберзахистних


механізмів і технологій:
ASLR - рандомізація розміщення адресного простору (англ. Address Space Layout
Randomization) - це механізм захисту пам'яті і запобігання атак на основі переповнення
буфера. Він робить непередбачуваним вибір ділянки пам'яті для завантаження файлу.
Шкідлива програма, що впроваджує свій код після переповнення буфера, не знає, куди він
буде завантажений, тому управління покажчиком на поточну інструкцію стає надзвичайно
складним. ASLR також захищає від атаки повернення в бібліотеку;
чорна діра (або воронка) - при виявленні DDoS-атаки створюються маршрути, які
направляють шкідливі дані від DNS-сервера або IP-адреси в нікуди. Воронки проводять
додатковий аналіз, щоб відфільтрувати корисні дані;
запобігання виконання даних - DEP (англ. Data Execution Prevention) маркує
області пам'яті як виконувані і невиконувані. Це не дає зловмиснику виконати код,
впроваджений в такі області в результаті переповнення буфера. Результатом буде
системна помилка або виключення;
глибокий аналіз пакетів - DPI (англ. Deep Packet Inspection) аналізує кожен пакет
(його тіло і, можливо, заголовок) в потоці даних, щоб ізолювати інструкції, віруси, спам і
іншу інформацію, фільтровану за певними критеріями;
брандмауер - механізм мережевої безпеки, який пропускає або блокує потоки
пакетів між довіреною і недовіреною зонами. Для контролю та управління трафіком на
конкретних маршрутах можна використовувати списки контролю доступу (англ. Access
control lists, або ACL). Брандмауер може виконувати фільтрацію зі збереженням стану і
дотримуватися правил, що базуються на цільових портах і стані трафіку;
безпечні адресні простори та невиконуєма пам'ять - захищає невиконувані
ділянки пам'яті, доступні для запису. Захищає від NOP-зрушень. На платформі Intel це біт
NX, а в ARM - XN;
приманка - інструмент для виявлення, перенаправлення або зворотного аналізу
шкідливих атак. Приманка виглядає як звичайний вебсайт або мережевий вузол, але при
цьому вона ізольована і підлягає ретельному моніторингу. Дані та запити, що надходять в
пристрій, записуються в журнал;
управління доступом до пам'яті на основі інструкцій - методика відділення даних
про повертаємі адреси всередині стека. Допомагає захиститися від ROP-атак і особливо
корисна в обмежених IoT-системах;
система виявлення вторгнень - IDS (англ. Intrusion Detection System) (мережевий
механізм для виявлення мережевих загроз за рахунок позасмугового аналізу потоку
пакетів) не прив'язаний до джерела або адресату, тому дозволяє реагувати в режимі
реального часу;
система запобігання вторгнень - блокує мережеві загрози за допомогою
повноцінного лінійного аналізу, статистичних методів виявлення і фільтрації по
сигнатурі;
підставний ботнет - інструмент, що емулює заражений пристрій. Підключається до
керуючого сервера і приймає шкідливі команди, які той передає своєму ботнету;
сканування портів - методика, що дозволяє знаходити відкриті і доступні порти в
локальній мережі;
інфраструктура відкритих ключів - PKI (англ. Public Key Infrastructure) визначає
ієрархічні механізми, які гарантують справжність походження відкритого ключа.
Сертифікат підписується підтверджуючим центром;
відкритий ключ - генерується за допомогою закритого ключа і доступний для
зовнішніх клієнтів. Відкритий ключ може використовуватися для розшифровки хешей;
закритий ключ - генерується за допомогою відкритого ключа і ніколи не
виставляється назовні. Зберігається в безпечному місці і використовується для
шифрування хешів;
корінь довіри - RoT (англ. Root of Trust) запускається на самому початку
завантаження пристрою і знаходиться в незмінній, довіреній ділянці пам'яті (такій як
ROM). Якщо BIOS або програма початкового завантаження доступні для
неконтрольованої зміни, корінь довіри втрачає будь-який сенс. RoT зазвичай є першою
сходинкою багатоетапного безпечного завантаження;
безпечне завантаження - послідовність етапів завантаження пристрою. Починається
з кореня довіри і проходить через запуск ОС і додатків; кожен компонент повинен мати
справжній підпис. Перевірка підписів проводиться за допомогою відкритих ключів,
завантажених на попередніх етапах;
стекові індикатори - захищають стек від переповнення і запобігають виконанню
коду, розміщеного в стеку;
безпечне середовище виконання - безпечна ділянку процесора, код і дані в якій
захищені. Зазвичай це середовище виконання знаходиться в ядрі основного процесора і
стежить за тим, щоб безпечне завантаження, грошові транзакції і робота з закритими
ключами виконувалися на більш високому рівні безпеки в порівнянні зі звичайним кодом.

2. Анатомія кібератак на IoT-пристрої

Область кібербезпеки занадто широка, щоб її можна було втиснути в одну-дві лекції.
Але, оскільки Інтернет речей складається з апаратного забезпечення, мережі, протоколів,
сигналів, хмарних компонентів, фреймворків, операційних систем і всього, що їх пов'язує,
то всі відомі на цей час експлойти і атаки на IoT-пристрої можна розділити на три основні
типи:
Mirai - найбільш руйнівна DDoS-атака в історії, спровокована поганим захистом IoT-
пристроїв у віддалених районах;
Stuxnet - урядова кіберзброя, націлена на IoT-пристрої в SCADA-системах. Завдала
значної і непоправної шкоди ядерній програмі Ірану;
ланцюгова реакція (Chain Reaction) - дослідницька методика для експлуатації
особистих мереж. Використовує пристрої на кшталт «розумних» лампочок і не вимагає
підключення до Інтернету.
Маючи уявлення про те, як працюють ці загрози, архітектор може підібрати
технології для їх запобігання і налагодити процеси, які дозволять нівелювати шкоду від
аналогічних атак.

Mirai
Mirai - це назва шкідника, який в серпні 2016 р заразив IoT-пристрої на базі Linux.
Атака виконувалася з ботнету, що згенерував величезне DDoS-навантаження. У число
найбільш відомих жертв увійшли Krebs on Security (популярний блог про безпеку), Dyn
(дуже популярний і затребуваний DNS-провайдер) і Lonestar (великий стільниковий
оператор в Ліберії). Серед менш значущих цілей були італійські політичні сайти, сервери
Minecraft в Бразилії і російські інтернет-аукціони. Непрямими жертвами DDoS-атаки на
компанію Dyn стали її клієнти, серед яких виявилися такі величезні сервіси як PlayStation
Network, Amazon, GitHub, Netfix, PayPal, Reddit і Twitter.
Всього було заражено 600 000 пристроїв, які стали частиною ботнету. Вихідний код
Mirai був опублікований на хакерському форумі hackforums.net. Шляхом його аналізу, а
також за допомогою трасування і вивчення журнальних файлів дослідники розкрили
принцип роботи і хронологію виконання атаки:
пошук жертв - швидке асинхронне сканування з використанням пакетів TCP SYN і
перевіркою довільних IPV4-адрес. Особливу увагу шкідник приділяв TCP-порту 23, що
належить SSH/Telnet, і порту 2323. У разі знаходження відповідного порту починався
другий етап. У Mirai був вбудований чорний список адрес, які слід уникати. Він містив 3,4
мільйона записів, що належать поштовій службі США, Hewlett Packard, GE і
американському міністерству оборони. Швидкість сканування сягала 250 б/с. Для ботнету
це досить повільно. Атаки на кшталт SQL Slammer генерували скануючі запити на
швидкості 1,5 Мбіт/с. Справа в тому, що IoT-пристрої мають куди більш скромні
обчислювальні можливості в порівнянні з настільними і мобільними комп'ютерами;
простий перебір через Telnet - на цьому етапі шкідник намагався встановити робоче
з'єднання з жертвою через Telnet, відправляючи 10 пар «логін-пароль», обраних
випадковим чином зі списку з 62 парами.
У разі успіху зламаний комп'ютер підключався до сервера C2. Пізніші різновиди
Mirai навчилися виконувати RCE-експлойти;
зараження - сервер передавав потенційній жертві програму-завантажувач, яка
відповідала за визначення версії операційної системи і установку шкідника, заточеного
під конкретний пристрій.
Потім завантажувач шукав і припиняв роботу конкуруючих процесів, які
використовували порти 22 або 23 (в тому числі і інші шкідники, які могли перебувати на
пристрої). Після цього завантажувач віддалявся, а ім'я процесу маскувався, щоб приховати
його присутність. Шкідник не зберігався на постійному накопичувачі і зникав після
перезавантаження. В кінці бот входив в сплячий режим в очікуванні подальших команд.
Жертвами Mirai були такі IoT-пристрої, як IP-камери, DVR, споживчі
маршрутизатори, IP-телефонія, принтери та цифрові телевізійні приставки. Шкідливі
виконавчі файли підтримували 32-бітові версії ARM, MIPS і x86.
1 серпня 2016 р відбулося перше сканування, яке було виконано з американського
веб-хостингу. На пошук першого комп'ютера з відкритим портом і відповідним паролем
пішло 120 хвилин. За хвилину було заражено ще 834 пристрої. Через 20 годин кількість
заражених пристроїв досягло 64 500. Ще через 75 хвилин охоплення Mirai подвоївся.
Більшість заражених комп'ютерів, які стали частиною ботнету, перебували в Бразилії
(15%), Колумбії (14%) і В'єтнамі (12,5%), хоча DDoS-атаки були націлені на інші регіони.
Збиток був обмежений DDoS-атаками, які проводилися через SYN-пакети, мережі
GRE IP, а також протоколи STOMP і DNS. Протягом п'яти місяців сервери C2 передали 15
194 окремі команди, спрямовані проти 5042 веб-сайтів. 21 вересня 2016 р ботнет Mirai
справив масовану DDoS-атаку на Krebs (блог, присвячений безпеці), згенерувавши трафік
на швидкості 623 Гбіт/с. Це була найгірша DDoS-атака в історії. Нижче показаний знімок
екрана, зроблений під час цих подій за допомогою сервісу www.digitalattackmap.com, який
став результатом співпраці між NETSCOUT і Google Jigsaw (рис. 12.1).

Рис. 1 Схема DDoS-атаки Mirai на блог Krebs, люб'язно надана сервісом


www.digitalattackmap.com

Stuxnet
Stuxnet - це перша задокументована кіберзброя, призначена для нанесення шкоди
активів іншої країни. Це був черв'як, спрямований проти програмованих логічних
контролерів (англ. Programmable Logic Controllers, або PLC) Siemens, заснованих на
SCADA. Він використовував руткит для зміни швидкості обертання двигунів, які
перебувають під безпосереднім управлінням PLC. Творці цього вірусу зробили все для
того, щоб він атакував тільки пристрої з відомими частотно регульованими приводами, які
підключені до модулів Siemens S7-300 PLC і обертаються з частотою 807 Гц або 1210 Гц,
так як вони зазвичай застосовуються в насосах і газових центрифугах для збагачення
урану.
Атака імовірно почалася в квітні або березні 2010 р Процес зараження складався з
наступних етапів:
1) початкове зараження - спочатку черв'як заразив комп'ютер з Windows,
використовуючи вразливості, виявлені в попередніх вірусних атаках. Вважається, що це
було зроблено через підключення USB-диска. При цьому використовувалося відразу
кілька експлойтів нульового дня (безпрецедентна витонченість). Експлойти запускали
руткит в режимі користувача і ядра, а потім встановлювали драйвер пристрою з
коректним сертифікатом, викрадений у компанії Realtek. Драйвер, що працює в режимі
ядра, був необхідний для приховування Stuxnet від різних антивірусних пакетів;
2) атака на Windows і розповсюдження - після установки через руткит вірус
починав шукати в системі Windows файли, пов'язані з контролером Siemens SCADA версії
WinCC/PCS 7, також відомим як Step-7. У разі успіху черв'як намагався з'єднатися з
сервером C2 через Інтернет, використовуючи підставні URL-адреси
(www.mypremierfutbol.com і www.todaysfutbol.com), щоб оновитися до останньої версії.
Потім він шукав на диску файл з назвою s7otbdx.dll, який представляв собою важливу
комунікаційну бібліотеку для взаємодії між Windows і PLC. Контролер Step-7 включав в
себе вбудовану базу даних з паролями, яка зламувалася за допомогою ще одного
експлойта нульового дня. Stuxnet впроваджувався між системою WinCC і s7otbdx.dll,
виконуючи атаку посередника. Насамперед вірус записував інформацію про нормальний
режим роботи центрифуг;
3) руйнування - коли було вирішено скоординувати атаку, вірус відтворив
попередньо записані дані і відправив їх контролерам SCADA, які не підозрювали про те,
що система була скомпрометована або поводиться незвично. Збиток був нанесений в ході
двох різних скоординованих атак, заснованих на маніпуляції PLC, в результаті чого
постраждав весь комплекс збагачення урану. Кожні 27 днів ротори центрифуги
запускалися на 15 або 50 хвилин, що призводило до їх поступового зношування і появи
тріщин в їх шахтах. Крім того, порушувався процес збагачення.
Вважається, що дана атака, направлена на головний іранський об'єкт зі збагачення
урану в місті Нетензе, вивела з ладу понад тисячу центрифуг. З тих пір код Stuxnet став
загальнодоступним і перетворився на своєрідний ігровий майданчик для створення
похідних експлойтів (github.com/micrictor/stuxnet).

Ланцюжкова реакція
Ланцюгова реакція (англ. Chain Reaction) - це академічне дослідження нового виду
кібератак, націлених на персональні mesh-мережі без підключення до інтернету. Воно
також показує, наскільки вразливими можуть бути видалені IoT-датчики і керуючі
системи. Метою оригінальної атаки були лампочки Philips Hue, які можна знайти в так
званих розумних будинках з підтримкою управління через інтернет або мобільні додатки.
Експлойт здатний масштабироваться для атаки на цілі розумні міста - досить лише
вкрутити одну заражену лампочку.
Лампочки Philips Hue піднімають mesh-мережу на основі протоколу Zigbee, який є
частиною ініціативи Zigbee Light Link (ZLL) щодо забезпечення сумісності між різними
методами освітлення. ZLL-повідомлення не шифруються і не підписуються, хоча для
захисту ключів, обмін якими відбувається при додаванні лампочки в mesh-мережу,
застосовується криптографія.
У підсумку витік головний ключ, відомий всім учасникам консорціуму ZLL. Крім
того, відповідно до стандарту ZLL, лампочка, що підключається, повинна перебувати в
безпосередній близькості до ініціатора, що не дає йому перехопити контроль над
лампочками своїх сусідів. Протокол Zigbee також надає безконтактний метод
перепрограмування пристроїв, хоча пакети з прошивкою є зашифрованими і мають
цифровий підпис.
План атаки, яку провели дослідники, складався з чотирьох етапів:
1) зламати шифрування і цифровий підпис пакету з прошивкою;
2) написати і доставити заражене оновлення прошивки на одну єдину лампочку,
використовуючи зламані шифрування і ключі;
3) скомпрометована лампочка приєднається до мережі за допомогою головного
ключа, викраденого раніше, і обійде захист на основі близькості розміщення,
використовуючи дефект нульового дня, знайдений в широко поширеному компоненті
Atmel AtMega;
4) після успішного підключення до mesh-мережі Zigbee шкідливий код буде
розісланий сусіднім лампочкам, що призведе до їх швидкого зараження. Поширення
вірусу буде відбуватися відповідно до теорії перколяції і охопить всі освітлювальні
прилади в місті.
Для шифрування безконтактних оновлень прошивки Zigbee використовує AES-CCM
(частина стандарту IEEE 802.15.4). Для його злому зловмисник використовує кореляційний
і диференційний аналіз енергоспоживання (англ. Correlation Power Analysis [CPA] і
Differential Power Analysis [DPA]). Це витончений вид атаки, який підрозумівав би
розміщення лампочки на спеціальний стенд і вимір енергії, яку вона споживає. З огляду на
розвинені засоби управління, можна виміряти динамічне енергоспоживання процесора,
який виконує інструкцію або переміщує дані (наприклад, під час роботи алгоритму
шифрування). Це простий аналіз енергоспоживання, який залишає мало шансів на злом
ключа. Методи CPA і DPA є більш просунутими і використовують статистичну
кореляцію. Замість спроби розпізнати окремі біти, CPA може оперувати цілими байтами.
Показники живлення знімаються за допомогою осцилографа і розбиваються на дві
множини в залежності від проміжного значення, яке зламується: в першому воно
дорівнює 1, а в другому - 0. Реальне значення обчислюється шляхом вирахування з цих
множин середнього показника.
Шляхом використання DPA і CPA дослідникам вдалося зламати систему освітлення
Philips Hue:
- метод CPA застосовувався для злому AES-CBC. У атакуючої сторони не було ні
ключа, ні випадкового числа, ні вектора ініціалізації. Завдяки цьому підходу було
отримано ключ, який потім за допомогою того ж методу використовувався для злому
випадкового числа;
- метод DPA застосовувався для злому режиму лічильника AES-CTR і згодом -
алгоритму шифрування, який використовувався при упаковці прошивки. Дослідники
виявили 10 ділянок, в яких, імовірно, виконувався режим AES-CTR, що залишало 10
потенційних рішень;
- потім дослідники зосередилися на зломі захисту Zigbee, заснованої на близькості
розміщення, щоб підключитися до мережі. В результаті вивчення вихідного коду
завантажувача, який використовувався в чіпі Atmel, була знайдена уразливість нульового
дня. Зокрема, в момент відправлення запиту сканування в Zigbee перевірка на віддаленість
проходила успішно. Щоб її обійти, досить було почати сеанс з будь-якого іншого
повідомлення. Це дозволило дослідникам підключитися до мережі.
Справжня атака могла б змусити зламану лампочку заразити своїх сусідів в радіусі
ста метрів, передавши їм шкідливий код для відключення оновлень, щоб їх неможливо
було відновити. По суті, лампочки були б під управлінням зловмисника, і їх довелося б
знищити.
Дослідники зуміли створити повністю автоматизовану систему для атаки і
прикріпити її до безпілотного літального апарату, який робив систематичний обліт в
радіусі прийому лампочок Philips Hue на території університету та заражав кожну з них.
Більше інформації про атаку на Zigbee методом CPA можна знайти в доповіді Е.
Ронена, А. Шаміра, А. О. Вейнгартена і К. О'Флінн «IoT Goes Nuclear: Creating a ZigBee
Chain Reaction» (стор. 195-212), підготовленому до симпозіуму з безпеки і
конфіденційності IEEE (Сан-Хосе 2017 г.). Гарне керівництво і вихідний код для
проведення атаки CPA можна знайти на вікі-сторінці ChipWhisperer:
wiki.newae.com/AES-CCM_Attack.

3. Фізична і апаратна безпека


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

Корінь довіри
Перший рівень апаратної безпеки полягає у встановленні кореня довіри (англ. Root
of Trust, або RoT). RoT - це процес завантаження з апаратною перевіркою достовірності,
який гарантує, що джерело першої виконуваної інструкції не підлягає зміні. Це ключовий
етап процесу завантаження, який бере участь в подальшому запуску системи - від BIOS до
ОС і додатків. RoT є базовим захистом від руткітів.
Кожен етап процесу завантаження перевіряє справжність наступного етапу,
формуючи таким чином ланцюжок довіри. Корінь довіри може використовувати різні
методи запуску:
завантаження образу і кореневого ключа з прошивки або незмінної пам'яті;
зберігання кореневого ключа в одноразовій програмованій пам'яті за допомогою
фьюз-бітів;
завантаження коду з захищеної області пам'яті в захищене сховище.
Корінь довіри повинен перевіряти справжність кожного наступного етапу
завантаження. Для цього на кожному етапі використовується набір ключів з цифровим
підписом (рис. 12.2). У різних процесорах корінь довіри реалізований по-різному. Intel і
ARM підтримують такі технології:

Рис. 2 Встановлення кореня довіри. Вище представлено п'ятиетапне завантаження,


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

ARM TrustZone - ARM продає виробникам чіпів пропрієтарний кремнієвий блок,


який надає корінь довіри і інші механізми безпеки. TrustZone ділить апаратні компоненти
на безпечні та небезпечні. Таким чином мікропроцесор відділяється від небезпечного
ядра; він виконує Trusted OS - захищену операційну систему з чітко визначеним
інтерфейсом взаємодії з небезпечними компонентами. Захищені ресурси і функції
знаходяться в довіреному ядрі і повинні бути якомога більш легковажними. Перехід між
компонентами різного типу робиться за допомогою апаратного перемикання контексту,
завдяки чому відпадає необхідність в безпечному ПО для моніторингу. TrustZone також
використовується для управління системними ключами, грошовими транзакціями і
захистом авторських прав. Постачальникам обладнання є два профілі: A ( «application») і
M ( «microcontroller»). Сполучення кореня довіри, Trusted OS і цього типу процесорів
називається довіреним середовищем виконання (англ. Trusted Execution Environment, або
TEE);
Intel Boot Guard - це апаратний механізм для перевірки автентичності початкового
блоку завантаження криптографічними засобами або за допомогою процесу вимірювання.
Для перевірки початкового блоку виробник повинен згенерувати 2048-бітний ключ, який
складається з двох частин: відкритої і закритої. Відкритий ключ друкується на платі
шляхом «детонації» фьюз-бітів на етапі виробництва. Ці біти є одноразовими і не
підлягають зміні. Закрита частина ключа генерує цифровий підпис для подальшого
підтвердження автентичності етапу завантаження.

Управління ключами і модулі TPM


Відкриті та закриті ключі є запорукою безпечної системи. Для їх захисту потрібно
належний механізм управління. Одним з найпопулярніших стандартів апаратного захисту
ключів є TPM (англ. Trusted Platform Module - довірений платформний модуль). Його
специфікація була створена консорціумом Trusted Computing Group і є частиною ISO і
IEC. Поточна версія TMP 2.0 була випущена у вересні 2016 р Устаткування, що
поставляється Міністерству оборони США, має підтримувати TPM 1.2.
TPM є окремий апаратний компонент з RSA-ключем, вшитим на етапі виробництва.
Зазвичай TPM використовується для зберігання, захисту та адміністрування ключів в
таких сценаріях, як шифрування диска, завантаження кореня довіри, перевірка
справжності обладнання та програмного забезпечення, а також для управління паролями.
TPM може створити хеш перевіреної апаратної або програмної конфігурації, який
допоможе виявити стороннє втручання на етапі виконання. Ця технологія також
застосовується в створенні хешів типу SHA-1 і SHA-256, шифруванні блоків методом
AES, асиметричному шифруванні та генерації випадкових чисел. Виробництвом TPM-
пристроїв займаються такі компанії як Broadcom, Nation Semiconductor і Texas Instruments.

Адресний простір в процесорі і пам'яті


Ми вже обговорили різні експлойти і технології процесора, які їм протистоять.
Двома основними механізмами захисту в ЦПУ і ОС, на які слід звернути увагу, є
невиконуєма пам'ять і рандомізація розміщення адресного простору. Обидві вони
призначені для ускладнення або запобігання процесу впровадження шкідливого коду на
основі переповнення буфера або стека:
невиконуєма пам'ять - це апаратний механізм, за допомогою якого операційна
система робить ділянки пам'яті невиконуємими. Кінцева мета полягає в тому, щоб
виконуватися могли тільки ті області пам'яті, в яких знаходиться перевірений і справжній
код. При спробі впровадження шкідника через переповнення стека система позначить
відповідну ділянку як той, що не виконується, в результаті чого зміщення покажчика
поточної інструкції до цієї ділянки призведе до апаратного виключення. Маркування
невиконуємої пам'яті робиться за допомогою біта NX (через буфер асоціативної
трансляції). На платформах Intel і ARM цей біт називається XD (англ. EXecute Disable -
вимикання виконання) і, відповідно, XN (англ. EXecute Never - ніколи не виконувати). Ця
технологія підтримується в більшості ОС, таких як Linux і Windows, а також в деяких
системах реального часу;
рандомізація розміщення адресного простору - ASLR, скоріше, є особливістю
роботи з віртуальним адресним простором в операційній системі, ніж апаратною
функцією, але її теж важливо розглянути. Ця технологія захищає від переповнення буфера
і атаки повернення в бібліотеку. Подібні методи злому вимагають від зловмисника
розуміння структури пам'яті і полягають в навмисному виконанні певного доброякісного
коду або бібліотек. Це непросте завдання, особливо якщо адресний простір змінюється
випадковим чином при кожному завантаженні. У Linux підтримується за допомогою латок
PAX і Exec Shield. Microsoft теж надає захист для купи, стека і блоків обробки.

Безпека зберігання даних


Багато IoT-пристроїв використовують постійне сховище на прикордонному вузлі або
маршрутизаторі/шлюзі. Розумним туманним вузлам (англ. Fog nodes) теж потрібно десь
зберігати свої дані. Безпека даних є ключовим аспектом запобігання установки
шкідливого ПО і захисту конфіденційної інформації в разі викрадення пристрою. Багато
сховища, такі як fash-накопичувачі і жорсткі диски, підтримують шифрування і захисні
технології.
FIPS 140-2 (федеральний стандарт обробки інформації) - це правова норма, яка
описувала вимоги до шифрування і безпеки для електронних пристроїв, що зберігають
конфіденційні дані. Крім технічних вимог вона визначає правила і процедури. FIPS 140-2
передбачає кілька рівнів безпеки:
• рівень 1 - суто програмне шифрування. Обмежена безпека;
• рівень 2 - обов'язкова аутентифікація на основі ролей і здатність виявляти
фізичне проникнення за допомогою спеціальних пломб;
• рівень 3 - передбачає стійкість до фізичного злому. При спробі проникнення
пристрій видалить важливі параметри безпеки. Включає в себе криптографічний захист,
управління ключами і аутентифікацію з перевіркою достовірності;
• рівень 4 - просунута захист від злому для продуктів, призначених для роботи в
фізично незахищеною середовищі.

Крім шифрування, також слід подбати про безпеку накопичувачів, що виводяться з


експлуатації. Витяг вмісту зі старих систем зберігання даних-відносно просте завдання.
Існують додаткові стандарти, що описують безпечний процес видалення даних з
накопичувача (будь то диск з магнітними пластинами або пам'ять зі зміною фазового
стану). Крім того, лабораторія NIST публікує документи про безпечне знищення вмісту,
такі як «NIST Special Publication 800-88 for Secure Erase ».

Фізична безпека
Стійкість до проникнення і фізична безпека грають важливу роль в Інтернеті речей.
Багато IoT-пристроїв розміщені віддалено, без будь-якого захисту. Це нагадує історію з
проектом «Енігма» під час Другої світової війни. Витяг робочої шифрувальної машини з
німецького підводного човна U-110 допомогло зламати шифр. Зловмисник з
безпосереднім доступом до IoT-пристрою може використовувати будь-які інструменти
для злому системи, як ми бачили на прикладі експлойта «Ланцюгова реакція».
Раніше вже був представлений приклад атаки сторонніми каналами за допомогою
аналізу енергоспоживання; злом також може здійснюватися на основі часу, кеша,
випромінювання електромагнітного поля і ланцюгів сканування.
Головна особливість атак сторонніми каналами полягає в тому, що зламані пристрій,
по суті, перетворюється в тестову площадку. Це означає, що воно буде знаходитися під
наглядом в контрольованому середовищі і його активність буде всіляко вимірюватися.
Крім того, такі методики, як DPA, використовують статистичний аналіз для
виведення закономірності між випадковим введенням і висновком. Цей підхід
застосовується лише в разі, якщо система демонструє ідентичну поведінку з одним і тим
же введенням (табл. 1).

Таблиця 12.1. Методики виявлення атак


Методологія
Атаки на основі Ви намагаєтесь отримати доступ невеликої різниці в часі в роботі
часу алгоритму. Наприклад, при вимірі часу роботи алгоритму
декодування пароля можна помітити, що процедура завершується
раніше, ніж звичайно. Зловмисник може також здійснювати
контроль за використанням кешу, яке характеризує алгоритм.
Простий аналіз Цей підхід схожий на атаку за часом. Він полягає у вимірюванні
енергоспоживання коливань струму в залежності від поведінки алгоритму і виконання
машинних інструкцій. Особливо вразливими є відкриті ключі. Для
виконання аналізу необхідно лише кілька вимірів, але свідчення
повинні мати високу точність. Більшість алгоритмів активно
використовують математичні операції, і при це різні інструкції
демонструють різні шаблони енергоспоживання
Диференціальний DPA вимірює динамічне енергоспоживання, але може засікти зміни,
аналіз які були б занадто незначними при простому аналізі. Передаючи на
енергоспоживання вхід системі випадкові дані (наприклад, різні довільні ключі),
зловмисник може провести тисячі вимірювань і вибудувати
закономірність. Наприклад, для злому алгоритму AES досить
сформувати два набори результатів, які залежать від вхідного
значення (0 або 1). Кожен набір зводиться до середнього показника,
а різниця між ними демонструє вплив випадкового введення на
підсумковий висновок.

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


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

Інші аспекти, пов'язані з апаратним забезпеченням: запобігання доступу до


налагоджувальний портам і каналах, які часто представлені у вигляді послідовних портів
і JTAG-портів. Щоб зовсім виключити оцінний доступ, слід прибрати заголовки і
детонувати фьюз-біти.
Модулі ASIC зазвичай використовують висновки типу BGA (англ. Ball grid array -
масив кульок) для атаки на PCA. У платі повинен використовуватися міцний,
термостійкий клей, щоб спроба фізичного злому приводила до непоправних пошкоджень.

4. КРИПТОГРАФІЯ

Шифрування і секретність є обов'язковими для IoT-пристроїв.


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

Рис.3 Елементи криптографії. Тут представлені симетрична, асиметрична і хешуюча


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

симетричне шифрування - для шифрування і дешифрування застосовується один і


той же ключ. Симетричними є такі алгоритми як RC5, DES, 3DES і AES;
шифрування з відкритим ключем - ключ, використаний для шифрування даних,
доступний публічно. Але тільки приймаюча сторона володіє закритим ключем для
розшифровки повідомлення. Такий вид шифрування також називають асиметричним.
Асиметрична криптографія використовується для забезпечення секретності даних,
аутентифікації і неспростовності. Відкриті ключі застосовуються в широко відомих
інтернет-протоколах для шифрування і обміну повідомленнями, таких як Elliptic Curve,
PGP, RSA, TLS і S / MIME;
криптографічне хешування - прив'язує дані довільного розміру до бітової рядку
(яку називають дайджестом). Хеш-функція з самого початку створюється
«односпрямованою». По суті, єдиний спосіб відтворити підсумковий хеш - перепробувати
всі можливі вхідні комбінації (хеш-функцію можна виконати в зворотному напрямку).
Прикладами односпрямованих хешів є MD5, SHA1, SHA2 і SHA3. Зазвичай вони
застосовуються для шифрування цифрових підписів в образах прошивок, імітовставках і
при аутентифікації. В ході шифрування невеликих рядків, таких як пароль, введення може
виявитися занадто коротким для створення повноцінного хешу; в цьому випадку до
паролю додається сіль або публічний рядок, щоб збільшити ентропію. Сіль - це різновид
функції формування ключа (англ. Key derivation function, або KDF).

Симетрична криптографія
У криптографії використовуються такі терміни, як простий текст (англ. Plaintext) і
шифротекст (англ. Ciphertext), які позначають незашифрований ввід і, відповідно,
зашифрований вивід. Поточним стандартом шифрування вважається AES (англ. Advanced
Encryption Standard - просунутий стандарт шифрування); він прийшов на зміну старому
алгоритму DES, розробленому ще в 1970-х рр. AES є частиною специфікації FIPS і
стандарту ISO/IEC 18033-3, які використовуються у всьому світі. Алгоритми AES
засновані на блоках фіксованої довжини по 128, 192 або 256 біт. Повідомлення, що
перевищують довжину блоку, розбиваються на кілька частин. AES складається з чотирьох
основних етапів шифрування. Нижче показаний псевдокод для шифрування цим методом:

// Псевдокод для шифру AES-128


// in: 128 біт (простий текст)
// out: 128 біт (шифротекст)
// w: 44 слова по 32 біта кожне (розширений ключ)
state = in
w = KeyExpansion (key) // Етап розширення ключа (по суті, шифрування самого ключа)
AddRoundKey (state, w [0, Nb-1]) // Початкова ітерація
forround = 1 step 1 toNr-1 // 128 біт = 10 ітерацій, 192 біта = 12 ітерацій, 256 біт = 14 ітерацій
SubBytes (state) // Забезпечує нелінійність шифру
ShiftRows (state) // Запобігає незалежне шифрування стовпців, яке може послабити алгоритм
MixColumns (state) // Перетворює кожен стовпець і додає розсіювання в алгоритм
AddRoundKey (state, w [round * Nb, (round + 1) * Nb-1]) // Генерує з'єднання і об'єднує його змінної state
end for
SubBytes (state) // Заключна ітерація і очищення
ShiftRows (state)
AddRoundKey (state, w [Nr * Nb, (Nr + 1) * Nb-1])
out = state

Довжина ключів в AES дорівнює 128, 192 або 256 біт. В цілому, чим довше ключ,
тим краще захист. Розмір ключа пропорційний кількості циклів процесора, необхідних для
шифрування або розшифрування блоку: 128 біт вимагає 10 циклів, 192 біта - 12 циклів, а
256 біт - 14 циклів.

Блокові шифри представляють собою алгоритми, які засновані на симетричному


ключі і обробляють дані у вигляді послідовних блоків. Сучасні шифри засновані на статті
про промислове шифруванні, написаної Клодом Шенноном в 1949 р Режим шифрування -
це алгоритм, який описує багаторазове застосування блочного шифру для перетворення
великих обсягів даних, що складаються з безлічі блоків. Більшість сучасних шифрів
використовують вектор ініціалізації (англ. Initialization Vector, або IV), завдяки якому
одне і теж введення кожен раз перетворюється в різний шифротекст. Алгоритм AES має
кілька режимів роботи:
режим простої заміни (англ. Electronic Codebook, або ECB) - це найпростіший вид
AES-шифрування; він застосовується в поєднанні з іншими режимами для поліпшення
безпеки. Дані поділяються на блоки, кожен з яких шифрується окремо. Ідентичні блоки
дають один і той же результат, що робить цей підхід досить ненадійним;
режим зчеплення блоків (англ. Cipher Block Chaining, або CBC) - перед
шифруванням до простого тексту застосовується виключне АБО з попереднім
зашифрованим блоком;
режим зворотного зв'язку по шифротексту (англ. Cipher Block Chaining, або
CFB) - схожий на CBC, але формує потік шифрів (вихід попереднього шифру служить
входом для наступного). CFB використовує попередній зашифрований блок, щоб
згенерувати ввід для поточного шифру. Через ці залежності CFB не можна виконувати
паралельно. Потокові шифри допускають втрату блоку при передачі; в цьому випадку він
буде відновлений на основі наступних блоків;
режим зворотного зв'язку по виходу (англ. Output Feedback Chaining, або OFB) -
цей режим аналогічний CFB, але дозволяє застосовувати коди виправлення помилок ще до
шифрування;
режим лічильника (англ. Counter, або CTR) - перетворює блоковий шифр в
потоковий, використовуючи інкрементальний лічильник, який розпаралелює подачу входу
кожному блочному шифру, що прискорює виконання. Як вхід використовується
поєднання лічильника і випадково згенерованого числа;
CBC з імітовставкою (CBC-MAC) - імітовставка (англ. Message Authentication Code,
або MAC) використовується для аутентифікації повідомлення і підтвердження того, що
воно прийшло від заявленого відправника. Потім одержувач додає імітовставку до
повідомлення для подальшої перевірки автентичності.
Ці режими розроблялися з кінця 1970-х до початку 1980-х рр. і просувалися
Національним інститутом стандартів і технологій в специфікації FIPS 8 в рамках
алгоритму DES. Вони забезпечують конфіденційність інформації, але не захищають від її
зміни і підміни. У зв'язку з цим почали використовувати цифрові підписи, а спільнота
фахівців з безпеки розробила режим CBC-MAC для аутентифікації. Застосування CBC-
MAC в поєднанні з вихідними режимами було непростим завданням, поки не з'явилися
алгоритми на зразок AES-CCM, які надають як аутентифікацію, так і секретність. CCM
розшифровується як Counter with CBC-MAC Mode (лічильник з режимом CBC-MAC).

CCM - це важливий режим, який використовується для підпису та шифрування


даних в цілому ряді протоколів, розглянутих в цій книзі, включаючи Zigbee, Bluetooth Low
Energy, TLS 1.2 (після обміну ключами), IPSEC і 802.11 Wi-Fi WPA2.

AES-CCM використовує подвійний шифр: CBC і CTR. AES-CTR (або режим


лічильника) застосовується для загальної розшифровки вхідного потоку з шифротекста,
який містить зашифровану імітовставку. AES-CTR розшифровує як імітовставку, так і
самі дані. На цьому етапі алгоритму формується так звана очікувана імітовставка;
оригінальний заголовок фрейму і розшифровані блоки, отримані на виході з AES-CTR,
позначаються як ввід. Дані розшифровані, однак для аутентифікації необхідна
імітовставка, що обчислюється в AES-CBC; якщо вона відрізняється від тієї, яка
очікується на етапі AES-CTR, це означає, що дані могли бути змінені в процесі передачі.
На рис.4 показаний зашифрований потік даних, який аутентифікується за допомогою
AES-CBC і розшифровується в режимі AES-CTR. Таким чином забезпечується
аутентифікація і секретність оригінального повідомлення.

Важливим аспектом, з точки зору IoT-пристроїв в повно-mesh-мережі, є кількість


необхідних ключів. Для n вузлів в mesh-мережі з двонаправленим взаємодії дією цей
показник дорівнює n(n-1)/2 або O(n2).
Рис. 4 Режим AES-CCM

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

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


Асиметричні ключі генеруються попарно (для шифрування і дешифрування); вони можуть
бути взаємозамінними - тобто, один ключ може шифрувати і розшифровувати, хоча це не
обов'язкова вимога. Але зазвичай генерується пара ключів - один відкритий, а інший
закритий. У цьому розділі описується три основоположних шифри з відкритим ключем:
RSA, протокол Діффі-Хеллмана і еліптичні криві.
Варто відзначити, що на відміну від симетричних ключів, кількість яких
обчислюється з розрахунку на взаємодію будь-яких двох вузлів в mesh-мережі,
асиметрична криптографія вимагає лише 2n або O(n) ключів.
Перший метод асиметричного шифрування з відкритим ключем був описаний в
алгоритмі Ривеста-Шаміра-Адлемана (англ. Rivest-Shamir-Adleman, або RSA),
розробленому в 1978 р. Він має на увазі, що користувач повинен знайти і опублікувати
добуток двох великих простих чисел і допоміжне значення (відкритий ключ). Відкритий
ключ дозволяє шифрувати повідомлення та доступний кому завгодно, але прості
множники залишаються конфіденційними. Алгоритм виглядає так:
1) знаходимо два великих простих числа, p і q;
2) n = pq;
3) φ(n) = (p1) (q-1);
4) відкритий ключ - вибираємо ціле число e, яке є взаємно простим для φ(n) і
знаходиться в діапазоні 1<е<φ(n); типовим значенням є 216+1 = 65537;
5) закритий ключ - обчислюємо d для рішення рівняння конгруенції:
de ≡ 1(mod φ (n)).
Таким чином, для шифрування повідомлення використовується відкритий ключ
(n, e), а для його розшифровки - закритий ключ (n, d):
шифрування: шифротекст = (простий текст)e mod n;
розшифровка: простий текст = (шифротекст) d mod n.
Часто в короткі повідомлення перед шифруванням додається зсув, щоб отримати
хороший шифротекст.
Напевно, найвідомішим видом обміну асиметричними ключами є протокол Діффі-
Хеллмана (названий на честь Уитфилда Діффі і Мартіна Хеллмана) (рис. 5). Типовим для
асиметричної криптографії вважається поняття односторонньої функції з потайним
входом (англ. Trapdoor Function), яка приймає задане значення A і повертає висновок B;
але при цьому з B можна отримати A.

Рис. 5 Протокол Діффі-Хеллмана.


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

Метод Діффі-Хеллмана дозволяє обом сторонам (Еліс A і Боб B) обмінюватися


ключами, не знаючи заздалегідь про загальний ключ s. Алгоритм заснований на
відкритому обміні початковим простим числом, p, і генераторі простих чисел g, який
являє собою первісний корінь p. Нехай закриті ключі Еліс і Боба називаються a і b. Тоді
A = ga mod p і B = gb mod p. Свої секретні ключі Еліс і Боб обчислюють як s = Ba mod p
і s = Ba mod p.
У підсумку, (ga mod p)b mod p = (gb mod p)a mod p.
Сильною стороною такого обміну ключами є генерація справжнього випадкового
числа для кожного закритого ключа. Найменша передбачуваність в роботі генератора
псевдовипадкових чисел може привести до взлому шифру. Однак принциповим недоліком
тут виступає відсутність аутентифікації, що відкриває можливість для MITM-атаки.
Ще один спосіб обміну ключами, протокол Діффі-Хеллмана на еліптичних кривих
(англ. Elliptic-Curve Diffe-Hellman, або ECDH), був запропонований Коблітцем і Міллером
в 1985 р. Він заснований на алгебрі еліптичних кривих над кінцевим полем. Алгоритм
ECDH отримав підтримку з боку інституту NIST і був схвалений NSA для шифрування
цілком таємних матеріалів з використанням 384-бітних ключів. Криптографія на основі
еліптичних кривих (англ. Elliptic Curve Cryptography, або ECC) володіє наступними
відмітними характеристиками:
симетричність по осі x;
еліптична крива може перетинатися з прямою лінією не більше ніж в трьох точках.
Процес ECC (рис. 6) починається з проведення прямої лінії з заданої точки на межі в
напрямку MAX.

Рис. 6 Криптографія на основі еліптичних кривих (ECC).


Тут показана стандартна еліптична крива на осях x і y. Процес починається з
проведення прямої лінії з заданої точки A до другої точки і пошуку третього, непомічених
перетину. Лінія проводиться строго вертикально до протилежного значення по осі y, яке
в цей момент маркується. Процес триває для n точок, відповідних довжині ключа.

Ця лінія з'єднує A і B. Скалярний добуток точки A використовується для проведення


лінії між двома точками, після чого на новому непоміченому перетині креслиться строго
вертикальна лінія - або вгору, або вниз. Цей процес повторюється n раз, де n - розмір
ключа.
Це схоже на кінцевий результат удару по більярдній кулі після того, як той безліч
разів вдарився об борти столу. Підсумкове місце розташування кулі не дозволяє
спостерігачеві визначити, якою була його вихідна позиція.
MAX - це максимальне значення по осі x, яке обмежує віддаленість вершини. Якщо
вершина виходить за межі MAX, алгоритм застосовує це значення встановлює нову точку
x-MAX, віддалену від вихідної точки A. Значення MAX еквівалентно розміру
використовуваного ключа. Довгий ключ генерує більше вершин і підвищує стійкість до
злому. По суті, це функція-обгортка.

Еліптичні криві починають превалювати над RSA. Сучасні браузери підтримують


алгоритм ECDH, який є найкращим методом аутентифікації по SSL/TLS. Як ви пізніше
побачите, ECDH можна знайти в Bitcoin і деяких інших протоколах. На сьогоднішній день
RSA використовується тільки в разі, якщо у SSL-сертифіката є відповідний RSA-ключ.
Ще одна перевага полягає в тому, що навіть короткі ключі забезпечують таку ж
криптографічну стійкість, як і застарілі методи. Наприклад, 256-бітний ключ в ECC
еквівалентний 3072-бітному ключу в RSA. Цю властивість слід враховувати в контексті
обмежених IoT-пристроїв.

Криптографічний хеш (аутентифікація і цифровий підпис)

Третім видом технології шифрування є хешируючі функції. Зазвичай вони


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

Принцип роботи криптографічних хешируючих функцій, таких як SHA-1 (Secure


Hash Algorithm - алгоритм криптографічного шифрування), можна проілюструвати на
прикладі двох рядків, які відрізняються лише одним символом:
Введення: Boise Idaho
Хеш SHA1: 375941d3fb91836fb7c76e811d527d6c0a251ed4
Введення: B0ise Idaho
Хеш SHA1: 182ae5b6e186a1b1857c7f18df84ae18438d0b57

Алгоритми сімейства SHA активно використовуються в:


- репозиторіях Git;
- цифрові підписи TLS-сертифікатів для веб-браузерів (HTTPS);
- перевірці автентичності вмісту файлу або образу диска.
Більшість хеш-функцій засновані на структурі Меркле-Дамгарда. У наведеному
нижче прикладі введення розбивається на блоки однакового розміру, кожен з яких
проходить через стискаючу функцію із застосуванням результатів стиснення
попереднього блоку. Для вибору початкового значення використовується вектор
ініціалізації. Завдяки функції стиснення хеш виходить стійким до колізій. Алгоритм SHA-
1 побудований на основі структури Меркле-Дамгарда (рис. 7).
Рис. 8 Алгоритм SHA-1. Введення розбивається на п'ять 32-бітових блоків

В цілому, повідомлення, які подаються на ввід алгоритму SHA, повинні бути менше
264 біт. Вони послідовно обробляються в 512-бітних блоках. Стандарт SHA-1 витіснений
більш стійкими версіями, такими як SHA-256 і SHA-3. У хешах SHA-1 знайшли
можливість «колізій»; і хоча для цього потрібно приблизно від 251 до 257 операцій, злом
хешу на орендованому графічному адаптері обійдеться лише в кілька тисяч доларів. У
зв'язку з цим рекомендується перейти на інші різновиди SHA.

Інфраструктура відкритого ключа

Асиметрична криптографія (з відкритим ключем) - це основа торгівлі та взаємодії в


Інтернеті. Вона повсюдно використовується в SSL- і TLS-з'єднаннях. Типовим прикладом
є ситуація, коли передаваємі дані можуть бути зашифровані за допомогою відкритого
ключа (тобто, ким завгодно), але розшифрувати їх може той, кому належить закритий
ключ.
Ще одне застосування пов'язано з цифровими підписами, коли відправник підписує
виконавчі дані закритим ключем, а одержувач може перевірити їх справжність, якщо у
нього є відкритий ключ.
Щоб налагодити надійну видачу відкритих ключів, використовується процес під
назвою інфраструктура відкритого ключа (англ. Public Key Infrastructure, або PKI).
Гарантія автентичності забезпечується за рахунок засвідчуючих центрів (центрів
сертифікації англ. Certifcate Authorities, або CA), які керують ролями і правилами,
створюючи розподілені цифрові сертифікати. Найбільшими публічними видавцями TLS-
сертифікатів є компанії Symantec, Comodo і GoDaddy. Формати сертифікатів на основі
відкритих ключів описуються стандартом X.509. Це основа безпечної взаємодії в
протоколах TLS/SSL і HTTPS. X.509 визначає такі атрибути як використовуваний
алгоритм шифрування, терміни придатності і видавець сертифіката.
До складу PKI входить центр реєстрації (англ. Registration Authority, або RA),
який аутентифікує відправника, управляє окремими ролями/правилами і може відкликати
сертифікат. Для передачі списків відкликаних сертифікатів RA взаємодіє з центром
перевірки автентичності (англ. Validation Authority, або VA). CA видає сертифікат
відправнику. Коли повідомлення отримано, VA може перевірити справжність ключа і
упевнитися в тому, що він не був анульований.
На рис.8 показаний приклад інфраструктури PKI. Тут використовуються системи
CA, RA і VA, а шифрування повідомлення має на увазі видачу ключа і перевірку його
справжності.
Рис.8 Приклад інфраструктури PKI

Мережевий стек: протокол захисту транспортного рівня

Протокол захисту транспортного рівня (англ. Transport Layer Security, або TLS)
Стандарт TLS увібрав в себе всі криптографічні протоколи і технології, які ми вже
обговорювали. У цьому питанні ми коротко пройдемося по специфікації TLS1.2, її
структурі та використання.
Спочатку рівень захищених сокетів (англ. Secure Sockets Layer, або SSL) був
представлений в 1990 р, але вже через 9 років йому на зміну прийшла технологія TLS. З
2008 р. поточна специфікація TLS1.2 входить до складу стандарту RFC5246. TLS 1.2
включає в себе генератор хешів SHA-256, який був доданий замість SHA-1 для
поліпшення безпеки.
Процес шифрування в TLS виглядає наступним чином:
1) клієнт відкриває з'єднання з сервером, що підтримує TLS (порт 443 для HTTPS);
2) клієнт надає список шифрів, які він підтримує;
3) сервіс вибирає шифр і функцію шифрування і оповіщає клієнта;
4) сервер передає клієнту цифровий сертифікат, виданий центром, що засвідчує і
містить відкритий ключ;
5) клієнт підтверджує справжність сертифіката;
6) для генерації ключа сеансу використовується один з двох способів:
1) серверу передається випадкове число, попередньо зашифроване за допомогою
його відкритого ключа. Потім сервер і клієнт створюють на його основі ключ
сеансу, який використовується на протязі взаємодії;
2) ключ сеансу для шифрування і дешифрування генерується за допомогою
протоколу Діффі-Хеллмана. Отриманий ключ використовується, поки не
закриється з'єднання.
7) взаємодія переходить в зашифрований канал.
На рис. 12.9 показаний процес рукостискання двох пристроїв, які з'єднано через
TLS1.2.

Процес рукостискання в TLS 1.2


Рис.9 Послідовність кроків при рукостисканні в TLS 1.2

Протокол датаграмм безпеки транспортного рівня (англ. Datagram Transport Layer


Security, або DTLS) - це комунікаційний протокол на основі TLS, який працює поверх
UDP (версія DTLS 1.2 oснована на TLS 1.2). Він призначений для забезпечення схожих
гарантій безпеки і використовується в легковесном протоколі CoAP.

5. Програмно-визначаємий периметр

Раніше ми обговорювали такі поняття, як програмно-визначаємі оверлейні мережі.


Здатність оверлейної мережі створювати мікросегменти є надзвичайно корисною,
особливо при масовому масштабуванні IoT-пристроїв і в ситуаціях, коли є можливість
нівелювати наслідки DDoS-атаки. Програмно-визначаємі мережі мають додатковий
компонент під назвою SDP (Software-Defned Perimeter - програмно-визначаємий
периметр), який заслуговує на окрему увагу в контексті безпеки оверлейних мереж.

Архітектура програмно-визначаємого периметра


Програмно-визначаємий периметр (англ. Software-Defned Perimeter, або SDP) - це
підхід до побудови мережі, який не передбачає ніякої моделі довіри. Він заснований на
так званій чорній хмарі Департаменту систем захисту інформації (англ. Defense
Information Systems Agency, або DISA).
У чорній хмарі обмін інформацією відбувається лише в міру необхідності. SDP може
пом'якшити наслідки таких атак, як DDoS, MITM, експлойти нульового дня, сканування
серверів і т. д. Крім надання оверлею і мікросегментації для кожного підключеного
пристрою, периметр захищає користувачів, клієнтів та IoT-пристрої спеціальним бар'єром,
проникнути через який можна тільки за запрошенням (на основі перевірки автентичності).
SDP можна використовувати для створення оверлейної мережі (це мережа,
побудована поверх іншої мережі). Наприклад, колись інтернет-сервіси були засновані на
існуючих телефонних комунікаціях. У такій гібридної моделі розподілений керуючий
рівень залишається незмінним. Прикордонні маршрутизатори та віртуальні комутатори
направляють дані в залежності від правил, описаних на керуючому рівні. Оскільки
стійкість мережі SDN багато в чому аналогічна провідним мережам, вона ідеально
підходить для додатків реального часу, віддаленого моніторингу та складної обробки
подій. Можливість створення декількох оверлейних мереж поверх одних і тих же
прикордонних компонентів дозволяє виконувати мікросегментацію, відкриваючи
споживачам прямий доступ до різних ресурсів. Кожна пара «ресурс-споживач» є незмінну
мережу; її доступ за межі віртуального оверлею визначається системним адміністратором.
Можливість створення декількох оверлейних мереж поверх одних і тих же
прикордонних компонентів дозволяє виконувати мікросегментацію, коли кожна кінцева
точка в глобальній розподіленій мережі IoT може формувати окремі ізольовані сегменти,
використовуючи наявну інфраструктуру. Теоретично ми можемо ізолювати кожен датчик.
Це потужний інструмент, який дозволяє підключатися до IoT-пристроїв як сервісів,
використовуючи з'єднання промислового рівня, а також ізолювати і захищати їх один від
одного.
На рис.10 показаний приклад SDN-оверлею. У якоїсь корпорації є три віддалених
магазини з рядом різних IoT-пристроїв і прикордонних компонентів в кожному. Мережа
заснована на SDN-оверлеї з мікросегментами, ізолюючими системи POS і VOIP; ті, в свою
чергу, корпоративно управляються за допомогою датчиків, призначених для моніторингу
безпеки, страхових умов і стану холодильної камери. Незалежні постачальники послуг
можуть управляти різними віддаленими датчиками, кожен з яких знаходиться в
ізольованій і безпечній віртуальній оверлейній мережі.
Щоб посилити безпеку SDP, можна розробити систему запрошень, змушуючи парні
пристрої аутентифікуватися перед підключенням.
У мережу можуть бути додані тільки попередньо авторизовані користувачі і клієнти.
Керуючий рівень може розширити цей підхід, надаючи запрошення через електронну
пошту або якийсь механізм реєстрації. Якщо користувач прийме запрошення, клієнтські
сертифікати і повноваження поширюватимуться лише на ту систему, з якої він працює.
Система запрошень веде список розширених сертифікатів і надає оверлейне з'єднання
тільки в разі, якщо обидві сторони прийняли запропоновані їм ролі.
Як аналогію з реального світу можна привести розсилку запрошень на вечірку.
Запрошення відправляються окремим друзям поштою, із зазначенням дати, часу, адреси та
інших подробиць. Кожен з адресатів сам вирішує, чи приймати запрошення. Як варіант,
вечірку можна прорекламувати по Інтернету, телевізору або радіо; в цьому випадку кожен
відвідувач перевіряється на вході.
Рис. 10 Приклад оверлейної SDN-мережі

6. Блокчейн і криптовалюта в Інтернеті речей

Блокчейн (англ. Blockchain) - це публічний, цифровий, децентралізований реєстр


(англ. Ledger) або ланцюжок криптовалютних транзакцій. Першим криптовалютним
блокчейном є Bitcoin, але крім нього на ринку існує більше 700 нових валют, таких як
Ethereum, Ripple і Dash. Сильна сторона цієї технології полягає у відсутності єдиної
сутності, яка контролює стан транзакцій. Вона також забезпечує надмірність системи,
змушуючи кожного учасника зберігати копію реєстру. Якщо припустити, що учасники
системи не схильні довіряти один одному, їх взаємодія має ґрунтуватися на консенсусі.
Напрошується питання: навіщо передавати дані або валюту в блокчейні, якщо ми
вже вирішили проблеми перевірки достовірності та безпеки за допомогою асиметричної
криптографії та обміну ключами? Справа в тому що передача грошових коштів і цінної
інформації вимагає чогось більшого.
Уявіть, що у нас є два пристрої (назвемо їх Боб і Еліс). Відповідно до теорії
інформації, коли Боб передає Еліс якесь повідомлення або фрагмент даних, він зберігає у
себе копію переданої інформації. При обміні грошима або контрактами дані повинні
покинути джерело і з'явитися в пункті призначення. Вони повинні існувати в єдиному
екземплярі. Перевірка справжності та шифрування забезпечують взаємодію, але нам
необхідний новий інструмент для передачі володіння (рис.11).
Безпечні криптовалюти на основі блокчейна мають велике значення для Інтернету
речей. Можна навести такі приклади:
прямі грошові платежі між пристроями - Інтернет речей повинен бути готовий до
підтримки пристроїв, які обмінюють послуги на валюту;
управління ланцюгами постачання - незмінюваність і безпека блокчейна може
стати в нагоді в логістиці, інвентаризації та переміщенні товару, роблячи паперовий облік
непотрібним. Всі контейнери, переміщення, розташування і стану можуть
відслідковуватися, перевірятися і сертифікуватися. Спроби заміни, видалення або зміна
облікової інформації стають неможливими;
Рис. 11 Топологія реєстру. Централізований реєстр - це типовий підхід, в якому
обслуговуванням «журналу» займається єдина сутність. У криптовалюти
використовуються або децентралізовані, або розподілені реєстри

сонячна енергія - уявіть сонячну енергію у вигляді послуги. У цьому випадку на


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

Bitcoin (блокчейн)
Та частина Bitcoin, яка відноситься до криптовалюти, не є блокчейном як таким.
Bitcoin - це штучна валюта, яка сама по собі не має ніякої цінності і нічим не забезпечена
(на відміну від золота). Її не можна помацати; вона існує лише в рамках мережі. І, нарешті,
кількість «монет» Bitcoin не контролюється центральним банком або урядом. Це повністю
децентралізована технологія. Як і інші блокчейни, вона заснована на криптографії
відкритого ключа, великій і розподіленій одноранговій мережі та протоколі, який визначає
структуру Bitcoin. У 2008 р Сатоши Накамото (псевдонім) опублікував в розсилці,
присвяченій криптографії, документ під назвою «Біткойн: система цифрової пірингової
готівки». У 2009 р була запущена перша мережа Bitcoin, в якій Сатоши згенерував перший
блок (первинний блок [англ. Genesis Block]). Концепція блокчейна має на увазі наявність
блоку, який представляє собою поточний фрагмент реєстру. Комп'ютер, підключений до
мережі блокчейн, називається вузлом (англ. node). Кожен вузол бере участь в перевірці
автентичності та передачі транзакцій; для цього він отримує копію реєстру та, по суті, стає
її адміністратором.
Розподілені мережі, засновані на однорангових топологіях, ідеально підходять для
Bitcoin. У мережі Bitcoin діє закон Меткалфа, оскільки її розмір визначає цінність валюти.
Мережа зберігає ланцюжок записів (реєстр). Виникає питання: хто захоче добровільно
ділитися своїми обчислювальними ресурсами для моніторингу журналу? Відповіддю є
система винагороди на основі майнінгу (від англ. Mining).
На рис. 12 показаний процес виконання транзакції. Спочатку робиться запит, який
транслюється по піринговій (англ. Peer-to-Peer, або P2P) мережі комп'ютерів (вузлів). Ця
мережа відповідальна за перевірку справжності своїх користувачів, під час якої також
перевіряється сама транзакція. Потім транзакції об'єднуються в новий блок даних в
розподіленому реєстрі.
Після заповнення блок додається в існуючий блокчейн і більше не підлягає зміні.
Нижче проілюстровані аутентифікація, майнінг і перевірка справжності в Bitcoin.
На діаграмі показаний процес передачі 0,000554 BTC між Еліс і Бобом зі службовою
комісією 0,0001 BTC. Еліс ініціює транзакцію, підписуючи її вміст комбінацією хешу
попередньої транзакції і свого закритого ключа. Еліс також поміщає свій закритий ключ в
скрипт inputScriptSig. Потім транзакція поширюється по мережі для подальшого
додавання в блок і перевірки автентичності. Кожен учасник мережі намагається першим
підтвердити справжність і знайти підходяще випадкове число (NONCE), засноване на
поточному рівні складності. При знаходженні блоку сервер передає його іншим
учасникам, щоб ті його перевірили і додали в ланцюжок.

Алгоритм майнінга Bitcoin


Перевіряємо достовірність транзакцій в блоці:
1) перевіряємо цілісність і синтаксис транзакцій;
2) перевіряємо цілісність ScriptSigs;
3) відхиляємо транзакції, якщо вони вже існують;
4) перевіряємо підпис;
5) відхиляємо, якщо вхідні і вихідні значення Bitcoin не збалансовані;
6) відхиляємо, якщо відкритий ключ відправника не такий же, як в попередній транзакції.
Рис. 12 Процес виконання транзакцій в блокчейні Bitcoin

Нижче представлений якісний аналіз блокчейна в цілому і роботи Bitcoin зокрема.


Важливо розуміти ці фундаментальні принципи, засновані на всіх тих засобах безпеки, які
ми розглянули раніше в цій лекції:
- транзакція з цифровим підписом - Еліс хоче передати Бобу 1 Bitcoin.
Для початку про це потрібно публічно оголосити. Для цього Еліс пише повідомлення
«Еліс віддасть Бобу 1 Bitcoin» і підтверджує його цифровим підписом на основі свого
закритого ключа. Кожний власник відкритого ключа може перевірити справжність даного
повідомлення. Однак Еліс може повторити своє повідомлення і тим самим підробити
грошові кошти;
- унікальна ідентифікація - щоб вирішити проблему з фальсифікацією, біткоін
створює унікальний серійний номер, як це робить Американське казначейство на своїх
банкнотах. Для цього замість числа, яке призначається централізованим способом,
використовується хеш. Цей хеш автоматично генерується під час транзакції і дозволяє її
ідентифікувати.
Ще одна серйозна проблема пов'язана з подвійною тратою. Навіть якщо транзакція
підписана і має унікальний хеш, Еліс може спробувати передати той же Bitcoin іншим
учасникам. Боб перевірить транзакцію, ініційовану Еліс, і у нього все зійдеться. Але, якщо
Еліс виконає ту ж транзакцію, тільки по відношенню до Чарлі, вона, по суті, обведе
систему навколо пальця. Мережа Bitcoin дуже велика, але можливість розкрадання коштів
в ній хоч і незначна, але все ж таки присутня. Щоб захиститися від подвійної витрати,
користувачі Bitcoin, що приймають платежі через блокчейн, чекають підтвердження.
Згодом з'являється все більше підтверджень, що підвищує шанс успішного проходження
перевірки;
- перевірка справжності іншими вузлами - щоб виключити подвійну витрату в
блокчейні, одержувачі транзакції (Боб і Чарлі) передають інформацію про платіж в
мережу і просять інших учасників перевірити її справжність. Така перевірка виконується
не безоплатно;
- доказ виконання роботи - проблема подвійної витрати все ще не вирішена до
кінця. Еліс може отримати контроль над мережею за допомогою власних серверів і
заявити, що всі її транзакції є справжніми. Щоб виключити таку можливість раз і
назавжди, в Bitcoin була додана концепція доказу виконання роботи (англ. Proof of Work,
або PoW). Вона має два аспекти. По-перше, перевірка автентичності транзакції повинна
вимагати значних обчислювальних ресурсів. Це має бути щось більш складне, ніж
зіставлення ключів, імен користувачів, ідентифікаторів транзакцій і інших тривіальних
атрибутів аутентифікації. По-друге, користувачі повинні заохочуватися за допомогу в
підтвердженні грошових транзакцій інших учасників (див. Наступний крок);
- щоб змусити користувачів, які перевіряють транзакції, виконувати певну роботу, до
заголовків транзакцій додається випадково згенероване число. Bitcoin хешує це число
разом з повідомленням в заголовку, використовуючи безпечний алгоритм SHA-256. Цей
хеш називається цільовим; він має розмір менше 256 біт, а його вміст постійно
змінюється. Чим менше це значення, тим більше ресурсів витрачається на пошук
оригінального повідомлення. Оскільки кожен хеш, по суті, генерує абсолютно випадкове
число, користувачам доводиться обчислювати безліч значень типу SHA-256. В
середньому на кожне значення йде приблизно 10 хвилин.
Доказ виконання роботи такої тривалості означає, що перевірка транзакції в
середньому займатиме ті ж 10 хвилин. Майнери працюють з блоками, що складаються з
безлічі транзакцій. На поточний момент розмір блоку не перевищує 1 Мб, і поки він не
буде оброблений, ваша транзакція не зможе завершитися. Це може мати наслідки для IoT-
пристроїв, які повинні працювати в режимі реального часу.
- стимули для майнінга Bitcoin - щоб заохотити побудову пірингової мережі для
перевірки чужих транзакцій, користувачі отримують винагороду за виконану роботу. Це
робиться двома способами. Перший - через майнінг Bitcoin, від якого виграють учасники,
які займаються перевіркою блоків з транзакціями. Другий спосіб полягає у виплаті комісії
за проведену транзакцію. Комісію отримує майнер, який допомагає перевірити
справжність блоку. Спочатку комісія дорівнювала нулю, але з ростом популярності
Bitcoin вона теж почала зростати. В середньому успішна транзакція винагороджується 35
доларами (у вигляді BTC). Якщо обробка блоку відбувається в прискореному режимі,
комісію можна підняти. Таким чином, навіть після обчислення всіх хешів в поточному
поколінні Bitcoin, у користувачів буде стимул підтримувати транзакції;
* Спочатку винагорода була дуже високою (50 BTC), але після обчислення перших
210 000 блоків вона зменшується вдвічі кожних чотири роки. Так буде тривати до 2140 р
поки частота зменшення не досягне критичної точки; після цього обсяг винагороди буде
менше найдрібнішої одиниці виміру Bitcoin (10 -8 БТЦ), яку ще називають сатоши
(satoshi).
З огляду на те, що кожних 10 хвилин обчислюється новий блок, а винагороди
знижується вдвічі кожні чотири роки, в якийсь момент ми можемо досягти максимальної
кількості можливих блоків. До того ж, ми знаємо, що спочатку нагорода становила 50
BTC. З цього можна вивести послідовність, яка прагне до ліміту сатоши: 50 BTC + 25 BTC
+ 12,5 BTC. . . = 100 BTC. Разом, максимальна кількість «монет» Bitcoin дорівнює 210 000
* 100 = 21.

- безпека на основі порядку зчеплення блоків - порядок, в якому виконуються


транзакції, теж має велике значення для цілісності Bitcoin. Якщо кошти передаються від
Еліс до Боба, а потім від Боба до Чарлі, ці події повинні бути записані в реєстрі саме в
такому порядку. Для цього транзакції в блокчейні зчіплюються. Кожен новий блок, який
потрапляє в мережу, містить покажчик на останній блок в ланцюжку, який був
перевірений. У Bitcoin транзакція не є дійсною, поки її не додадуть в найдовший
ланцюжок, і поки слідом за нею не буде підтверджено хоча б п'ять інших блоків. Це
вирішує проблему з асинхронністю, якщо Еліс спробує передати Бобу і Чарлі одні і ті ж
засоби. Вона може спробувати повідомити про кожну транзакцію окремим наборам
майнерів. Однак в момент сходження мережі цей обман буде виявлений. Таким чином,
якщо транзакція успішно завершиться для Боба, мережа оголосить її недійсною у випадку
з Чарлі. Але правила порядку зчеплення зупинять Еліс, навіть якщо замість Чарлі вона
спробує заплатити самій собі. Припустимо, вона передасть Бобу 1 BTC і дочекається
підтвердження транзакції (п'ять блоків по тому), а потім переведе ті ж кошти на свою
адресу, викликавши тим самим роздвоєння ланцюжка. Після цього їй доведеться
підтвердити п'ять додаткових блоків. Згідно з пунктом 4, це займе близько 50 хвилин і
зажадає величезних обчислювальних ресурсів, так як вона повинна буде випередити всіх
інших майнерів разом взятих.
Ще одним цікавим аспектом блокчейна є метод боротьби з DDoS-атаками, який
заснований на доказі виконання роботи (система «протокол/функція») і є економічною
мірою. Зловмисник намагається наситити мережу якомога більшим обсягом даних і тим
самим вивести систему з ладу. Блокчейн з механізмом PoW знижує ефективність такої
атаки. Ключовий момент цього підходу полягає в його симетричності: робота, пророблена
запитуючою стороною, повинна бути досить трудомісткою (але здійсненною), і при цьому
оператор мережі повинен мати можливість швидко її перевірити.

IOTA (спрямований ациклічний граф)


Нещодавно з'явилася нова цікава криптовалюта під назвою IOTA, призначена
спеціально для Інтернету речей. Її архітектура заснована на направленому ациклічному
графі (англ. Directed Acyclic Graph, або DAG), а ланцюжок довіри формується самими IoT-
пристроями. Bitcoin передбачає комісію за кожну транзакцію. У IOTA немає ніяких
комісій. Це робить можливим проведення мікротранзакцій, що дуже важливо в контексті
Інтернету речей. Наприклад, безліч клієнтів можуть підписатися на показання датчика
через MQTT. В цілому, ця послуга має певну цінність, але кожна окрема транзакція є
настільки незначною, що комісія, що знімається в мережі Bitcoin, була б вище, ніж
вартість самих даних.
Архітектура IOTA має такі особливості:
контроль над засобами не централізований; в блокчейні користувачі можуть
об'єднуватися у великі групи, щоб збільшити кількість блоків, які вони можуть
згенерувати, і відповідну винагороду. Це може привести до концентрації впливу і
нашкодити мережі;
немає необхідності в дорогому обладнанні. Для майнінгу криптовалюти в мережі
Bitcoin потрібні потужні процесори, здатні впоратися зі складними обчисленнями;
мікро- і нанотранзакціі на рівні окремих IoT-пристроїв;
надійний захист від злому методом простого перебору, навіть якщо при цьому
використовуються квантові комп'ютери;
через IOTA можна передавати не тільки валюту, але і дані. При цьому є повноцінна
підтримка аутентифікації і захист від підміни;
в мережі IOTA вміст транзакції може бути яким завгодно, тому на її основі можна
побудувати національну систему голосування, захищену від стороннього втручання;
роль сервісу може виконувати будь-який пристрій з компактним чіпом. IOTA
дозволяє орендувати що завгодно: дриль, персональний маршрутизатор, мікрохвильовку
або велосипед - для цього потрібно лише наявність невеликого чіпа або мікроконтролера.

Граф DAG в IOTA називається клубком (англ. Tangle) і використовується для


зберігання транзакцій у вигляді розподіленого реєстру. Транзакції використовуються
вузлами (IoT-пристроями) і складають клубок DAG. Якщо транзакції A і B пов'язані
безпосередньо спрямованої гранню, але з A в B можна провести маршрут довжиною не
менше відстані між цими двома точками, вважається, що A побічно підтверджує B.
Існує також поняття первинної транзакції. Так як клубок не може бути розпочато
шляхом майнінгу граней графа і при цьому відсутні стимули і комісії, кожен вузол
повинен містити всі токени; первинна подія розсилає їх по адресах «засновників». Це
статична безліч всіх токенів, яка ніколи більше не буде поповнюватися.
Кожна нова транзакція повинна підтвердити (або відхилити) попередні дві; цей
процес формує в графі пряму грань і називається прямим підтвердженням. Для створення
транзакції необхідно виконати «роботу» від імені клубка. Робота полягає в пошуку
випадкового числа (nonce), яке підходить для хешу фрагмента підтвердженої транзакції.
Таким чином, завдяки використанню IOTA мережа стає більш розподіленою і безпечною.
Транзакції можуть бути підтверджені багато разів. Зі збільшенням їх кількості зростає
впевненість в їх правомочності. При спробі схвалити неправомочну транзакцію, вузол
ризикує відхиленням власної транзакції і виключенням з клубка.
Ця технологія все ще перебуває на ранній стадії розвитку, але за нею стоїть
поспостерігати. Більше інформації можна знайти на сайті iota.org.

ВИСНОВОК

У цій лекції ми розглянули ризики безпеки в Інтернеті речей. Маючи на увазі


наявність таких відомих вірусів як Mirai і Stuxnet, спеціально націлених на IoT-пристрої,
архітектори IoT-систем повинні з самого початку дбати про безпеку своїх архітектур.
Інтернет речей є ідеальним середовищем для виконання різного роду атак. Зазвичай
системи цього типу мають менш зрілий захист в порівнянні з ПК. IoT-пристрої являють
собою найбільш велику поверхню атаки на планеті, а віддаленість деяких з них дозволяє
зловмисникам отримати фізичний доступ до обладнання, немислимий в безпечних
офісних умовах. Ці загрози вимагають серйозної уваги, так як їх наслідки можуть
торкнутися як окремих пристроїв, так і міста або навіть цілі країни.
Додатковий матеріал на цю тему можна знайти за наступними посиланнями:
Black hat: www.blackhat.com;
Defcon: www.defcon.org;
Digital Attack Map: www.digitalattackmap.com;
Gattack: gattack.io;
IDA Pro Interactive Disassembler: www.hex-rays.com;
RSA Conference: www.rsaconference.com;
Shodan: www.shodan.io.

You might also like