El módulo Wasm carece de un concepto para firmas de seguridad y verificación del código de bytes del módulo Wasm.
Dicha firma permitiría la verificación de la autenticidad e integridad de los archivos del módulo WebAssembly que se transfieren a través de la red.
La codificación binaria (archivos de módulo Wasm) debe contener una firma.
Debería ser posible crear y verificar una firma sin analizar el código de bytes Wasm.
Se implementó una prueba de concepto y está disponible en https://github.com/frehberg/wasm-sign
Aquí, Wasm-Module-Signature es una CustomSection (0) que usa la "firma" del nombre de la sección y se adjunta al final del Wasm-module-bytecode. El tamaño total / sobrecarga es de 118 bytes. La firma creada con ECDSA. Las curvas admitidas son secp256k1 / SHA256. En el futuro, las siguientes curvas serán compatibles con Ed25519 y secp384r1.
Para la interoperabilidad, sería útil estandarizar el formato de la firma.
Creo que también necesitamos el equivalente en el formato de texto, tal vez algo como: (signature ...)
.
Para CSP, la verificación de la firma podría estar ACTIVADA sobre https? ¿O cree que debería estar activado de forma predeterminada?
Mmmm, "CSP y comprobación": eso sería muy temprano en el proceso. Necesitaríamos una (o múltiples) clave pública del servidor o cualquier otra instancia para la verificación, y debe ser una clave pública usando EC (curva eclíptica).
Si estuviera relacionado con un servicio basado en HTTP (S), sería necesario obtener acceso a la clave pública correspondiente (clave de curva elíptica). Tal vez la clave pública correspondiente podría incrustarse como atributo de encabezado HTTP de la página web que está cargando los módulos WASM.
Una vez firmados los módulos WASM, estos pueden obtenerse de cualquier ubicación y ser verificados.
¿Habría una sola organización (hoster) firmando archivos WASM o una página web buscaría módulos firmados de múltiples organizaciones / proveedores?
En el caso de varias organizaciones, ya sea agregando el "id de la organización" a la firma en sí, o definiendo algún tipo de SignerOrg como Sección adicional (tamaño fijo también). el proceso podría verse así: primero adjuntando SignerOrg Seciton y luego firmando ambos (módulo-bytecode original y signerorg-section)
parece que el caso de uso y el proceso deben definirse primero;)
Me gustaría comprender mejor cómo fallan los mecanismos actuales de la Web para la firma y verificación, y cómo el soporte de WebAssembly de primera clase solucionaría esto. Específicamente, la Web tiene HTTPS y la integridad de los sub-recursos que, aunque definitivamente no son perfectos, ya nos ayudan bastante.
¿Podría explicar en detalle qué le gustaría solucionar y cómo su propuesta no tiene los mismos escollos?
Bueno, puedo intentarlo
Las firmas integradas ya se utilizan para PDF, archivos binarios de Win, controladores, documentos XML, etc.
¿Para qué sirven los módulos de WebAssembly firmados?
Solo imagina
En el último caso, la versión de firmware de los dispositivos IoT sería una lista de módulos WebAssembly que utilizan versiones específicas. Los dispositivos de IoT podrían difundir su versión de módulos WebAssembly a otros dispositivos del vecindario (http://www.korhal.io/whitepaper.pdf). No se necesitaría ningún servidor de actualización central.
En todos estos casos, un transporte TSL no es suficiente para establecer la confianza, pero el código debe estar firmado para que el destinatario pueda verificar la autenticidad e integridad a lo largo de la cadena de suministro desde el desarrollador / proveedor hasta el navegador web o la ejecución. motor.
La firma evita la manipulación de datos en reposo y en el aspecto legal No repudio para el código de operación crítica.
El uso de una firma separada (en comparación con una firma incrustada en el módulo WASM) sería más complejo de manejar. La firma incrustada simplificaría el manejo a lo largo de la cadena de suministro del código de bytes.
No estoy convencido de que este sea un problema que se aborda mejor al nivel de WASM en sí. Las firmas se pueden agregar a cualquier dato. ¿Por qué tendrían que ser parte del idioma en sí?
Además, me parece que podría estar interesado en el Estándar de respuestas firmadas por el origen HTTP .
Triste escucharlo. Parte del lenguaje, porque un wasm firmado mantendría un archivo wasm válido; por lo que no sería una especie de envoltorio quitarse antes del análisis. Bueno, gracias a la existencia de CustomSection es posible agregar tales estructuras. Simplemente, hubiera sido bueno moverlo de "característica personalizada" a una "característica estándar".
Comentario más útil
Me gustaría comprender mejor cómo fallan los mecanismos actuales de la Web para la firma y verificación, y cómo el soporte de WebAssembly de primera clase solucionaría esto. Específicamente, la Web tiene HTTPS y la integridad de los sub-recursos que, aunque definitivamente no son perfectos, ya nos ayudan bastante.
¿Podría explicar en detalle qué le gustaría solucionar y cómo su propuesta no tiene los mismos escollos?