Windows中密钥容器存储文件的GUID后缀是什么?

问题描述 投票:2回答:1

我想知道存储在机器和用户密钥容器存储中的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 "$_" }
windows security cryptoapi cng
1个回答
1
投票

在这里找到答案:https://serverfault.com/a/642279/451491

文件命名约定是x_y,其中x是唯一标识密钥的随机GUID,y是在HKLM \ SOFTWARE \ Microsoft \ Cryptography中找到的计算机GUID。

© www.soinside.com 2019 - 2024. All rights reserved.