Pgp Almacenamiento de claves privadas en el servidor de Windows

1

Buscando un consejo realmente, aquí está la situación:

  • Actualmente tengo un cliente preocupado por la seguridad que enviará PGP archivos encriptados.

  • Tengo que descifrar los archivos en mi servidor antes de procesarlos. A Para lograrlo, estaba pensando en usar BouncyCastle con C #.

Bien, hasta ahora todo bien ... pero ... Me preguntaba cuál sería el mejor método para almacenar mi clave privada en mi servidor.

  • Sé que la idea de simplemente almacenar mi clave privada en un archivo (aunque tenga una contraseña) en una carpeta restringida será suficiente para hacer que el brazo izquierdo de mi cliente se quede adormecido.

  • La opción más simple que se me ocurre sería utilizar el almacén de claves de BouncyCastle, sin embargo, no estoy seguro de cuál es la opción más segura: Keystore.BouncyCastle , Keystore.UBER o El almacén de claves compatible con PKCS12 . De cualquier manera tendría que justificar la decisión (aún es solo un archivo en una carpeta :( !!), ¿alguien sabe de alguna lectura relevante?

  • No estoy seguro de si sería posible usar Windows CNG para almacenar las claves en lugar del almacén de claves de BouncyCastle?

  • ¿Hay otra opción mejor?

Ooo, solo una pequeña nota: no estoy 100% vinculado a BouncyCastle si hay una mejor opción por ahí estaría más que feliz de usar eso (especialmente si no implica entregar los puños llenos de efectivo & puedo automatizarlo)

    
pregunta Wilfred Knievel 14.02.2014 - 10:56
fuente

1 respuesta

1

En términos generales, todo depende de lo que necesita proteger y en qué contexto: primero debe explicar contra qué quiere protegerse y luego diseñar una estrategia sensata para esto: proteger contra el acceso remoto no es lo mismo que Protección contra alguien que tenga acceso al hardware. El entorno de ejecución también es importante: no puede usar un HSC de la misma manera en un servidor dedicado ubicado en su servidor sala y en una máquina virtual alquilada desde una nube pública.

Ahora, para ser más específicos: en el caso de una aplicación de servidor, el cifrado generalmente se realiza de una manera que dificulta la forma de que alguien adquiera la lectura de los datos y el código fuente de la aplicación. Esto supone que el propio sistema operativo permanece (más o menos) seguro y que el intruso no tiene acceso a su proceso en ejecución (de lo contrario, podría leer el texto en claro de la memoria).

Para eso, Windows ofrece una forma conveniente de proteger los datos a través de CryptProtectData y CryptUnprotectData APIs. Estas funciones le permitirán cifrar un bloque de datos arbitrario mediante una clave vinculada a la cuenta de usuario que inició sesión o al equipo local (puede agregar una clave adicional si lo desea, aunque tendrá que poder almacenar esa información). externamente de alguna manera: es de uso limitado si no tiene un almacenamiento seguro disponible).

Hacer lo anterior es muy sencillo y sencillo: así es como la mayoría de Windows almacena datos secretos. Desafortunadamente, tiene una limitación importante: no sirve para ningún código que pueda ejecutarse en el mismo contexto que su programa. Esto significa que no será de utilidad en caso de acceso a la máquina física o en caso de cualquier tipo de defecto de inyección de código. No obstante, si lo tiene en cuenta y considera que esta limitación es aceptable, puede utilizar estas API para almacenar las frases de contraseña de sus claves privadas.

    
respondido por el Stephane 14.02.2014 - 15:14
fuente

Lea otras preguntas en las etiquetas