|
1、聊一聊
演员这首歌大家应该再熟悉不过了,其中印象最为深刻的歌词是:"简单点,说话的方式简单点......",说话真的是一门技术,同时也是门艺术!
今天跟大家带来的知识不算难,现在非常多MCU都有全球唯一标识码这个东西,可能大家都了解过,不过具体怎么用并没有实际设计过!下面重点对其加密方面的应用跟大家理一理。 2、stm32的标识码UID 对于目前大部分MCU都会存在一个唯一标识码供用户使用,同样stm32也是一样,通过查找对应的数据手册便可以得到该唯一标识码的具体信息。 这里以stm32F103为例,其他型号的stm32性能也可能不存在该唯一标识,具体需要根据对应的数据手册进行查阅,如果存在可能基地址稍有不同。如下图所示:
3、读取UID
对于该唯一标识ID,bug菌这里谈两点注意的: 1、唯一标识ID只是stm32里面一种ID,其实一款芯片内部还有很多其他ID,比如设备ID和其他内部组件的ID等; 2、UID一共是96位具有唯一性,而截取中间的几位不一定具有唯一性。 3、对于UID的读取非常简单,上面的手册截图也说明了,可以通过字节、半字和字来进行读取,也就是说可以用8位、16位、32位来读取。
4、UID加密简易版 所谓:"道高一尺魔高一丈",只有不断的更新加密技术以增加解密成本或许在一定程度上能够遏制不正规解密行为在,下面就先介绍一下UID的一种简易加密方案,为什么说简易呢?可以说修改部分固件实现一个跳转功能就解密了,不过对于一般的小型产品还是能够在一定程度上起到保密效果的。
5、加强版本 对于上面的加密方法其关卡点就一个位置,如果在固件空白区域安插一些跳转指令跳转到正常运行的位置,你的固件就解密了。 所以目前比较常用的是对整个固件进行完整性标识序列与UID组合进行加密的办法。
所以对于未使用的存储区域最好是都填充完,避免被解密者利用。
5、另类版本 出于关卡点过于单一的问题考虑,我们需要进行多处的关卡点处理,同样各个关卡点的复杂度也会给解密者带来困难,每一处关卡点都带有解密信息,相当于每次都会需要判断机密,从而让跳转这种办法失效。 最简单的处理办法就是定义一些宏处理,比如:
当然不仅仅只有上面的处理,我们还可以通过替换为其他变量来隐藏一些处理办法,从而达到迷惑解密着的目的。这样我们就可以把加密分布到程序的各个角落,加强了固件的安全性。 不过这样的办法如果放在访问较为频繁的位置,势必会影响系统的性能,如果所使用的芯片性能一般,可以选择部分关键关卡点处理。 好吧,所以一切安全的前提是唯一标识码UID无法被修改,否则也是徒劳,不过既然芯片都是人造的,那肯定就有办法进行解密,只是成本问题。
6、最后小结 本文到这里就结束了,对于MCU的加密和解密是一个永恒的话题,同样对于一个成熟的产品加密也是必须要考虑的技术问题,看看大家还有什么好的MCU加密办法,欢迎大家分享留言讨论! |
有看到这个图示好理解多了 识别不一致的时候,自动清除固件 这个好! |
微信公众号
手机版