На сегодня только ленивый не написал про технологию блокчейн, криптовалюты и насколько это круто. Но в этой статье не будет восхваления данной технологии, речь пойдет как раз о ее недостатках и способах их устранения.
Во время работы над одним из проектов в компании Альтирикс системс, появилась задача защищенного, цензуростойкого подтверждения данных из внешнего для блокчейн источника. Необходимо было подтверждать изменения в записях третьей системы и на основе этих изменений выполнять ту или иную ветку в логике смарт-контракта. Задача на первый взгляд достаточно тривиальная, но, когда от результата ее выполнения зависит финансовое состояние одной из сторон-участниц процесса, появляются дополнительные требования. Прежде всего это всестороннее доверие к подобному механизму валидации. Но обо всем по порядку.
Проблема заключается в том, что блокчейн сам по себе является автономным, замкнутым объектом, поэтому смарт-контракты внутри блокчейна ничего не знают о внешнем мире. В то же время условия смарт-контрактов часто связаны с информацией о реальных вещах (flight delay, курс валют и т.д.). Для правильной работы смарт-контрактов, информация, полученная извне блокчейна, должна быть надежной и проверенной. Данная проблема решается с помощью использования оракулов, таких как Town Crier и DECO. Данные оракулы позволяют смарт-контракту в сети блокчейн доверять информации с проверенного веб-сервера, можно сказать, что это поставщики надежной информации.
Оракулы
Представьте, что смарт-контракт выполняет перевод 0.001 btc на ваш bitcoin-кошелек в случае победы вашего любимого футбольного клуба в кубке России. В случае действительной победы, смарт-контракту необходимо передать информацию о том, какой клуб победил, и здесь возникает ряд проблем: где взять эту информацию, как ее безопасно передать в смарт-контракт и как убедиться, что информация, поступившая в смарт-контракт на самом деле совпадает с действительностью?
В вопросе с источником информации могут быть 2 сценария: подключение смарт-контракта к доверенному веб-сайту, на котором централизованно хранится информация о результатах матчей и второй вариант — подключить сразу несколько сайтов и дальше делать выбор информации по большинству источников, предоставляющих одинаковые данные. Для того, чтобы удостовериться в правильности информации, используются оракулы, например Oraclize, использующий TLSNotary (Модификация TLS для доказательства подлинности данных). Но про Oraclize информации в гугл достаточно, и на Хабре есть несколько статей, я же сегодня расскажу об оракулах, использующих немного другой подход к передаче информации: Town Crier и DECO. В статье приведено описание принципов работы обоих оракулов, а также детальное сравнение.
Town Crier
Town Crier (TC) был представлен IC3 (The Initiative for CryptoCurrencies and Contracts) в 2016 году на CCS’16. Основная идея TC: передать информацию с веб сайта смарт-контракту и убедиться, что информация, доставленная TC такая же, как на веб сайте. TC использует TEE (Trusted Execution Environment) для подлинности собственности данных. В оригинальном варианте TC описана работа с Intel SGX.
Town Crier состоит из части внутри блокчейна и части внутри самой ОС — TC Server.
TC Contract находится в блокчейне и действует как front end для TC. Он принимает запросы от CU (смарт-контракт пользователя) и возвращает ответ от TC Server. Внутри TC Server находится Relay, который устанавливает связь анклава с сетью интернет (двунаправленный трафик) и связывает анклав с блокчейном. Enclave содержит progencl, который представляет собой код, выполняющий запросы из блокчейна и возвращающий сообщения в блокчейн с цифровой подписью, progencl содержит часть кода смарт-контракта и по сути выполняет некоторые из его функций.
Анклав Intel SGX можно рассматривать, как общую библиотеку с API, работающую посредством ecall. Ecall передает управление анклаву. Анклав выполняет свой код, пока не завершится, либо пока не произойдет исключение. Для вызова функций, определенных вне анклава, используются ocall. Ocall выполняется вне анклава и обрабатывается им как ненадежный вызов. После выполнения ocall управление возвращается анклаву.
В части Enclave происходит настройка secure channel с веб-сервером, анклав сам выполняет TLS handshake с целевым сервером и выполняет все криптографические операции внутри себя. Библиотека TLS (mbedTLS) и HTTP-код в уменьшенном варианте экспортированы в среду SGX. Также, Enclave содержит root CA certificates (коллекция сертификатов), чтобы проверять сертификаты удаленных серверов. Request Handler принимает запрос datagram в формате, предоставляемом Ethereum, расшифровывает его и анализирует. Затем генерирует транзакцию Ethereum, содержащую requested datagram, подписывает ее с помощью skTC и передает в Relay.
Часть Relay включает в себя Client Interface, TCP, Blockchain Interface. Client Interface нужен для аттестации кода анклава и связи с клиентом. Клиент отправляет запрос на аттестацию с помощью ecall и получает timestamp, подписанный skTC вместе с att (сигнатура аттестации), далее att подтверждается с помощью Intel Attestation Service (IAS), а timestamp проверяется доверенным time service. Blockchain Interface проверяет поступающие запросы и размещает транзакции в блокчейн для доставки datagrams. Geth — официальный клиент Ethereum и позволяет Relay взаимодействовать с блокчейном через RPC calls.
Работая с TEE, TC позволяет запустить сразу несколько анклавов параллельно, тем самым увеличивая скорость обработки информации в 3 раза. Если при одном работающем анклаве скорость была 15 tx/sec, то при 20 параллельно запущенных анклавах скорость возрастает до 65 tx/sec, для сравнения, максимальная скорость работы в блокчейне Bitcoin — 26 tx/sec.
DECO
DECO (Decentralized Oracles for TLS) был представлен на CCS’20, работает с сайтами, поддерживающими TLS соединение. Обеспечивает конфиденциальность и целостность данных.
DECO c TLS используют симметричное шифрование, тем самым у клиента и веб-сервера есть ключи шифрования, и клиент, если захочет, может подделать данные сеанса TLS. Для решения данной проблемы DECO использует трехсторонний протокол рукопожатия между prover (смарт-контракт), verifier (оракул) и web-server (источник данных).
Принцип работы DECO состоит в том, чтобы проверяющий (prover) получил часть данных D и подтвердил верификатору (verifier), что D поступил от TLS-сервера S. Еще одна проблема заключается в том, что TLS не подписывает данные и TLS-клиенту сложно доказать, что данные получены именно с того сервера (provenance difficulty).
В протоколе DECO используются ключи шифрования KEnc и KMac. Клиент отправляет запрос Q на веб-сервер, ответ от сервера R приходит в зашифрованном виде, но клиент и сервер владеют одними и теми же KMac, и клиент может подделать TLS сообщение. Решение от DECO состоит в том, чтобы «спрятать» KMac от клиента (prover), пока он не ответит на запрос. Теперь KMac разделен между prover и verifier — KpMac и KvMac. Сервер получает KMac для шифрования ответа с помощью операции над частями ключа KpMac ? KvMac = KMac.
Настроив трехстороннее рукопожатие, обмен данными между клиентом и сервером будет проведен с гарантией безопасности.
Говоря о системе децентрализованных оракулов, нельзя не упомянуть Chainlink, который стремится создать децентрализованную сеть узлов оракулов, совместимую с Ethereum, Bitcoin и Hyperledger, с учетом модульности: каждая часть системы может быть обновлена. При этом для обеспечения безопасности, Chainlink предлагает каждому оракулу, участвующему в задании, выдавать комбинацию ключей (открытый и закрытый). Закрытый ключ используется для генерации частичной подписи, которая содержит их решение на запрос данных. Для получения ответа необходимо объединение всех частичных подписей оракулов сети.
Chainlink планирует провести первоначальный PoC DECO с упором на децентрализованные финансовые приложения, такие как Mixicles. На момент написания статьи вышла новость на Forbes, о том, что Chainlink приобрела DECO у Cornell University.
Атаки на оракулы
С точки зрения информационной безопасности, были рассмотрены следующие атаки на Town Crier:
Rogue smart-contact code injection on TEE nodes.
Суть атаки: передача в TEE заведомо неверного кода смарт-контракта, таким образом, злоумышленник, который получил доступ к узлу, будет иметь возможность выполнить собственный (мошеннический) смарт-контракт на дешифрованный данные. Тем не менее возвращаемые значения будут зашифрованы с помощью private key, и единственный вариант доступа к таким данным заключается в утечке зашифрованного текста при возврате/выводе.
Защита от данной атаки заключается в проверке анклавом правильности кода, находящегося по текущему адресу. Это может быть достигнуто с помощью схемы адресации, где адрес контракта определяется путем хеширования кода контракта.
Contract state ciphertext changes leak.
Суть атаки: Владельцы узлов, на которых выполняются смарт-контракты, имеют доступ к contract state в зашифрованной форме вне анклава. Злоумышленник, заполучив управление узлом, может сравнивать contact state до и после выполнения транзакции и может определить, какие аргументы были внесены и какой именно метод смарт-контракта использован, так как сам код смарт-контракта и его технические спецификации общедоступны.
Защита в обеспечении надежности самого узла.
Side-channel attacks.
Особый тип атак, использующий мониторинг доступа к памяти и кэшу анклава в различных сценариях. Пример такой атаки — Prime and Probe.
Порядок проведения атаки:
- t0: Злоумышленник заполняет весь кэш данных процесса жертвы.
- t1: Жертва выполняет код с обращениями к памяти, которые зависят от конфиденциальных данных жертвы (криптографические ключи). Выбор cache line происходит по значению keybit. В примере на рисунке, keybit = 0 и прочитан адрес X в cache line 2. Данные, хранящиеся в X, загружаются в кэш, вытесняя данные, которые были там до этого.
- t2: Злоумышленник проверяет, какие из его строк кэша были вытеснены — строки, используемые жертвой. Делается это с помощью измерения времени доступа. Повторяя эту операцию для каждого из keybit, злоумышленник получает весь ключ.
Защита от атаки: В Intel SGX есть защита от side-channel attacks, которая запрещает мониторинг событий, связанных с кэшем, но атака Prime and Probe все равно пройдет, так как злоумышленник наблюдает за событиями кэша своего процесса и разделяет кэш с жертвой.
Таким образом, на данный момент надежной защиты от этой атаки нет.
Известны также атаки типа Spectre и Foreshadow (L1TF), похожие на Prime and Probe. Они позволяют производить чтение данных из кэш-памяти через сторонний канал. Предусмотрена защита от уязвимости Spectre-v2, работающая против двух данных атак.
По отношению к DECO, трехстороннее рукопожатие предоставляет гарантию безопасности:
- Prover Integrity: взломанный prover не может подделать информацию о происхождении server и не может заставить принимать server недопустимые запросы или отвечать неправильно на действительные запросы. Это осуществимо через шаблоны запросов между server и prover.
- Verifier Integrity: взломанный verifier не может заставить prover получать неправильные ответы.
- Конфиденциальность: Взломанный verifier изучает только общедоступную информацию (запрос, имя сервера).
В DECO возможны только уязвимости, связанные с инъекцией трафика. Вначале, при трехстороннем рукопожатии verifier может установить идентичность сервера с помощью fresh nonce. Однако, после рукопожатия verifier должен полагаться на индикаторы сетевого уровня (IP-адреса). Таким образом, связь между verifier и server должна быть защищена от инъекции трафика. Это достигается с помощью использования Proxy.
Сравнение оракулов
Town Crier основан на работе с анклавом в серверной части, DECO же позволяет производить проверку подлинности происхождения данных с помощью трехстороннего рукопожатия и шифрования данных криптографическими ключами. Сравнение данных оракулов проводилось по следующим критериям: быстродействие, безопасность, стоимость и практичность.
Town Crier | DECO | |
---|---|---|
быстродействие | Быстрее (0.6s to finish) | Медленнее (10.50s to finish the protocol) |
безопасность | Менее безопасен | Более безопасен |
стоимость | Дороже | Дешевле |
практичность | Требует специальное hardware | Работает с любым сервером, поддерживающим TLS |
Быстродействие: Для работы с DECO требуется настройка трехстороннего рукопожатия, при настройке через LAN это занимает 0.37 секунд, для взаимодействия после установления связи эффективен 2PC-HMAC (0,13 с на запись). Производительность DECO зависит от доступных наборов шифров TLS, размера личных данных и сложности доказательств для конкретного приложения. На примере приложения бинарного опциона от IC3: завершение протокола через LAN занимает около 10,50 с. Для сравнения, Town Crier требуется для выполнения аналогичного приложения примерно 0,6 секунды, то есть примерно в 20 раз быстрее, чем DECO. При равных условиях, TC будет быстрее.
Безопасность: Атаки на анклав Intel SGX (side-channel attacks) работают и могут нанести реальный ущерб участникам смарт-контракта. Относительно DECO возможны атаки, связанные с инъекцией трафика, но использование proxy сводит такие атаки на нет. Поэтому DECO более безопасный.
Стоимость: Стоимость оборудования, поддерживающего работу с Intel SGX выше стоимости настройки протокола в DECO. Поэтому TC дороже.
Практичность: Для работы с Town Crier обязательно специальное оборудование, поддерживающее TEE. Например, Intel SGX поддерживается на процессорах семейства Intel Core 6-го поколения и новее. DECO же позволяет работать с любым оборудованием, хотя есть настройка DECO с использованием TEE. По процессу настройки трехстороннее рукопожатие у DECO может занять некоторое время, но это не идет ни в какое сравнение с ограничением в hardware для TC, поэтому DECO более практичный.
Заключение
Рассмотрев два оракула в отдельности и сравнив их по четырем критериям, видно, что Town Crier уступает DECO по трем пунктам из четырех. DECO более надежный с точки зрения информационной безопасности, дешевле и более практичный, хотя настройка трехстороннего протокола может занять некоторое время и имеет свои минусы, например, дополнительные операции с ключами шифрования. TC работает быстрее DECO, но уязвимость, связанная с side-channel attack делает его подверженным риску потери конфиденциальности. Надо учитывать, что DECO был представлен в январе 2020 года, и еще не прошло достаточно времени, чтобы полагать его безопасным. Town Crier уже 4 года подвергается атакам и прошел через множество проверок, так что его применение во многих проектах оправдано.