Расположение контейнера для открытых и закрытых ключей в Windows?
Я пытаюсь сохранить свои общедоступные и закрытые ключи в контейнере, используя следующий код:
CspParameters cp = new CspParameters();
cp.KeyContainerName = "Test";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
То, что я хотел бы знать, это расположение контейнера. Является ли местоположение контейнера в файловой системе?
Ответы
Ответ 1
Вы найдете файлы ключей в следующем каталоге (*):
Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),
@"Microsoft\Crypto\RSA\MachineKeys")
Вы можете получить имя файла для заданного ключа следующим образом:
CspParameters cp = ...;
CspKeyContainerInfo info = new CspKeyContainerInfo(cp);
string fileName = info.UniqueKeyContainerName;
Я не считаю, что эта информация документирована, поэтому, если вы ее используете, вы будете полагаться на недокументированные детали реализации, которые могут не работать в будущих версиях Windows. К сожалению, иногда это необходимо использовать; например как указано в этом вопросе, я не думаю, что есть другой надежный способ просмотра разрешений для контейнера ключей RSA из незащищенной учетной записи.
(*), что для машинных клавиш. Ключи, относящиеся к конкретному пользователю, предположительно находятся под Environment.SpecialFolder.LocalApplicationData
Ответ 2
Я использовал Process Monitor и Sn.exe(Сильное имя Tool), чтобы узнать местоположение папки на моей машине с Windows 7, содержащей мои ключевые файлы, и тем самым подтвердить информацию в Джо.
Сначала я запустил Process Monitor и задал следующий фильтр:
Column Relation Value Action
---------------------------------------
Path contains crypto Include
Затем я запустил Strong Name Tool (sn.exe
) & dagger; чтобы извлечь открытый ключ из пары ключей в моем контейнере VS_KEY_773685D47C32F8C7
и экспортировать его в public_key.snk
:
sn.exe -pc VS_KEY_773685D47C32F8C7 public_key.snk
После этого я отметил, что Process Monitor указал, что sn.exe
сделал несколько запросов доступа к папке:
C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
... и файл, содержащий мои общедоступные и закрытые ключи для моего контейнера с именем VS_KEY_773685D47C32F8C7
:
C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\74c2c10a37baa69f7969c7144db5805d_c55067c2-4a01-4792-9d70-d7a6e4799447
& dagger;sn.exe
можно удобно запустить с помощью Командная строка разработчика для Visual Studio. p >