Cómo asegurar un certificado internamente

4

Diga que tengo un certificado que utilizo para firmar el software que envío. Esto sucede en la compilación (diaria o más) en el servidor de compilación (máquina Windows). La solución más sencilla sería colocar el archivo de certificado (pfx) en el servidor de compilación y simplemente usarlo allí.

Pero de esta manera, podría ser robado por cualquiera de los miembros de la empresa (creo que ... frustrado por dejarlo) o por un virus o lo que sea. Esto podría llevar a un desastre.

Actualmente, el certificado se almacena en el almacén de certificados como "inexportable", lo que debería ser un poco más seguro. Pero, ¿qué tan segura es esta cosa "inexportable" realmente? El servidor es una máquina virtual, así que supongo que alguien podría copiarlo todo, llevárselo y venderlo o usarlo para firmar cualquier cosa.

Por supuesto, cualquier persona con acceso al servidor de compilación podría usarlo para firmar cualquier cosa allí, pero supongo que no hay una manera de solucionarlo. (Y ir a la oficina para firmar malware (o lo que sea) parece mucho más improbable que simplemente vender el certificado o algo así, por lo que se supone que es mucho más improbable)

Así que mis preguntas son:

  • ¿Qué tan seguro es realmente esa cosa "inexportable"?
  • ¿Debería colocarse en una máquina de hardware para que sea más difícil robar / copiar todo?
  • ¿Existe una forma mejor / más segura de manejar esto?
pregunta Flo 05.02.2013 - 11:17
fuente

1 respuesta

5

"Unexportable" significa que las funciones dedicadas del sistema operativo se negarán a exportar la clave privada. Sin embargo, está por supuesto allí; esto es solo software, por lo que la clave privada, cuando se usa, necesariamente existe en algún punto de la RAM con toda su estructura. La marca de la clave como "no exportable" es un sistema de seguridad solo contra atacantes que no tienen derechos de administrador y debe actuar dentro de las restricciones de la API. De lo contrario, exportar es bastante fácil . En ese caso, una simple copia de seguridad de todo el sistema sería suficiente para obtener la clave privada.

Para hacer que el almacenamiento de claves sea robusto contra los atacantes locales (personas que tienen acceso a la máquina y son tecnológicamente competentes), necesita un Hardware Módulo de seguridad . Se trata de un hardware costoso, que nunca entregará una clave que se le ha confiado; destruirá activamente las claves si detecta una violación física. Por otra parte, registrará todos los usos de la clave privada. Alguien que acceda al HSM físicamente todavía podría obtener tantas firmas como quiera, pero todas se registrarán y no tendrán la clave en sí (por lo que no podrá firmar luego ). Una versión más barata (pero algo menos robusta) sería una tarjeta inteligente.

El método habitual para garantizar el acceso a las claves de firma de código es tener dos ; una "clave de desarrollo" que se utiliza para el desarrollo, y una "clave de producción" que se utiliza solo cuando un producto real está a punto de ser enviado. Las máquinas de los desarrolladores están configuradas para aceptar la clave de desarrollo como válida, de modo que los desarrolladores puedan trabajar con el código firmado con la clave de desarrollo, pero, por supuesto, solo la clave pública de producción se implementa en la base de usuarios. La idea es que firmar con la clave de producción debe ser lo suficientemente raro como para que pueda hacerlo de forma no automatizada, bajo el control físico de la administración y utilizando hardware dedicado (por ejemplo, una tarjeta inteligente que normalmente se guarda en una caja fuerte).

(Cuando se utiliza un hardware especial para almacenar una clave privada, las copias de seguridad pueden ser un problema. Debe tener cuidado de mantener una copia segura de la clave en algún lugar o de poder obtener una nueva en un breve aviso).

    
respondido por el Thomas Pornin 05.02.2013 - 12:40
fuente

Lea otras preguntas en las etiquetas