¿Solución anti-hack para una clave secreta en la aplicación para Android?

Necesito almacenar una clave de cadena privada dentro de la aplicación. Su valor nunca cambiará y se establecerá manualmente en código. No puedo, obviamente, sólo almacenar como una String como método de ingeniería inversa que lo revelaría, incluso con la ofuscación aplicada.

¿Cómo sugieres que proteja esta clave privada?

Aunque de guardarlo en una base de datos, pero una base de datos se puede sacar del teléfono también.

PD. Esta clave es un parámetro especial por lo que un método importante y es crucial que se mantiene desconocido para nadie! No es una clave de descifrado. Esta cadena se utilizará como parámetro para el método de cifrado (md5 o similar) y luego se enviará un resultado a nuestro servicio de Internet.

EDITAR

Lo siento, por hacerlo tan complicado. Pensé que podría conseguir una respuesta con tanta información como sea posible.

Esta aplicación permitirá a los usuarios enviar un poco de texto a un servicio de Internet que luego envía ese texto a un sitio web. Tenemos que asegurarnos de que el texto se envía a través de teléfono Android como cualquier script de robot web puede imitar el teléfono Android y publicar un spam. Como captcha-como los métodos no son bienvenidos en los teléfonos móviles, habrá una clave secreta que se pondrá a través de md5 (con algunas otras cosas) para generar un código de hash. Este hash se enviará a un servicio de Internet. El servicio de Internet utilizará la misma clave para obtener un resultado md5 y luego compararlo para ver si el remitente es un teléfono móvil o algún robot.

Este es realmente el máximo que se me permite decir. Espero que sea suficiente.

Te sugiero que reconsideras tu arquitectura de seguridad. Cualquier cosa enviada con la aplicación es detectable. (Por ejemplo, la biblioteca de validación de licencias de Android está diseñada para que se envíe una clave pública con la aplicación.)

Una posibilidad es que la aplicación recupere la clave de un servidor (a través de un socket seguro o una conexión https). Obviamente, esto requeriría que la aplicación envíe al servidor algún tipo de identificación / validación (probablemente basada en la entrada del usuario).

Si está utilizando la clave para el cifrado, a continuación, eche un vistazo a cómo se supone que el cifrado de clave pública funcione. Su aplicación debe tener la clave pública ; El servicio de Internet puede descifrar con la clave privada correspondiente.

Si puedes conformarte con el comentario de @Adam, hay al menos una solución que conozco para persistir un valor String en el teléfono de una manera … bien … persistente, lo que significa que el valor sobrevivirá a una desinstalación / reinstalación De su aplicación (un restablecimiento de fábrica lo eliminaría), pero permanecen "ocultos" para el usuario (es decir, almacenados en el almacenamiento privado del sistema, no en la tarjeta SD).

Puede utilizar el proveedor de contenido de configuración del sistema para almacenar el valor de la siguiente manera:

 final String myKey = "verySecretKey"; final String myValue = "verySecretValue"; final boolean isSuccess = System.putString(getContentResolver(), myKey, myValue); 

Y para recuperarlo puedes hacer:

 myValue = System.getString(getContentResolver(), myKey); 

Y sí, en un teléfono arraigado un usuario práctico puede obtener el valor persistido, pero en ese caso nada es sagrado y el comentario de @Adam será válido: No debe almacenar los datos en el dispositivo.

  • Cómo utilizar @ ActivityInfo.ScreenOrientation
  • Convertir una cadena en código fuente Java en Android
  • Evitar que RecyclerView muestre contenido anterior al desplazarse
  • ¿Es esta Runnable a salvo de fugas de memoria?
  • ¿Cómo mantener la consistencia con XML drawables a través de diferentes tamaños de pantalla?
  • Hacer una matriz para un efecto smuge / wobble (ver imágenes) en Android
  • ¿Cómo se puede detectar el modo avión en Android?
  • Bitmap recycle () en java Android
  • ¿Cómo insertar valores en matriz bidimensional de forma programática?
  • obteniendo 505 de respuesta desde el servidor
  • Android N cambia el idioma mediante programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.