Enlace estático vs dinámico

1

Me encontré con el sitio de implementación Curve25519 de DJB ( enlace ) y noté que dice en referencia a su uso:

  

Puedes y debes incluirlo en tus propios programas, en lugar de ir al esfuerzo de enlazar a una biblioteca compartida; El código compilado es de alrededor de 16 kilobytes, dependiendo de la CPU

Supongo que con esto significa vincular estáticamente la lib en su programa, lo que me parece extraño desde una perspectiva de seguridad. ¿No sería más seguro que su biblioteca de códigos criptográficos sea una biblioteca compartida, de modo que si alguna vez hay una vulnerabilidad de implementación sería mucho más sencillo parchearla en lugar de recompilar todos los programas dependientes?

    
pregunta Anthony Kraft 23.02.2016 - 22:10
fuente

2 respuestas

2

Usar una biblioteca compartida es una buena idea para obtener correcciones de seguridad sin tener que volver a compilar todas las aplicaciones que usan la biblioteca, pero esto se mantiene solo si existe una biblioteca compartida que usan varias aplicaciones. , y eso es mantenido activamente por otra persona.

En un mundo ideal, ni siquiera descargaría el código fuente para la implementación de Curve25519. Usaría el paquete provisto por el sistema operativo que contiene la biblioteca compartida. Si se encontrara un error, se corregiría en sentido ascendente y el empaquetador publicaría una versión nueva y fija, para que su aplicación (y otras que usen la biblioteca) se beneficiara automáticamente de la solución. Tendría beneficios similares para el rendimiento (por ejemplo, si se produce una nueva implementación más rápida y más optimizada para su hardware actual).

Sin embargo, tal paquete no existe por el momento. DJB no parece estar dispuesto a mantener dicho paquete, para ninguna versión de ningún sistema operativo (de hecho, ha sido bastante vehemente opuesto cómo funciona la mayoría, si no todos, los administradores de paquetes; también expresó dudas sobre bibliotecas compartidas). Si usa el código, usted lo está importando en su aplicación, y el esfuerzo de mantenimiento, es decir, el seguimiento de los cambios y la propagación de versiones fijas, caerá directamente sobre sus hombros. Incluso si lo convierte en una biblioteca compartida, seguirá siendo su biblioteca compartida, no compartida con ninguna otra aplicación. También podrías vincular el código; no cambiará las cosas por seguridad, y será más sencillo.

    
respondido por el Tom Leek 24.02.2016 - 00:27
fuente
-1

Por un lado, es más fácil de actualizar si se encuentra una vulnerabilidad, pero por otro lado, es más fácil de actualizar con un backdoor y ahora el backdoor existirá en todo el sistema en cualquier binario que se vincule dinámicamente con él.

    
respondido por el d1str0 23.02.2016 - 22:12
fuente

Lea otras preguntas en las etiquetas