Подтвердить что ты не робот

Как вы скрываете ключ шифрования в приложении .NET?

Я разрабатываю приложение интрасети (С#), которое использует некоторые данные (локальные для веб-сервера), которые мы хотели бы сохранить конфиденциальными. Эти данные зашифрованы (AES), используя устаревший репозиторий данных. Мы не можем полностью предотвратить физический доступ к машине.

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

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

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

Или есть вариант, который мне не хватает?

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

4b9b3361

Ответ 2

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

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

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

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

Ответ 3

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

В этих условиях обфускация не поможет.

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