Мне интересно, каковы суффиксы GUID для файлов контейнера ключей RSA, хранящихся в хранилище машины и контейнера пользовательских ключей.Я не могу определить некоторые из них как ключевые контейнеры через CAPI / CNG, хотя вместо этого я представлю свой случай, используя инструменты командной строки.Команды ниже предназначены для PowerShell в режиме с повышенными привилегиями.На большинстве машин суффикс GUID одинаков для всех этих имен файлов, но на этом есть четыре различных идентификатора GUID, в то время как API возвращает только ключи только с одним. Что это за GUID? Мне не нравятся случайные секреты, хранящиеся у меня, я не знаю, что на моей машине; они безопасны для удаления?
Содержимое каталога машинного магазина:
> ls -n $env:ProgramData\Microsoft\Crypto\Rsa\MachineKeys | sort { "$_"[-3..-1] }
d1f9044f5d7345da71c0d2efd2e4f59e_e9f96f2e-b8b7-49b2-85a5-840195eca603
d6d986f09a1ee04e24c949879fdb506c_a4dc5a56-574d-4e4b-ba8d-d88984f9a6c5
6de9cb26d2b98c01ec4e9e8b34824aa2_a4dc5a56-574d-4e4b-ba8d-d88984f9a6c5
76944fb33636aeddb9590521c2e8815a_a4dc5a56-574d-4e4b-ba8d-d88984f9a6c5
d6d986f09a1ee04e24c949879fdb506c_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
d1f9044f5d7345da71c0d2efd2e4f59e_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
76944fb33636aeddb9590521c2e8815a_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
6de9cb26d2b98c01ec4e9e8b34824aa2_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
ba8e1b9b5510957b3af7b811f05660de_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
d1f9044f5d7345da71c0d2efd2e4f59e_c6a7fc9d-32a6-41e4-afd5-7dc7b822029e
Я отсортировал список по последним трем символам, чтобы его было легкочтобы сразу увидеть, что есть 4 различных суффикса GUID к файлам контейнера ключей.Теперь давайте перечислим ключ, сообщаемый всеми установленными CSP.Я получу список провайдеров, а позже список ключей каждого провайдера, используя инструмент certutil
, который поставляется с Windows.Его вывод требует некоторого регулярного выражения для анализа, что не является обязательным, просто удобно:
> certutil -csplist | sls '^Provider Name: (.*)' | %{ $_.Matches[0].Groups[1].Value }
Microsoft Base Cryptographic Provider v1.0
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider
Microsoft Base DSS Cryptographic Provider
[...snip...]
Вывод для одного ключа перечисляет имя, флаги и идентификатор контейнера ключа, последний соответствует соответствующему имени файла ввышеупомянутый каталог (конечно, мы можем видеть больше ключей от дополнительных KSP, смарт-карт, TPM и т. д.).Пример для одного провайдера (-q
заставляет некоторых провайдеров молчать, а не запрашивать действия пользователя, такие как вставка смарт-карты):
> certutil -key -q
Microsoft Strong Cryptographic Provider:
iisConfigurationKey
6de9cb26d2b98c01ec4e9e8b34824aa2_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
RSA
AT_KEYEXCHANGE
iisWasKey
76944fb33636aeddb9590521c2e8815a_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
[...snip...]
Некоторые имена ключей также являются только GUID, но если мы выполним поисктолько строки, начинающиеся как минимум с 20 шестнадцатеричных цифр, будут указаны только идентификаторы.Таким образом, все идентификаторы ключей от всех поставщиков могут быть кратко показаны с помощью:
> certutil -csplist | sls '^Provider Name: (.*)' | %{ $_.Matches[0].Groups[1].Value } |
%{ certutil -key -q -csp "$_" } | sls '^\s+[0-9a-f]{20}.+' | sort -u
597367cc37b886d7ee6c493e3befb421_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
6de9cb26d2b98c01ec4e9e8b34824aa2_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
76944fb33636aeddb9590521c2e8815a_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
ba8e1b9b5510957b3af7b811f05660de_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
d6d986f09a1ee04e24c949879fdb506c_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
f0e91f6485ac2d09485e4ec18135601e_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
Здесь на самом деле на 2 ключа больше, чем в каталоге MachineKeys (они получены из KSP, фактически, certutil -key -csp KSP
показывает их, если вам интересно).Но дело в том, что все они имеют одинаковый суффикс GUID _f7fe3b04-ef9b-4b27-827f-953c5743e2ec
.
. Аппарат был установлен производителем (точнее, ноутбуком HP).Это не похоже на другие машины, которые мы собираем или покупаем barebone, а также устанавливаем и настраиваем сами.И я иногда работаю с некоторыми конфиденциальными данными, поэтому я действительно параноик тщательно проверяю программное обеспечение, прежде чем дать машинам доступ к конфиденциальным данным.
Операционная система Windows 10, если это имеет значение, нохранилище того же типа не изменилось по сравнению с Windows 7, AFAIK, даже с введением нового API CNG в 8.0 (или 8.1?).
На всякий случай, если кто-нибудь найдет полезный фрагмент PowerShellЧтобы получить список ключей по читателю, я использовал эту команду:
> certutil -csplist | sls '^Provider Name: (.*)' | %{ $_.Matches[0].Groups[1].Value } |
%{ Write-Host -for Yellow "`n$_"; certutil -key -q -csp "$_" }