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