Necesito almacenar información confidencial (una clave de cifrado simétrica que quiero mantener privada) en mi aplicación C ++. El enfoque simple es hacer esto:
std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess";
Sin embargo, ejecutar la aplicación a través del strings
proceso (o cualquier otro que extraiga cadenas de una aplicación binaria) revelará la cadena anterior.
¿Qué técnicas deberían utilizarse para ocultar estos datos sensibles?
Editar:
De acuerdo, casi todos ustedes han dicho "su ejecutable puede ser modificado por ingeniería inversa" - ¡por supuesto! Este es un motivo de preocupación mío, así que voy a despotricar un poco aquí:
¿Por qué el 99% (de acuerdo, quizás exagero un poco) de todas las preguntas relacionadas con la seguridad en este sitio se responden con un torrente de "no hay forma posible de crear un programa perfectamente seguro"? Eso no es útil. ¡responder! La seguridad es una escala variable entre la usabilidad perfecta y la falta de seguridad en un extremo y la seguridad perfecta pero sin usabilidad en el otro.
El punto es que eliges tu posición en esa escala móvil dependiendo de lo que intentes hacer y del entorno en el que se ejecutará tu software. No estoy escribiendo una aplicación para una instalación militar, estoy escribiendo una aplicación para una PC doméstica . Necesito cifrar datos a través de una red que no sea de confianza con una clave de cifrado conocida. En estos casos, la "seguridad a través de la oscuridad" probablemente sea lo suficientemente buena. Claro, alguien con suficiente tiempo, energía y habilidad podría aplicar ingeniería inversa al binario y encontrar la contraseña, pero ¿adivinen qué? No me importa
El tiempo que me lleva implementar un sistema seguro de primer nivel es más caro que la pérdida de ventas debido a las versiones descifradas (no es que esté vendiendo esto, pero entiendes mi punto). Esta tendencia de "cielo azul" de "hagámoslo de la mejor manera posible" en la programación entre los nuevos programadores es una tontería por decir lo menos.
Gracias por tomarse el tiempo para responder esta pregunta; fueron de gran ayuda. Desafortunadamente, solo puedo aceptar una respuesta, pero he votado a favor de todas las respuestas útiles.