当前位置: 首页 > news >正文

STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计

SMEC88ST SDK开发包下载

        目前市场上很多嵌入式产品方案都是可以破解复制的,主要是因为方案主芯片不具备防破解的功能,这就导致开发者投入大量精力、财力开发的新产品一上市就被别人复制,到市场上的只能以价格竞争,最后工厂复制的产品反而价格更有优势,因为他们的开发投入几乎可以忽略不计。         所以针对这种主芯片可以被破解的产品方案,开发者需要在开发时在产品方案中使用加密芯片并设计合理的加密方案。开发者首先需要选定性价比高的加密芯片,然后再设计加密方案。

        市面上加密芯片一般有两种:一种是传统的逻辑加密芯片,可配数据与主芯片做相互认证起到简单的加密功能;另一种是智能卡内核的可编程CPU加密芯片,除了具有逻辑加密芯片的功能外,还可以将主芯片部分核心的算法、功能代码以及核心数据放入加密芯片,开发者设计的加密方案更加灵活、安全、可靠。

        本方案选用具有智能卡32位内核的加密芯片SMEC88ST来举例实现使用STM32作为主芯片的产品的加密方案。SMEC88ST提供5K Bytes SRAM、128K Bytes CODE,32K Bytes Data,用户可根据自己的需要来编程设计SEMC88ST与STM32配合的加密方案。下表为SEMC88ST与STM32配的的各种加密功能说明,具体可参见SMEC88ST SDK开发包。

注:

① STM32与SMEC88ST间的I2C协议指令接口规则开发者自定义。

② 上述加解密密钥均为对称DES或3DES密钥,每一对密钥开发者须在开发时分别在STM32和SMEC88ST上同时存储相同的值。

③ 上述随机数都是8字节随机数,加解密算法采用DES或3DES。客户也可以根据自身需要设计或使用其他加解密算法。

④ SMEC88ST随机数发生器产生的随机数是真随机数,这样可以保证关键数据在通讯时每次都是随机数参与的,每次通讯的数据密文都是不一样的,可有效防止破解者在I2C通道上的数据监听分析。

⑤ DES或3DES加解密数据块必须为8字节整数倍,加密原始数据不是8的整数倍的按开发者自己定义补足8的整数倍,对于密文读写数据建议按LV结构补,比如:

原始数据为1122334455,补数后的数据为0511223344558000;

原始数据为11223344556677,补数后的数据为0711223344556677

原始数据为1122334455667788,补数后的数据为08112233445566778880000000000000

STM32配合SMEC88ST加密方案编程时增加加密方案可靠度小技巧:

① 访问STM32 ID和随机数因子时,尽量不要使用常量直接访问目的地址,可以使用一个假地址再通过变量异或、加减或其他算法来得到目的地址,以防止破解者轻易找到这个地址来窜改、固定ID和随机数。程序里确保每次产生的随机数只能使用一次,使用后随机数失效,下次要使用随机数必须重新产生。程序对收到的外设发来的随机数做缓存,如果随机数有重复,做一些特殊处理,防反复跟踪解析。

② STM32程序秘钥值尽量不要连续存放在一个常量或变量数组里,尽量分开存放,使用前通过一些算法计算再组成正确的秘钥值。

③ 主MCU程序做完整性校验,完整性校验绑定UID,防止STM32程序被破解者破解得到后通过窜改来跟踪、分析、破解加密方案。

④ 设计加密方案时尽量不要使用判断正确就继续执行错误就报错这种简单的判断逻辑,可以设计成错误后继续执行,只是在后续执行过程中在不特定的地方出不特定的错误。

⑤ 加密方案里使用的一些校验算法、加解密算法等,尽量不是用标准算法,可以使用这些算法的变异算法。

⑥使用可编程的加密芯片,把主芯片的部分功能代码放入加密芯片里运行,这样才能达到最高安全级别的方案保护,千万不要低估黑客的反汇编能力! (可参考笔者另一篇文章 《浅谈加密芯片的一种破解方法和对应加密方案改进设计》)

http://www.lryc.cn/news/512597.html

相关文章:

  • QML学习(五) 做出第一个简单的应用程序
  • 深入解析Android Framework中的android.location包:架构设计、设计模式与系统定制
  • 【C++11】类型分类、引用折叠、完美转发
  • mongodb(6.0.15)安装注意事项,重装系统后数据恢复
  • union的实际使用
  • EKF 自动匹配维度 MATLAB代码
  • Oracle复合索引规则指南
  • JS - Array Api
  • 【JS】for-in 和 for-of遍历对象的区别
  • 【每日学点鸿蒙知识】ets匿名类、获取控件坐标、Web显示iframe标签、软键盘导致上移、改变Text的背景色
  • 深度学习blog- 数学基础(全是数学)
  • 最后100米配送
  • Linux的进程替换以及基础IO
  • 《计算机网络A》单选题-复习题库
  • 闲谭Scala(2)--安装与环境配置
  • Python基于卷积神经网络的车牌识别系统开发与实现
  • Spring Boot集成Netty创建一个TCP服务器,接收16进制数据(自定义解码器和编码器)
  • Python 中的 with open:文件操作的最佳实践
  • 哪些框架、软件、中间件使用了netty? 哪些中间件、软件底层使用了epoll?
  • AI 智能助手对话系统
  • 2024年秋词法分析作业(满分25分)
  • Docker镜像瘦身:从1.43G到22.4MB
  • 前端加解密对抗encrypt-labs
  • Android Notification 问题:Invalid notification (no valid small icon)
  • Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例
  • Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy
  • ES中查询中参数的解析
  • 学习笔记:使用 pandas 和 Seaborn 绘制柱状图
  • 【每日学点鸿蒙知识】placement设置top、组件携带自定义参数、主动隐藏输入框、Web设置字体、对话框设置全屏宽
  • 后端开发-Maven