Автор: prateek, roshan, сиддхартха & лінгвін (Marlin), krane (Asula)компіляція: Shew, божественний БогRealmX
З моменту оголошення Apple про запуск приватного хмарового сховища та надання NVIDIA конфіденційних обчислень в GPU, довіра виконання середовища (TEE) стала дедалі популярнішою. Їх гарантована конфіденційність допомагає захищати дані користувачів (можливо, включаючи особисті ключі), а ізоляція забезпечує, що виконання програм, розгорнутих на них, не буде піддаватися втручанню - незалежно від того, чи це людина, інші програми чи операційна система. Тому не дивно, що в області Crypto x AI широко використовують TEE для створення продуктів.
Як і будь-яка нова технологія, TEE перебуває в експериментальному етапі оптимізму. Ця стаття сподівається надати основний покажчик концепцій розробникам та загальному читачеві, щоб вони зрозуміли, що таке TEE, модель безпеки TEE, поширені вразливості та найкращі практики безпечного використання TEE. * (Зверніть увагу *: для полегшення зрозуміння тексту ми навмисно замінили терміни TEE на більш прості еквіваленти).
Що таке TEE
TEE - це ізольоване середовище в процесорі або центрі обробки даних, де програми можуть працювати без будь-яких перешкод від інших частин системи. Щоб уникнути втручання інших частин системи в TEE, нам потрібний ряд проектувань, головним чином - суворий контроль доступу, тобто контроль доступу системи до програм та даних внутрішньої пам’яті TEE. Наразі TEE є скрізь - у телефонах, серверах, ПК та хмарному середовищі, тому доступ до нього дуже простий та ціна на нього відповідна.
Зміст вище може звучати неясним і абстрактним, насправді різні сервери та постачальники хмарних послуг реалізовують TEE по-різному, але його основна мета полягає в тому, щоб уникнути втручання інших програм в TEE.
Більшість читачів, можливо, використовує біометричну інформацію для входу до пристроїв, наприклад, розблокування смартфона за допомогою відбитка пальця. Але як ми можемо забезпечити так, щоб зловмисні додатки, веб-сайти або операційні системи джейлбрейк не мали доступу до цих біометричних даних та не крадли їх? Насправді, окрім шифрування даних, у пристроях TEE електричні схеми не дозволяють жодній програмі отримувати доступ до області пам’яті та процесора, яку займають чутливі дані.
Апаратний гаманець є ще одним прикладом сценарію використання TEE. Апаратний гаманець підключається до комп’ютера і взаємодіє з ним в пісочниці, але комп’ютер не має прямого доступу до фрази-пароля, яку зберігає апаратний гаманець. У обох випадках користувачі вірять, що виробники пристроїв зможуть правильно розробити мікросхеми і надати відповідне програмне забезпечення для оновлення фірмвару в TEE, щоб запобігти експорту або перегляду конфіденційних даних, що знаходяться в TEE.
Модель безпеки
На жаль, існує багато різних реалізацій TEE, а для цих різних реалізацій (IntelSGX, IntelTDX, AMDSEV, AWSNitroEnclaves, ARMTrustZone) потрібна окрема модель безпеки для моделювання та аналізу. У решті цього документу ми будемо головним чином розглядати IntelSGX, TDX та AWSNitro, оскільки ці системи TEE мають більше користувачів та повноцінні доступні засоби розробки. Ці системи також є найбільш поширеними системами TEE у мережі Web3.
Загалом, робочий процес програм, що розгортаються в TEE, виглядає наступним чином:
Очевидно, тут є 3 потенційні ризики:
На щастя, у сучасному TEE вже є рішення для усунення вищезазначених ризиків, а саме репродуктивні збірки(Reproducible Builds) та віддалені атестації(Remote Atteststations).
Так що таке повторне побудова? Сучасний розробка програмного забезпечення часто потребує великої кількості залежностей, таких як зовнішні інструменти, бібліотеки або фреймворки тощо, і ці залежні файли також можуть мати потенційні проблеми. Зараз npm та інші рішення використовують хеш-код коду для залежних файлів як унікальний ідентифікатор. Коли npm помічає, що деякий залежний файл не збігається з записаним хешем, це означає, що файл був змінений.
А може бути повторно побудований може бути розглянутий як набір стандартів, мета полягає в тому, щоб будь-який код, який запускається на будь-якому пристрої, мав однакові хеш-значення, якщо будується відповідно до заздалегідь визначеної процедури. Звичайно, в практиці ми також можемо використовувати продукти поза хешем як ідентифікатор, який ми називаємо кодом вимірювання (code measurement).
Nix - це поширений інструмент для повторної побудови. Коли вихідний код програми стає відкритим, будь-хто може перевірити код, щоб переконатися, що розробники не вставили в нього ніякого аномального вмісту, і будь-хто може використовувати Nix для побудови коду та перевірити, чи він має ті самі кодові метрики / хеші, що й продукційний код, що розгортається в середовищі розробки. Але як ми можемо знати кодові метрики програми в TEE? Це пов’язано з поняттям «віддаленого доказу».
Віддалене доведення - це підписане повідомлення від платформи TEE (довірена сторона), в якому міститься вимірювання коду програми, версія платформи TEE тощо. Віддалене доведення дозволяє зовнішнім спостерігачам знати, що певна програма виконується в безпечному місці, до якого ніхто не має доступу (справжня версія TEE).
Повторне будівництво та віддалене доведення дозволяють будь-якому користувачеві знати фактичний код, який виконується у TEE, і інформацію про версію платформи TEE, що запобігає зловживанням розробників або серверів.
Але у випадку TEE все одно потрібно довіряти їх постачальнику. Якщо постачальник TEE зловживає, він може безпосередньо підробити віддалене підтвердження. Тому, якщо розглядати постачальника як потенційний засіб атаки, слід уникати виключної залежності від TEE, краще поєднувати їх з ZK або протоколом консенсусу.
Чарівність TEE
На нашу думку, особливо популярність TEE, особливо для розгортання AI Agent, передусім полягає в наступних особливостях:
Незалежно від того, чи добре, або погано, досить важко знайти альтернативні рішення для використання TEE. Ми віримо, що впровадження TEE додатково розширить простір для розробки додатків на ланцюжку, що, можливо, сприятиме виникненню нових сценаріїв використання.
TEE не є срібною кулею
Програми, що працюють в TEE, все ще можуть бути піддані різним атакам та помилкам. Як і у випадку з розумними контрактами, вони можуть зіткнутися з рядом проблем. Для спрощення, ми класифікуємо можливі вразливості наступним чином:
Розробник пропустив
Незалежно від того, чи навмисно, чи ненавмисно, розробники можуть послабити гарантії безпеки програм в TEE за допомогою навмисного або ненавмисного коду. Це включає в себе:
Вразливість під час роботи
Розробники, навіть будучи надзвичайно обережними, все одно можуть стати жертвами вразливостей в час виконання. Розробники повинні уважно розглянути, чи будь-що з наведеного нижче може вплинути на безпеку їх проєкту:
Наприклад, у TEE може виконуватися спарювальний двигун, який обробляє шифровані транзакції, але не забезпечує гарантії справедливого упорядкування (протидія витісненню максимальної вигоди), оскільки маршрутизатор/шлюз/хост все ще може відкидати, затримувати чи пріоритизувати пакети на основі IP-адреси джерела.
архітектурні дефекти
Стек технологій, який використовується в програмі TEE, повинен бути обраним обережно. Під час створення програми TEE можуть виникнути такі проблеми:
операційні питання
Останній, але не найменш важливий пункт стосується практичних вказівок щодо роботи сервера, який виконує програми TEE.
Побудова безпечної програми TEE
Ми розподілили наші рекомендації на наступні пункти:
1. Найбезпечніша схема: без зовнішніх залежностей
Створення високо безпечних додатків може вимагати усунення зовнішніх залежностей, таких як зовнішні введення, API або сервіси, щоб зменшити можливість атак. Цей підхід може забезпечити незалежну роботу додатка без зовнішніх взаємодій, які можуть підірвати його цілісність або безпеку. Хоча ця стратегія може обмежити функціональність програми, вона може забезпечити високий рівень безпеки.
Якщо модель працює на локальному комп’ютері, то для більшості випадків використання CryptoxAI може бути забезпечено такий рівень безпеки.
2. Необхідні заходи запобігання
Незалежно від того, чи є зовнішні залежності у додатку, наведені нижче вимоги є обов’язковими!
Розгляньте програми TEE як розумний контракт, а не як програму на боці сервера; зберігайте низьку частоту оновлення, строге тестування.
Побудова програм TEE має бути так само строга, як написання, тестування та оновлення розумних контрактів. Як і в разі розумних контрактів, TEE працює в високочутливому та незмінному середовищі, де помилки або непередбачені дії можуть призвести до серйозних наслідків, включаючи повну втрату коштів. Тщательна перевірка, широке тестування та мінімальні, добре перевірені оновлення є ключовими для забезпечення цілісності та надійності програм, побудованих на основі TEE.
Перевірте код аудиту та перевірте конвеєр збірки
Безпека програми залежить не лише від самого коду, але й від інструментів, що використовуються під час процесу побудови. Безпечний конвеєр збирання є надзвичайно важливим для запобігання вразливостям. TEE гарантує тільки те, що наданий код буде виконуватись за передбачуваним потоком, але не може виправити дефекти, що вводяться в процесі побудови.
Щоб знизити ризик, необхідно строго тестувати і аудитувати код з метою усунення помилок та запобігання непотрібному розголошенню інформації. Крім того, повторювана збірка відіграє вирішальну роль, особливо коли код розробляється однією стороною, а використовується іншою. Повторювана збірка дозволяє будь-якій особі перевірити, чи відповідає програма, що виконується в TEE, початковому вихідному коду, забезпечуючи прозорість та довіру. Якщо немає можливості повторної збірки, практично неможливо визначити точний зміст програми, що виконується в TEE, що загрожує безпеці додатка.
Наприклад, вихідний код проекту DeepWorm (моделювання мозку черв’я в TEE) є повністю відкритим. Виконавчі файли в TEE побудовані з використанням конвеєра Nix в репродукованому способі.
Використовуйте перевірені або перевірені бібліотеки
Під час обробки чутливих даних в TEE програмі, використовуйте лише перевірені бібліотеки для керування ключами та обробки приватних даних. Неперевірені бібліотеки можуть розкрити ключі та пошкодити безпеку додатка. Надайте перевагу відповідальним, безпечним залежностям з великою увагою, щоб забезпечити конфіденційність та цілісність даних.
ЗАВЖДИ ПЕРЕВІРКА ДОКАЗІВ ВІД ТІ
Користувачі, які взаємодіють з TEE, повинні перевірити віддалений доказ або механізм перевірки, створений TEE, щоб забезпечити безпечну та надійну взаємодію. Без цих перевірок сервер може маніпулювати відповіддю, не відрізняючи справжній вихід TEE від змінених даних. Віддалений доказ надає ключові докази для кодової бази та конфігурації, які виконуються в TEE, що дозволяє нам визначити, чи відповідають виконувані програми в TEE очікуванням, на основі віддаленого доказу.
Конкретне підтвердження можна здійснити на ланці (IntelSGX, AWSNitro), використовуючи докази ЗК (IntelSGX, AWSNitro) для перевірки поза ланцюжком, або користувач може самостійно перевірити або звернутися до служби хостингу (наприклад, t16z або MarlinHub).
3. Рекомендації, засновані на випадку використання
Залежно від цільового використання та структури додатка, наступні поради можуть допомогти зробити ваш додаток більш безпечним.
Переконайтеся, що взаємодія користувача з TEE завжди відбувається через безпечний канал
Сервер, на якому знаходиться TEE, в суті є ненадійним. Сервер може перехоплювати та змінювати комунікацію. У деяких випадках допустимо, що сервер читає дані, але не змінює їх, тоді як у інших випадках навіть читання даних може бути неприйнятним. Для зменшення цих ризиків важливо встановити безпечний канал з кінця в кінець з шифруванням між користувачем та TEE. Як мінімум, переконайтеся, що повідомлення містить підпис для перевірки його автентичності та джерела. Крім того, користувачі мають завжди перевіряти віддалене підтвердження від TEE, щоб переконатися, що вони спілкуються з правильним TEE. Це забезпечує цілісність та конфіденційність комунікації.
Наприклад, Oyster може підтримувати безпечне видачу TLS за допомогою записів CAA та RFC8657. Крім того, він надає протокол TEE, який називається Scallop, який не залежить від WebPKI.
Знаєте, що пам’ять TEE є митьовою
Пам’ять TEE є тимчасовою, що означає, що при вимкненні TEE її вміст (включаючи шифровані ключі) буде втрачено. Якщо немає безпечного механізму для збереження цієї інформації, важливі дані можуть залишитися недоступними назавжди, що може призвести до фінансових або операційних проблем.
Мережа багатосторонніх обчислень (MPC) з децентралізованою системою зберігання, такою як IPFS, може бути використана як рішення для цієї проблеми. Мережа MPC розбиває ключі на кілька вузлів, забезпечуючи, що жоден окремий вузол не має повного ключа, але при цьому дозволяючи мережі відновлювати ключі при потребі. Дані, зашифровані за допомогою цього ключа, можуть безпечно зберігатися на IPFS.
У разі потреби мережа MPC може надати ключі новому серверу TEE, який працює з тим же зображенням, за умови виконання певних умов. Цей підхід забезпечує гнучкість та потужну безпеку, що дозволяє зберігати доступність та конфіденційність даних навіть в ненадійному середовищі.
Існує ще один варіант розв’язання, ** а саме TEE передає відповідні угоди різним серверам MPC, які підписують та об’єднують угоди та остаточно розміщують їх у ланцюжку. Цей метод має набагато меншу гнучкість, його не можна використовувати для зберігання ключів API, паролів або довільних даних (немає довірених сторонніх служб зберігання). **
Зменшити атакувальну поверхню
Для важливих випадків використання, варто намагатися якомога більше зменшити зовнішню залежність за рахунок жертви зручності розробника. Наприклад, Dstack поставляється з мінімальним ядром на основі Yocto, в якому містяться лише модулі, необхідні для роботи Dstack. Навіть варто розглянути використання застарілих технологій, таких як SGX (перевищує TDX), оскільки ця технологія не потребує завантажувальної програми або операційної системи в якості частини TEE.
Фізична ізоляція
Через фізичну ізоляцію TEE від можливого втручання людей можна додатково підвищити безпеку TEE. Хоча ми можемо сподіватися на фізичну безпеку, розмістивши TEE-сервери в центрах обробки даних та хмарних провайдерах, проекти, такі як Spacecoin, досліджують цікавий альтернативний варіант - космос. Робота SpaceTEE базується на заходах безпеки, таких як вимірювання інерціального моменту після запуску для перевірки, чи не відхиляються супутники від очікуваного траєкторії під час входу в орбіту.
Багатократний доказувач
Точно так само, як Ethereum залежить від реалізацій кількох клієнтів для зниження ризику помилок, які впливають на всю мережу, multiprovers використовує різні схеми реалізації TEE для підвищення безпеки та еластичності. Шляхом виконання однакових обчислювальних кроків на різних платформах TEE, багатократна перевірка забезпечує, що вразливість в одній реалізації TEE не загрожує всій програмі. Хоча цей підхід вимагає, щоб обчислювальний процес був детермінованим або визначався угодою між різними схемами реалізації TEE в недетермінованих сценаріях, він також надає значні переваги, такі як ізоляція від відмов, зайвість та перехресна перевірка, що робить його відмінним вибором для програм, які вимагають надійності.
Погляд у майбутнє
TEE очевидно став дуже захоплюючою галуззю. Як зазначено раніше, широке використання штучного інтелекту та постійний доступ до чутливих даних користувачів означає, що великі технологічні компанії, такі як Apple та NVIDIA, використовують TEE в своїх продуктах та постачають його як частину своїх продуктів.
З іншого боку, криптографічна спільнота завжди надавала велику увагу безпеці. З розширенням розробників додатків та використанням ланцюжків ми бачимо, що Триваюча Обмежена Середовищна Ізоляція (TEE) стає популярним рішенням, що забезпечує належну збалансованість між функціональністю та основними припущеннями про довіру. ** Хоча TEE не мінімізує довіру так, як повний ZK рішення, ми очікуємо, що TEE стане шляхом поступового поєднання продуктів компаній Web3 з великими технологічними компаніями вперше. **