En primer lugar, no me referiría a mí mismo como un experto en seguridad, pero he estado en la posición de tener que responder esta pregunta. Lo que descubrí me sorprendió un poco: no existe un sistema completamente seguro . Bueno, supongo que un sistema completamente seguro sería uno en el que todos los servidores estén apagados :)
Alguien que trabajaba conmigo en ese momento describió el diseño de un sistema seguro en términos de elevar el listón a los intrusos. Entonces, cada capa de seguridad disminuye la oportunidad de un ataque.
Por ejemplo, incluso si pudiera asegurar perfectamente la clave privada, el sistema no es completamente seguro. Pero, usar correctamente los algoritmos de seguridad y estar actualizado con parches eleva el listón. Pero sí, una súper computadora lo suficientemente potente y con suficiente tiempo puede romper el cifrado. Estoy seguro de que todo esto se entiende, así que volveré a la pregunta.
La pregunta es clara, así que primero trataré de abordar cada uno de sus puntos:
Digamos que la clave está protegida por el modelo de seguridad del sistema de archivos; pero ¿qué pasa con los superusuarios (maliciosos) o las plataformas que no brindan tanta fidelidad?
Sí, si usa algo como Windows Key Store o una clave privada TLS cifrada con contraseña, está expuesto a los usuarios que tienen la contraseña (o acceso) a las claves privadas. Pero, creo que estará de acuerdo en que eleva el listón. Las ACL del sistema de archivos (si se implementan correctamente) proporcionan un nivel de protección bastante bueno. Y usted está en condiciones de examinar y conocer personalmente a sus súper usuarios.
O la clave está codificada en binarios de software, pero siempre se puede descompilar y ¿qué pasa con el software de código abierto o el código interpretado?
Sí, he visto claves codificadas en binarios. Nuevamente, esto eleva un poco el listón. Alguien que ataque este sistema (si es Java) tiene que entender que Java produce código de bytes (etc.) y debe entender cómo descompilarlo y leerlo. Si está utilizando un lenguaje que escribe directamente en el código de la máquina, puede ver que esto eleva el listón un poco más alto. No es una solución de seguridad ideal, pero podría proporcionar cierto nivel de protección.
Si se genera la clave, dicho algoritmo debería ser determinista (presumiblemente) y luego se aplica el mismo problema a la semilla.
Sí, esencialmente el algoritmo se convierte en la información de clave privada para crear la clave privada. Entonces, ahora necesitaría estar protegido.
Por lo tanto, creo que ha identificado un problema central con cualquier política de seguridad, gestión de claves . Tener una política de gestión clave es fundamental para proporcionar un sistema seguro. Y, es un tema bastante amplio .
Entonces, la pregunta es, ¿qué tan seguro debe ser su sistema (y, por lo tanto, la clave privada)? ¿Qué altura, en su sistema, necesita elevar la barra?
Ahora, si está dispuesto a pagar, hay algunas personas que producen soluciones para esto. Terminamos usando un HSM (Módulo de seguridad de hardware) . Básicamente es un servidor a prueba de manipulaciones que contiene una clave en el hardware. Esta clave se puede utilizar para crear otras claves utilizadas para el cifrado. La idea aquí es que (si se configura correctamente), la clave nunca abandona el HSM. Los HSM cuestan mucho . Pero en algunas empresas (digamos que proteger los datos de la tarjeta de crédito), el costo de una violación es mucho mayor. Entonces, hay un equilibrio.
Muchos HSM utilizan tarjetas clave de mantenimiento y administrador de las funciones. Un quórum de tarjetas de clave (digamos 5 de 9) debe colocarse físicamente en el servidor para cambiar una clave. Por lo tanto, esto eleva el listón bastante alto al permitir solo una brecha si un quórum de superusuarios conspira.
Puede haber soluciones de software que brinden características similares a un HSM, pero no estoy al tanto de cuáles son.
Sé que esto solo sirve para responder la pregunta, pero espero que esto ayude.