Как безопасно сохранить ключ шифрования в блоке.NET

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

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

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

10
задан lexu 27 March 2010 в 07:06
поделиться

3 ответа

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

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

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

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

11
ответ дан 4 December 2019 в 01:00
поделиться

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

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

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

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

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

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

0
ответ дан 4 December 2019 в 01:00
поделиться

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

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

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

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

0
ответ дан 4 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: