Necesito almacenar una clave de cadena privada dentro de la aplicación. Su valor nunca cambiará y se configura manualmente en el código. Obviamente no puedo simplemente almacenarlo como String
ya que el método de ingeniería inversa lo revelaría, incluso con la ofuscación aplicada.Solución anti-piratería para una clave secreta en la aplicación de Android?
¿Cómo sugieres que proteja esta clave privada?
Pensé en guardarlo en una base de datos, pero también se puede sacar una base de datos del teléfono.
PS. esta clave es un parámetro especial, por lo que es un método importante y es crucial, ¡permanece desconocido para cualquiera! No es una clave de descifrado. Esta cadena se usará como un parámetro para el método de encriptación (md5 o similar) y luego se enviará un resultado a nuestro servicio de Internet.
EDITAR
Lo siento, para hacer que fuera tan complicado. Pensé que podría obtener una respuesta con la menor cantidad de información posible.
Esta aplicación permitirá a los usuarios enviar texto a un servicio de Internet que luego publica ese texto en un sitio web. Necesitamos asegurarnos de que el texto se envíe a través del teléfono Android, ya que cualquier script de robot web puede imitar el teléfono Android y publicar un correo no deseado. Como los métodos tipo captcha no son bienvenidos en los teléfonos móviles, habrá una clave secreta que se enviará a md5 (con algunas otras cosas) para generar un código hash. Este hash se enviará a un servicio de Internet. El servicio de Internet usará la misma clave para obtener un resultado md5 y luego lo comparará para ver si el remitente es un teléfono móvil o algún robot.
Esto es realmente el máximo que puedo decir. Espero que sea suficiente
"es crucial que siga siendo desconocido para cualquiera" Si es realmente crucial, no puede incluirlo en la aplicación en absoluto. De lo contrario, un atacante podría pasar por su código con un depurador, detenerse en el punto en que su código usa la cadena e inspeccionar los contenidos. El atacante no necesita saber cómo descifrar la cadena, pero solo necesita instalar las herramientas de desarrollo de Android para permitir que su código realice el descifrado. –
@ AdamMihalcin No, esta cadena se usará ** para el cifrado ** y luego se enviará un resultado a otro servicio de Internet. ¿Esto cambia algo? – sandalone
Acepto, si utiliza su cadena como un pswd/TAN o similar, puede que quiera ver la forma en que los bancos lo hacen hoy en día enviando un código de uso único al móvil y simplemente use esto - cada vez que el usuario quiera tiene acceso a uno nuevo. @ Adam Mihalcin, ¿qué quiere decir exactamente? Entiendo que uno puede MIRAR el código, sin embargo, al depurar una aplicación cargada, ¿cómo es posible? – user387184