【问题标题】:Stable Hardware Hash稳定的硬件哈希
【发布时间】:2012-08-28 05:09:55
【问题描述】:

我想生成一个硬件哈希,用于生成一个密钥来加密文件,这样它就不能与其他计算机交换。这不是许可证问题,它是从我们的在线数据库中存储一些数据的备份副本,以便可以离线使用该应用程序(但其中包含的数据相当安全,不会被窥探)。以前,我抓取了(真实)网络适配器的 MAC 地址,如下所示:

ManagementClass mng = new ManagementClass("Win32_NetworkAdapter");
ManagementObjectCollection apts = mng.GetInstances();
IEnumerable<string> macs = from ManagementObject mo in apts
                           where mo["MacAddress"] != null && mo["NetConnectionStatus"] != null
                           select mo["MacAddress"].ToString();

这工作得相当好,除了现在我发现我有一台新电脑,当我关闭无线时,我得到两个 MAC 地址(一个用于有线网卡,一个用于无线),当我打开无线时,我得到了三个(前两个,加上一个蓝牙!),我没有看到任何非常明显的方法来过滤掉蓝牙一个(没有在 NetConnectionID 中搜索“蓝牙”)。

现在我不需要超级稳定的哈希了。如果哈希不匹配,则应用程序无法解码加密数据,如果在网络上,它将下载一个新副本,所以这没什么大不了的(如果你不在网络上,它会只是告诉你它现在不可用)。但如果打开和关闭无线就足以改变我的哈希值,那么它显然不够稳定!

所以我的问题:

1) 有没有更好的方法来判断其中一个网络适配器可能会突然消失,以便我可以将其从原始哈希中排除?

2) 适配器的顺序是否保证相同?列出的第一个适配器总是有线网卡吗?如果是这样的话,也许我会限制它只使用第一个适配器。

3) 我可以使用更好、更稳定的哈希吗?还是相当稳定的组合?

注意:我也已经将 Environment.MachineName 中的机器名称添加到我的哈希中。

【问题讨论】:

  • 生成一个随机数并将其存储在一个文件中。
  • 那个mac地址没有任何实际意义,它所做的只是读取注册表。不稳定是烦人的,安全漏洞是不可接受的。使用公钥/私钥或其他值得实际编码的东西。
  • @HansPassant:但是移动这两个文件将允许它在不同的计算机上工作,这是我试图阻止的情况。
  • 不同的计算机,该计算机上的不同用户?每台机器,每用户,无论是否为管理员,mac 欺骗。持续沟通,一劳永逸。在您尝试不这样做的时间里,您本可以查找如何正确执行此操作。
  • @TonyHopkinson:它符合我的要求。我对你所做的特定场景了解得更多,所以你要不要下马,或者给我一些有用的指导,而不是仅仅告诉我?

标签: c# hash wmi hardware


【解决方案1】:

我不知道 1 或 2 的答案,但这里有一个潜在的解决方法:

您可以通过结合机器名称、处理器ID 和主板ID 创建更稳定的哈希。如果您只是将其用于本地识别,那应该足够强大。 This CodePlex article 有一个很好的受支持硬件密钥列表。如果您有任何问题,请告诉我。

【讨论】:

  • 谢谢克里斯。我结合了其中的一些来产生一个相当稳定的哈希。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
相关资源
最近更新 更多