我想知道存储在计算机和用户密钥容器存储中的RSA密钥容器文件的GUID后缀是什么。我无法通过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报告的密钥。我将使用Windows附带的certutil
工具获取提供程序列表,然后获取每个提供程序密钥的列表。它的输出需要一些正则表达式的魔法来解析,这不是必需的,只是方便:
> 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...]
单个键的输出列出了名称,标志和密钥容器ID,后者匹配上述目录中的相应文件名(当然,我们可以看到更多来自其他KSP,智能卡,TPM等的密钥) 。一个提供程序的示例(-q
使某些提供程序无提示失败,而不是要求用户执行操作,例如插入SmartCard):
> 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个十六进制数字开头的行,则只会列出ID。因此,所有提供商的所有密钥ID都可以简洁地显示在:
> 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
实际上这里的密钥比MachineKeys目录中的密钥多2个(它们来自KSP,实际上,certutil -key -csp KSP
显示它们,如果你想知道的话)。但事实是它们都具有相同的GUID后缀_f7fe3b04-ef9b-4b27-827f-953c5743e2ec
。
该机器由供应商安装(确切地说是HP笔记本电脑)。这与其他机器不同,我们组装或购买准系统并自行安装和配置。我有时会处理一些敏感数据,所以我确实偏执在允许机器访问敏感数据之前彻底审查软件。
操作系统是Windows 10,如果这很重要,但是相同类型的存储从Windows 7,AFAIK没有改变,即使在8.0(或8.1?)中引入了新的CNG API。
如果有人发现有用的PowerShell代码段可供提供者列出密钥,我使用了这个命令:
> certutil -csplist | sls '^Provider Name: (.*)' | %{ $_.Matches[0].Groups[1].Value } |
%{ Write-Host -for Yellow "`n$_"; certutil -key -q -csp "$_" }
答案 0 :(得分:1)
在这里找到答案:https://serverfault.com/a/642279/451491
文件命名约定为x_y,其中x是一个随机GUID,用于 唯一地标识密钥,y是在以下位置找到的计算机GUID HKLM \ SOFTWARE \ Microsoft \ Cryptography。