Где хранится секретный пароль ключевого ключа?
Обычно я не хочу подписывать свои сборки .NET, поэтому я не знаю много за его основной механикой. Для небольшого проекта, над которым я работаю, нужно было подписать, и я создал новый ключ, защищенный паролем.
Я ожидал, что вам будет предложено ввести этот пароль в некоторый момент времени при перекомпиляции сборки, но мне никогда не понадобилось вводить его нигде после создания файла ключа. Это, похоже, лишает цель защиты паролем ключа в первую очередь.
Я предполагаю, что пароль кэшируется где-то, но где? Это в каком-то частном хранилище? Если я дам кому-то еще свой весь каталог решений с ключевым файлом в нем, будут ли они запрашиваться введенный пароль или они смогут подписывать сборку без пароля?
В Интернете есть много статей о сильных ключах имени и их использовании, но по какой-то нечетной причине они все затушевывают, как пароль фактически используется Visual Studio.
Update:
Перезапуск Visual Studio (и Windows) не имеет никакого эффекта, поэтому кэширование кажется постоянным. Удаление файла .suo не изменяет того факта, что для подписи сборки не требуется пароль.
Ответы
Ответ 1
См. документацию для Диалоговое окно "Создать сильное имя" .
Информация о пароле хранится в базе данных криптографического хранилища компьютера.
Другая информация из CLR Inside Out: использование сильных сигнатур подписи.
Вы можете установить закрытый ключ в контейнере ключей, используя ограничительные списки управления доступом (ACL), чтобы предотвратить несанкционированный доступ к контейнеру ключей. Кроме того, вы можете хранить закрытый ключ на смарт-карте или другом отдельном аппаратном устройстве. Инструмент sn.exe позволяет вам использовать другой поставщик криптографических услуг (CSP) для подписания. Взгляните на параметр -c в документации для sn.exe.