1 个不稳定版本
0.1.0 | 2024年6月19日 |
---|
#445 在 硬件支持
12KB
108 行
棉独特
是 Cotton 项目的一部分。
基于芯片ID实现统计上唯一的设备ID
cotton-unique crate 封装了创建每个设备的唯一标识符的功能 -- 例如用于以太网MAC地址或UPnP UUIDs。
大多数微控制器(例如STM32、RA6M5)内置了唯一的单元标识符;RP2040没有,但在这个平台上,建议使用关联的SPI闪存芯片中的唯一标识符。
但是直接使用原始芯片ID作为MAC地址不是一个好主意,有以下几个原因:它的大小不正确,它相当可预测(它不是每个芯片的96位随机数,通常编码了芯片批次号和晶圆上的晶圆位置,因此两个不同的STM32的ID可能只在一位或两位上不同,这意味着我们无法随意从96位中挑选任何46位,以免意外选择很少改变的位) — 最糟糕的是,如果将来有人使用相同的ID做其他事情,他们可能会惊讶地发现它与设备的MAC地址非常相关。
所以,要做的,是将唯一ID与一个密钥或盐值一起散列,这表明我们用它来做什么。因此,对于特定的盐值,在单个设备上是确定性和一致的,但从一个设备到另一个设备(以及从一个盐值到另一个盐值)是变化的。
例如,cotton-ssdp设备测试通过散列STM32唯一ID和盐字符串“stm32-eth”来获取MAC地址,并通过散列相同的ID和不同的盐值来获取UPnP UUIDs。
这并不能 保证 唯一性,但如果散列函数正常工作,冲突的概率涉及2^-64的因子 -- 换句话说,非常不可能。
关于这个crate背后的想法,请参阅我的博客 此处。
依赖项
~285KB