0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍一种比较流行的程序加密方式

TopSemic嵌入式 来源:TopSemic嵌入式 2023-04-21 09:07 次阅读

把程序加密,无疑是一个防小人的好办法。我们这里介绍一种比较流行的加密方式,它利用芯片里的唯一识别码,为每一个MCU单独授权,这样即使程序被读出,也没有办法在其它的MCU上运行。我们讲一下它的工作原理,以及一款可以实现加密量产,可以授权烧写次数的工具。

一种流行的加密方法

poYBAGRB4gCART1zAACRBmkPMh0524.jpg

如上图中所示,MCU中一般都有一个UDID(Unique Device IDentifier),这个唯一识别码,每一个MCU都是不一样的,烧写工具可以读出这个UDID,然后通过算法,计算出一个授权(License),烧写MCU程序(APP)时,连同这个授权码一起写入Flash。当MCU上电运行时,也读取自己的UDID,然后通过同一算法,计算出授权码,并和工具写入的授权码做对比,如果不相同就拒绝执行下面的程序。下面举个例子。

poYBAGRB4hCAACd4AACMh4K8nC8011.jpg

如图,三个MCU的UDID分别为1,3,5。通过一种算法计算出1和3的授权码分别为0和4。从1和3号读出的程序,写入5号是无法运行的。因为我们会发现,程序用5计算出的授权码,不等于0也不等于4,无法通过比对,程序无法继续运行。

那么我们能根据1和3的已知信息,反推出算法吗?可以试试看,经过一番猜测,我们发现一个算法,(UDID–1)*2 对于1号和3号MCU完全适用。我们不由得一阵兴奋!经过计算(5-1)*2=8,我们把8写入5号MCU的授权地址,然后发现程序并没有运行???

怎么回事?因为算法是猜测的。我们完全可以反推出另外一种算法:(UDID-1)*(UDID-1)。对于1和3也是适用的,但对于5,结果是16。

对于简单的数字尚且如此,而UDID一般长度有16个字节,用户再混入自己的密钥数字,用加减乘除,异或等运算计算出授权,想要逆向推测出算法还是很难的。如果想要进一步增加安全性,可以采用更高级别的加密算法。

为了增加逆向分析的难度,还可以在用户程序中综合采取一些措施。比如:不直接读取UDID和授权码,而是用两个地址运算生成读取地址;使用inline内联函数;多次校验并延时触发等。

加密算法

对称加密

加密和解密使用同一密钥。所以发送端和接收端都要对密钥严格保密。对称加密好处是运算速度快。常用的有DES,3DES,AES,以及我国的SM1。

poYBAGRB4iKAKB4OAABn-fMbAOw174.jpg

非对称加密

它的密钥分为公钥和私钥,公钥是公开的,但是从公钥无法推导出私钥。非对称加密的好处是,只需要保密私钥就行了。其缺点是消耗资源比较多,运算速度慢。常用的有RSA,ECC以及我国的SM2。

pYYBAGRB4jSAdhI8AABiTudrXzg364.jpg

反过来,我们也可以用私钥加密,然后用公钥解密,这种方式通常用来完成签名的验证。把MCU的UDID读出来,用私钥加密生成授权码,和应用程序一起写入MCU的Flash,然后MCU的应用程序就可以用公钥完成授权码的验证。采用非对称加密算法的好处是,即使算法是公开的,公钥也是公开的,别人只要没有获得私钥,就没办法为其它MCU生成授权码。

加密算法的安全性

首先想个问题,如果我们给家里装个防盗门,是越坚固的越好吗?好像没毛病。但仔细一想还真不是这样,我们大多数家里安装的,并不一定是市场上最好最贵的。

加密算法也没有绝对的安全。理论上只有一次一密,也就是采用跟明文长度一样密钥,而且只使用一次,才是绝对的安全。所以我们采用什么算法,要根据我们的实际需要。在一定时间长度内,如果破解的代价远大于所获得的价值,我们就认为是安全的。还有就是尽可能使用长一些的密钥,跟踪密码学的最新动态。

安全单片机和普通单片机

对于任何加密方式,密钥的存储是安全的关键。对于普通的单片机,现在一般在Flash区都会有保护字节,可以设置成编程后无法读出。密钥存储在里面,通过常规手段是无法读到的。但是对于非常规手段,这种安全性就不够了。

但是对于非常规手段,就无效了。比如把MCU的外壳溶解掉,然后暴露出内部的硅片,这样就可以直接观察,修改里面存储的内容。所以对于安全等级高的应用,比如金融等,也要求MCU具有更高级别的安全防范措施。这种MCU会把密钥存储在一小块儿RAM里,用电池供电。为了保证存储在RAM里的密钥不被非法读走,采取各种防范措施。比如芯片外部有探测引脚,一旦发现外部电路被破坏,马上销毁密钥。在芯片内部,用金属丝网包住关键区域,一旦被破坏,也会销毁密钥。同时这种MCU内部也会集成随机数生成,硬加密算法模块等,加速加解密的运算速度。

采用哪种单片机,也要根据实际需要来决定。

加密量产工具

创芯工坊的Power Writer,是一款挺实用的量产烧录工具。它可以通过MCU的唯一识别码,对每一个MCU生成单独的授权。加密算法有消耗资源特别少的向量矩阵加密,也有加密级别更高的ECDSA椭圆数字签名算法,还支持用户使用自己的算法。除此之外,他还能授权烧写的MCU个数,烧写MCU的UDID范围等。用户可以把程序上传到云端,客户联网在线获得授权,进行芯片烧录,也可以把程序加载进烧写器,用户采用离线烧录。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1551

    浏览量

    146699
  • AES
    AES
    +关注

    关注

    0

    文章

    97

    浏览量

    33064
  • DES
    DES
    +关注

    关注

    0

    文章

    63

    浏览量

    48032
  • ECC
    ECC
    +关注

    关注

    0

    文章

    90

    浏览量

    20376
  • MCU芯片
    +关注

    关注

    3

    文章

    222

    浏览量

    11147

原文标题:辛辛苦苦的劳动成果,如何上把锁?

文章出处:【微信号:TopSemic,微信公众号:TopSemic嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一种有效的可转换的认证加密方案

    一种有效的可转换的认证加密方案:针对般的认证加密方案存在着当签名者否认签名时,接收者不能使任何验证者证实签名者的诚实性等问题,提出了一种
    发表于 06-14 00:19

    详细介绍Flash型单片机的加密解密方法

    MC9S12DP256单片机为例,介绍Flash型单片机的加密解密方法。  BDM程序调试接口  Freescale公司的很多单片机都借用一种被称为后台调试模式(Background
    发表于 10-21 19:59

    转:熟悉AES加密

    通常对代码的加密保护有硬件加密方式和软件加密方式。AES是通常比较常用的
    发表于 07-09 17:24

    MM32 MCU加密方法

    ,内置的Flash存储区就只能通过程序的正常执行才能读出,而不能通过这两方式中的任何一种方式读出:通过调试器(JTAG或SWD)和从RAM
    发表于 11-30 17:15

    请问怎样去设计一种CPLD加密电路?

    本文介绍一种基于计算机总线的CPLD加密电路的设计方案。
    发表于 04-29 06:16

    请问怎样去设计一种FPGA加密认证系统?

    加密问题是怎样提出的?DS28E01芯片及其加密原理是什么?怎样去设计一种FPGA加密认证系统?
    发表于 04-29 06:53

    怎样去设计一种加密短消息通信系统?

    加密短消息通信系统是由哪些部分组成的?怎样去设计一种基于RTX51 TINY的加密短消息通信系统?
    发表于 06-04 07:01

    一种针对主控为FPGA 的加密方案

    为防止投入大量精力和财力开发的新技术的研发成果被复制,在开发阶段就需要采取加密保护措施。武汉瑞纳捷是家专业从事加密芯片和安全芯片研发设计的芯片公司,设计了一种针对主控为FPGA 的
    发表于 07-23 09:25

    比较流行的复位方式

    现在比较流行的复位方式是这样的:但我们都知道对于结构紧凑型硬件来说,多个电阻都是没必要的。在没有手动复位需求的场合,能不能删掉按键与R24,仅保留104电容?通过阅读stm32 pd
    发表于 08-11 08:42

    介绍蓝牙通信的另一种方式--BLE

    今天我们介绍蓝牙通信的另一种方式--BLE(Bluetooth Low Energy,蓝牙低功耗)。什么是BLE在《无线通信3:HC05/HC06经典蓝牙B...
    发表于 12-13 06:50

    介绍应用程序的加载方式

    通过前面嵌入式启动方式的学习,再来理解嵌入式应用程序的三加载方式比较容易的。般意义上,启动
    发表于 12-21 07:33

    介绍在单片机裸机环境下编写AT指令程序一种方式

    单片机裸机环境下编写AT指令程序一种方式。2.程序设计首先串口底层的收发程序不在这里详细介绍
    发表于 01-17 06:49

    怎样去使用一种异域加密的方法呢

    怎样去使用一种异域加密的方法呢?
    发表于 01-20 07:01

    介绍一种基于硬件的安全模块

    英飞凌科技开发了一种基于硬件的安全模块,通过其全新的 OPTIGA TPM 2.0 保护联网汽车与汽车制造商之间的通信,该模块是一种可信平台模块 (TPM),制造商可以在其中整合敏感的安全密钥以分配
    发表于 02-11 07:41

    介绍一种STM32数据传输方式SPI

    之前介绍了STM32数据传输的一种方式IIC,这次我将进行另外一种数据传输方式SPI。
    发表于 02-17 06:02