Нуб по безопасности .Net здесь ... Каков самый простой способ предотвратить загрузку моей сборки кем-то другим?
Предыстория: хотя я действительно ищу просто «достаточно хорошую» защиту (при наличии достаточного количества времени/денег/сообразительности кто-то может успешно взломать, взломать и атаковать), похоже, что это уже должна быть решенная проблема, и я просто упускаю ее.
Вот что я (думаю) знаю:
Хотя строгие имена могут использоваться в качестве уровня безопасности, они не обязательно предназначены для этого, согласно эту документацию Microsoft (см. Предупреждение. Не полагайтесь на строгие имена в целях безопасности. Они обеспечивают только уникальное удостоверение.)
На этом ^ примечании я сталкивался с ситуациями, когда я не мог загрузить стороннюю сборку (я думаю, Aspose), потому что они не подписывали свои сборки, однако все мои были. Так что мне пришлось илдасмать их сборку, подписывать ее своим снк, потом иласмить обратно), чтобы пользоваться их библиотекой. Итак, строгое имя не кажется мне хорошим механизмом безопасности. ОДНАКО... как насчет простой проверки в коде, чтобы убедиться, что вызывающая сборка подписан с моим токеном открытого ключа? Достаточно ли это эффективно?
Если для того, чего я пытаюсь достичь, не следует использовать строгое имя, то лучше ли маршрут реализует проверку цифровой подписи Authenticode в dll (кажется, wintrust.dll может помочь с этим)?
Я просматривал инструменты нескольких поставщиков для запутывания, и многие из них поставляются с лицензиями и всевозможными вещами. Я, скорее всего, буду использовать некоторую запутанность, чтобы скрыть некоторые конфиденциальные части, однако мне все же хотелось бы иметь механизм, предотвращающий загрузку моей конфиденциальной библиотеки кем-либо без необходимости использования таких функций, как шифрование строк и кода, которые часто связаны с затратами на производительность (и другими).
Итак, вернемся к вопросу: как самый простой способ предотвратить загрузку моей сборки?