¿Cuál es la mejor manera de ocultar la contraseña de keystore en Android?

Soy nuevo en el desarrollo de Android y la implementación de SSLSockets. Después de hacer algunas excavaciones pude configurar un servidor / cliente simple que está funcionando. La implementación que siento podría usar un poco de trabajo y stumped en cómo cargar en la contraseña al almacén de la llave sin tenerla en texto llano. Aquí hay algún código que está en el lado del cliente. Como puede ver, tengo la contraseña codificada en una var local. ¿Hay una mejor manera de cargar en la contraseña keystore así que no lo tengo en texto sin formato en el código?

char [] KSPASS = "password".toCharArray(); char [] KEYPASS = "password".toCharArray(); try { final KeyStore keyStore = KeyStore.getInstance("BKS"); keyStore.load(context.getResources().openRawResource(R.raw.serverkeys), KSPASS); final KeyManagerFactory keyManager = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyManager.init(keyStore, KEYPASS); final TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustFactory.init(keyStore); sslContext = SSLContext.getInstance("TLS"); sslContext.init(keyManager.getKeyManagers(), trustFactory.getTrustManagers(), null); Arrays.fill(KSPASS, ' '); Arrays.fill(KEYPASS, ' '); KSPASS = null; KEYPASS = null; 

Actualizar:

Resulta que el cliente no necesita saber la contraseña keystore en absoluto. He modificado el código para pasar null como la contraseña. Hasta ahora las pruebas iniciales han funcionado con la comunicación al servidor. En el lado del servidor todavía carga la contraseña del almacén de claves.

  final KeyStore keyStore = KeyStore.getInstance("BKS"); keyStore.load(context.getResources().openRawResource(R.raw.serverkeys), null); final KeyManagerFactory keyManager = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyManager.init(keyStore, null); final TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustFactory.init(keyStore); sslContext = SSLContext.getInstance("TLS"); sslContext.init(keyManager.getKeyManagers(), trustFactory.getTrustManagers(), null); 

Bueno, esto no es un problema fácil para empezar.

Por ejemplo, podría solicitar la contraseña del usuario en el inicio de la aplicación para que la contraseña no está codificada en su código. Creo que este es el enfoque más seguro.

Si esto no es posible, entonces su problema surge si alguien tiene acceso a los frascos y "ve" el código y posteriormente la contraseña. Podría delegar al usuario la protección de estos frascos.

Si esto no es posible, entonces podría cifrar la contraseña y almacenarla en alguna parte. A continuación, en su código duro clave de la clave para descifrar la contraseña. Así que alguien que mira en el frasco no puede ver su contraseña real. Sólo la clave de descifrado. Por supuesto, si uno pone esfuerzo real que podría obtener la clave y tratar de encontrar dónde se encuentra la contraseña y descifrarlo y obtener la clave, pero requiere más esfuerzo para hacer.

Al final, depende de los requisitos de seguridad que tenga

Si realmente desea proteger las credenciales de los usuarios, debe pedirles que verifiquen su identidad siempre que desee acceder a las credenciales. Sin embargo la mayoría de los usuarios se molestan si usted les pide su contraseña cada vez que iniciar sesión, por lo que como el desarrollador debe decidir cuánto se preocupan por la seguridad vs proporcionar una interfaz simple y fácil para sus usuarios.

Una opción que podría considerar es almacenar las contraseñas, pero para cifrar la contraseña utilizando un PIN proporcionado por el usuario. Entonces, cada vez que el usuario desea acceder a su contraseña, simplemente proporcionan el PIN, que se utiliza para descifrar la contraseña.

  • Autenticar la aplicación HTML5 envuelta con Phonegap (o equivalente)
  • Android: Bug con ThreadSafeClientConnManager descargar imágenes
  • Protección de bases de datos SQLite locales (aplicación Android)
  • Xamarin Código de Seguridad
  • Oauth 2.0: identificación del cliente y secreto del cliente expuestos, ¿es un problema de seguridad?
  • Cómo Hash String usando SHA-1 con la clave?
  • Seguridad de base de datos Sqlite
  • ¿Es posible escribir un wifi cracking util para teléfonos Android? Modo de monitor vs Multicast?
  • Clave API segura Android
  • La mejor forma de permitir a los usuarios acceder a la aplicación mediante sus credenciales de Google
  • ¿Cómo funciona la aplicación de instalación de AppBrain?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.