Design: Firma / verificación del módulo WASM

Creado en 15 feb. 2018  ·  6Comentarios  ·  Fuente: WebAssembly/design

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.

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?

Todos 6 comentarios

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

  • Aplicación web que ejecuta el código WebAssembly para calcular los PIN bancarios.
  • Aplicaciones Rust / C ++ que utilizan WebAssembly para motores de ejecución integrados, evaluando contratos de criptomonedas
  • HSM-s usando el código de bytes de WebAssembly para calcular los PIN en el servidor backend
  • Dispositivos de IoT cuyo firmware se ensambla utilizando versiones específicas de diferentes módulos de WebAssembly (almacenamiento / vinculación de contenido direccionable)

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".

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

thysultan picture thysultan  ·  4Comentarios

void4 picture void4  ·  5Comentarios

bobOnGitHub picture bobOnGitHub  ·  6Comentarios

mfateev picture mfateev  ·  5Comentarios

Thaina picture Thaina  ·  8Comentarios