Как скрыть ключ шифрования в приложении .NET? - PullRequest
13 голосов
/ 06 марта 2009

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

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 06 марта 2009

Шифрование встроено в систему конфигурации .NET. Вы можете зашифровать фрагменты своего файла app / web.config, в том числе место хранения своего закрытого ключа.

http://www.dotnetprofessional.com/blog/post/2008/03/03/Encrypt-sections-of-WebConfig-or-AppConfig.aspx

4 голосов
/ 30 сентября 2012

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

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

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

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

2 голосов
/ 06 марта 2009

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

Запутывание не помогает в этих условиях.

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

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