Non esiste un modo affidabile al 100% per nascondere un segreto di qualsiasi tipo, sia esso una chiave privata RSA o qualsiasi altro tipo di oggetto, all'interno di un'applicazione in modo tale da resistere al reverse engineering. Tutti quelli che hanno provato, hanno fallito. Ci sono buone ragioni teoriche per cui non dovrebbe essere possibile: vale a dire, ad un certo punto, la CPU utilizzerà il valore segreto e quindi lo avrà sotto le sue dita; eseguendo il codice in un emulatore, anche gli aggressori possono ottenerlo.
(L'emulatore è il tipo di soluzione just-drop-a-nuke-on-it, funziona ed è sufficiente per dimostrare l'impossibilità di protezione, ma gli hacker usano invariabilmente un po 'più di cervello nel loro reverse engineering.)
Il meglio che puoi avere sono i segreti specifici dell'utente, in modo che almeno , puoi gestire le cose lato server chiudendo l'accesso per i trasgressori (se una chiave di accesso è compromessa, semplicemente informa il server che questa chiave specifica non sarà più accettata). Questo è ciò che viene fatto in TV satellitare : il segnale viene trasmesso, con crittografia con una chiave K (che cambia ogni pochi minuti), e il tasto K è esso stesso crittografato con la chiave segreta che si trova nella smart card del ricevitore; ogni ricevitore ha la sua smart card. Quando una carta sembra essere massicciamente clonata (rompere una carta è costoso, ma una volta che è rotto, fare 3000 copie è economico), il distributore TV si ferma a distribuire la versione di K crittografata con la chiave che si trova nella scheda compromessa, bloccando così in modo efficace l'accesso per tutte le copie.