2010-03-27 8 views
10

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

Однако для этого я должен сохранить ключ шифрования в сборке .NET, чтобы он мог шифровать и расшифровывать эти файлы.

Зная о таких инструментах, как Reflector от Red Gate, который может вытащить мой ключ, у меня возникает ощущение, что это не очень безопасный способ сделать это ... есть ли какие-либо рекомендации для этого?

ответ

11

Вы должны решить, какой приемлемый уровень риска. Не существует «безопасного» способа сделать это.

Если риск того, что кто-то использует отражатель или просто открывает сборку с использованием класса System.Reflection.Assembly и захватывает ресурс таким образом, слишком велик, то следующим шагом, вероятно, является загрузка ключа с сервера когда вы запускаете.

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

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

+0

+1 для указания на бесполезность и стоимость хакера, но он также должен попытаться минимизировать влияние (см. Мой ответ, чтобы попытаться объяснить, что я имею в виду здесь) – lexu

+0

Да, после прочтения вашего сообщения и предоставления подумал я, я понял, что все сводится к оценке стоимости/риска. Я придумал схему, которая, вероятно, отпугивает большинство людей от попыток, сохранить лучших 5-10% компьютеров, опытных пользователей, что является «приемлемым» риском. – Alex

+0

Я рад. Вы, вероятно, приняли правильное решение, а если нет, вы всегда можете его изменить. ;) – 2010-03-27 09:08:17

0

Вы не можете предотвратить Decription, но вы можете предотвратить повторное шифрование фальсифицированных данных:

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

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

Для шифрования данных вы можете использовать метод public key cryptography. Таким образом, хакер может читать, но он не может повторно шифровать.

+0

Криптография с открытым ключом здесь не поможет, насколько я могу судить (а также вы никогда не используете напрямую систему ПК (по крайней мере, RSA) для шифрования данных, ее следует использовать только для шифрования ключей для симметричного алгоритма (например, AES)). –

+0

Даже тогда достаточно опытный хакер может обойти его. Разберитесь, поменяйтесь своим ключом, стрелой. Зашифрованный материал неожиданно читается. Вы можете предотвратить отправку данных на сервер, подписав их на стороне сервера, хотя ... вы правы в этом. Все зависит от того, какова настоящая необходимость; как и в случае со многими из этих вопросов. – 2010-03-27 07:16:27

+0

Нет проблем с повторным шифрованием, кешированные файлы - это звуковые укусы, которые пользователи платят, чтобы получить доступ, и по истечении срока их подписки я не хочу, чтобы они имели к ним доступ. – Alex

0

Как подсказывает Макс, вам необходимо рассмотреть модель угрозы.

О каких злоумышленниках вы беспокоитесь? (Правомерно беспокоиться о некоторых, и не настолько законно беспокоиться о других). Типичными категориями могут быть «некоммерческий опытный пользователь, который приобрел программу», «преданный человек, желающий потратить часы на решение», «случайный пользователь, который знает, как найти трещины в Интернете» и т. Д.

В зависимости от вашего точного сценария , решения могут быть разными.

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

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

Я знаю, что это не очень полезный ответ.

+1

Вы имели в виду, что я намекнул на рассмотрение модели «угрозы»? ;) – 2010-03-27 07:13:43

+0

@MaxGuernseyIII: Упс .. Нет призов за то, что я догадываюсь над тем, над чем я работал во время написания этого сообщения: P –

+0

Dang. Я надеялся на ленту ... – 2010-03-27 07:20:07

Смежные вопросы