最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

读卡器的应用程序加密保护方法

IT圈 admin 27浏览 0评论

2024年4月27日发(作者:郗迎天)

(19)中华人民共和国国家知识产权局

(12)发明专利说明书

(21)申请号 CN2.6

(22)申请日 2013.06.13

(71)申请人 广东岭南通股份有限公司

地址 510110 广东省广州市越秀区沿江中路298号中区29楼全层

(72)发明人 谢振东 刘强 何建兵 方晓洪

(74)专利代理机构 广州市越秀区哲力专利商标事务所(普通合伙)

代理人 汤喜友

(51)

(10)申请公布号 CN 103366103 A

(43)申请公布日 2013.10.23

权利要求说明书 说明书 幅图

(54)发明名称

读卡器的应用程序加密保护方法

(57)摘要

法律状态

法律状态公告日

法律状态信息

法律状态

权 利 要 求 说 明 书

1.读卡器的应用程序加密保护方法,其特征在于,包括以下步骤:

初始化读卡器步骤,其包括以下子步骤:

1a、上位机向初始化的读卡器的FLASH存储器写入应用程序;

1b、应用程序根据单片机的芯片唯一标识号并利用算法生成随机数,应用程序根据

单片机的芯片唯一标识号和所述随机数并利用算法生成验证码Cc,并将验证码Cc

和随机数存储于FLASH存储器中;

1c、应用程序根据所述随机数并利用算法生成验证码Ca,FLASH存储器中的启动

引导程序根据所述随机数并利用算法生成验证码Cb,,将验证码Ca和验证码Cb

存储于FLASH存储器中;

初始化后的读卡器的应用程序验证步骤,其包括以下子步骤:

2a、初始化后的读卡器上电启动;

2b、应用程序加载验证码Cc,读取FLASH存储器中的随机数和单片机的芯片唯一

标识号并利用算法生成验证码Cc’,判断验证码Cc’是否等于验证码Cc,若否,则

执行步骤2c,若是,则执行步骤2d;

2c、擦除应用程序,并重启返回初始化读卡器步骤;

2d、启动引导程序加载验证码Ca,读取FLASH存储器中的随机数并利用算法生成

验证码Ca’,判断验证码Ca’是否等于验证码Ca,若否,则执行步骤2c,若是,则

执行步骤2e;

2e、应用程序加载验证码Cb,读取FLASH存储器中的随机数并利用算法生成验证

码Cb’,判断验证码Cb’是否等于验证码Cb,若否,则执行步骤2c,若是,则执

行步骤2f;

2f、运行应用程序。

2.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,步骤2e与

步骤2f之间还有如下步骤:

应用程序加载验证码Ca,读取FLASH存储器中的随机数并利用算法生成验证码

Ca’,判断验证码Ca’是否等于验证码Ca,若否,则用验证码Ca’替换验证码Ca,

然后才执行步骤2f,若是,则直接执行步骤2f。

3.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,还包括:

初始化后的读卡器的应用程序升级步骤,其包括以下子步骤:

3a、初始化后的读卡器接收上位机的升级指令;

3b、上位机向初始化后的读卡器的FLASH存储器中的应用程序进行更新;

3c、更新后的应用程序生成新的随机数和验证码Cc,并对FLASH存储器中的随机

数和验证码Cc进行更新;

3d、更新后的应用程序对FLASH存储器中的验证码Ca进行更新,启动引导程序

对FLASH存储器中的验证码Cb进行更新。

4.如权利要求3所述的读卡器的应用程序加密保护方法,其特征在于,步骤3a与

步骤3b之间还有如下步骤:上位机向初始化后的读卡器发送认证数据,读卡器对

认证数据进行认证,认证通过后才进行步骤3b,认证不通过则退出。

5.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,验证码Ca

和验证码Ca’的生成过程如下:

从随机数中获取偏移地址为0开始的32字节的数据R1;

用数据R1的前16字节和后16字节进行分组加密算法得到16字节的密文R2;

用密钥Key对密文R2进行分组加密算法得到16字节的密文R3,所述密文R3即

为验证码Ca或验证码Ca’;

其中,密钥Key固化于FLASH存储器中。

6.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,验证码Cb

和验证码Cb’的生成过程如下:

从随机数中获取偏移地址为32开始的32字节的数据K1;

用数据K1的前16字节和后16字节进行分组加密算法得到16字节的密文K2;

用密钥Key对密文K2进行分组加密算法得到16字节的密文K3,所述密文K3即

为验证码Cb或验证码Cb’;

其中,密钥Key固化于FLASH存储器中。

7.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,验证码Cc

和验证码Cc’的生成过程如下:

从随机数中获取偏移地址为64开始的32字节的数据L1;

读取单片机的芯片唯一标识号CID,并用数据L1的前4字节进行末位填充算法,

得到数据L2;

用数据L1的前16字节和后16字节进行分组加密算法得到16字节的密文L3;

用密文L3对数据L2进行分组加密算法得到16字节的密文L4;

用密钥Key对密文L4进行分组加密算法得到16字节的密文L5,所述密文L5即

为验证码Cc或验证码Cc’;

其中,密钥Key固化于FLASH存储器中。

8.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,随机数的生

成过程如下:

读取芯片唯一标识号;

利用单片机的自带函数选取芯片唯一标识号中的12个字节的数据A1;

利用单片机的自带函数在数据A1中进行6次选取,得到272个字节的数据A2;

截取数据A2前面的256个字节的数据得到随机数。

9.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,单片机的自

带函数为srand函数或rand函数。

10.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,单片机的

芯片唯一标识号为96bit的唯一只读序列号。

说 明 书

技术领域

本发明涉及软件加密及保护技术,具体涉及读卡器的应用程序加密保护方法。

背景技术

随着电子技术的发展,IC卡在公交卡、银行卡、电子标签、工作证等方面得到广

泛应用。

目前的读卡器由单片机、天线、RFID模块、外部FLASH存储器和加密芯片构成,

为了便于说明,将单片机的内部FLASH存储器与外部FLASH存储器统称为

FLASH存储器。读卡器在出厂时,由制造商将应用程序(App,Application)烧录

至FLASH存储器中。

读卡器是用于读取IC卡数据的设备,利用读卡器内置的应用程序可对IC卡内的电

子钱包进行核减或充值,因此,必须对应用程序进行加密,防止不法分子对应用程

序进行非法复制及修改。然而,目前的加密方法是通过设置加密芯片来完成,这样

就增加了设备的成本,而且也不利于嵌入式设备的开发。

发明内容

本发明的目的在于提出一种读卡器的应用程序加密保护方法,其采用软加密的方式,

解决设备成本高的问题。

为了达到上述目的,本发明所采用的技术方案如下:

读卡器的应用程序加密保护方法,其包括以下步骤:

(1) 初始化读卡器步骤,其包括以下子步骤:

1a、上位机向初始化的读卡器的FLASH存储器写入应用程序;

1b、应用程序根据单片机的芯片唯一标识号并利用算法生成随机数,应用程序根据

单片机的芯片唯一标识号和所述随机数并利用算法生成验证码Cc,并将验证码Cc

和随机数存储于FLASH存储器中;

1c、应用程序根据所述随机数并利用算法生成验证码Ca,FLASH存储器中的启动

引导程序根据所述随机数并利用算法生成验证码Cb,,将验证码Ca和验证码Cb

存储于FLASH存储器中;

(2) 初始化后的读卡器的应用程序验证步骤,其包括以下子步骤:

2a、初始化后的读卡器上电启动;

2b、应用程序加载验证码Cc,读取FLASH存储器中的随机数和单片机的芯片唯一

标识号并利用算法生成验证码Cc’,判断验证码Cc’是否等于验证码Cc,若否,则

执行步骤2c,若是,则执行步骤2d;

2c、擦除应用程序,并重启返回初始化读卡器步骤;

2d、启动引导程序加载验证码Ca,读取FLASH存储器中的随机数并利用算法生成

验证码Ca’,判断验证码Ca’是否等于验证码Ca,若否,则执行步骤2c,若是,则

执行步骤2e;

2e、应用程序加载验证码Cb,读取FLASH存储器中的随机数并利用算法生成验证

码Cb’,判断验证码Cb’是否等于验证码Cb,若否,则执行步骤2c,若是,则执

行步骤2f;

2f、运行应用程序。

优选的,步骤2e与步骤2f之间还有如下步骤:

应用程序加载验证码Ca,读取FLASH存储器中的随机数并利用算法生成验证码

Ca’,判断验证码Ca’是否等于验证码Ca,若否,则用验证码Ca’替换验证码Ca,

然后才执行步骤2f,若是,则直接执行步骤2f。

优选的,该应用程序加密保护方法还包括:

(3) 初始化后的读卡器的应用程序升级步骤,其包括以下子步骤:

3a、初始化后的读卡器接收上位机的升级指令;

3b、上位机向初始化后的读卡器的FLASH存储器中的应用程序进行更新;

3c、更新后的应用程序生成新的随机数和验证码Cc,并对FLASH存储器中的随机

数和验证码Cc进行更新;

3d、更新后的应用程序对FLASH存储器中的验证码Ca进行更新,启动引导程序

对FLASH存储器中的验证码Cb进行更新。进一步优选的,步骤3a与步骤3b之

间还有如下步骤:上位机向初始化后的读卡器发送认证数据,读卡器对认证数据进

行认证,认证通过后才进行步骤3b,认证不通过则退出。

优选的,验证码Ca和验证码Ca’的生成过程如下:

从随机数中获取偏移地址为0开始的32字节的数据R1;

用数据R1的前16字节和后16字节进行分组加密算法得到16字节的密文R2;

用密钥Key对密文R2进行分组加密算法得到16字节的密文R3,所述密文R3即

为验证码Ca或验证码Ca’。

优选的,验证码Cb和验证码Cb’的生成过程如下:

从随机数中获取偏移地址为32开始的32字节的数据K1;

用数据K1的前16字节和后16字节进行分组加密算法得到16字节的密文K2;

用密钥Key对密文K2进行分组加密算法得到16字节的密文K3,所述密文K3即

为验证码Cb或验证码Cb’。

优选的,验证码Cc和验证码Cc’的生成过程如下:

从随机数中获取偏移地址为64开始的32字节的数据L1;

读取单片机的芯片唯一标识号CID,并用数据L1的前4字节进行末位填充算法,

得到数据L2;

用数据L1的前16字节和后16字节进行分组加密算法得到16字节的密文L3;

用密文L3对数据L2进行分组加密算法得到16字节的密文L4;

用密钥Key对密文L4进行分组加密算法得到16字节的密文L5,所述密文L5即

为验证码Cc或验证码Cc’;

其中,密钥Key固化于FLASH存储器中。

优选的,随机数的生成过程如下:

读取芯片唯一标识号;

利用单片机的自带函数选取芯片唯一标识号中的12个字节的数据A1;

利用单片机的自带函数在数据A1中进行6次选取,得到272个字节的数据A2;

截取数据A2前面的256个字节的数据得到随机数。

其中,单片机的自带函数为srand函数或rand函数。单片机的芯片唯一标识号为

96bit的唯一只读序列号。

本发明具有如下有益效果:

1、 App对Bootloader的验证,用于验证bootloader的合法性,验证通过则执

行App,否则自毁App,可以防止非法获取App用于其他非法的试验或生产;

2、 App对单片机的芯片唯一标识号CID的验证,用于绑定App与对应的芯

片,即使非法拷贝芯片内容到另一芯片上,App也无法正常运行;

3、 Bootloader对App的验证,用于验证App的合法性,防止下载和升级非法

App。

附图说明

图1为本发明较佳实施例的FLASH存储器的逻辑分区示意图;

图2为本发明较佳实施例的流程图;

图3为图2的步骤S1的具体流程图;

图4为图3的步骤S102中随机数生成的具体流程图;

图5为图3的步骤S2的具体流程图;

图6为图5的步骤S203的子流程图;

图7为图5的步骤S209的子流程图;

图8为图5的步骤S212的子流程图;

图9为图3的步骤S3的具体流程图。

具体实施方式

下面,结合附图以及具体实施方式,对本发明做进一步描述。

如图1所示,读卡器的FLASH存储器的逻辑分区与现有技术相同,有引导区、系

统参数区和应用程序区。Bootloader存储在引导区,M、随机数、Ca、Cb、Cc存

储在系统参数区,App存储在应用程序区。

为了叙述方面,先对本发明涉及的名词进行解释。

Bootloader:启动引导程序;

App:Application,应用程序;

CID:ChipIndentify,芯片唯一标识号,为96bit的唯一只读序列号;

M:启动代码,为变量,用于标识程序运行模式,有三种运行模式,分别是App

运行模式,升级下载模式和出厂下载模式;

Ca:App验证码,App根据算法生成的特定数据,用于验证App的合法性;

Cb:Bootloader验证码,Bootloader根据算法生成的特定数据,用于验证

Bootloader的合法性;

Cc:CID验证码,根据芯片唯一标识号生成的特定数据,用于验证App与芯片的

唯一性;

随机数,利用单片机的自带函数生成的数据,每次重新生成后,各验证码需同时更

新;

TEA:Tiny Encryption Algorithm,分组加密算法,本发明在使用时,增加了填充算

法和交织算法,加强了算法的安全性;

Key:数据加解密密钥,出厂时固化在FLASH存储器中,任何时候都不可被读出。

单片机的内部FLASH地址分配:

芯片内容FLASH空间共256K,物理地址开始地址为0x08000000;

1) 偏移地址0x00000000-0x00002FFF为引导区,共12K;

2) 偏移地址0x00003000-0x00003FFF为系统参数区,共4K;

3) 偏移地址0x00004000-0x0003FFFF为应用程序区,共240K。

需要说明的是,当内部FLASH存储器应用程序区空间不足时,由外部FLASH存

储器替代。

如图2至图9所示,一种读卡器的应用程序加密保护方法,其包括以下步骤:

步骤S1:初始化读卡器步骤,此步骤在读卡器出厂时,由制造商完成,读卡器初

次上电启动后,根据启动代码M,进入出厂下载模式,其包括以下具体步骤:

步骤S101:上位机向初始化的读卡器的FLASH存储器写入App;

步骤S102:App根据单片机的芯片唯一标识号CID并利用算法生成随机数,App

根据单片机的芯片唯一标识号CID和所述随机数并利用算法生成验证码Cc,并将

验证码Cc和随机数存储于FLASH存储器中;

其中,随机数的生成过程如下:

步骤S1021:读取芯片唯一标识号;

步骤S1022:利用单片机的自带函数选取芯片唯一标识号中的12个字节的数据A1,

单片机的自带函数为srand函数或rand函数;

步骤S1023:利用单片机的自带函数在数据A1中进行6次选取,得到272个字节

的数据A2;

步骤S1024:截取数据A2前面的256个字节的数据得到随机数;

步骤S103:App根据所述随机数并利用算法生成验证码Ca,Bootloader根据所述

随机数并利用算法生成验证码Cb,将验证码Ca和验证码Cb存储于FLASH存储

器中,并将启动代码M设置为App运行模式。

步骤S1完成后,才可以进行步骤S2或步骤S3。

步骤S2:初始化后的读卡器的应用程序验证步骤,App必须通过验证才能运行,

其包括以下具体步骤:

步骤S201:初始化后的读卡器上电启动,根据启动代码M进入App运行模式;

步骤S202:App加载验证码Cc;

步骤S203:App读取FLASH存储器中的随机数和单片机的芯片唯一标识号CID

并利用算法生成验证码Cc’;

其中,验证码Cc’的生成过程如下:

步骤S2031:从随机数中获取偏移地址为64开始的32字节的数据L1;

步骤S2032:读取单片机的芯片唯一标识号CID,并用数据L1的前4字节进行末

位填充算法,得到数据L2;

步骤S2033:用数据L1的前16字节和后16字节进行分组加密算法得到16字节的

密文L3;

步骤S2034:用密文L3对数据L2进行分组加密算法得到16字节的密文L4;

步骤S2035:用密钥Key对密文L4进行分组加密算法得到16字节的密文L5,所

述密文L5即为验证码Cc或验证码Cc’;

步骤S204:判断验证码Cc’是否等于验证码Cc,若否,则执行步骤S206,若是,

则执行步骤S208;

步骤S206:擦除App;

步骤S207:重启返回步骤S1;

步骤S208:Bootloader加载验证码Ca;

步骤S209:Bootloader读取FLASH存储器中的随机数并利用算法生成验证码Ca’;

其中,验证码Ca’的生成过程为:

步骤S2091:从随机数中获取偏移地址为0开始的32字节的数据R1;

步骤S2092:用数据R1的前16字节和后16字节进行分组加密算法得到16字节的

密文R2;

步骤S2093:用密钥Key对密文R2进行分组加密算法得到16字节的密文R3,所

述密文R3即为:验证码Ca’;

步骤S210:判断验证码Ca’是否等于验证码Ca,若否,则执行步骤S206,若是,

则执行步骤S211;

步骤S211:App加载验证码Cb;

步骤S212:App读取FLASH存储器中的随机数并利用算法生成验证码Cb’;

其中,验证码Cb’的生成过程为:

步骤S2121:从随机数中获取偏移地址为32开始的32字节的数据K1;

步骤S2122:用数据K1的前16字节和后16字节进行分组加密算法得到16字节的

密文K2;

步骤S2123:用密钥Key对密文K2进行分组加密算法得到16字节的密文K3,所

述密文K3即为验证码Cb’;

步骤S213:判断验证码Cb’是否等于验证码Cb,若否,则执行步骤S206,若是,

则执行步骤S214;

步骤S214:App加载验证码Ca;

步骤S215:读取FLASH存储器中的随机数并利用算法生成验证码Ca’,判断验证

码Ca’是否等于验证码Ca,若否,则执行步骤S216,若是,则执行步骤S217;

步骤S216:用验证码Ca’替换验证码Ca,然后执行步骤S217;

步骤S217:运行App。

当需要升级App时,则进入步骤S3。

步骤S3:初始化后的读卡器的应用程序升级步骤,其包括以下具体步骤:

步骤S301:初始化后的读卡器接收上位机的升级指令,即上位机与读卡器进行通

信,并将启动代码M设置为升级下载模式;

步骤S302:上位机向初始化后的读卡器发送认证数据,所述认证数据具有标识号,

读卡器对认证数据进行认证,即对标识号进行识别,认证通过后才执行步骤S303,

认证不通过则执行步骤S306;

步骤S303:上位机向初始化后的读卡器的FLASH存储器中的App进行更新;

步骤S304:更新后的应用程序生成新的随机数和验证码Cc,并对FLASH存储器

中的随机数和验证码Cc进行更新;

步骤S305:更新后的应用程序对FLASH存储器中的验证码Ca进行更新,启动引

导程序对FLASH存储器中的验证码Cb进行更新;

步骤S306:升级结束,将启动代码M设置为App运行模式,即返回步骤S2。

需要说明的是,本实施例的验证码Ca的生成过程与验证码Ca’的生成过程一样,

验证码Cb的生成过程与验证码Cb’的生成过程一样,验证码Cc的生成过程与验证

码Cc’的生成过程一样。

由上述流程可知,本发明具有三重认证流程,保证了App的加密性:

1、 App对Bootloader的验证,用于验证bootloader的合法性,验证通过则执

行App,否则自毁App,可以防止非法获取App用于其他非法的试验或生产;

2、 App对单片机的芯片唯一标识号CID的验证,用于绑定App与对应的芯

片,即使非法拷贝芯片内容到另一芯片上,App也无法正常运行;

3、 Bootloader对App的验证,用于验证App的合法性,防止下载和升级非法

App。

对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种

相应的改变以及变形,而所有的这些改变以及变形都应该属于本发明权利要求的保

护范围之内。

2024年4月27日发(作者:郗迎天)

(19)中华人民共和国国家知识产权局

(12)发明专利说明书

(21)申请号 CN2.6

(22)申请日 2013.06.13

(71)申请人 广东岭南通股份有限公司

地址 510110 广东省广州市越秀区沿江中路298号中区29楼全层

(72)发明人 谢振东 刘强 何建兵 方晓洪

(74)专利代理机构 广州市越秀区哲力专利商标事务所(普通合伙)

代理人 汤喜友

(51)

(10)申请公布号 CN 103366103 A

(43)申请公布日 2013.10.23

权利要求说明书 说明书 幅图

(54)发明名称

读卡器的应用程序加密保护方法

(57)摘要

法律状态

法律状态公告日

法律状态信息

法律状态

权 利 要 求 说 明 书

1.读卡器的应用程序加密保护方法,其特征在于,包括以下步骤:

初始化读卡器步骤,其包括以下子步骤:

1a、上位机向初始化的读卡器的FLASH存储器写入应用程序;

1b、应用程序根据单片机的芯片唯一标识号并利用算法生成随机数,应用程序根据

单片机的芯片唯一标识号和所述随机数并利用算法生成验证码Cc,并将验证码Cc

和随机数存储于FLASH存储器中;

1c、应用程序根据所述随机数并利用算法生成验证码Ca,FLASH存储器中的启动

引导程序根据所述随机数并利用算法生成验证码Cb,,将验证码Ca和验证码Cb

存储于FLASH存储器中;

初始化后的读卡器的应用程序验证步骤,其包括以下子步骤:

2a、初始化后的读卡器上电启动;

2b、应用程序加载验证码Cc,读取FLASH存储器中的随机数和单片机的芯片唯一

标识号并利用算法生成验证码Cc’,判断验证码Cc’是否等于验证码Cc,若否,则

执行步骤2c,若是,则执行步骤2d;

2c、擦除应用程序,并重启返回初始化读卡器步骤;

2d、启动引导程序加载验证码Ca,读取FLASH存储器中的随机数并利用算法生成

验证码Ca’,判断验证码Ca’是否等于验证码Ca,若否,则执行步骤2c,若是,则

执行步骤2e;

2e、应用程序加载验证码Cb,读取FLASH存储器中的随机数并利用算法生成验证

码Cb’,判断验证码Cb’是否等于验证码Cb,若否,则执行步骤2c,若是,则执

行步骤2f;

2f、运行应用程序。

2.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,步骤2e与

步骤2f之间还有如下步骤:

应用程序加载验证码Ca,读取FLASH存储器中的随机数并利用算法生成验证码

Ca’,判断验证码Ca’是否等于验证码Ca,若否,则用验证码Ca’替换验证码Ca,

然后才执行步骤2f,若是,则直接执行步骤2f。

3.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,还包括:

初始化后的读卡器的应用程序升级步骤,其包括以下子步骤:

3a、初始化后的读卡器接收上位机的升级指令;

3b、上位机向初始化后的读卡器的FLASH存储器中的应用程序进行更新;

3c、更新后的应用程序生成新的随机数和验证码Cc,并对FLASH存储器中的随机

数和验证码Cc进行更新;

3d、更新后的应用程序对FLASH存储器中的验证码Ca进行更新,启动引导程序

对FLASH存储器中的验证码Cb进行更新。

4.如权利要求3所述的读卡器的应用程序加密保护方法,其特征在于,步骤3a与

步骤3b之间还有如下步骤:上位机向初始化后的读卡器发送认证数据,读卡器对

认证数据进行认证,认证通过后才进行步骤3b,认证不通过则退出。

5.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,验证码Ca

和验证码Ca’的生成过程如下:

从随机数中获取偏移地址为0开始的32字节的数据R1;

用数据R1的前16字节和后16字节进行分组加密算法得到16字节的密文R2;

用密钥Key对密文R2进行分组加密算法得到16字节的密文R3,所述密文R3即

为验证码Ca或验证码Ca’;

其中,密钥Key固化于FLASH存储器中。

6.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,验证码Cb

和验证码Cb’的生成过程如下:

从随机数中获取偏移地址为32开始的32字节的数据K1;

用数据K1的前16字节和后16字节进行分组加密算法得到16字节的密文K2;

用密钥Key对密文K2进行分组加密算法得到16字节的密文K3,所述密文K3即

为验证码Cb或验证码Cb’;

其中,密钥Key固化于FLASH存储器中。

7.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,验证码Cc

和验证码Cc’的生成过程如下:

从随机数中获取偏移地址为64开始的32字节的数据L1;

读取单片机的芯片唯一标识号CID,并用数据L1的前4字节进行末位填充算法,

得到数据L2;

用数据L1的前16字节和后16字节进行分组加密算法得到16字节的密文L3;

用密文L3对数据L2进行分组加密算法得到16字节的密文L4;

用密钥Key对密文L4进行分组加密算法得到16字节的密文L5,所述密文L5即

为验证码Cc或验证码Cc’;

其中,密钥Key固化于FLASH存储器中。

8.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,随机数的生

成过程如下:

读取芯片唯一标识号;

利用单片机的自带函数选取芯片唯一标识号中的12个字节的数据A1;

利用单片机的自带函数在数据A1中进行6次选取,得到272个字节的数据A2;

截取数据A2前面的256个字节的数据得到随机数。

9.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,单片机的自

带函数为srand函数或rand函数。

10.如权利要求1所述的读卡器的应用程序加密保护方法,其特征在于,单片机的

芯片唯一标识号为96bit的唯一只读序列号。

说 明 书

技术领域

本发明涉及软件加密及保护技术,具体涉及读卡器的应用程序加密保护方法。

背景技术

随着电子技术的发展,IC卡在公交卡、银行卡、电子标签、工作证等方面得到广

泛应用。

目前的读卡器由单片机、天线、RFID模块、外部FLASH存储器和加密芯片构成,

为了便于说明,将单片机的内部FLASH存储器与外部FLASH存储器统称为

FLASH存储器。读卡器在出厂时,由制造商将应用程序(App,Application)烧录

至FLASH存储器中。

读卡器是用于读取IC卡数据的设备,利用读卡器内置的应用程序可对IC卡内的电

子钱包进行核减或充值,因此,必须对应用程序进行加密,防止不法分子对应用程

序进行非法复制及修改。然而,目前的加密方法是通过设置加密芯片来完成,这样

就增加了设备的成本,而且也不利于嵌入式设备的开发。

发明内容

本发明的目的在于提出一种读卡器的应用程序加密保护方法,其采用软加密的方式,

解决设备成本高的问题。

为了达到上述目的,本发明所采用的技术方案如下:

读卡器的应用程序加密保护方法,其包括以下步骤:

(1) 初始化读卡器步骤,其包括以下子步骤:

1a、上位机向初始化的读卡器的FLASH存储器写入应用程序;

1b、应用程序根据单片机的芯片唯一标识号并利用算法生成随机数,应用程序根据

单片机的芯片唯一标识号和所述随机数并利用算法生成验证码Cc,并将验证码Cc

和随机数存储于FLASH存储器中;

1c、应用程序根据所述随机数并利用算法生成验证码Ca,FLASH存储器中的启动

引导程序根据所述随机数并利用算法生成验证码Cb,,将验证码Ca和验证码Cb

存储于FLASH存储器中;

(2) 初始化后的读卡器的应用程序验证步骤,其包括以下子步骤:

2a、初始化后的读卡器上电启动;

2b、应用程序加载验证码Cc,读取FLASH存储器中的随机数和单片机的芯片唯一

标识号并利用算法生成验证码Cc’,判断验证码Cc’是否等于验证码Cc,若否,则

执行步骤2c,若是,则执行步骤2d;

2c、擦除应用程序,并重启返回初始化读卡器步骤;

2d、启动引导程序加载验证码Ca,读取FLASH存储器中的随机数并利用算法生成

验证码Ca’,判断验证码Ca’是否等于验证码Ca,若否,则执行步骤2c,若是,则

执行步骤2e;

2e、应用程序加载验证码Cb,读取FLASH存储器中的随机数并利用算法生成验证

码Cb’,判断验证码Cb’是否等于验证码Cb,若否,则执行步骤2c,若是,则执

行步骤2f;

2f、运行应用程序。

优选的,步骤2e与步骤2f之间还有如下步骤:

应用程序加载验证码Ca,读取FLASH存储器中的随机数并利用算法生成验证码

Ca’,判断验证码Ca’是否等于验证码Ca,若否,则用验证码Ca’替换验证码Ca,

然后才执行步骤2f,若是,则直接执行步骤2f。

优选的,该应用程序加密保护方法还包括:

(3) 初始化后的读卡器的应用程序升级步骤,其包括以下子步骤:

3a、初始化后的读卡器接收上位机的升级指令;

3b、上位机向初始化后的读卡器的FLASH存储器中的应用程序进行更新;

3c、更新后的应用程序生成新的随机数和验证码Cc,并对FLASH存储器中的随机

数和验证码Cc进行更新;

3d、更新后的应用程序对FLASH存储器中的验证码Ca进行更新,启动引导程序

对FLASH存储器中的验证码Cb进行更新。进一步优选的,步骤3a与步骤3b之

间还有如下步骤:上位机向初始化后的读卡器发送认证数据,读卡器对认证数据进

行认证,认证通过后才进行步骤3b,认证不通过则退出。

优选的,验证码Ca和验证码Ca’的生成过程如下:

从随机数中获取偏移地址为0开始的32字节的数据R1;

用数据R1的前16字节和后16字节进行分组加密算法得到16字节的密文R2;

用密钥Key对密文R2进行分组加密算法得到16字节的密文R3,所述密文R3即

为验证码Ca或验证码Ca’。

优选的,验证码Cb和验证码Cb’的生成过程如下:

从随机数中获取偏移地址为32开始的32字节的数据K1;

用数据K1的前16字节和后16字节进行分组加密算法得到16字节的密文K2;

用密钥Key对密文K2进行分组加密算法得到16字节的密文K3,所述密文K3即

为验证码Cb或验证码Cb’。

优选的,验证码Cc和验证码Cc’的生成过程如下:

从随机数中获取偏移地址为64开始的32字节的数据L1;

读取单片机的芯片唯一标识号CID,并用数据L1的前4字节进行末位填充算法,

得到数据L2;

用数据L1的前16字节和后16字节进行分组加密算法得到16字节的密文L3;

用密文L3对数据L2进行分组加密算法得到16字节的密文L4;

用密钥Key对密文L4进行分组加密算法得到16字节的密文L5,所述密文L5即

为验证码Cc或验证码Cc’;

其中,密钥Key固化于FLASH存储器中。

优选的,随机数的生成过程如下:

读取芯片唯一标识号;

利用单片机的自带函数选取芯片唯一标识号中的12个字节的数据A1;

利用单片机的自带函数在数据A1中进行6次选取,得到272个字节的数据A2;

截取数据A2前面的256个字节的数据得到随机数。

其中,单片机的自带函数为srand函数或rand函数。单片机的芯片唯一标识号为

96bit的唯一只读序列号。

本发明具有如下有益效果:

1、 App对Bootloader的验证,用于验证bootloader的合法性,验证通过则执

行App,否则自毁App,可以防止非法获取App用于其他非法的试验或生产;

2、 App对单片机的芯片唯一标识号CID的验证,用于绑定App与对应的芯

片,即使非法拷贝芯片内容到另一芯片上,App也无法正常运行;

3、 Bootloader对App的验证,用于验证App的合法性,防止下载和升级非法

App。

附图说明

图1为本发明较佳实施例的FLASH存储器的逻辑分区示意图;

图2为本发明较佳实施例的流程图;

图3为图2的步骤S1的具体流程图;

图4为图3的步骤S102中随机数生成的具体流程图;

图5为图3的步骤S2的具体流程图;

图6为图5的步骤S203的子流程图;

图7为图5的步骤S209的子流程图;

图8为图5的步骤S212的子流程图;

图9为图3的步骤S3的具体流程图。

具体实施方式

下面,结合附图以及具体实施方式,对本发明做进一步描述。

如图1所示,读卡器的FLASH存储器的逻辑分区与现有技术相同,有引导区、系

统参数区和应用程序区。Bootloader存储在引导区,M、随机数、Ca、Cb、Cc存

储在系统参数区,App存储在应用程序区。

为了叙述方面,先对本发明涉及的名词进行解释。

Bootloader:启动引导程序;

App:Application,应用程序;

CID:ChipIndentify,芯片唯一标识号,为96bit的唯一只读序列号;

M:启动代码,为变量,用于标识程序运行模式,有三种运行模式,分别是App

运行模式,升级下载模式和出厂下载模式;

Ca:App验证码,App根据算法生成的特定数据,用于验证App的合法性;

Cb:Bootloader验证码,Bootloader根据算法生成的特定数据,用于验证

Bootloader的合法性;

Cc:CID验证码,根据芯片唯一标识号生成的特定数据,用于验证App与芯片的

唯一性;

随机数,利用单片机的自带函数生成的数据,每次重新生成后,各验证码需同时更

新;

TEA:Tiny Encryption Algorithm,分组加密算法,本发明在使用时,增加了填充算

法和交织算法,加强了算法的安全性;

Key:数据加解密密钥,出厂时固化在FLASH存储器中,任何时候都不可被读出。

单片机的内部FLASH地址分配:

芯片内容FLASH空间共256K,物理地址开始地址为0x08000000;

1) 偏移地址0x00000000-0x00002FFF为引导区,共12K;

2) 偏移地址0x00003000-0x00003FFF为系统参数区,共4K;

3) 偏移地址0x00004000-0x0003FFFF为应用程序区,共240K。

需要说明的是,当内部FLASH存储器应用程序区空间不足时,由外部FLASH存

储器替代。

如图2至图9所示,一种读卡器的应用程序加密保护方法,其包括以下步骤:

步骤S1:初始化读卡器步骤,此步骤在读卡器出厂时,由制造商完成,读卡器初

次上电启动后,根据启动代码M,进入出厂下载模式,其包括以下具体步骤:

步骤S101:上位机向初始化的读卡器的FLASH存储器写入App;

步骤S102:App根据单片机的芯片唯一标识号CID并利用算法生成随机数,App

根据单片机的芯片唯一标识号CID和所述随机数并利用算法生成验证码Cc,并将

验证码Cc和随机数存储于FLASH存储器中;

其中,随机数的生成过程如下:

步骤S1021:读取芯片唯一标识号;

步骤S1022:利用单片机的自带函数选取芯片唯一标识号中的12个字节的数据A1,

单片机的自带函数为srand函数或rand函数;

步骤S1023:利用单片机的自带函数在数据A1中进行6次选取,得到272个字节

的数据A2;

步骤S1024:截取数据A2前面的256个字节的数据得到随机数;

步骤S103:App根据所述随机数并利用算法生成验证码Ca,Bootloader根据所述

随机数并利用算法生成验证码Cb,将验证码Ca和验证码Cb存储于FLASH存储

器中,并将启动代码M设置为App运行模式。

步骤S1完成后,才可以进行步骤S2或步骤S3。

步骤S2:初始化后的读卡器的应用程序验证步骤,App必须通过验证才能运行,

其包括以下具体步骤:

步骤S201:初始化后的读卡器上电启动,根据启动代码M进入App运行模式;

步骤S202:App加载验证码Cc;

步骤S203:App读取FLASH存储器中的随机数和单片机的芯片唯一标识号CID

并利用算法生成验证码Cc’;

其中,验证码Cc’的生成过程如下:

步骤S2031:从随机数中获取偏移地址为64开始的32字节的数据L1;

步骤S2032:读取单片机的芯片唯一标识号CID,并用数据L1的前4字节进行末

位填充算法,得到数据L2;

步骤S2033:用数据L1的前16字节和后16字节进行分组加密算法得到16字节的

密文L3;

步骤S2034:用密文L3对数据L2进行分组加密算法得到16字节的密文L4;

步骤S2035:用密钥Key对密文L4进行分组加密算法得到16字节的密文L5,所

述密文L5即为验证码Cc或验证码Cc’;

步骤S204:判断验证码Cc’是否等于验证码Cc,若否,则执行步骤S206,若是,

则执行步骤S208;

步骤S206:擦除App;

步骤S207:重启返回步骤S1;

步骤S208:Bootloader加载验证码Ca;

步骤S209:Bootloader读取FLASH存储器中的随机数并利用算法生成验证码Ca’;

其中,验证码Ca’的生成过程为:

步骤S2091:从随机数中获取偏移地址为0开始的32字节的数据R1;

步骤S2092:用数据R1的前16字节和后16字节进行分组加密算法得到16字节的

密文R2;

步骤S2093:用密钥Key对密文R2进行分组加密算法得到16字节的密文R3,所

述密文R3即为:验证码Ca’;

步骤S210:判断验证码Ca’是否等于验证码Ca,若否,则执行步骤S206,若是,

则执行步骤S211;

步骤S211:App加载验证码Cb;

步骤S212:App读取FLASH存储器中的随机数并利用算法生成验证码Cb’;

其中,验证码Cb’的生成过程为:

步骤S2121:从随机数中获取偏移地址为32开始的32字节的数据K1;

步骤S2122:用数据K1的前16字节和后16字节进行分组加密算法得到16字节的

密文K2;

步骤S2123:用密钥Key对密文K2进行分组加密算法得到16字节的密文K3,所

述密文K3即为验证码Cb’;

步骤S213:判断验证码Cb’是否等于验证码Cb,若否,则执行步骤S206,若是,

则执行步骤S214;

步骤S214:App加载验证码Ca;

步骤S215:读取FLASH存储器中的随机数并利用算法生成验证码Ca’,判断验证

码Ca’是否等于验证码Ca,若否,则执行步骤S216,若是,则执行步骤S217;

步骤S216:用验证码Ca’替换验证码Ca,然后执行步骤S217;

步骤S217:运行App。

当需要升级App时,则进入步骤S3。

步骤S3:初始化后的读卡器的应用程序升级步骤,其包括以下具体步骤:

步骤S301:初始化后的读卡器接收上位机的升级指令,即上位机与读卡器进行通

信,并将启动代码M设置为升级下载模式;

步骤S302:上位机向初始化后的读卡器发送认证数据,所述认证数据具有标识号,

读卡器对认证数据进行认证,即对标识号进行识别,认证通过后才执行步骤S303,

认证不通过则执行步骤S306;

步骤S303:上位机向初始化后的读卡器的FLASH存储器中的App进行更新;

步骤S304:更新后的应用程序生成新的随机数和验证码Cc,并对FLASH存储器

中的随机数和验证码Cc进行更新;

步骤S305:更新后的应用程序对FLASH存储器中的验证码Ca进行更新,启动引

导程序对FLASH存储器中的验证码Cb进行更新;

步骤S306:升级结束,将启动代码M设置为App运行模式,即返回步骤S2。

需要说明的是,本实施例的验证码Ca的生成过程与验证码Ca’的生成过程一样,

验证码Cb的生成过程与验证码Cb’的生成过程一样,验证码Cc的生成过程与验证

码Cc’的生成过程一样。

由上述流程可知,本发明具有三重认证流程,保证了App的加密性:

1、 App对Bootloader的验证,用于验证bootloader的合法性,验证通过则执

行App,否则自毁App,可以防止非法获取App用于其他非法的试验或生产;

2、 App对单片机的芯片唯一标识号CID的验证,用于绑定App与对应的芯

片,即使非法拷贝芯片内容到另一芯片上,App也无法正常运行;

3、 Bootloader对App的验证,用于验证App的合法性,防止下载和升级非法

App。

对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种

相应的改变以及变形,而所有的这些改变以及变形都应该属于本发明权利要求的保

护范围之内。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论