Encrypted bootloader (程序BIN文件加密及在线升级)

发布者:psi33最新更新时间:2020-09-09 来源: eefocus关键字:Encrypted  bootloader  程序BIN文件  加密  在线升级 手机看文章 扫描二维码
随时随地手机看文章

  在上一个博客随笔,我介绍了为PIC16,PIC18, PIC24/dsPIC, PIC32的学习板或最小系统板做的Xmodem bootloader。今天给大家介绍在我的Xmodem bootloader 的基础上开发的Encrypted bootloader。今年的国庆节,我哪都没去,就宅在家里把Encrypted bootloader完成。虽然我叫它Encrypted bootloader, 实际上加密(encrypted)的是应用程序BIN文件,加密过的BIN文件传送给单片机,单片机的boot程序先(decrypting)解密然后烧写数据到单片机ROM的对应的地址上。所以整个Encrypted bootloader工程分为两部分,一部分是PC端的工程,完成将Hex文件转换为BIN文件, 然后将BIN文件加密生成.ecd文件(采用XTEA的加密方式),最后作为Xmodem的发送端将.ecd文件按照XMODEM协议发送到单片机;另一部分是单片机端的工程(Encrypted boot),做为Xmodem接收端接收从PC端发送过来加密过的数据,解密并完成烧写。


  XTEA

  XTEA (Extended Tiny Encryption Algorihtm)是TEA的一个变种版本。XTEA采用对称加密,将明文分成多个等长的组,并用相同的密码算法和密钥对每组分别进行加密和解密。密钥长度为128位,加密块为64位。XTEA算法是David Wheeler and Roger Needham于1997年发布的,并附带有C语言的实现源代码。


  在我的Encrypted bootloader工程里面,XTEA是用C#通过扩展.NET SymmetricAlgorithm Class实现的,有用户交互界面,并支持一键式随机生成加密密钥(不过要记住哦,因为解密需要同样的密钥)。下面贴上图片介绍下加密过程。

#include


/* take 64 bits of data in v[0] and v[1] and 128 bits of key[0] - key[3] */


void encipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {

    unsigned int i;

    uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;

    for (i=0; i < num_rounds; i++) {

        v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);

        sum += delta;

        v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);

    }

    v[0]=v0; v[1]=v1;

}


void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {

    unsigned int i;

    uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;

    for (i=0; i < num_rounds; i++) {

        v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);

        sum -= delta;

        v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);

    }

    v[0]=v0; v[1]=v1;

}


  加密过程

  1. 用MPLAB X v3.30生成的PIC hex文件。

  2. 用C#写的工具将Hex转换为Bin,

  

  转换成BIN后再打开是如下。

  没错,Bin直接打开,是乱码的,就像我们打开.exe文件那样。Bin文件虽然不可视,但是如果直接把Bin文件发给代工厂家,或协作商,还是不安全的。它是可以通过其他工具解读出里面的内容的,并可以直接使用。所以需要加密。下面是用C#写的加密工具界面。

  这样,应用程序的BIN文件加密后,就很安全了,你可以发给供应商也可以发给客户了,没有密钥,是很难解密出里面的内容的,没有解密,是不能直接使用的。


     Bin文件加密后,通过XMODEM SEND发送给单片机,单片机需要预装带XTEA decrypting(解密)功能的Xmodem bootloader.


     Encrypted Boot

     Encrypted Boot是运行在单片机的小程序,首先它是XMODEM的接收端,接收加密过的数据,然后如同上面所贴代码中decipher()那样解密数据,所用密钥必须是加密时所用的密钥。最后将解密后的数据烧写到单片机的ROM指定的位置中去。这样就实现了可靠又安全地应用程序在线升级。

关键字:Encrypted  bootloader  程序BIN文件  加密  在线升级 引用地址:Encrypted bootloader (程序BIN文件加密及在线升级)

上一篇:PIC16F193X单片机开发环境搭建
下一篇:【c#】PIC单片机的编程烧写功能

推荐阅读最新更新时间:2024-10-30 09:19

ARM裸机开发bootloader—点亮LED灯
1、编写LED驱动的流程 a、原理图分析 b、芯片手册 c、思维导图 d、编写代码 2、为什么要点亮led 在嵌入式软件(bootloader、kernel)开发初期,由于串口等硬件尚未进行初始化,所以可以用来调试的手段很有限。这时通常运用点亮led作为调试的重要手段。也就是说不断改动led点亮程序的位置,来查看那段代码出现了问题,然后进行针对性的修改。 下面我用6410为例进行点亮led的介绍,其他的如2440和210流程相似。 a、原理图分析 从led的原理图我们可以看到,nLED_*低电平有效,也就是对应的s3c6410GPK4-7低电平,这个时候要引出一个概念:GPIO 什么是GPIO GP
[单片机]
ARM裸机开发<font color='red'>bootloader</font>—点亮LED灯
【飞思卡尔 MC9S12】BootLoader 上位机
本篇讲述BootLoader上位机开发。 源码地址:https://download.csdn.net/download/u010875635/11692122 此上位机采用WPF框架,C#语言开发,支持周立功的CAN设备和ValueCAN。 由于手头上暂时没有硬件,无法实际演示,大家先凑合看示例图。 注意,有很多人操作误区在于,将S19文件选择成了Bootloader,这里应该选择app,就是你自己的应用程序。 Bootloader与App分别占用2个非分页区。 Bootloader: 0xC000-0xFFFF(实际到0xF7FF,保留一个sector给vector table) Applicati
[单片机]
【飞思卡尔 MC9S12】<font color='red'>BootLoader</font> 上位机
B-1.19 协议分析--STM8使用自带的bootloader
1,首先确认你使用的STM8有没有自带的bootloader。参考下表: 2,STM8空器件可以直接使用自带的bootloader。 3,STM8在使用SWIM烧录后,要想继续使用自带的bootloader,必须设置可选字节为0x55AA。如下图: 设置这两个字节的方法,可以使用ST Visual Programmer修改,如下图: 不过这个软件显示只能修改487Eh为0x55,487Fh没更改。官方提供的软件,很奇怪。所以,我采用下一种方法。 在程序中设定,然后用SWIM下载一次,一次就够了。使用库函数如下: /* Define FLASH programming time / FLASH_SetProgrammingTi
[单片机]
B-1.19 协议分析--STM8使用自带的<font color='red'>bootloader</font>
加密货币将成为绘图芯片下一个竞技场
自2013年推出兼具能源效率和绘图性能的Haswell架构芯片以来,英特尔(Intel)在绘图芯片市场的市占率便一路攀升至60%以上,另外两家大厂NVIDIA与超微(AMD)则不到20%。不过后两者在2016年的PC绘图芯片市场都颇有斩获,迫使英特尔不得不采取降价策略确保领先优势。 根据Seeking Alpha报导,NVIDIA主要提供电脑游戏、虚拟实境、云端深度学习和自驾车等尖端应用使用的芯片,全球规模最大的几家云端服务业者都采用NVIDIA的芯片。这个规模达1,210亿美元的云端服务市场拥有相当高的利润,预计2015~2020年期间,各企业投资在云端服务和设备的金额将高出其他IT费用7倍以上,因此年复合成长率将达到21.5%
[手机便携]
stm32系统存储器中自举程序和flash中bootloader的区别
stm32的系统存储器中烧写了ST的自举程序并被锁死,防止用户擦写。此自举程序用于在应用编程,例如正点原子的usb转串口硬件和flymcu软件,通过它们就可以将程序烧写至flash。 而大多数人说的bootloader是指自己编写的bootloader程序并被烧写至flash的起始位置(stm32为0x8000000),通过此程序更新app程序。
[单片机]
系统上电后 bootloader的执行流程及 ARM Linux的启动过程分析
1. 引 言 Linux 最初是由瑞典赫尔辛基大学的学生 Linus Torvalds在1991 年开发出来的,之后在 GNU的支持下,Linux 获得了巨大的发展。虽然 Linux 在桌面 PC 机上的普及程度远不及微软的 Windows 操作系统,但它的发展速度之快、用户数量的日益增多,也是微软所不能轻视的。而近些年来 Linux 在嵌入式领域的迅猛发展,更是给 Linux 注入了新的活力。 一个嵌入式 Linux 系统从软件角度看可以分为四个部分 :引导加载程序(bootloader), Linux 内核,文件系统,应用程序。 其中 bootloader是系统启动或复位以后执行的第一段代码,它主要用来初始
[单片机]
基于GPRS的嵌入式系统软件的远程在线升级
随着电子技术、计算机技术和通信技术的迅猛发展,嵌入式系统已经广泛应用于工业、军事、通信、信息家电等领域,但是面对新技术的不断涌现和对系统功能、性能以及规模要求的不断提高,开发者必须能够针对客户的需求及时对系统进行升级或维护,以延长系统使用周期,改善系统性能,增强系统适应性。 传统的嵌入式系统升级方式通常由维护人员到达设备现场,开箱重写或者更换FLASH存储部件,当设备数目庞大并且分布范围广泛时,这种升级维护方式的工作量将非常大,而且耗费的时间长、成本高。近年来通过以太网和在FLASH上建立TFFS文件系统的方法,能很好地解决批量升级的问题。但对于野外偏远地区或海上等有线网络无法到达的地方,此方法也难以实现。 在此提出基于G
[模拟电子]
基于GPRS的嵌入式系统软件的远程<font color='red'>在线升级</font>
基于RFID的e-Pedigree应用于抵制假药
     电子行业一直寄望于采用射频识别(RFID)技术来抵制药品仿造。但势力强大的制药业游说团不断煽动的相关法律争论以及美国联邦政府的一再拖延,都开始让人们担心这项技术可能并不一定会用于追踪供应链内的药品流动。   尽管假冒药品不断造成危害,且其传播比例达到了与流行疾病相当的水平,但RFID无法付诸实用的可能性却隐隐迫近。治疗艾滋病(AIDS)和疟疾的假药每年在全球害死成千上万的病人,甚至有人估计这一数字应该达到数以十万计。   虽然这些假药受害者很少会发生在美国国内,但美国国内也充斥着各种假药。冒牌的万艾可(Viagra,俗称“伟哥”)或类似品牌药品在国际互联网上未经监管地贩卖,这类药品如果与用于医治咽喉疼痛的硝酸盐一起服
[医疗电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved