Как хранить информацию в моем исполняемом файле в .Net - PullRequest
9 голосов
/ 29 августа 2008

Я бы хотел привязать файл конфигурации к моему исполняемому файлу. Я хотел бы сделать это, храня MD5-хеш файла внутри исполняемого файла. Это должно помешать любому, кроме исполняемого файла, изменить файл.

По существу, если кто-то изменяет этот файл вне программы, программа не сможет загрузить его снова.

РЕДАКТИРОВАТЬ: программа обрабатывает информацию о кредитной карте, так что возможность изменить конфигурацию любым способом может представлять потенциальную угрозу безопасности. Это программное обеспечение будет распространяться среди большого количества клиентов. В идеале клиент должен иметь конфигурацию, которая напрямую связана с исполняемым файлом. Мы надеемся, что это помешает хакеру установить поддельную конфигурацию.

Конфигурация все еще должна быть редактируемой, хотя составление индивидуальной копии для каждого клиента не вариант.


Важно, чтобы это было динамичным. Так что я могу связать хеш с файлом конфигурации при изменении конфигурации.

Ответы [ 4 ]

11 голосов
/ 29 августа 2008

Лучшее решение - сохранить MD5 в файле конфигурации. Но вместо того, чтобы MD5 был просто файлом конфигурации, также включите в MD5 какое-то секретное значение «ключа», например, фиксированный guid.

write(MD5(SecretKey + ConfigFileText));

Затем вы просто удаляете этот MD5 и перефразируете файл (включая ваш секретный ключ). Если MD5 одинаковы, никто его не модифицировал. Это не позволяет кому-либо изменить его и повторно применить MD5, поскольку он не знает ваш секретный ключ.

Имейте в виду, что это довольно слабое решение (как и то, которое вы предлагаете), поскольку они могут легко отследить вашу программу, чтобы найти ключ или место хранения MD5.

Лучшим решением было бы использовать систему с открытым ключом и подписать файл конфигурации. Опять же, это слабо, поскольку для этого требуется, чтобы закрытый ключ хранился на их локальной машине. Практически все, что содержится на их локальном ПК, можно обойти с достаточным усилием.

Если вы ДЕЙСТВИТЕЛЬНО хотите сохранить информацию в вашем исполняемом файле (что я бы не рекомендовал), то вы можете просто попытаться добавить ее в конец EXE-файла. Это обычно безопасно. Модификация исполняемых программ - это вирус, похожий на поведение, и большая часть безопасности операционной системы также попытается остановить вас. Если ваша программа находится в каталоге Program Files, а ваш файл конфигурации находится в каталоге Application Data, а пользователь вошел как пользователь без прав администратора (в XP или Vista), вы не сможете обновить EXE.

Обновление: Мне все равно, используете ли вы асимметричное шифрование, RSA или квантовую криптографию, если вы храните свои ключи на компьютере пользователя (что вы должны делать, если только Вы все маршрутизируете через веб-сервис), тогда пользователь может найти ваши ключи, даже если это означает проверку регистров на процессоре во время выполнения! Вы только покупаете себе умеренный уровень безопасности, поэтому придерживайтесь чего-то простого. Чтобы предотвратить изменение, предложенное мной решение является лучшим. Чтобы предотвратить чтение, зашифруйте его, а если вы храните свой ключ локально, используйте AES Rijndael.

Обновление: В качестве альтернативы FixedGUID / SecretKey может быть сгенерирован во время установки и сохранен где-то в секрете в реестре. Или вы можете генерировать его каждый раз, когда вы используете его из конфигурации оборудования. Тогда вы становитесь все сложнее. То, как вы хотите сделать это, чтобы обеспечить умеренные уровни аппаратных изменений, состояло бы в том, чтобы взять 6 разных подписей и хэшировать ваш файл конфигурации 6 раз - по одному с каждой. Объедините каждое из них со вторым секретным значением, таким как GUID, упомянутый выше (глобальный или сгенерированный при установке). Затем при проверке вы проверяете каждый хеш отдельно. Пока у них есть 3 из 6 (или какой бы ни была ваша терпимость), тогда вы принимаете это. В следующий раз, когда вы напишите это, вы хешируете его с новой конфигурацией оборудования. Это позволяет им постепенно менять аппаратное обеспечение и получать совершенно новую систему. , , Может быть, это слабость. Все сводится к вашей терпимости. Существуют вариации, основанные на более жестких допусках.

ОБНОВЛЕНИЕ: Для системы кредитных карт вы можете подумать о реальной безопасности. Вам следует воспользоваться услугами консультанта по безопасности и криптографии . Больше информации необходимо обменять. Они должны проанализировать ваши конкретные потребности и риски.

Кроме того, если вы хотите обеспечить безопасность с помощью .NET, вам сначала нужно начать с действительно хорошего обфускатора .NET (, просто Google it ). Сборка .NET - это способ легко разобрать и получить исходный код и прочитать все ваши секреты. Не для того, чтобы звучать как испорченная запись, но все, что зависит от безопасности системы вашего пользователя, в корне ошибочно с самого начала.

1 голос
/ 29 августа 2008

Я бы посоветовал вам использовать Асимметричный ключ шифрования для шифрования файла конфигурации, где бы он ни хранился, внутри исполняемого файла или нет.

Если я правильно помню, RSA - один из вариантов.

Объяснение этого см. В Криптография с открытым ключом в Википедии

Сохраните ключ «чтение» в вашем исполняемом файле и сохраните ключ «запись». Так что никто, кроме вас, не может изменить конфигурацию.

Это имеет следующие преимущества:

  • Никто не может изменить конфигурацию, если у него нет «пишущего» ключа, потому что любая модификация повредит полностью, даже если он знает «читающий» ключ, для вычисления другого ключа потребуются годы .
  • Гарантия модификации.
  • Это не сложно - в наши дни доступно множество библиотек. Есть также много программ генерации ключей, которые могут генерировать действительно очень длинные ключи.

Проведите некоторое исследование о том, как правильно их реализовать.

1 голос
/ 29 августа 2008

Из чистого любопытства, почему вы не хотите загружать файл, если он был изменен?

Почему бы просто не сохранить всю информацию о конфигурации, скомпилированную в исполняемом файле? Зачем вообще беспокоиться о внешнем файле?

Редактировать

Я только что прочитал вашу редакцию о том, что это информационная программа кредитной карты. Это создает очень интересную проблему.

Я бы подумал, что для этого уровня безопасности потребуется какое-то довольно серьезное шифрование, но я ничего не знаю об обработке такого рода вещей таким образом, чтобы криптографические секреты нельзя было просто извлечь из исполняемый файл.

Возможна ли аутентификация на каком-либо онлайн-источнике?

0 голосов
/ 29 августа 2008

просто создайте строку const, которая содержит хэш md5, и скомпилируйте ее в свое приложение ... ваше приложение может просто обратиться к этой строке const при проверке файла конфигурации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...