No hay una forma 100% confiable de ocultar un secreto de ningún tipo, ya sea una clave privada RSA o cualquier otro tipo de objeto, dentro de una aplicación de tal manera que resista la ingeniería inversa. Todos los que lo han intentado, han fracasado. Hay buenas razones teóricas por las que no debería ser posible: a saber, en algún momento, la CPU utilizará el valor secreto y, por lo tanto, lo tendrá bajo sus dedos; Al ejecutar el código en un emulador, los atacantes también pueden obtenerlo.
(El emulador es el tipo de solución que solo se puede soltar, funciona y es suficiente para demostrar la imposibilidad de protección, pero los atacantes invariablemente utilizan un poco más de cerebro en su ingeniería inversa).
Lo mejor que puede tener son los secretos específicos del usuario, de modo que, al menos , puede administrar el servidor de cosas cerrando el acceso para los infractores (si se compromete una clave de concesión de acceso, simplemente informar al servidor que esta clave específica ya no será aceptada). Esto es lo que se hace en TV satelital : la señal se transmite, con cifrado con una clave K (que cambia cada pocos minutos), y la clave K está encriptada con la clave secreta que se encuentra en la tarjeta inteligente del receptor; Cada receptor tiene su propia tarjeta inteligente. Cuando una tarjeta parece estar clonada de forma masiva (romper una tarjeta es costoso, pero una vez que se rompe, hacer 3000 copias es barato), el distribuidor de TV simplemente se detiene para distribuir la versión de K encriptada con la clave que se encuentra en la tarjeta comprometida, lo que efectivamente bloquea el acceso para todas las copias.