Где хранится секретный пароль ключевого ключа?

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

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

Я предполагаю, что пароль кэшируется где-то, но где? Это в каком-то частном хранилище? Если я дам кому-то еще свой весь каталог решений с ключевым файлом в нем, будут ли они запрашиваться введенный пароль или они смогут подписывать сборку без пароля?

В Интернете есть много статей о сильных ключах имени и их использовании, но по какой-то нечетной причине они все затушевывают, как пароль фактически используется Visual Studio.

Update: Перезапуск Visual Studio (и Windows) не имеет никакого эффекта, поэтому кэширование кажется постоянным. Удаление файла .suo не изменяет того факта, что для подписи сборки не требуется пароль.

Ответы

Ответ 1

См. документацию для Диалоговое окно "Создать сильное имя" .

Информация о пароле хранится в базе данных криптографического хранилища компьютера.

Другая информация из CLR Inside Out: использование сильных сигнатур подписи.

Вы можете установить закрытый ключ в контейнере ключей, используя ограничительные списки управления доступом (ACL), чтобы предотвратить несанкционированный доступ к контейнеру ключей. Кроме того, вы можете хранить закрытый ключ на смарт-карте или другом отдельном аппаратном устройстве. Инструмент sn.exe позволяет вам использовать другой поставщик криптографических услуг (CSP) для подписания. Взгляните на параметр -c в документации для sn.exe.