不知道各位有没有注意到,某些大厂已经不用顺次分配的产品序列号了。取而代之的,则是随机分配的序列号。其实顺次分配的序列号会泄露不少你不想编码进去的信息给竞争对手,也方便了黑客拖技术支持数据库。
竞争对手可以通过间隔一段时间,从公开市场上购买两件标有顺次序列号的产品来估算你的市场占有率。两件产品序列号的差数大致对应了这一段时间内的销量,进而可以测算出你的市场占有率,给对手调整营销策略的重要信息。黑客可以通过观察序列号编码规则,推算出一个可以产生有效序列号的算号器。顺次编号的序列号通过这个算号器可以做到几乎 100% 算出实际设备的序列号,进而可以进攻你的技术支持或固件更新服务。随机序列号可以大幅降低黑客算出实际设备序列号的概率。
使用随机序列号有一定的额外成本:产品序列号需要记录在数据库中,而不能简单的用数学算法推算。
我有两种实现随机序列号的办法可以供您参考。其一是利用单片机厂商预先烧录的芯片序列号,取其 SHA256 散列值(SHA1、MD5 均已被攻破,不建议使用)作为随机序列号种子,再通过算法加上生产日期、型号、校验位等信息作为序列号,使用传统数据库搜索认证。第二种适合于片上有随机数生成器,特别是需要联网的的单片机,出厂测试时芯片内生成一对 ECDSA 密钥,私钥存于芯片内,公钥由保存在数据库中,验证时进行一次 TLS 客户密钥认证即可。 |