автономная защита в .NET-хранилище, в котором хранится запутанный ключ внутри кода - PullRequest
2 голосов
/ 03 февраля 2012

Я занимаюсь разработкой приложения на C #, которое НЕ МОЖЕТ подключиться к Интернету.

Это приложение создаст файл конфигурации для моего оборудования.

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

Чтобы избежать этого, я сейчас использую простой метод.

  1. В коде у меня есть ключ: abcd123

  2. Мое приложение создает файл конфигурации, а затем:

  3. HASH файл конфигурации и шифрует HASH ключом: abcd123, хранящимся в строковая переменная KEY

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

Теперь аппаратное обеспечение имеет KEY abcd123, оно дешифрует конфигурацию и HASH полезную нагрузку. Если 2 хэша - то же самое, я предполагаю, что мой помощник не изменил файл конфигурации.

Что меня беспокоит, так это то, что хранилище KEY в коде в .NET очень легко восстановить без запутывания.

Таким образом, я купил Crypto Obfuscator , но я не знаю, насколько мой ключ в безопасности.

Я не достаточно опытен, чтобы декомпилировать мою программу и посмотреть, все еще открыт ключ или нет.

Какими методами вы можете предложить мне, чтобы Я НАСТОЯТЕЛЬНО гарантировал, что мой ключ «безопасен»?

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

Надеюсь, я прояснил ситуацию, но прошу разъяснений.

Ответы [ 2 ]

2 голосов
/ 03 февраля 2012

Вы можете получить реальную безопасность, только если не введете ключ в свой код.

Один из способов сделать это - использовать криптографию с открытым ключом (например, RSA).

Вы создаете открытый и закрытый ключи. Закрытый ключ никогда не покидает вашу систему.

Вы используете закрытый ключ для подписи файла конфигурации.

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

Даже если весь мир знает ваш открытый ключ, никто не сможет создать действительную подпись без закрытого ключа (который доступен только вам).

2 голосов
/ 03 февраля 2012

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

Вы ищете алгоритм цифровой подписи.В целом, есть два способа сделать это:

  • Использовать симметричный алгоритм, который вычисляет крипто-надежный хеш (например, SHA-2).Вы публикуете хеш и соответствующий файл.Аппаратное обеспечение получает файл, вычисляет хеш с тем же алгоритмом и утверждает, что оно совпадает с публично опубликованным хешем.Посмотрите, как Apache log4net предоставляет библиотеки и совпадающие подписи.

  • Другой подход заключается в использовании подписи открытого-закрытого ключа, например с RSA.Образец доступен из msdn , где показано, как подписать документ XML с использованием RSACryptoServiceProvider.Вы можете создать пару закрытого-открытого ключа.Закрытый ключ используется для создания цифровой подписи, а вы храните ее при себе.С открытым ключом вы можете только проверить подпись, и это то, что вы развертываете на устройстве.

Еще один совет безопасности по ссылке выше:

Никогда не храните и не передавайте закрытый ключ пары асимметричных ключей в виде открытого текста.Никогда не вставляйте закрытый ключ прямо в ваш исходный код.Встроенные ключи можно легко прочитать из сборки, используя Ildasm.exe (дизассемблер MSIL) или открыв сборку в текстовом редакторе, например Блокноте.

...