Firmar de forma segura un paquete contenedor

2

Tengo una aplicación de escritorio que utiliza un tipo de formato de paquete para cargar un blob y hacer algo con él. Para garantizar la autenticidad del blob, me gustaría agregar una firma digital. Investigué el tema y hay una cosa que no entiendo.

Si distribuyo la clave pública con el paquete (que esté disponible en línea cuenta como distribución), un atacante puede reemplazar esa clave con su propia clave pública y falsificar un paquete firmado (ya que la única forma de validar la firma es para comprobarlo con la clave pública). ¿Me estoy perdiendo de algo? ¿Cómo puedo firmar un paquete de una manera realmente segura?

    
pregunta Tamás Szelei 27.10.2011 - 09:53
fuente

4 respuestas

2

Las firmas digitales no crean confianza; Simplemente lo mueven y lo concentran. Tiene razón: si distribuye la clave pública con el paquete, no ha ganado nada.

Lo que las firmas digitales le brindan es la capacidad de manejar su confianza por separado. Aún tiene que encontrar una forma para que los verificadores (las "aplicaciones de escritorio") se aseguren de que una clave pública determinada sea efectivamente la clave pública correcta del firmante auténtico. Pero una clave pública es algo más corta (generalmente unos pocos cientos de bytes), puede compartirse (puede firmar varias manchas con la misma clave) y puede distribuirse por adelantado (puede "dar" la clave pública para los verificadores antes firmando los blobs, incluso antes de saber cuántos blobs firmarás finalmente.

La clave pública no es la única fuente de confianza. De hecho, el código dentro de la aplicación que usa la clave pública para verificar las firmas en los blobs de datos también debe ser parte del "reino de confianza"; si un atacante puede alterar ese código, puede reemplazar el código de verificación con algo que siempre dice "esa firma es buena". Llegado a eso, también podría plantar un virus o un keylogger en la aplicación. Así que no solo tienes que empezar a confiar en en alguna parte , sino que el problema tampoco es exactamente nuevo.

Por lo tanto, podemos suponer que ya resolvió el problema de asegurarse de que cuando un usuario obtiene la aplicación en su sistema de escritorio, obtenga la "correcta" y no una variante modificada malintencionadamente. Hay varias formas (por ejemplo, distribución web a través de HTTPS o instalación realizada en el sitio por su personal). Esto nos lleva a la siguiente solución: incrustar la clave pública en la propia aplicación.

Los proveedores de sistemas operativos lo han hecho durante años para habilitar las actualizaciones seguras del sistema. Cuando Windows decide que debe descargar e instalar una actualización, en realidad verifica una firma digital en el blob de actualización antes de aplicarla, y lo hace en relación con una clave pública que ya está incorporada en Windows código.

(El sistema se puede hacer más complejo con certificados si desea admitir la reinversión de claves sin una actualización de software).

    
respondido por el Thomas Pornin 27.10.2011 - 14:38
fuente
1

La idea de la firma digital es proteger los datos para que no puedan ser modificados por otra persona en el medio sin que el receptor pueda verificarlos (no el remitente o el destinatario). Si desea proteger los datos para que el cliente (receptor) no pueda cambiarlos, sus opciones son limitadas.

Como va a usar la misma clave privada / pública para todos sus clientes, podría compilar la clave pública en el código (no en un archivo de recursos externo), por lo que el pirata informático tendría que descompilar su código para cambiarlo. Pero si descompila su código, puede eliminar la comprobación de la firma por completo.

Aaron

    
respondido por el AaronS 27.10.2011 - 11:44
fuente
1

¿Esto es para un sistema operativo en particular?

La mayoría de los sistemas operativos tienen algún tipo de sistema integrado, al igual que Java y otras soluciones de plataforma cruzada en las que el sistema operativo o el intérprete de bytecode tiene una clave de CA raíz instalada para este fin. O tienen un método de distribución en el que el proveedor del sistema operativo firmará el paquete cuando se coloque en ese sistema de distribución (la mayoría de las distribuciones de Linux, por ejemplo).

    
respondido por el ewanm89 27.10.2011 - 13:05
fuente
1

Esta es la razón por la que la mayoría de las personas utilizan las autoridades de certificación para demostrar la validez de la firma.

Hay cosas que puede hacer para limitar su exposición sin tener que pagar para que otra persona firme su certificado, especialmente porque (presumiblemente) usted está distribuyendo la solicitud y el paquete:

  1. incorpore la clave en el software; aunque esto no impide que un atacante modifique la clave, esto solo es un problema si la aplicación se distribuye a través del mismo canal que el paquete contenedor

  2. ejecute su propia entidad de certificación; las implicaciones son similares al método anterior, pero le permite utilizar más de un certificado de firma

Pero estos no son un sustituto del enfoque de CA confiable.

    
respondido por el symcbean 27.10.2011 - 13:45
fuente

Lea otras preguntas en las etiquetas