¿Dónde almacenar la contraseña del almacén de claves de Java?

6

Vamos a tener un almacén de claves Java que almacenará certificados y amp; Claves públicas / privadas. Este almacén de claves estará protegido con la contraseña. Sin embargo, el acceso al almacén de claves es solo desde el programa. No hay forma de proporcionar información ya que solo se basa en el acceso a la API.

¿Cuál es el mejor lugar para almacenar la contraseña de Java keystore & ¿En qué formato se debe almacenar?

    
pregunta Deepesh M 17.02.2013 - 19:53
fuente

2 respuestas

6

Si espera mantener las claves privadas fuera del alcance de quien ejecute su programa, no funcionará. Los secretos incluidos en el código no resisten a ingeniería inversa (especialmente cuando se utiliza Java, que es bastante fácil de aplicar ingeniería inversa). / p>

Aunque no da ningún detalle sobre su situación (solo dice "Java" y "el programa"), le puedo dar el siguiente consejo genérico: organizar su clave privada para que sea específica del usuario, y para que Es el mejor interés del usuario que la clave privada permanezca privada. En ese caso, el usuario colaborará a la seguridad de la clave. Luego puede almacenar la clave privada (o una contraseña que desbloquee la clave privada) en Preferencias de Java .

    
respondido por el Tom Leek 17.02.2013 - 20:37
fuente
3

Esta es una muy buena pregunta y me gustaría ver más respuestas buenas. Estos son los que yo conozco:

  1. Codifique la (s) contraseña (s) en la aplicación.
  2. Mantener la (s) contraseña (s) en un archivo.
  3. Almacene la contraseña en un sistema externo y recupérela al inicio.

De estos, el primero es el más común y, a menudo, la contraseña es 'password' o 'changeit', etc. La segunda opción puede parecer mejor a primera vista, pero es difícil explicar exactamente cómo. La última opción es probablemente la única que tiene la esperanza de hacer algo significativo. Sé de soluciones de proveedores que hacen este tipo de cosas y pretenden mejorar la seguridad.

El problema fundamental aquí es que si un atacante está en el host con suficiente acceso para ver el espacio de la aplicación, realmente no hay nada que pueda hacer para evitar que obtengan esta contraseña. En algún momento debe estar en la memoria a la vista.

Tal como lo veo, la contraseña en el almacén de claves lo protege principalmente en la situación de que el propio almacén de claves se haya recuperado de la máquina sin tener acceso a esa máquina directamente. Con ese archivo, un atacante puede martillarlo a voluntad para obtener los secretos. Si no tienes una contraseña segura, termina el juego. Si el atacante puede extraer ese archivo, entonces es probable que puedan extraer otros archivos en los que se pueda almacenar la contraseña. Esto pone en duda las opciones 1 y 2.

En cuanto a la tercera opción, el problema ahora se mueve a cómo autenticar a los clientes para recuperar la contraseña. Sé que hay una serie de esquemas para hacer esto, como depender del host / red y usar firmas en los binarios. Podría tener una discusión completa sobre cómo hacer esto y qué nivel de protección ofrece.

    
respondido por el JimmyJames 06.06.2017 - 17:41
fuente

Lea otras preguntas en las etiquetas