在Linux中,可以覆盖您的MAC地址。是否有任何方法可以通过用户空间中可用的处理器序列号或某些其他唯一标识符来区分两台计算机?否则,这两台机器的配置可能几乎相同-相同的CPU,相同的内存,相同的制造商等
答案 0 :(得分:0)
是否有任何方法可以通过用户空间中可用的处理器序列号或某些其他唯一标识符来区分两台计算机?
答案是否。考虑一个重要方面:内核是free software。如果它以某种方式(向用户土地输出串行ID(例如0123456789
),并且通过syscalls(2)的一部分输出),并且我知道您的应用程序在计算机上期望该ID A,我可以入侵运行在计算机B上的内核,以在相同情况下准确输出0123456789
。
换句话说,不仅答案是否定的,任何聪明的Linux用户(能够更改内核源代码中的几行代码)都可以破解并重新编译其内核,以产生与您期望的效果相同的效果。
因此,您需要放弃愚蠢的梦想或放弃针对Linux的目标。
了解Trusted Computing Base和Hardware Security Module(您可能需要一个,并为您的客户提供这样的硬件;它可能和某些smart card一样便宜)。 HSM是一些 active 硬件设备,其行为可能如下:您的应用程序发送了一些随机的12865
数字,它从HSM中获取了一些89621
数字,因此可以检查使用某种public-key cryptography来表示HSM是真正的(因为HSM中的计算与您的应用程序中的计算匹配)。
也许您想要某种方式来验证软件的可用性。您可以购买和使用一些software license server。
在实践中,在专业场合(例如,所有公司)可能不是很有用。这是有社会原因的:一家(非微型)公司X有员工。他们可以退出。然后他们可以写信给某个机构(或软件提供商)关于X的信息,不遵守软件许可证。这可能会导致某些法律诉讼(对公司而言代价高昂)或对X公司的巨额罚款,或者对X的声誉极差(例如,合格人员不会为X工作)。这样的社会原因足以使公司认真对待软件许可。因此,执行软件许可证的技术手段不是很有用(法律和社会手段通常就足够了。)
答案 1 :(得分:0)
有可能存在,但是细节可能非常针对品牌和型号。例如,我办公室里有一台戴尔笔记本电脑,在其底板上有一个序列号(在各个其他组件上也有序列号)。
运行sudo dmidecode
并查找“序列号”:
[snip]
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: Dell Inc.
Product Name: Latitude E5440
Version: 01
Serial Number: 1CWHVZ1
服务器盒通常也具有这样的序列号。我不知道布局的标准化程度。
网络接口通常还具有不那么容易更改的“永久”(老化)MAC地址。同样,在我的戴尔笔记本电脑上:
sudo ethtool -P eno1
Permanent address: ec:f4:bb:03:67:2f