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