如何检索 OS 安装的唯一签名?

How to retrieve a unique signature of the OS installed?

我想获取我的操作系统 + 安装硬件的足迹。我有几个连接到 MQTT 代理的 RaspberryPi。每个系统的主题应该有唯一的header:

mypi/da39a3ee5e6b4b0d3255bfef95601890afd80709/kitchen/light

我如何获得 shasum 或我的硬件 + 操作系统的等价物。

这是一种天真的方法

$ ifconfig -a eth0 | egrep -o '([0-9a-f]{2}:){5}[0-9a-f]{2}' | shasum

但是使用 MAC 地址可能太天真了。

理想情况下,如果硬件在物理上不同,我希望更改散列。在树莓派的情况下,哈希值会随着我改变我的树莓派而改变。

虽然我没有使用过一秒钟,但值得将操作系统包含在 HASH 中。如果我更新我的内核,散列应该是相同的。

How could I get a shasum or equivalent of my hardware + operating system.

你没有定义那是什么意思:

如果您在系统中添加一些 RAM、一些 SD 卡或一些 USB 设备,该哈希值是否会发生变化?

如果您用一些相同的硬件替换硬件(例如,一个 RaspberryPi 烧毁,然后用另一个 相同 SD 卡替换它),哈希值是否应该改变?还是通过类似的硬件伪装成原始硬件?

如果您(或某些对手)对您的 OS 内核进行小幅升级,或者如果您在系统中添加一些额外的包或程序,那么该哈希值是否应该改变?

如果您进行一些较小的配置(例如,更改 /etc/ 下的某些配置文件,假设某些 Linux-like 系统),该哈希是否应该更改?

请注意,在许多系统上,您可以通过一些软件技巧更改 MAC 地址(我不知道这是否适用于您的 RaspberryPi)。

所以我认为没有针对你的问题的万无一失的解决方案

(换句话说,只要有足够的努力和技巧,你总是可以伪造一些现有的系统;你可能希望它足够困难以至于不值得付出努力,但这提出了一个不同的问题;你的典型对手是和 NSA 一样强大,还是你只关心一个少年黑客?)。

顺便说一句 /proc/cpuinfo(参见 proc(5))可能会随着内核升级而改变,并且即使在硬件更改后也可以通过一些内核补丁非常简单地伪造(以保持不变)。

了解 trusted computing base