В модуле Wasm отсутствует концепция подписей безопасности и проверки байт-кода модуля Wasm.
Такая подпись позволит проверять подлинность и целостность файлов модуля WebAssembly, передаваемых по сети.
Бинарная кодировка (Wasm-модули-файлы) должна содержать подпись.
Должна быть возможность создавать и проверять подпись без анализа байт-кода Wasm.
Доказательство концепции реализовано и доступно по адресу https://github.com/frehberg/wasm-sign.
Здесь подпись-модуля-Wasm - это CustomSection (0), использующая «подпись» имени раздела и прикрепленная к концу байт-кода-модуля-Wasm. Общий размер / накладные расходы 118 байт. Подпись создана с помощью ECDSA. Поддерживаемые кривые: secp256k1 / SHA256. В будущем будут поддерживаться следующие кривые Ed25519 и secp384r1.
Для обеспечения взаимодействия было бы полезно стандартизировать формат подписи.
Я считаю, что нам также нужен эквивалент в текстовом формате, может быть, что-то вроде: (signature ...)
.
Для CSP проверка подписи может быть включена по https? Или вы думаете, что он должен быть включен по умолчанию?
Хммм, «CSP и проверка»: это было бы очень рано. Нам понадобится (или несколько) открытый ключ сервера или любого другого экземпляра для проверки, и это должен быть открытый ключ с использованием EC (эклиптической кривой).
Если это будет связано с сервисом на основе HTTP (S), необходимо будет получить доступ к соответствующему открытому ключу (ключ эллиптической кривой). Возможно, соответствующий открытый ключ может быть встроен как атрибут HTTP-заголовка веб-страницы, загружающей модули WASM.
Подписав WASM-модули, они могут быть извлечены из любого места и проверены.
Будет ли одна организация (хостер) подписывать файлы WASM или веб-страница будет получать подписанные модули от нескольких организаций / поставщиков?
В случае нескольких организаций, либо добавление «идентификатора организации» к самой подписи, либо определение какого-либо SignerOrg в качестве дополнительного раздела (также фиксированного размера). процесс может выглядеть так: сначала прикрепляем SignerOrg Seciton, а затем подписываем оба (исходный байт-код модуля и раздел signerorg)
кажется, сначала нужно определить вариант использования и процесс;)
Я хотел бы лучше понять, почему существующие в Интернете механизмы подписи и проверки не работают и как первоклассная поддержка WebAssembly может это исправить. В частности, в Интернете есть HTTPS и целостность субресурсов, которые, хотя и не идеальны, но уже многое для нас делают.
Не могли бы вы подробно объяснить, что бы вы хотели исправить, и почему в вашем предложении нет таких подводных камней?
Ну я могу попробовать
Встроенные подписи уже используются для PDF, Win-двоичных файлов, драйверов, XML-документов и т. Д.
Для чего могут быть полезны подписанные модули WebAssembly?
Только представь
В последнем случае версия прошивки устройств IoT будет списком модулей WebAssembly, использующих определенные версии. Устройства IoT могут распространять свою версию модулей WebAssembly на другие устройства поблизости (http://www.korhal.io/whitepaper.pdf). Центральный сервер обновлений не потребуется.
Во всех этих случаях TSL-транспорта недостаточно для установления доверия, но код должен быть подписан, чтобы получатель мог проверить подлинность, целостность по всей цепочке поставок от разработчика / поставщика до веб-браузера или выполнения. двигатель.
Подпись предотвращает несанкционированный доступ к хранящимся в памяти данным и имеет юридический аспект. Предотвращение авторства для критически важного для работы кода.
Использование отдельной подписи (по сравнению со встроенной подписью в WASM-модуль) было бы более сложным для обработки. Встроенная подпись упростит обработку по всей цепочке поставки байт-кода.
Я не уверен, что эту проблему лучше всего решать на уровне самого WASM. Подписи можно добавлять к любым данным. Зачем им нужно быть частью самого языка?
Кроме того, мне кажется, что вас может заинтересовать Стандарт HTTP-ответов с подписью источника .
Печально слышать. Часть языка, потому что подписанный wasm будет содержать действующий файл wasm; так что перед парсингом не надо снимать обертку. Что ж, благодаря наличию CustomSection можно добавлять такие структуры. Просто было бы неплохо переместить его из «настраиваемой функции» в «стандартную функцию».
Самый полезный комментарий
Я хотел бы лучше понять, почему существующие в Интернете механизмы подписи и проверки не работают и как первоклассная поддержка WebAssembly может это исправить. В частности, в Интернете есть HTTPS и целостность субресурсов, которые, хотя и не идеальны, но уже многое для нас делают.
Не могли бы вы подробно объяснить, что бы вы хотели исправить, и почему в вашем предложении нет таких подводных камней?