问题:我必须为每个联网客户端提供唯一的 ID,例如:
- 一旦客户端软件安装在目标计算机上,它(ID)应该持续存在,并且如果在同一台计算机和相同的操作系统安装上重新安装软件,它应该继续存在,
- 如果以大多数方式修改硬件配置(除了更改主板),它不应该改变
- 当安装了客户端软件的硬盘驱动器被克隆到另一台具有相同硬件配置(或尽可能相似)的计算机时,客户端软件应该知道该更改。
一些解释和一些背景故事:
这个问题基本上是一个古老的问题,也涉及软件复制保护的主题,因为这里提到了该领域使用的一些机制。我现在应该明确的是,我并不是在寻找复制保护方案。请继续阅读。 :)
我正在开发一个应该在本地网络中工作的客户端服务器软件。我必须解决的问题之一是识别网络中的每个唯一客户端(不是什么大问题),以便我可以将某些属性应用于每个特定客户端,在特定的部署生命周期内保留和强制执行这些属性客户。
当我寻找解决方案时,我意识到以下几点:
- Windows激活系统使用某种对硬件修改极其敏感的重型指纹识别机制,
- 磁盘映像软件沿所有卷 ID(格式化时绑定到每个分区)以及安装过程中、首次运行期间或以任何其他方式自定义、唯一生成的 ID 进行复制,其本质上是严格的软件,并存储在注册表或位于硬盘驱动器上,因此很容易混淆两者。
解决此类问题的明显选择是找出 BIOS 标识符(不过,不能 100% 确定这在相同的主板型号中是否是唯一的),因为这是我唯一可以依赖的不重复、通过克隆传输的东西,并且无法更改(至少不能通过使用某些用户空间程序)。其他一切都会失败,因为要么不可靠(MAC 克隆,有人吗?),要么要求太高(对配置更改太敏感)。
我想问的子问题是,我在架构方面做得正确吗?也许有一个更好的工具来完成我必须完成的任务......
我想到的另一种方法类似于握手机制,其中服务器维护已连接客户端 ID 的内部查找表(甚至可以完全基于软件并且在任何给定时刻都不是唯一的),并告诉客户端如果连接时提供了重复的 ID,则在握手期间提供不同的 ID。不幸的是,这种方法并不能很好地满足在生命周期内将属性与特定客户端绑定的要求之一。
在我看来,你应该构建符合你的要求的唯一ID。该 ID 可以构造为hash(如 MD5、SHA1 或 SHA512)来自对您重要的信息(有关软件和硬件组件的一些信息)。
如果您使用私钥签署此类哈希并且您的软件在启动过程中进行验证,则可以使您的解决方案更加安全,该密钥(签名哈希值) 已签名(只有公钥必须与您的软件一起安装)。人们可以通过不同的在线服务来扩展这种解决方案,但企业客户可能会发现在线服务不太好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)