Мне нужно хранить конфиденциальную информацию (симметричный ключ шифрования, который я хочу сохранить в секрете) в своем приложении C ++. Простой подход заключается в следующем:
std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess";
Однако при запуске приложения через процесс strings
(или любой другой, который извлекает строки из двоичного приложения) откроется приведенная выше строка.
Какие методы следует использовать, чтобы скрыть такие конфиденциальные данные?
Edit:
ОК, так что почти все вы сказали "Ваш исполняемый файл может быть реверс-инжиниринг" - конечно! Это моя любимая мозоль, поэтому я собираюсь немного разглагольствовать здесь:
Почему 99% (хорошо, так что, возможно, я немного преувеличиваю) всех вопросов, связанных с безопасностью на этом сайте, отвечают потоком «нет никакого способа создать совершенно безопасную программу» - то есть не полезный ответ! Безопасность - это скользящая шкала между идеальным юзабилити и отсутствием безопасности на одном конце и идеальной безопасностью, но не удобством на другом.
Дело в том, что вы выбираете свою позицию на этой скользящей шкале в зависимости от того, что вы пытаетесь сделать, и среды, в которой будет работать ваше программное обеспечение. Я не пишу приложение для военной установки, я пишу приложение для домашнего ПК . Мне нужно зашифровать данные в недоверенной сети с помощью заранее известного ключа шифрования. В этих случаях «безопасность через неизвестность», вероятно, достаточно хороша! Конечно, кто-то, у кого достаточно времени, энергии и навыков, может перепроектировать двоичный файл и найти пароль, но угадайте, что? Мне все равно:
Время, затрачиваемое на внедрение первоклассной защищенной системы, обходится дороже, чем потеря продаж из-за взломанных версий (не то, чтобы я на самом деле продавал это, но вы поняли мою точку зрения). Это «голубое небо» «позволяет делать это абсолютно наилучшим образом», тренд в программировании среди новых программистов глупо, если не сказать больше.
Спасибо, что нашли время ответить на этот вопрос - они были самыми полезными. К сожалению, я могу принять только один ответ, но я проголосовал за все полезные ответы.