Вопрос

Хорошо, я должен быть тупым, потому что я уже читал это: http://www.csharp411.com/ нетто-сборочно-чаво-часть-3-сильным наименования-и подписывание /

И я до сих пор не понимаю ...

Допустим, я открываю свойства своего проекта и перехожу к разделу "Подписание". затем проверяю "Подписать сборку" и создать новую сборку с паролем. Был создан файл ключа строгого имени с расширением .pfx, с открытым и закрытым ключами, и VS будет подписывать мою сборку при сборке, верно?

А как насчет закрытого ключа? Не должно ли быть частным, и я, разработчик, должен быть единственным? Разве сборка не должна быть подписана только открытым ключом?

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

Это было полезно?

Решение

Вы в основном правы.

Вы создаете пару ключей и используете ее для подписи. Но не отправляйте файл pfx (или snk), он содержит как открытый, так и закрытый ключи и должен храниться в безопасности.

Открытый ключ добавляется в сборку как часть процесса подписи.

Эта подпись проверяется, когда сборка загружается в приложение. Конечные пользователи также могут проверить токен открытого ключа в GAC, но это не совсем удобный процесс. И вы должны каким-то образом сообщить им свой открытый ключ.

И все это так же надежно, как и ваша конфиденциальность файла ключей.

Также обратите внимание, что в идеале у вас должен быть только 1 ключ на компанию. Если вы беспокоитесь о том, чтобы поделиться им с (многими) коллегами, изучите задержку подписания.

Другие советы

Цифровая подпись включает в себя вычисление хэша вашего двоичного файла и последующее шифрование сгенерированного хеша с использованием закрытого ключа из пары ключей, которую вы сгенерировали. В дополнение к этому VS также добавит открытый ключ в сборку. Теперь, когда это выполняется на стороне клиента, среда выполнения будет использовать открытый ключ в сборке для дешифрования подписи (хеша) и затем сопоставит это с вычисленным хешем двоичного файла на клиенте. Если они совпадают, это означает, что двоичный файл не был подделан.

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

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

Подпись = Шифрование SHA1-хэша сборки с помощью закрытого ключа
Проверка = Сравнение дешифрованной подписи PublicKey с вычисленным хешем сборки

Таким образом, любой пользователь с PublicKey может проверить сборку, но только Автор с PrivateKey может подписать сборку.

PublicKey token = последние 64 бита SHA1-хеша PublicKey в порядке байтов с прямым порядком байтов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top