Ho bisogno di memorizzare informazioni sensibili (una chiave di crittografia simmetrica che voglio mantenere privata) nella mia applicazione C ++. L'approccio semplice è fare questo:
std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess";
Tuttavia, l'esecuzione dell'applicazione attraverso il strings
processo (o qualsiasi altro che estrae stringhe da un'app binaria) rivelerà la stringa precedente.
Quali tecniche dovrebbero essere utilizzate per nascondere tali dati sensibili?
Modificare:
OK, così avete detto praticamente tutti "il vostro eseguibile può essere sottoposto a reverse engineering" - ovviamente! Questo è un mio cruccio, quindi ho intenzione di inveire un po 'qui:
Perché il 99% (OK, forse esagero un po ') di tutte le domande relative alla sicurezza su questo sito riceve una risposta con un torrente del tipo "non c'è modo di creare un programma perfettamente sicuro" - questo non è utile risposta! La sicurezza è una scala mobile tra la perfetta usabilità e nessuna sicurezza a un'estremità e la perfetta sicurezza ma nessuna usabilità all'altra.
Il punto è che scegli la tua posizione su quella scala mobile a seconda di cosa stai cercando di fare e dell'ambiente in cui verrà eseguito il tuo software. Non sto scrivendo un'app per un'installazione militare, sto scrivendo un'app per un PC domestico . Ho bisogno di crittografare i dati su una rete non attendibile con una chiave di crittografia pre-nota. In questi casi, la "sicurezza attraverso l'oscurità" è probabilmente sufficiente! Certo, qualcuno con abbastanza tempo, energia e abilità potrebbe decodificare il binario e trovare la password, ma indovina cosa? Non mi interessa:
Il tempo che mi ci vuole per implementare un sistema sicuro di prim'ordine è più costoso della perdita di vendite a causa delle versioni crackate (non che io stia effettivamente vendendo questo, ma ottieni il mio punto). Questa tendenza del "ci lascia fare nel miglior modo possibile" nella programmazione tra i nuovi programmatori è sciocca per non dire altro.
Grazie per aver dedicato del tempo per rispondere a questa domanda: sono stati di grande aiuto. Sfortunatamente posso accettare solo una risposta, ma ho votato a favore di tutte le risposte utili.