¿Cuál sería un enfoque válido para almacenar claves privadas?

0

Estoy implementando una aplicación móvil que utiliza el algoritmo de cifrado AES para cifrar algunos valores críticos que se envían a un servidor remoto (básicamente, la contraseña del usuario) y luego se descifra en el lado del servidor con la misma clave privada. Esto funciona perfectamente ahora, pero me preocupa un poco cómo almacenar / obtener la clave privada.

Actualmente, he dividido la clave privada (que está codificada) en 3 objetos de cadena, y cuando es necesario, los concatené. Sin embargo, me temo que esta no es una solución válida, ya que cualquier usuario malintencionado podría simplemente descodificar el binario y con un poco de paciencia obtener las tres partes.

Las preguntas son:

  • ¿Cuál sería un buen enfoque que al menos dificultaría al atacante conocer la clave privada?

  • ¿Le ayudaría usar una clave privada basada en un evento (por ejemplo, la fecha actual) en lugar de almacenarla?

pregunta nKn 10.03.2014 - 22:54
fuente

1 respuesta

2

En lugar de crear su propia solución AES, consulte TLS / SSL para cifrar la contraseña que se envía al servidor. Si crea su propia solución como propone, cualquiera que rompa su aplicación podrá leer las contraseñas de todos sus usuarios (y si asegura el dinero real, la gente intentará descifrarla). TLS de forma segura intercambia claves con el servidor como parte del protocolo, lo que da como resultado un canal de comunicación muy resistente a las escuchas ilegales.

Si tiene algún motivo real para cifrar los datos localmente con AES (que no implique comunicación con el servidor), entonces, si está creando su aplicación para iOS, debería utilizar la API de llavero de Apple. No estoy seguro de cuál es el equivalente de Android, pero creo que hay uno. Esto utiliza el soporte de nivel de sistema operativo para ocultar sus datos secretos. Todavía es vulnerable a la piratería, pero como puede ser aleatorio por usuario, al menos una interrupción en un dispositivo móvil no pondrá en peligro la seguridad de todos sus usuarios.

Si no tiene soporte de sistema operativo para almacenar una clave, finalmente se queda atascado con una solución de ocultación. Personalmente, me gustaría XOR varios valores para construir la clave en lugar de concatenar fragmentos de una cadena, pero si alguien va a depurar la aplicación y la descubre, la descubrirá de todas maneras. Eso significa que no debe usar esto para proteger ningún secreto con respecto al dinero, las cuentas, las finanzas, la salud, el crédito, la jubilación u otros registros del cliente que deberían estar debidamente asegurados. En otras palabras, esto podría estar bien para un juego que no involucre la billetera de los clientes (o su billetera, en este caso)

    
respondido por el John Deters 10.03.2014 - 23:17
fuente

Lea otras preguntas en las etiquetas