Любые проблемы с безопасностью, добавляющие сильный ключ имени к исходному контролю для проекта с открытым исходным кодом?

Учитывая сильный ключ имени (файл snk). Есть ли проблемы с безопасностью, добавляющие этот файл в исходный контроль для проекта с открытым исходным кодом?

Ответ 1

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

Страница MSDN на Подписание с сильным именем достаточно хорошо излагает две цели.

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

Любая общедоступная библиотека (DLL) должна быть подписана с сильным именем, если она предназначена для использования конечным пользователем. (т.е. если это не деталь реализации или таковая.)

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

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

Наконец, имейте в виду, что существуют два типа файлов сертификатов ключей, которые CLR/.NET использует для подписи сборок. Во-первых, это SNK, как вы говорите; это не защищено паролем. Второй - это PFX, который на самом деле является только защищенной паролем версией файла ключа SNK. До тех пор, пока этот пароль достаточно безопасен, следовательно, нет проблемы безопасности при распространении защищенного PFX с вашим программным обеспечением с открытым исходным кодом. Visual Studio (и утилита генерации ключей командной строки), конечно, способны создавать оба.