La clave AES está codificada en el código.
Este es el problema. Pero, no, cifrar la clave con otra clave (que estaría codificada en el código) no mejora sustancialmente las cosas.
Lo que debes hacer es lo siguiente: escribe el modelo de ataque . Usted está haciendo el cifrado por una razón: usted cree que algún individuo malvado intentará hacer ... ¿qué es exactamente? Ese es el punto del modelo de ataque: definir lo que puede hacer el supuesto atacante y lo que querrá lograr. Solo con un modelo de ataque claramente definido puedes comenzar a pensar qué algoritmos y protocolos de seguridad te ayudarán.
Por ejemplo, el cifrado es una buena herramienta para confidencialidad : ahí es cuando el atacante quiere leer algunos datos, pero no quiere que tenga éxito. El cifrado no resuelve la confidencialidad ; simplemente concentra el problema: con el cifrado, el problema de mantener la confidencialidad de los datos se convierte en el problema de mantener la clave confidencial. Como la clave es más corta, esto puede (o no) hacer que el problema sea más fácil de tratar. Un punto importante es decidir quién debería poder acceder a los datos.
Para resumir la historia: si se supone que los datos se descifran en la máquina del atacante (por ejemplo, el atacante es el usuario, y desea evitar que acceda a los datos en bruto como parte de algún tipo de licencia o esquema DRM), entonces, para decirlo sin rodeos, se pierde. No se puede evitar de manera confiable y constante que alguien acceda a los datos que fluyen en su propio hardware. Esto se debe a que ingeniería inversa funciona bien. Si acumula capas de cifrado (la clave se cifra con otra clave que se cifra con otra clave, y así sucesivamente, hasta una clave inicial que está codificada), simplemente aumenta el tiempo de desarrollo y el tiempo de ingeniería inversa; lo más probable es que le cueste más tiempo que al atacante.