Preciso armazenar informações confidenciais (uma chave de criptografia simétrica que desejo manter particular) em meu aplicativo C ++. A abordagem simples é fazer isso:
std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess";
No entanto, executar o aplicativo por meio do strings
processo (ou qualquer outro que extraia strings de um aplicativo binário) revelará a string acima.
Que técnicas devem ser usadas para ocultar esses dados confidenciais?
Editar:
OK, quase todos vocês disseram "seu executável pode ser submetido a engenharia reversa" - é claro! Esta é uma implicância minha, então vou reclamar um pouco aqui:
Por que 99% (OK, talvez eu exagere um pouco) de todas as perguntas relacionadas à segurança neste site são respondidas com um torrent de "não há maneira possível de criar um programa perfeitamente seguro" - isso não é útil responda! Segurança é uma escala móvel entre usabilidade perfeita e nenhuma segurança em uma extremidade e segurança perfeita, mas nenhuma usabilidade na outra.
A questão é que você escolhe sua posição nessa escala móvel dependendo do que está tentando fazer e do ambiente em que o software será executado. Não estou escrevendo um aplicativo para uma instalação militar, estou escrevendo um aplicativo para um PC doméstico . Preciso criptografar dados em uma rede não confiável com uma chave de criptografia pré-conhecida. Nesses casos, "segurança através da obscuridade" provavelmente é suficiente! Claro, alguém com tempo, energia e habilidade suficientes poderia fazer a engenharia reversa do binário e encontrar a senha, mas adivinhe? Eu não me importo:
O tempo que levo para implementar um sistema seguro de primeira linha é mais caro do que a perda de vendas devido às versões quebradas (não que eu esteja realmente vendendo isso, mas você entendeu). Essa tendência "vamos fazer da melhor maneira possível" na programação entre os novos programadores é, no mínimo, tola.
Obrigado por responder a esta pergunta - eles foram muito úteis. Infelizmente, só posso aceitar uma resposta, mas votei positivamente em todas as respostas úteis.