Design: Подпись / проверка модуля WASM

Созданный на 15 февр. 2018  ·  6Комментарии  ·  Источник: WebAssembly/design

В модуле Wasm отсутствует концепция подписей безопасности и проверки байт-кода модуля Wasm.

Такая подпись позволит проверять подлинность и целостность файлов модуля WebAssembly, передаваемых по сети.

Бинарная кодировка (Wasm-модули-файлы) должна содержать подпись.
Должна быть возможность создавать и проверять подпись без анализа байт-кода Wasm.

Доказательство концепции реализовано и доступно по адресу https://github.com/frehberg/wasm-sign.

Здесь подпись-модуля-Wasm - это CustomSection (0), использующая «подпись» имени раздела и прикрепленная к концу байт-кода-модуля-Wasm. Общий размер / накладные расходы 118 байт. Подпись создана с помощью ECDSA. Поддерживаемые кривые: secp256k1 / SHA256. В будущем будут поддерживаться следующие кривые Ed25519 и secp384r1.

Для обеспечения взаимодействия было бы полезно стандартизировать формат подписи.

Самый полезный комментарий

Я хотел бы лучше понять, почему существующие в Интернете механизмы подписи и проверки не работают и как первоклассная поддержка WebAssembly может это исправить. В частности, в Интернете есть HTTPS и целостность субресурсов, которые, хотя и не идеальны, но уже многое для нас делают.

Не могли бы вы подробно объяснить, что бы вы хотели исправить, и почему в вашем предложении нет таких подводных камней?

Все 6 Комментарий

Я считаю, что нам также нужен эквивалент в текстовом формате, может быть, что-то вроде: (signature ...) .

Для CSP проверка подписи может быть включена по https? Или вы думаете, что он должен быть включен по умолчанию?

Хммм, «CSP и проверка»: это было бы очень рано. Нам понадобится (или несколько) открытый ключ сервера или любого другого экземпляра для проверки, и это должен быть открытый ключ с использованием EC (эклиптической кривой).

Если это будет связано с сервисом на основе HTTP (S), необходимо будет получить доступ к соответствующему открытому ключу (ключ эллиптической кривой). Возможно, соответствующий открытый ключ может быть встроен как атрибут HTTP-заголовка веб-страницы, загружающей модули WASM.

Подписав WASM-модули, они могут быть извлечены из любого места и проверены.

Будет ли одна организация (хостер) подписывать файлы WASM или веб-страница будет получать подписанные модули от нескольких организаций / поставщиков?

В случае нескольких организаций, либо добавление «идентификатора организации» к самой подписи, либо определение какого-либо SignerOrg в качестве дополнительного раздела (также фиксированного размера). процесс может выглядеть так: сначала прикрепляем SignerOrg Seciton, а затем подписываем оба (исходный байт-код модуля и раздел signerorg)

кажется, сначала нужно определить вариант использования и процесс;)

Я хотел бы лучше понять, почему существующие в Интернете механизмы подписи и проверки не работают и как первоклассная поддержка WebAssembly может это исправить. В частности, в Интернете есть HTTPS и целостность субресурсов, которые, хотя и не идеальны, но уже многое для нас делают.

Не могли бы вы подробно объяснить, что бы вы хотели исправить, и почему в вашем предложении нет таких подводных камней?

Ну я могу попробовать

Встроенные подписи уже используются для PDF, Win-двоичных файлов, драйверов, XML-документов и т. Д.
Для чего могут быть полезны подписанные модули WebAssembly?

Только представь

  • Веб-приложение, выполняющее код WebAssembly для расчета банковских PIN-кодов.
  • Приложения Rust / C ++, использующие WebAssembly для встроенных механизмов выполнения, оценка контрактов на криптовалюту
  • HSM-ы, использующие байт-код WebAssembly для вычисления ПИН-кода в серверной части.
  • IoT-устройства, микропрограммы которых собраны с использованием определенных версий различных модулей WebAssembly (Content Addressable Storage / Linking)

В последнем случае версия прошивки устройств IoT будет списком модулей WebAssembly, использующих определенные версии. Устройства IoT могут распространять свою версию модулей WebAssembly на другие устройства поблизости (http://www.korhal.io/whitepaper.pdf). Центральный сервер обновлений не потребуется.

Во всех этих случаях TSL-транспорта недостаточно для установления доверия, но код должен быть подписан, чтобы получатель мог проверить подлинность, целостность по всей цепочке поставок от разработчика / поставщика до веб-браузера или выполнения. двигатель.
Подпись предотвращает несанкционированный доступ к хранящимся в памяти данным и имеет юридический аспект. Предотвращение авторства для критически важного для работы кода.

Использование отдельной подписи (по сравнению со встроенной подписью в WASM-модуль) было бы более сложным для обработки. Встроенная подпись упростит обработку по всей цепочке поставки байт-кода.

Я не уверен, что эту проблему лучше всего решать на уровне самого WASM. Подписи можно добавлять к любым данным. Зачем им нужно быть частью самого языка?

Кроме того, мне кажется, что вас может заинтересовать Стандарт HTTP-ответов с подписью источника .

Печально слышать. Часть языка, потому что подписанный wasm будет содержать действующий файл wasm; так что перед парсингом не надо снимать обертку. Что ж, благодаря наличию CustomSection можно добавлять такие структуры. Просто было бы неплохо переместить его из «настраиваемой функции» в «стандартную функцию».

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

Artur-A picture Artur-A  ·  3Комментарии

arunetm picture arunetm  ·  7Комментарии

aaabbbcccddd00001111 picture aaabbbcccddd00001111  ·  3Комментарии

nikhedonia picture nikhedonia  ·  7Комментарии

thysultan picture thysultan  ·  4Комментарии