问题:我需要为每个网络客户端设计一个唯一的标识符,要求:
- 该标识符应在客户端软件安装到目标计算机后保留,并且在同一计算机和操作系统上重新安装软件时也应保持不变。
- 除更换主板外,硬件配置的大多数修改都不应该改变该标识符。
- 当已安装有客户端软件的硬盘被克隆到具有相同硬件配置(或尽可能相似)的另一台计算机时,客户端软件应意识到这种变化。
一点解释和背景:
这个问题基本上是一个古老的问题,也触及了软件拷贝保护的主题,因为其中提到了一些用于该领域的机制。此时我应该明确,我不是在寻找拷贝保护方案。请继续往下看。:)
我正在开发一款客户端服务器软件,该软件应该在本地网络中运行。我需要解决的一个问题是识别网络中的每个唯一客户端(不是很难),以便我可以对每个特定客户端应用某些属性,并在特定客户端的部署寿命期间保留和强制执行这些属性。
在我寻找解决方案时,我意识到以下内容:
- Windows激活系统使用某种非常敏感的硬件指纹机制,
- 磁盘映像软件复制所有卷ID(与格式化时每个分区相关联),以及在安装过程中生成的自定义唯一ID,在首次运行时或以其他方式严格存储在注册表或硬盘上,因此很容易将两者混淆。
对于这种问题,明显的选择就是找出BIOS标识符(虽然不确定是否通过相同的主板型号是唯一的),因为这是我唯一可以依赖的东西,它不会被复制、克隆,并且不能被更改(至少不能使用某些用户空间程序)。其他方案要么不可靠(如MAC克隆),要么要求太高(太敏感于配置更改)。
我想要问的一个子问题是,从架构层面来看,我是否做得正确?也许有更好的工具可以完成我需要完成的任务...
我考虑过另一种方法,类似于握手机制,其中服务器维护一个内部查找表以连接客户端ID(可以完全基于软件且在任何给定时刻都不唯一),如果在连接时提供了重复的ID,则告诉客户端在握手期间提供不同的ID。然而,这种方法不能很好地满足将属性与特定客户端绑定的要求。