CN101246432A - 一种智能编程器及编程方法 - Google Patents

一种智能编程器及编程方法 Download PDF

Info

Publication number
CN101246432A
CN101246432A CNA2008101027383A CN200810102738A CN101246432A CN 101246432 A CN101246432 A CN 101246432A CN A2008101027383 A CNA2008101027383 A CN A2008101027383A CN 200810102738 A CN200810102738 A CN 200810102738A CN 101246432 A CN101246432 A CN 101246432A
Authority
CN
China
Prior art keywords
programming
module
program
random numbers
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CNA2008101027383A
Other languages
English (en)
Other versions
CN101246432B (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Beijing Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Feitian Technologies Co Ltd filed Critical Beijing Feitian Technologies Co Ltd
Priority to CN2008101027383A priority Critical patent/CN101246432B/zh
Publication of CN101246432A publication Critical patent/CN101246432A/zh
Application granted granted Critical
Publication of CN101246432B publication Critical patent/CN101246432B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

提高电子产品的数据安全性,有效避免被破解的智能编程器,技术方案是:包括设置模块、表生成模块、编程模块、程序存储模块和编程接口,其中设置模块和表生成模块分别与编程模块相连;设置模块用于设置所述表生成模块生成的随机数表的表首地址和表长度,表首地址为所述随机数表向目标芯片中烧写的表首位置;表首地址和表长度的数值分别为所述程序存储模块中存储的被烧写程序中设置的常量表表首地址和表长度的数值;表生成模块,用于生成所述设置模块中设置的表长度的随机数表;编程模块,用于通过编程接口将表生成模块生成的随机数表及程序存储模块中存储的被烧写程序以嵌套的方式烧写到目标芯片中。本发明还提供一种编程器的变成方法。

Description

一种智能编程器及编程方法
技术领域
本发明涉及信息安全领域,特别涉及一种智能编程器及编程方法。
背景技术
所谓固件程序(Firmware)就是写入EPROM或EEPROM中的程序,与普通软件不同,它是固化在集成电路内部的程序代码,负责控制和协调集成电路的功能,担任着一个系统最基础、最底层工作的软件。
一般电子产品生产商或开发商都会自己开发电子产品的固件程序,利用编程器将其烧写至电子产品内电路板上的集成芯片中。
编程器是一种用来给目标芯片烧写固件程序的硬件工具,在编程器上设置目标芯片的编程座,当把目标芯片装设在该编程座上后,便可以利用编程器将编程固件程序烧写在目标芯片中了。
将固件程序或一些其它特征信息(比如开发商信息、产品型号、生产日期、版本号等)烧写在电子产品中,是指利用编程器将其烧写在电子产品内电路板上的集成电路内,利用编程器对目标芯片进行编程的方法对芯片进行编程,通常分为联机编程(即在线编程)和脱机编程(即离线编程)两种方法,联机编程方法就是使用上层软件在计算机端控制编程器,对芯片进行编程,这是最常用的方法,大家都比较熟悉;而脱机编程方法就是不使用计算机,直接使用编程器对芯片进行编程的方法,具体的说是先将要编程的固件代码通过计算机相应接口下载到编程器中,然后直接使用编程器对芯片进行编程。
就目前一般脱机编程方式的编程器来说,核心器件包括一个微控制芯片,用来控制编程器实现编程操作,还包括一存储器(一般采用EPROM或EEPROM来实现),一般欲烧写到目标芯片中的固件程序会被下载并保存在该存储器上。
目前的电子产品生产方法一般都是利用编程器以联机方式或脱机方式将固件程序及一些特征信息下载到电子产品中,电子产品的生产过程一般都是利用编程器大批量的将固件程序烧写到电子产品中的目标芯片中,批量生产的电子产品中,其核心控制芯片即利用编程器烧写的目标芯片的存储规则、加密规则等都具有一致性,这种一致性会大大降低电子产品中核心控制芯片对与之连接的片外存储器件的使用安全性,使片外存储器件容易被破解,大大降低了电子产品的数据安全性。
发明内容
为了解决上述电子产品由于存储区域存储规则及加密规则的相同,因此存在数据安全性低的问题,本发明提出一种智能编程器及编程方法,利用其内置的智能编程功能,在对固件程序编程的过程中实现自动嵌入随机数表的操作。
一种智能编程器,其特征是包括设置模块、表生成模块、编程模块、程序存储模块和编程接口,所述设置模块和表生成模块分别与编程模块相连,同时设置模块还与表生成模块相连;
其中,所述设置模块用于设置所述表生成模块生成的随机数表的表首地址和表长度,所述表首地址为所述随机数表向目标芯片中烧写的表首位置;所述表首地址和表长度的数值分别为所述程序存储模块中存储的被烧写程序中设置的常量表表首地址和表长度的数值;
所述表生成模块,用于生成所述设置模块中设置的表长度的随机数表;
所述编程模块,用于通过所述编程接口将所述表生成模块生成的随机数表及所述程序存储模块中存储的被烧写程序以嵌套的方式烧写到目标芯片中,其中写入目标芯片中的随机数表的表首位置与所述设置模块中设置的表首地址数值相同,替换被烧写程序中设置的所述常量表。
所述表首地址和表长度数值的组合分别与一个目标芯片类型相对应,所述设置模块设置的表首地址和表长度的数值组合为一种或多种。
所述的设置模块具体为存储模块,用于存储所述程序存储模块中存储的被烧写程序中设置的常量表的表首地址和表长度,作为所述表生成模块生成的随机数表的表首地址和表长度。
所述设置模块具体为获取模块,用于根据预先定义的特征值,在所述程序存储模块存储的被烧写程序中查找并获取表首地址和表长度,以此作为所述表生成模块生成的随机数表的表首地址和表长度。
所述表生成模块为随机数生成芯片或振荡电路。
所述表生成模块为内置伪随机数生成算法的微控制芯片。
所述表生成模块生成的随机数表具体为全排列随机数表。
所述编程模块具体包括:
替换单元,用于将生成模块生成的随机数表替换程序存储模块存储的被烧写程序中的所述常量表;
烧写单元,用于将替换随机数表的被烧写程序按块烧写到目标芯片中。
所述编程模块具体包括:
比较单元,用于在烧写数据前以及每烧写一块数据后,比较目标芯片的当前烧写首地址数值是否等于设置模块中设置的表首地址数值,等于则启动嵌入烧写单元,否则比较目标芯片的当前烧写地址数值加上块长度数值是否大于所述设置模块中设置的表首地址,否则启动程序烧写单元,大于则启动填充烧写单元;
程序烧写单元,用于向目标芯片中烧写一块所述被烧写程序后,跳转执行所述比较单元;
嵌入烧写单元,用于向目标芯片中按块烧写所述随机数表,并在所述随机数表烧写完后,将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中;
填充烧写单元,用于在下一块烧写程序的首地址与设置模块表首地址之间的被烧写程序后面填充所述随机数表满足一个块的长度后烧写到目标芯片中,再按块将剩余的所述随机数表烧写完成,然后将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中。
所述的编程模块为控制芯片。
所述设置模块为片外存储器件或与所述编程模块集成在一颗控制芯片中。
所述程序存储模块为片外存储器件或与所述编程模块集成在一颗控制芯片中。
所述表生成模块为与所述编程模块集成在一颗控制芯片中。
所述智能编程器还包括用以将所述编程器连接到计算机的通信接口。
所述智能编程器还包括用于指示当前编程器及其电源的工作状态的状态指示模块。
所述智能编程器还包括为编程器提供电源管理的电源回路。
一种智能编程方法,其特征是包括下列步骤:
---预先设置一组或多组表首地址和表长度,分别与一个或多个目标芯片类型相对应,所述表首地址指向随机数表向目标芯片中烧写的表首位置,所述表首地址和表长度分别与被烧写程序中设置的常量表表首地址和表长度一致;
---生成所述表长度的随机数表,将所述随机数表及被烧写程序以嵌套的方式烧写到目标芯片中,其中写入目标芯片中的随机数表的表首位置为所述预先设置的表首地址,替换被烧写程序中设置的所述常量表。
所述设置表首地址和表长度的方法具体为:存储所述被烧写程序中设置的常量表的表首地址和表长度,作为所述随机数表的表首地址和表长度。
所述设置表首地址和表长度的方法具体为:根据预先定义的特征值,在所述被烧写程序中查找并获取表首地址和表长度,以此作为所述随机数表的表首地址和表长度。
所述以嵌套的方式烧写具体包括下列步骤:
--将生成的随机数表替换被烧写程序中的所述常量表;
--将替换随机数表的被烧写程序按块烧写到目标芯片中。
所述以嵌套的方式烧写具体包括下列步骤:
步骤(1)在烧写前及每烧写一块数据后,比较目标芯片的下一块烧写程序的烧写首地址是否等于所述表首地址,等于则向目标芯片中按块烧写所述随机数表,并在所述随机数表烧写完后,将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中,否则执行步骤(2)比较目标芯片的下一块烧写程序的烧写首地址加上烧写程序的块长度是否大于所述表首地址,大于则在下一块烧写程序的首地址与所述表首地址之间的被烧写程序后面填充所述随机数表满足一个块的长度后烧写到目标芯片中,再按块将剩余的所述随机数表烧写完成,然后将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中,否则向目标芯片中烧写一块所述被烧写程序,烧写完成后继续执行步骤(1),直到程序烧写结束。
所述随机数表的生成方法为利用随机数生成芯片生成,或利用振荡电路生成。
所述随机数表的生成方法为利用伪随机数生成算法生成。
所述所述随机数表具体为全排列随机数表。
本发明的有益效果:本发明提供的智能编程器及编程方法,利用其内置的智能编程功能,在对固件程序编程的过程中实现自动嵌入随机数表的功能,能够使即便是批量生产的电子产品,由于在每个电子产品中嵌入的随机数表都是不同的,都能够利用嵌入在固件程序中的随机数表使电子产品内部主控芯片连接的存储器件的存储规则及加密规则等互不相同,大大提高电子产品的数据安全性,有效避免被破解的风险;另外,本发明提供的智能编程器及编程方法无需对计算机的硬件做任何改动,生产人员可以像使用现有编程器的方法来使用本发明提供的智能编程器,使用户及生产人员的操作更简单方便,不会增加开发成本及培训成本。
附图说明
图1为本发明实施例1提供的智能编程器结构图;
图2为本发明实施例1提供的一种编程模块的结构框图;
图3为本发明实施例1提供的另一种编程模块的结构框图;
图4为本发明实施例1提供的智能编程器的一个优选电路结构图;
图5为本发明实施例2提供的智能编程方法流程图;
图6为本发明实施例2提供的一种以嵌套方式烧写的方法流程图;
图7为本发明实施例2提供的另一种以嵌套方式烧写的方法流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1:
参见图1,本实施例提供了一种智能编程器,包括:编程接口和程序存储模块,另外,还包括:
设置模块,用于设置表生成模块生成的随机数表的表首地址和表长度,上述表首地址指向随机数表向目标芯片中烧写的表首位置;其中,表首地址和表长度分别与程序存储模块中存储的被烧写程序中设置的常量表表首地址和表长度一致。另外,设置模块可以是片外存储器件或与编程模块集成在一颗控制芯片中实现。
优选的,设置模块具体可以为存储模块,用于存储程序存储模块中存储的被烧写程序中设置的常量表的表首地址和表长度,作为表生成模块生成的随机数表的表首地址和表长度,其中表首地址指向所述随机数表向目标芯片中烧写的表首位置。
举例说明,在被烧写程序中设置并初始化一个常量表TABLE_B,表长度为256字节,表首地址为0x1EC0,如:
AREA Table(ROM,ABS,CON);指明该表存放在芯片Flash中
   org 0x1EC0;指明表的位置
export TABLE_B
TABLE_B:;256字节表的设置
db 0f3h,0efh,09eh,086h,09ch,069h,01dh,098h
db 03fh,0e4h,08eh,071h,083h,00dh,0f9h,0f6h
db 0ech,0d9h,06eh,05ch,068h,02eh,08dh,0d7h
db 0e6h,0ceh,05eh,047h,034h,090h,0fdh,085h
db 0dfh,0c3h,04dh,032h,01ah,0d5h,091h,0e1h
db 0d8h,0b7h,02dh,007h,0e5h,077h,0ffh,0c0h
db 0d1h,0ach,01ch,0f1h,096h,093h,020h,04bh
db 0cbh,0a0h,00bh,0c6h,07bh,074h,0dbh,0f7h
db 0c4h,094h,03bh,0b0h,060h,054h,06bh,050h
db 0bch,088h,0e9h,084h,00fh,0d4h,046h,00ch
db 0b5h,07ch,0c7h,058h,0f4h,0b4h,01eh,0a9h
db 0aeh,06fh,0b6h,041h,033h,073h,040h,005h
db 0a6h,063h,0a4h,02bh,0a2h,0f2h,0f5h,08bh
db 09fh,056h,092h,014h,06ah,0cch,0c8h,061h
db 097h,03ch,081h,0feh,04fh,0abh,0a3h,0fch
db 08fh,02fh,05dh,037h,017h,08ah,07dh,05ah
db 087h,015h,04ah,0e7h,0fbh,006h,057h,0a1h
db 07eh,008h,038h,0cfh,0deh,028h,00ah,076h
db 075h,03dh,025h,0b8h,0c2h,05fh,01bh,072h
db 06dh,0a8h,013h,059h,0a5h,010h,0d6h,0bbh
db 064h,09ah,000h,02ah,06ch,0eeh,089h,0eah
db 05bh,08ch,0edh,012h,0f8h,026h,019h,044h
db 052h,070h,03ah,0e2h,031h,0aah,0ddh,095h
db 049h,062h,0dah,0c9h,048h,066h,055h,0a7h
db 036h,053h,0b3h,0b1h,0f0h,043h,0e0h,0adh
db 02ch,045h,078h,099h,030h,021h,042h,0bah
db 022h,027h,065h,080h,0d3h,0b9h,0cah,082h
db 018h,009h,051h,067h,079h,0e8h,07ah,0beh
db 00eh,0ebh,029h,04eh,01fh,024h,002h,0d2h
db 004h,0dch,039h,035h,001h,07fh,0b2h,09dh
db 0fah,0cdh,0afb,003h,0e3h,016h,011h,0bfh
db 03eh,0bdh,09bh,0d0h,0c5h,023h,0c1h,04ch
那么在智能编程器中设置的表生成模块生成的随机数表向目标芯片中烧写的表首位置为0x1EC0,表长度为256字节,与在被烧写程序中设置的表首位置和表长度一致。
优选的,设置模块具体还可以为获取模块,用于根据预先定义的特征值,在程序存储模块存储的被烧写程序中查找并获取表首地址和表长度,作为表生成模块生成的随机数表的表首地址和表长度,其中表首地址指向所述随机数表向目标芯片中烧写的表首位置。
举例说明,在被烧写程序中设置并初始化一个常量表TABLE_B,表长度为256字节,表首地址为0x1EC0,如:
AREA Table(ROM,ABS,CON);指明该表存放在芯片Flash中
   org  0x1EC0
export TABLE_B
TABLE_B:;256字节表的设置
db 0f3h,0efh,09eh,086h,09ch,069h,01dh,098h
db 03fh,0e4h,08eh,071h,083h,00dh,0f9h,0f6h
db 0ech,0d9h,06eh,05ch,068h,02eh,08dh,0d7h
db 0e6h,0ceh,05eh,047h,034h,090h,0fdh,085h
db 0dfh,0c3h,04dh,032h,01ah,0d5h,091h,0e1h
db 0d8h,0b7h,02dh,007h,0e5h,077h,0ffh,0c0h
db 0d1h,0ach,01ch,0f1h,096h,093h,020h,04bh
db 0cbh,0a0h,00bh,0c6h,07bh,074h,0dbh,0f7h
db 0c4h,094h,03bh,0b0h,060h,054h,06bh,050h
db 0bch,088h,0e9h,084h,00fh,0d4h,046h,00ch
db 0b5h,07ch,0c7h,058h,0f4h,0b4h,01eh,0a9h
db 0aeh,06fh,0b6h,041h,033h,073h,040h,005h
db 0a6h,063h,0a4h,02bh,0a2h,0f2h,0f5h,08bh
db 09fh,056h,092h,014h,06ah,0cch,0c8h,061h
db 097h,03ch,081h,0feh,04fh,0abh,0a3h,0fch
db 08fh,02fh,05dh,037h,017h,08ah,07dh,05ah
db 087h,015h,04ah,0e7h,0fbh,006h,057h,0a1h
db 07eh,008h,038h,0cfh,0deh,028h,00ah,076h
db 075h,03dh,025h,0b8h,0c2h,05fh,01bh,072h
db 06dh,0a8h,013h,059h,0a5h,010h,0d6h,0bbh
db 064h,09ah,000h,02ah,06ch,0eeh,089h,0eah
db 05bh,08ch,0edh,012h,0f8h,026h,019h,044h
db 052h,070h,03ah,0e2h,031h,0aah,0ddh,095h
db 049h,062h,0dah,0c9h,048h,066h,055h,0a7h
db 036h,053h,0b3h,0b1h,0f0h,043h,0e0h,0adh
db 02ch,045h,078h,099h,030h,021h,042h,0bah
db 022h,027h,065h,080h,0d3h,0b9h,0cah,082h
db 018h,009h,051h,067h,079h,0e8h,07ah,0beh
db 00eh,0ebh,029h,04eh,01fh,024h,002h,0d2h
db 004h,0dch,039h,035h,001h,07fh,0b2h,09dh
db 0fah,0cdh,0afh,003h,0e3h,016h,011h,0bfh
db 03eh,0bdh,09bh,0d0h,0c5h,023h,0c1h,04ch
再定义TABLE_C,用来存储TABLE_B表首位置和表长度,如:
TABLE_LEN:equ 256;定义TABLE_B长度
AREA Table(ROM,ABS,CON);指明该表存放在芯片Flash中
   org 0x1FF0;指明随机数表的特征值表的位置
export TABLE_C
TABLE_C:;该表记录了随机数表的特征值项
DWL TABLE_B    ;记录TABLE_B表位置
DWL TABLE_LEN  ;记录TABLE_B长度
那么在智能编程器中预先存储TABLE_C的首地址0x1FF0,智能编程器可以在特征值0x1FF0所对应的TABLE_C中获取到TABLE_B的表首地址和表长度,即,地址0x1FF0中存储的内容值0x1EC0为TABLE_B的表首地址,地址0x1FFF中存储的内容值256为TABLE_B的表长度。
或者,还可以利用字符串作为特征值进行标记,在其后面的数据依次为TABLE B的表首地址和表长度,例如在被烧写程序中定义如下常量:
db  ‘A’,‘A’,‘A’,‘A’,‘A’,‘A’,‘A’,‘A’,‘A’,‘A’
DWL TABLE_B    ;记录TABLE_B表位置
DWL TABLE_LEN  ;记录TABLE_B长度
那么编程器只要在被烧产品固件区查找到10个字符A,从其后取2字节数据就是TABLE_B表位置,再后取2字节数据就是TABLE_B表长度,从而实现智能编程器对表首地址和表长度的自动获取。
在实际应用中,设置模块设置的表首地址和表长度可以为一组或多组,分别与一个或多个目标芯片类型相对应,比如,智能编程器能够烧写CY7C63813芯片和FT08M08AE芯片两种类型的芯片,那么在设置模块中可以设置两对表首地址和表长度,比如:
  芯片类型   表首地址   表长度
  CY7C63813芯片   0x1EC0   128字节
  FT08M08AE芯片   0x1ECF   256字节
表生成模块,用于生成所述设置模块中设置的表长度的随机数表;表生成模块可以由随机数生成芯片或振荡电路实现,还可以由内置伪随机数生成算法的微控制芯片实现,表生成模块还可以与编程模块集成在一颗控制芯片中实现。其中伪随机数生成算法可以是生产商或开发商自设置开发的伪随机数生成算法,也可以利用现有的一些伪随机数生成算法。优选的,表生成模块生成的随机数表具体为全排列随机数表,所谓全排列随机数表,通俗的说就是该随机数表中的随机数都是不重复的,是一种全排列的状态,以便进一步提高安全性。
编程模块,用于通过编程接口将表生成模块生成的随机数表及程序存储模块中存储的被烧写程序以嵌套的方式烧写到目标芯片中,其中写入目标芯片中的随机数表的表首位置为设置模块中设置的表首地址处,替换被烧写程序中设置的所述常量表。编程模块优选的可以由一颗控制芯片实现。
其中,参见图2,编程模块具体包括:
替换单元,用于将生成模块生成的随机数表替换程序存储模块存储的被烧写程序中的常量表;
烧写单元,用于将替换随机数表的被烧写程序按块烧写到目标芯片中。
举例说明:
被烧写程序存储在程序存储模块中,开始烧写后,先用表生成模块生成的随机数表替换被烧写程序中设置的常量表,比如被烧写程序中设置的常数表沿用上述TABLE_B,表生成模块生成的随机数表为TABLE A,该随机数表在设置模块中设置的表首地址为0x1EC,表长度为256个字节,则将随机数表TABLE A写入被烧写程序的0x1EC地址起256个字节,覆盖被烧写程序中TABLE_B的地方,再将已经被替换的被烧写程序按块写入目标芯片中。
参见图3,编程模块还可以具体包括:
比较单元,用于在烧写前及每烧写一块数据后,比较目标芯片的当前烧写首地址是否等于或当前首地址加上块长度是否大于所述设置模块中设置的表首地址,否则启动程序烧写单元,等于则启动嵌入烧写单元,大于则启动填充烧写单元;
程序烧写单元,用于向目标芯片中烧写一块被烧写程序,跳转执行比较单元;
嵌入烧写单元,用于向目标芯片中按块烧写随机数表,并在随机数表烧写完后,将剩余被烧写程序越过上述表长度后继续按块烧写到目标芯片中;
填充烧写单元,用于在下一块烧写程序的首地址与设置模块表首地址之间的被烧写程序后面填充所述随机数表满足一个块的长度后烧写到目标芯片中,,再按块将剩余的随机数表烧写完成,然后将剩余被烧写程序越过上述表长度后继续按块烧写到目标芯片中。
举例说明,
比如块长度为64个字节,表首地址为0x0200,表长度为128个字节,启动烧写,当前向目标芯片中烧写的首地址为0x0000,比较0x0000是否等于或大于0x0200,小于,所以向目标芯片中烧写64个字节的被烧写程序,此时烧写地址变为0x0040,还是小于0x0200,继续向目标芯片中烧写64个字节的被烧写程序,当向目标芯片中烧写5块被烧写程序后,烧写地址变为0x0200,此时与设置模块中设置的表首地址0x0200一致,此时开始向目标芯片中按64个字节的块长度按块烧写随机数表,随机数表烧写完后,将剩余被烧写程序越过上述表长度即128个字节后继续按块烧写到目标芯片中,因为要绕过被烧写程序中设置的常量表的位置。
再比如块长度为64个字节,表首地址为0x0220,表长度为128个字节,启动烧写,当前向目标芯片中烧写的首地址为0x0000,比较当前烧写首地址0x0000加上块长度64个字节即0x0040是否等于或大于0x0220,小于,所以向目标芯片中烧写64个字节的被烧写程序,此时烧写地址变为0x0040,加上64个字节为0x0080,还是小于0x0200,继续向目标芯片中烧写64个字节的被烧写程序,当向目标芯片中烧写5块被烧写程序后,烧写地址变为0x0200,此时加上64个字节为0x0240,大于0x0220,则在上述大于部分的长度(0x0240-0x0220=0x0020,即32个字节)的被烧写程序的后面填充随机数表满足一个块的长度后烧写到目标芯片中,即先取32个字节的被烧写程序再取32个字节的随机数表组成一块烧写到目标芯片中,再按64个字节为一块将剩余的随机数表烧写到目标芯片中,由于此时随机数表还剩余32个字节没有烧完,但是不足一个块长度,故先取剩余的32个字节随机数表,剩余被烧写程序越过上述表长度128个字节后取32个字节组成一块,烧写到目标芯片中,因为要绕过被烧写程序中设置的常量表的位置,再将剩余的被烧写程序按64个字节一块烧写到目标芯片中直至完成。
程序存储模块可以是片外存储器件,也可以是与编程模块集成在一颗控制芯片中实现。
编程接口可以是编程座,也可以是从编程器上引出来的带编程接口的编程线,可以直接与放置有被烧写芯片的板子提供的相应接口相连接。
优选的,智能编程器还包括用以将编程器连接到计算机的通信接口,在联机编程时,计算机中的上层软件可以通过该通信接口将需要下载的固件程序下载到放置在编程器的编程座(编程接口)中的目标芯片中;在脱机编程时,先将编程器通过通信接口连接到计算机,将需要下载到目标芯片中的固件程序下载到编程器的程序存储模块中,再断开编程器与计算机的连接,便可以进行脱机烧写了。
优选的,智能编程器还包括为编程器提供电源管理的电源回路。
优选的,智能编程器还包括用于指示当前编程器及其电源工作状态的状态指示模块。
本发明实施例中的被烧写程序优选的为欲烧写在电子产品中的固件程序,利用本发明实施例中的智能编程器生产的电子产品,由于烧写到每个目标芯片中的随机数表都是不一样的,使即使是批量生产的电子产品,能够利用嵌入在固件程序中的随机数表使电子产品的存储器件的存储规则及加密规则等发生不一致性,从而大大提高电子产品的数据安全性,有效避免被破解的安全性。
比如,以智能密钥装置为电子产品举例说明,该智能密钥装置由主控芯片和片外存储器构成,利用本发明实施例提供的智能编程器向智能密钥装置的主控芯片中烧写智能密钥装置的固件程序,则该固件程序则为已经嵌入随机数表的固件程序,这时,可以实现对上述片外存储器的安全读写操作,比如,利用烧写在主控芯片中的固件程序中嵌入的随机数表对片外存储器进行乱序写操作:
主控芯片要对片外存储器的Address1地址进行写操作,要写入的内容为A,地址Address1共16位,由前4位L、中间8位M和后4位N组成,取地址Address1的中间8位M作为索引值,在固件程序中嵌入的随机数表中找到该索引值对应的内容值K,将该内容值K替代地址Address1的中间8位,前4位L和后4位N不变,作为新的地址Address2,将主控芯片要写入片外存储器中的内容A写入片外存储器地址Address2中。
对应的,利用烧写在主控芯片中固件程序中的随机数表对片外存储器进行乱序读操作:
主控芯片要对片外存储器的Address1地址进行读操作,地址Address1共16位,由前4位L、中间8位M和后4位N组成,取地址Address1的中间8位M作为索引值,在固件程序中嵌入的随机数表Table中找到该索引值对应的内容值K,将该内容值K替代Address1的中间8位,前4位L和后4位N不变,作为新的地址Address2,主控芯片从新的地址Address2中读出内容到主控芯片中即可。
由此可见,由于在生产电子产品即向电子产品中的主控芯片内烧写固件程序的时候,嵌入在每个电子产品中的随机数表是不固定的,是随机生成的,所以当电子产品中的主控芯片向与其相连的片外存储器进行写操作时,即使是批量生产的电子产品,写入到片外存储器中的地址也是不一致的,即利用嵌入在固件程序中的随机数表实现了对片外存储器的乱序存储,改变了其存储规则的一致性,这样,即使是破解了同一批次的其中一个或几个产品,其他的产品的安全性也是很高的,即大大提高了电子产品存储的安全能力。
当然,还可以是利用主控芯片中的随机数表对片外存储器进行密文写操作:
主控芯片要对片外存储器的Address1地址进行写操作,要写入的内容为A,地址Address1共16位,由前4位L、中间8位M和后4位N组成,取地址Address1的中间8位M作为索引值,在固件程序中嵌入的随机数表Table中找到该索引值对应的内容值K,利用该内容值K对要写入的内容A做加密运算,得到加密结果A′,将加密结果A′写入地址Address1中。
对应的,还可以是利用主控芯片中的随机数表对片外存储器进行密文读操作:
主控芯片要对片外存储器的Address1地址进行写操作,该地址Address1内存储的内容为A′,地址Address1共16位,由前4位L、中间8位M和后4位N组成,取地址Address1的中间8位M作为索引值,在固件程序中嵌入的随机数表Table中找到该索引值对应的内容值K,利用该内容值K对地址Addressl内存储的内容为A′做解密运算,得到解密结果A,将解密结果A读出到主控芯片中。
由此可见,由于在生产电子产品即向电子产品中的主控芯片内烧写固件程序的时候,嵌入在每个电子产品中的随机数表是不固定的,是随机生成的,所以当电子产品中的主控芯片向与其相连的片外存储器进行写操作时,即使是批量生产的电子产品,写入到片外存储器中的内容也是不一致的,即利用嵌入在固件程序中的随机数表实现了对片外存储器的密文存储,改变了其存储及加密规则的一致性,同理,当电子产品中的主控芯片向与其相连的片外存储器进行读操作时也是一样,所以,即使是破解了同一批次的其中一个或几个产品,其他的产品的安全性也是很高的,即大大提高了电子产品存储的安全能力。
参见图4,为本发明实施例的一个优选方案:智能编程器由主控芯片M68HC908JB16FA、振荡电路、编程接口和USB接口构成,其中主控芯片M68HC908JB16FA内带16K字节的FLASH和256字节的RAM,USB接口用于将要烧写的程序下载到智能编程器中,并存储在主控芯片M68HC908JB16FA的FLASH中,振荡电路具体由晶振Y和信号处理电路组成,其中信号处理电路具体为电容C1串联上由电阻R1和反相器74HC04构成的并联部分,这里选用50MHz的晶振Y来产生振荡信号,因为晶振Y的GND端脚处于悬空状态,故CLK端脚产生的振荡信号便是随机的不规则的,通过信号处理电路后得到一串的随机信号,振荡电路与主控芯片M68HC908JB16FA的I/O1端脚相连,主控芯片M68HC908JB16FA便会按位采集I/O1端脚输入的随机信号,每采集8位随机信号,便可得到1个字节的随机数,依次采集下去,便可以得到随机数表,存放在主控芯片M68HC908JB16FA的256字节的RAM区中。为了进一步增加安全性,可以选用全排列随机数表,所谓全排列随机数表,通俗的说就是该随机数表中的随机数都是不重复的,是一种全排列的状态,获得全排列随机数表的方法可以是主控芯片M68HC908JB16FA在采集到1个字节的随机数后,按照全排列随机数的排列规则判断是否有效,即判断本次采集的随机数是否已经在之前采集过了,也就是说判断随机数表中存储的随机数是否有和本次采集的随机数一样的,如果没有一样的,则说明本次采集的是有效的,有效则存储到随机数表中,无效则舍弃,继续采集下一个随机数,直至将随机数表采集满,因为每个随机数为1个字节,所以全排列随机数表优选的是由256个随机数组成的。在主控芯片M68HC908JB 16FA的FLASH中设置模块,用来设置生成的随机数表的表首地址和表长度。编程接口用于将主控芯片M68HC908JB 16FA的FLASH中存储的要烧写的程序和RAM中存储的随机数表烧写到目标芯片(比如CY7C63813芯片)中,SDATA端脚用于传输编程数据。
上述优选方案的结构只是本发明的一个特例,在具体实施时,还可以采用具体的随机数生成芯片来代替振荡电路部分实现,也可以采用内置伪随机数生成算法的微控制芯片实现,等等;在实际应用中用户可以根据自己的设计需要自行选用其他频率的晶振,与50MHz的晶振在本发明实施例中作用和原理是类同的。
实施例2:
参见图5,本实施例提供了一种智能编程方法:
步骤501:预先设置一组或多组表首地址和表长度,分别与一个或多个目标芯片类型相对应,该表首地址指向随机数表向目标芯片中烧写的表首位置,该表首地址和表长度分别与被烧写程序中设置的常量表表首地址和表长度一致;
其中,设置表首地址和表长度的方法可以是:在智能编程器中存储被烧写程序中设置的常量表的表首地址和表长度,作为随机数表的表首地址和表长度。或者设置表首地址和表长度的方法还可以是:根据预先定义的特征值,在被烧写程序中查找并获取表首地址和表长度,作为随机数表的表首地址和表长度;等等。
步骤502:生成上述表长度的随机数表;
随机数表的生成方法可以是利用随机数生成芯片生成,或利用振荡电路生成,还可以利用伪随机数生成算法生成,等。其中,随机数表优选的为全排列随机数表,所谓全排列随机数表,通俗的说就是该随机数表中的随机数都是不重复的,是一种全排列的状态。
步骤503:将随机数表及被烧写程序以嵌套的方式烧写到目标芯片中。
其中写入目标芯片中的随机数表的表首位置为预先设置的表首地址,替换被烧写程序中设置的所述常量表。
烧写的方式可以是脱机方式烧写,也可以是联机方式烧写。
参见图6,以嵌套的方式烧写具体为:
步骤601:将生成的随机数表替换被烧写程序中的常量表;
步骤602:将替换随机数表的被烧写程序按块烧写到目标芯片中。
或者,参见图7,以嵌套的方式烧写还可以具体为:
步骤701:在烧写前及每烧写一块数据后,比较目标芯片的下一块烧写程序的烧写首地址是否等于表首地址,等于则执行步骤702;否则执行步骤703;
步骤702:向目标芯片中按块烧写随机数表,并在随机数表烧写完后,将剩余被烧写程序越过表长度后继续按块烧写到目标芯片中,结束;
步骤703:比较目标芯片的下一块烧写程序的烧写首地址加上烧写程序的块长度是否大于表首地址,大于则执行步骤704,否则执行步骤705;
步骤704:在下一块烧写程序的首地址与表首地址之间的被烧写程序后面填充随机数表满足一个块的长度后烧写到目标芯片中,再按块将剩余的随机数表烧写完成,然后将剩余被烧写程序越过表长度后继续按块烧写到目标芯片中,结束;
步骤705:向目标芯片中烧写一块被烧写程序,然后返回继续执行步骤701。
综上所述,本发明实施例提供的智能编程器及编程方法,利用其内置的智能编程功能,在对固件程序编程的过程中实现自动嵌入随机数表的功能,能够使即便是批量生产的电子产品,由于在每个电子产品中嵌入的随机数表都是不同的,都能够利用嵌入在固件程序中的随机数表使电子产品内部主控芯片连接的存储器件的存储规则及加密规则等互不相同,大大提高电子产品的数据安全性,有效避免被破解的风险;另外,本发明实施例提供的智能编程器及编程方法无需对计算机的硬件做任何改动,生产人员可以像使用现有编程器的方法来使用本发明实施例提供的智能编程器,使用户及生产人员的操作更简单方便,不会增加开发成本及培训成本。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (24)

1、一种智能编程器,其特征是包括设置模块、表生成模块、编程模块、程序存储模块和编程接口,所述设置模块和表生成模块分别与编程模块相连,同时设置模块还与表生成模块相连;
其中,所述设置模块用于设置所述表生成模块生成的随机数表的表首地址和表长度,所述表首地址为所述随机数表向目标芯片中烧写的表首位置;所述表首地址和表长度的数值分别为所述程序存储模块中存储的被烧写程序中设置的常量表表首地址和表长度的数值;
所述表生成模块,用于生成所述设置模块中设置的表长度的随机数表;
所述编程模块,用于通过所述编程接口将所述表生成模块生成的随机数表及所述程序存储模块中存储的被烧写程序以嵌套的方式烧写到目标芯片中,其中写入目标芯片中的随机数表的表首位置与所述设置模块中设置的表首地址数值相同,替换被烧写程序中设置的所述常量表。
2、根据权利要求1所述的智能编程器,其特征是所述表首地址和表长度数值的组合分别与一个目标芯片类型相对应,所述设置模块设置的表首地址和表长度的数值组合为一种或多种。
3、根据权利要求1或2所述的智能编程器,其特征是所述的设置模块具体为存储模块,用于存储所述程序存储模块中存储的被烧写程序中设置的常量表的表首地址和表长度,作为所述表生成模块生成的随机数表的表首地址和表长度。
4、根据权利要求1或2所述的智能编程器,其特征是所述设置模块具体为获取模块,用于根据预先定义的特征值,在所述程序存储模块存储的被烧写程序中查找并获取表首地址和表长度,以此作为所述表生成模块生成的随机数表的表首地址和表长度。
5、根据权利要求1所述的智能编程器,其特征是所述表生成模块为随机数生成芯片或振荡电路。
6、根据权利要求1所述的智能编程器,其特征是所述表生成模块为内置伪随机数生成算法的微控制芯片。
7、根据权利要求1所述的智能编程器,其特征是所述表生成模块生成的随机数表具体为全排列随机数表。
8、根据权利要求1所述的智能编程器,其特征是所述编程模块具体包括:
替换单元,用于将生成模块生成的随机数表替换程序存储模块存储的被烧写程序中的所述常量表;
烧写单元,用于将替换随机数表的被烧写程序按块烧写到目标芯片中。
9、根据权利要求1所述的智能编程器,其特征是所述编程模块具体包括:
比较单元,用于在烧写数据前以及每烧写一块数据后,比较目标芯片的当前烧写首地址数值是否等于设置模块中设置的表首地址数值,等于则启动嵌入烧写单元,否则比较目标芯片的当前烧写地址数值加上块长度数值是否大于所述设置模块中设置的表首地址,否则启动程序烧写单元,大于则启动填充烧写单元;
程序烧写单元,用于向目标芯片中烧写一块所述被烧写程序后,跳转执行所述比较单元;
嵌入烧写单元,用于向目标芯片中按块烧写所述随机数表,并在所述随机数表烧写完后,将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中;
填充烧写单元,用于在下一块烧写程序的首地址与设置模块表首地址之间的被烧写程序后面填充所述随机数表满足一个块的长度后烧写到目标芯片中,再按块将剩余的所述随机数表烧写完成,然后将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中。
10、根据权利要求1所述的智能编程器,其特征是所述的编程模块为控制芯片。
11、根据权利要求1所述的智能编程器,其特征是所述设置模块为片外存储器件或与所述编程模块集成在一颗控制芯片中。
12、根据权利要求1所述的智能编程器,其特征是所述程序存储模块为片外存储器件或与所述编程模块集成在一颗控制芯片中。
13、根据权利要求1所述的智能编程器,其特征是所述表生成模块为与所述编程模块集成在一颗控制芯片中。
14、根据权利要求1所述的智能编程器,其特征是所述智能编程器还包括用以将所述编程器连接到计算机的通信接口。
15、根据权利要求1所述的智能编程器,其特征是所述智能编程器还包括用于指示当前编程器及其电源的工作状态的状态指示模块。
16、根据权利要求1所述的智能编程器,其特征是所述智能编程器还包括为编程器提供电源管理的电源回路。
17、一种智能编程方法,其特征是包括下列步骤:
---预先设置一组或多组表首地址和表长度,分别与一个或多个目标芯片类型相对应,所述表首地址指向随机数表向目标芯片中烧写的表首位置,所述表首地址和表长度分别与被烧写程序中设置的常量表表首地址和表长度一致;
---生成所述表长度的随机数表,将所述随机数表及被烧写程序以嵌套的方式烧写到目标芯片中,其中写入目标芯片中的随机数表的表首位置为所述预先设置的表首地址,替换被烧写程序中设置的所述常量表。
18、根据权利17所述的智能编程方法,其特征是所述设置表首地址和表长度的方法具体为:存储所述被烧写程序中设置的常量表的表首地址和表长度,作为所述随机数表的表首地址和表长度。
19、根据权利17所述的智能编程方法,其特征是所述设置表首地址和表长度的方法具体为:根据预先定义的特征值,在所述被烧写程序中查找并获取表首地址和表长度,以此作为所述随机数表的表首地址和表长度。
20、根据权利17所述的智能编程方法,其特征是所述以嵌套的方式烧写具体包括下列步骤:
--将生成的随机数表替换被烧写程序中的所述常量表;
--将替换随机数表的被烧写程序按块烧写到目标芯片中。
21、根据权利17所述的智能编程方法,其特征是所述以嵌套的方式烧写具体包括下列步骤:
步骤(1)在烧写前及每烧写一块数据后,比较目标芯片的下一块烧写程序的烧写首地址是否等于所述表首地址,等于则向目标芯片中按块烧写所述随机数表,并在所述随机数表烧写完后,将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中,否则执行步骤(2)比较目标芯片的下一块烧写程序的烧写首地址加上烧写程序的块长度是否大于所述表首地址,大于则在下一块烧写程序的首地址与所述表首地址之间的被烧写程序后面填充所述随机数表满足一个块的长度后烧写到目标芯片中,再按块将剩余的所述随机数表烧写完成,然后将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中,否则向目标芯片中烧写一块所述被烧写程序,烧写完成后继续执行步骤(1),直到程序烧写结束。
22、根据权利17所述的智能编程方法,其特征是所述随机数表的生成方法为利用随机数生成芯片生成,或利用振荡电路生成。
23、根据权利17所述的智能编程方法,其特征是所述随机数表的生成方法为利用伪随机数生成算法生成。
24、根据权利17所述的智能编程方法,其特征是所述所述随机数表具体为全排列随机数表。
CN2008101027383A 2008-03-26 2008-03-26 一种智能编程器及编程方法 Expired - Fee Related CN101246432B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008101027383A CN101246432B (zh) 2008-03-26 2008-03-26 一种智能编程器及编程方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008101027383A CN101246432B (zh) 2008-03-26 2008-03-26 一种智能编程器及编程方法

Publications (2)

Publication Number Publication Date
CN101246432A true CN101246432A (zh) 2008-08-20
CN101246432B CN101246432B (zh) 2010-04-21

Family

ID=39946900

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008101027383A Expired - Fee Related CN101246432B (zh) 2008-03-26 2008-03-26 一种智能编程器及编程方法

Country Status (1)

Country Link
CN (1) CN101246432B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101944037A (zh) * 2009-07-06 2011-01-12 北京中电华大电子设计有限责任公司 一种开发系统仿真智能卡芯片ram随机性的方法
CN102163269A (zh) * 2011-04-02 2011-08-24 刘俊 一种防止单片机程序被解密再利用的方法
CN104464815A (zh) * 2014-12-01 2015-03-25 北京思比科微电子技术股份有限公司 一种快速准确的otp编程控制方法
CN106648620A (zh) * 2016-11-23 2017-05-10 河池学院 教育机器人控制器编程方法
CN106850875A (zh) * 2017-02-15 2017-06-13 湖南长城银河科技有限公司 一种基于飞腾平台的网卡mac地址烧录方法及装置
WO2021110130A1 (zh) * 2019-12-06 2021-06-10 吴苑 一种led灯珠地址码的烧录方法和led灯
CN114265561A (zh) * 2021-12-24 2022-04-01 上海集成电路装备材料产业创新中心有限公司 一种数据读取控制方法、芯片和介质
US11803712B2 (en) 2019-12-06 2023-10-31 Yuan Wu Method for burning address code of LED lamp beads

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4120048A (en) * 1977-12-27 1978-10-10 Rockwell International Corporation Memory with simultaneous sequential and random address modes
CN1928842A (zh) * 2005-09-07 2007-03-14 创惟科技股份有限公司 大量数据储存装置的高隐密非循序隐藏区块存储器机密数据保护方法

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101944037A (zh) * 2009-07-06 2011-01-12 北京中电华大电子设计有限责任公司 一种开发系统仿真智能卡芯片ram随机性的方法
CN101944037B (zh) * 2009-07-06 2013-03-20 北京中电华大电子设计有限责任公司 一种开发系统仿真智能卡芯片ram随机性的方法
CN102163269A (zh) * 2011-04-02 2011-08-24 刘俊 一种防止单片机程序被解密再利用的方法
CN104464815A (zh) * 2014-12-01 2015-03-25 北京思比科微电子技术股份有限公司 一种快速准确的otp编程控制方法
CN106648620A (zh) * 2016-11-23 2017-05-10 河池学院 教育机器人控制器编程方法
CN106850875A (zh) * 2017-02-15 2017-06-13 湖南长城银河科技有限公司 一种基于飞腾平台的网卡mac地址烧录方法及装置
WO2021110130A1 (zh) * 2019-12-06 2021-06-10 吴苑 一种led灯珠地址码的烧录方法和led灯
US11803712B2 (en) 2019-12-06 2023-10-31 Yuan Wu Method for burning address code of LED lamp beads
CN114265561A (zh) * 2021-12-24 2022-04-01 上海集成电路装备材料产业创新中心有限公司 一种数据读取控制方法、芯片和介质

Also Published As

Publication number Publication date
CN101246432B (zh) 2010-04-21

Similar Documents

Publication Publication Date Title
CN101246432B (zh) 一种智能编程器及编程方法
CN101971152B (zh) 提供器件参数
CN100442393C (zh) 半导体存储卡的访问装置、初始化方法和半导体存储卡
US8102202B2 (en) Modem unit and mobile communication unit
CN100478973C (zh) 处理器,计算机系统和认证方法
CN104615419B (zh) 信息处理设备、程序和记录介质
CN101136699A (zh) 可插拔光模块的自动识别方法及加密方法
EP2278501B1 (en) Smartcard for portable electronic device
CN102693185A (zh) 管理设备和管理方法
CN107220547A (zh) 终端设备及其启动方法
CN112948893A (zh) 一种基于批量硬件烧录的固件加密方法
CN103676911B (zh) 一种设备控制系统及控制方法
CN104820604A (zh) 一种应用于pos终端的浏览器
CN1932784B (zh) 信息处理方法及信息处理装置
CN101727406A (zh) 组相联方式的高速缓存装置、高速缓存方法及处理器系统
JP5976458B2 (ja) Icカード、及び、携帯可能電子装置
CN1937812A (zh) 在用户识别模块和移动终端之间传输数据的方法及其装置
CN101221581B (zh) 一种数据文件生成方法及装置
CN109598137B (zh) 一种用于安全处理数据的方法及其系统
CN103019739A (zh) 重定位表的修复方法、程序脱壳方法及相关装置
US7979606B2 (en) Method for storing data
KR20170105393A (ko) 스토리지 디바이스의 인증 방법 및 시스템
CN114491589A (zh) 芯片加密方法和装置、芯片校验方法和装置
CN103793333A (zh) 非易失性存储器加密的方法和装置以及非易失性存储器
CN101896885B (zh) 复制保护软件卡盒

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee

Owner name: FEITIAN TECHNOLOGIES CO., LTD.

Free format text: FORMER NAME: BEIJING FEITIAN CHENGXIN TECHNOLOGY CO., LTD.

CP03 Change of name, title or address

Address after: 100085 Beijing city Haidian District Xueqing Road No. 9 Ebizal building B block 17 layer

Patentee after: Feitian Technologies Co.,Ltd.

Address before: 100083, Haidian District, Xueyuan Road, No. 40 research, 7 floor, 5 floor, Beijing

Patentee before: FEITIAN TECHNOLOGIES Co.,Ltd.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100421