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