Допустим в приложении в коде текстовой константой задан закрытый ключ RSA, который исопльзуется для шифрования настроек этого приложения.
Хорошо если закрытый ключ будет постоянный, чтобы сохранённые настройки всегда можно было расшифровать.
Как скрыть данный закрытый ключ, чтобы его нельзя было найти через дизасемблер?
Закрытый ключ из кода приложения можно будет выцепить всегда, вопрос только в том, насколько злоумышленник заморочится этим.
Если вам действительно необходимо шифровать настройки приложения, я бы рассмотрел вариант с мастер-паролем и запросом его у пользователя при запуске приложения.
SagePtr, ну а потом придёт другой пользователь, переустановит приложение, задаст свой пароль и старые файлы конфигурации открыть уже будет нельзя, так как они зашифрованы первым паролем.
Хорошо, а как можно усложнить злоумышленнику задачу поиска закрытого ключа в деасемблированных сборках?
mindgrow, зашифровать константу и обфусцировать код, который её расшифровывает.
Но действительно ли это необходимо? Что получит злоумышленник, если сможет расшифровать настройки?
mindgrow, Ну вы же будете использовать стандартный класс для шифрования. Не кому не будет интересовать где и как вы храните этот ключ, ведь вы его должна подать в открытом виде на вход функции.
freeExec, непонятно почему вы решили, что никого не будет интересовать где и как я буду его хранить. Я бы не стал задавать вопрос, если бы это никого не интересовала.. где логика
mindgrow, и в дизасемблере бинарного кода, и уж тем более в дотнетовском восстановлено до C#, можно ставить и точки прерывания, и анализировать код
а на обфускаторы, есть деобфускаторы.. а дальше все равно голова эксперта. и если цена секрета достаточная - он будет взломан
но у вас изначально прочная схема. в приложении надежно скрыть секрет невозможно. поверьте на слово.. ну или успехов в расширении эрудиции, придете к пониманию со временм ))
mindgrow, freeExec, в дополнение - в дотнете (да вобщем то и везде) нет ни каких проблем дебажить сторонние библиотеки
мало того - определив любым образом, какая библиотечная криптофункция используется, достаточно просто ждать готовенький закрытый ключ. и брейк поинт поставить в самой криптофункции. в дотнете они не обфусцированы ;))
#, целевая задача - это защитить данные настроек, которые приложение сохраняет в файл.
Как можно решить эту задачу, учитывая что
- хранить закрытый ключ в коде приложения не безопасно
- сохранённые данные должны быть переносим, то есть дешифроваться любой установленной копией приложения