Cómo proteger la contraseña SFTP en APK?

Estoy desarrollando una aplicación para Android que tiene un servicio para subir imágenes / archivos a un servidor FTP. Para que sea posible, la aplicación en el dispositivo tiene que iniciar sesión en el servidor FTP antes de enviar los datos. Y aquí viene mi problema. El usuario no necesita / tiene que saber sobre los datos de inicio de sesión ftp. Sólo la aplicación en sí. Tengo que almacenar los datos de inicio de sesión en la clase Java. Pero cómo debo asegurar el usuario y la contraseña. Podría enrypt o ofuscarlo. Pero creo que sería posible para un hacker leer la contraseña en el tiempo de ejecución cuando los métodos "setPassword (passwordString) son llamados por la JVM:

String passwordString = "myPass"; JSch ssh = new JSch(); session = ssh.getSession(SFTP_USER, HOST_ADDRESS, 22); session.setPassword(passwordString); 

Entonces, ¿cómo puedo almacenar mis credenciales dentro del APK y asegurarlas? No quiero que nadie tenga acceso a mi servidor FTP.

Gracias

¿Cómo puedo almacenar mis credenciales dentro del APK y asegurarlas? No quiero que nadie tenga acceso a mi servidor FTP.

El problema indicado no puede ser resuelto.

No importa lo ingeniosa que sea tu técnica de ofuscación, si ocultas credenciales fijas en el archivo APK, entonces alguien que analiza tu aplicación las va a encontrar.

Si tomas sólo una cosa de esta respuesta, que sea que tener una sola contraseña estática para tu servidor es extremadamente problemática , ya que nunca podrás cambiar la contraseña del lado del servidor, ya que romperías todas las aplicaciones . Será una cuestión de tiempo antes de que su contraseña sea de conocimiento público y no habrá nada que pueda hacer al respecto.

Cualquier enfoque razonable requiere credenciales de acceso independientes para cada usuario individual.

Un sistema de registro de usuario tradicional que implica un correo electrónico de confirmación es un enfoque bastante bueno. Puedes usar algo como el inicio de sesión de Google+ o Facebook Connect para minimizar las molestias para el usuario final.

Si insistes absolutamente en tener una interacción de usuario cero, un enfoque que podría funcionar (algo) es hacer que la aplicación se registre para Google Cloud Messaging y luego enviarle una notificación push que contenga credenciales de acceso, que la aplicación almacenará en KeyChain. Si genera un ID de usuario y una contraseña únicos para cada instalación de la aplicación, podrá supervisar el servidor y bloquear cualquier credencial de acceso abusivo sin afectar a ningún otro usuario. Si de alguna manera factor el código que firma la identidad de la APK en el proceso, usted tendrá una defensa básica contra las personas reempaquetar su aplicación. Este enfoque no le protegerá contra un atacante inteligente, pero podría elevar la barra lo suficientemente alta para sus propósitos.

Además, independientemente de lo que haga, asegúrese de verificar correctamente el certificado SSL de su servidor. Si no lo hace, un atacante simplemente ejecutará su conexión a través de un servidor proxy.

  • Poste HTTP seguro en Android
  • Keytool's -storepass vs. -keypass - ¿Por qué 2 contraseñas?
  • ¿Cómo almacenar módulo, exponente público y exponente privado de forma segura en Android?
  • ¿No debería Android StoreManager almacenar símbolos de OAuth en una base de datos por aplicación / UID?
  • Seguridad de SharedPreference de Android
  • Herramienta de análisis de código fuente estático de código abierto (orientada a la seguridad) para Java
  • Java.security.cert.CertPathValidatorException: Ancla de confianza para ruta de certificación no encontrada. Android 2.3
  • Problema de seguridad del diccionario de palabras de Android
  • ¿Hay análogos javax.smartcardio en Android?
  • Protección de las claves de twitter en Android
  • ¿Cómo lograr alta seguridad en aplicaciones móviles?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.