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。
对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种
相应的改变以及变形,而所有的这些改变以及变形都应该属于本发明权利要求的保
护范围之内。