背景 我开发了一个在Linux上运行的软件,我为它分发许可证。 对于Linux安装,我使用的是系统UUID,我的许可证基于此。 为了在各种云设置上安装,我使用我的软件打包操作系统并提供给用户。用户根据我的软件中显示的UUID部署它并请求许可证。
问题: 当用户部署每个实例时,在少数云设置中,UUID对于同一物理计算机上的不同VM实例是相同的。 这会导致许可证出现问题。
解决方案: 我计划做的很简单:当OS第一次启动时调用uuidgen并生成UUID并将其存储到文件中。在下次重启之后,我将从该文件中获取它,因此该机器的UUID将是相同的。
有关上述解决方案的问题:
如果uuidgen在第一次启动时在两个不同的linux系统中生成的UUID是相同的,因为随机种子不够好,那么在这些Linux系统中生成的下一个UUID也是相同的? 即 启动时,调用uuidgen并在VM1中生成UUID1。假设在另一个VM实例VM2中调用uuidgen时,它与UUID2相同。 如果再次为VM1中的下一个UUID调用uuidgen,如果在VM2中调用它会再次相同吗?
谢谢。
答案 0 :(得分:0)
最值得研究的是,客户是否已经从已经生成了uuid的公共虚拟机映像中生成了这些虚拟机映像。拥有一个uuid的长度,你最不可能产生一个uuids colission。
顺便说一句,要求您的软件依赖存储在文件中的uuid,您的客户可以在安装软件后克隆您的VM,并通过克隆验证所有许可证。
如果要保护虚拟机上的软件许可证,则必须连接许可证服务器并执行一些公钥签名功能以验证许可证。
主要问题是来自虚拟机的两个克隆映像完全相同(硬件和软件),因此可以运行相同的软件,而不会与克隆的时间点有任何差别。