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

文档序号:6463201阅读:200来源:国知局

专利名称::一种智能编程器及编程方法
技术领域
:本发明涉及信息安全领域,特别涉及一种智能编程器及编程方法。技术背景所谓固件程序(Firmware)就是写入EPROM或EEPROM中的程序,与普通软件不同,它是固化在集成电路内部的程序代码,负责控制和协调集成电路的功能,担任着一个系统最基础、最底层工作的软件。一般电子产品生产商或开发商都会自己开发电子产品的固件程序,利用编程器将其烧写至电子产品内电路板上的集成芯片中。编程器是一种用来给目标芯片烧写固件程序的硬件工具,在编程器上设置目标芯片的编程座,当把目标芯片装设在该编程座上后,便可以利用编程器将编程固件程序烧写在目标芯片中了。将固件程序或一些其它特征信息(比如开发商信息、产品型号、生产日期、版本号等)烧写在电子产品中,是指利用编程器将其烧写在电子产品内电路板上的集成电路内,利用编程器对目标芯片进行编程的方法对芯片进行编程,通常分为联机编程(即在线编程)和脱机编程(即离线编程)两种方法,联机编程方法就是使用上层软件在计算机端控制编程器,对芯片进行编程,这是最常用的方法,大家都比较熟悉;而脱机编程方法就是不使用计算机,直接使用编程器对芯片进行编程的方法,具体的说是先将要编程的固件代码通过计算机相应接口下载到编程器中,然后直接使用编程器对芯片进行编程。就目前一般脱机编程方式的编程器来说,核心器件包括一个微控制芯片,用来控制编程器实现编程操作,还包括一存储器(一般采用EPROM或EEPROM来实现),一般欲烧写到目标芯片中的固件程序会被下载并保存在该存储器上。目前的电子产品生产方法一般都是利用编程器以联机方式或脱机方式将固件程序及一些特征信息下载到电子产品中,电子产品的生产过程一般都是利用编程器大批量的将固件程序烧写到电子产品中的目标芯片中,批量生产的电子产品中,其核心控制芯片即利用编程器烧写的目标芯片的存储规则、加密规则等都具有一致性,这种一致性会大大降低电子产品中核心控制芯片对与之连接的片外存储器件的使用安全性,使片外存储器件容易被破解,大大降低了电子产品的数据安全性。
发明内容为了解决上述电子产品由于存储区域存储规则及加密规则的相同,因此存在数据安全性低的问题,本发明提出一种智能编程器及编程方法,利用其内置的智能编程功能,在对固件程序编程的过程中实现自动嵌入随机数表的操作。一种智能编程器,其特征是包括设置模块、表生成模块、编程模块、程序存储模块和编程接口,所述设置模块和表生成模块分别与编程模块相连,同时设置模块还与表生成模块相连;其中,所述设置模块用于设置所述表生成模块生成的随机数表的表首地址和表长度,所述表首地址为所述随机数表向目标芯片中烧写的表首位置;所述表首地址和表长度的数值分别为所述程序存储模块中存储的被烧写程序中设置的常量表表首地址和表长度的数值;所述表生成模块,用于生成所述设置模块中设置的表长度的随机数表;所述编程模块,用于通过所述编程接口将所述表生成模块生成的随机数表及所述程序存储模块中存储的被烧写程序以嵌套的方式烧写到目标芯片中,其中写入目标芯片中的随机数表的表首位置与所述设置模块中设置的表首地址数值相同,替换被烧写程序中设置的所述常量表。所述表首地址和表长度数值的组合分别与一个目标芯片类型相对应,所述设置模块设置的表首地址和表长度的数值组合为一种或多种。所述的设置模块具体为存储模块,用于存储所述程序存储模块中存储的被烧写程序中设置的常量表的表首地址和表长度,作为所述表生成模块生成的随机数表的表首地址和表长度。所述设置模块具体为获取模块,用于根据预先定义的特征值,在所述程序存储模块存储的被烧写程序中査找并获取表首地址和表长度,以此作为所述表生成模块生成的随机数表的表首地址和表长度。所述表生成模块为随机数生成芯片或振荡电路。所述表生成模块为内置伪随机数生成算法的微控制芯片。所述表生成模块生成的随机数表具体为全排列随机数表。所述编程模块具体包括替换单元,用于将生成模块生成的随机数表替换程序存储模块存储的被烧写程序中的所述常量表;将替换随机数表的被烧写程序按块烧写到目标芯片中。所述编程模块具体包括-比较单元,用于在烧写数据前以及每烧写一块数据后,比较目标芯片的当前烧写首地址数值是否等于设置模块中设置的表首地址数值,等于则启动嵌入烧写单元,否则比较目标芯片的当前烧写地址数值加上块长度数值是否大于所述设置模块中设置的表首地址,否则启动程序烧写单元,大于则启动填充烧写单元;程序烧写单元,用于向目标芯片中烧写一块所述被烧写程序后,跳转执行所述比较单元;嵌入烧写单元,用于向目标芯片中按块烧写所述随机数表,并在所述随机数表烧写完后,将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中;填充烧写单元,用于在下一块烧写程序的首地址与设置模块表首地址之间的被烧写程序后面填充所述随机数表满足一个块的长度后烧写到目标芯片中,再按块将剩余的所述随机数表烧写完成,然后将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中。所述的编程模块为控制芯片。所述设置模块为片外存储器件或与所述编程模块集成在一颗控制芯片中。所述程序存储模块为片外存储器件或与所述编程模块集成在一颗控制芯片中。所述表生成模块为与所述编程模块集成在一颗控制芯片中。所述智能编程器还包括用以将所述编程器连接到计算机的通信接口。所述智能编程器还包括用于指示当前编程器及其电源的工作状态的状态指示模块。所述智能编程器还包括为编程器提供电源管理的电源回路。一种智能编程方法,其特征是包括下列步骤--预先设置一组或多组表首地址和表长度,分别与一个或多个目标芯片类型相对应,所述表首地址指向随机数表向目标芯片中烧写的表首位置,所述表首地址和表长度分别与被烧写程序中设置的常量表表首地址和表长度一致;…生成所述表长度的随机数表,将所述随机数表及被烧写程序以嵌套的方式烧写到目标芯片中,其中写入目标芯片中的随机数表的表首位置为所述预先设置的表首地址,替换被烧写程序中设置的所述常量表。所述设置表首地址和表长度的方法具体为存储所述被烧写程序中设置的常量表的表首地址和表长度,作为所述随机数表的表首地址和表长度。所述设置表首地址和表长度的方法具体为根据预先定义的特征值,在所述并获取表首地址和表长度,以此作为所述随机数表的表首地址和表长度。所述以嵌套的方式烧写具体包括下列步骤-将生成的随机数表替换被烧写程序中的所述常量表;-将替换随机数表的被烧写程序按块烧写到目标芯片中。所述以嵌套的方式烧写具体包括下列步骤步骤(1)在烧写前及每烧写一块数据后,比较目标芯片的下一块烧写程序的烧写首地址是否等于所述表首地址,等于则向目标芯片中按块烧写所述随机数表,并在所述随机数表烧写完后,将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中,否则执行步骤(2)比较目标芯片的下一块烧写程序的烧写首地址加上烧写程序的块长度是否大于所述表首地址,大于则在下一块烧写程序的首地址与所述表首地址之间的被烧写程序后面填充所述随机数表满足一个块的长度后烧写到目标芯片中,再按块将剩余的所述随机数表烧写完成,然后将剩余被烧写程序越过所述表长度后继续按块烧写到目标芯片中,否则向目标芯片中烧写一块所述被烧写程序,烧写完成后继续执行步骤(1),直到程序烧写结束。所述随机数表的生成方法为利用随机数生成芯片生成,或利用振荡电路生成。所述随机数表的生成方法为利用伪随机数生成算法生成。所述所述随机数表具体为全排列随机数表。本发明的有益效果本发明提供的智能编程器及编程方法,利用其内置的智能编程功能,在对固件程序编程的过程中实现自动嵌入随机数表的功能,能够使即便是批量生产的电子产品,由于在每个电子产品中嵌入的随机数表都是不同的,都能够利用嵌入在固件程序中的随机数表使电子产品内部主控芯片连接的存储器件的存储规则及加密规则等互不相同,大大提高电子产品的数据安全性,有效避免被破解的风险;另外,本发明提供的智能编程器及编程方法无需对计算机的硬件做任何改动,生产人员可以像使用现有编程器的方法来使用本发明提供的智能编程器,使用户及生产人员的操作更简单方便,不会增加开发成本及培训成本。图1为本发明实施例1提供的智能编程器结构图;图2为本发明实施例1提供的一种编程模块的结构框图;图3为本发明实施例1提供的另一种编程模块的结构框图;图4为本发明实施例1提供的智能编程器的一个优选电路结构图;图5为本发明实施例2提供的智能编程方法流程图;图6为本发明实施例2提供的一种以嵌套方式烧写的方法流程图;图7为本发明实施例2提供的另一种以嵌套方式烧写的方法流程图。具体实施方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例1:参见图l,本实施例提供了一种智能编程器,包括编程接口和程序存储模块,另外,还包括设置模块,用于设置表生成模块生成的随机数表的表首地址和表长度,上述表首地址指向随机数表向目标芯片中烧写的表首位置;其中,表首地址和表长度分别与程序存储模块中存储的被烧写程序中设置的常量表表首地址和表长度一致。另外,设置模块可以是片外存储器件或与编程模块集成在一颗控制芯片中实现。优选的,设置模块具体可以为存储模块,用于存储程序存储模块中存储的被烧写程序中设置的常量表的表首地址和表长度,作为表生成模块生成的随机数表的表首地址和表长度,其中表首地址指向所述随机数表向目标芯片中烧写的表首位置。举例说明,在被烧写程序中设置并初始化一个常量表TABU^B,表长度为256字节,表首地址为0xlEC0,如AREATable(ROM,ABS,CON);指明该表存放在芯片Flash中org0xlEC0;指明表的位置exportTABLE—BTABLE一B:;256字节表的设置db0f3h,Oefh,09eh,086h,09ch,069h,01dh,098hdb03fh,0e4h,08eh,07lh,083h,OOdh,0f9h,0f6hdb0ech,0d9h,06eh,05ch,068h,02eh,08dh,0d7hdb0e6h,Oceh,05eh,047h,034h,090h,Ofdh,085hdbOdfh,0c3h,04dh,032h,Olah,0d5h,091h,Oelhdb0d8h,0b7h,02dh,007h,0e5h,077h,Offh,OcOhdb0dlh,Oach,Olch,Oflh,096h,093h,020h,04bhdb0cbh,0a0h,OObh,0c6h,07bh,074h,Odbh,Of7hdb0c4h,094h,03bh,ObOh,060h,054h,06bh,050hdbObch,088h,0e9h,084h,OOfli,0d4h,046h,OOchdbOb5h,07ch,0c7h,058h,0f4h,0b4h,01eh,0a9hdbOaeh,06fh,0b6h,04lh,033h,073h,040h,005hdb0a6h,063h,0a4h,02bh,0a2h,Of2h,Of5h,08bhdb09fh,056h,092h,014h,06ah,Occh,0c8h,061hdb097h,03ch,08lh,Ofeh,04fh,Oabh,Oa3h,Ofchdb08fh,02fh,05dh,037h,017h,08ah,07dh,05ahdb087h,015h,04ah,0e7h,Ofth,006h,057h,Oalhdb07eh,008h,038h,Ocfli,Odeh,028h,OOah,076hdb075h,03dh,025h,Ob8h,0c2h,05fh,01bh,072hdb06dh,Oa8h,013h,059h,Oa5h,01Oh,0d6h,Obbhdb064h,09ah,OOOh,02ah,06ch,Oeeh,089h,Oeahdb05bh,08ch,Oedh,012h,Of8h,026h,019h,044hdb052h,070h,03ah,0e2h,03lh,Oaah,Oddh,095hdb049h,062h,Odah,0c9h,048h,066h,055h,0a7hdb036h,053h,Ob3h,Oblh,OfDh,043h,OeOh,Oadhdb02ch,045h,078h,099h,030h,021h,042h,Obahdb022h,027h,065h,080h,Od3h,0b9h,Ocah,082hdb018h,009h,05lh,067h,079h,Oe8h,07ah,ObehdbOOeh,Oebh,029h,04eh,01fh,024h,002h,0d2hdb004h,Odch,039h,035h,OOlh,07fh,0b2h,09dhdbOfah,Ocdh,Oafh,003h,Oe3h,016h,Ollh,Obfhdb03eh,Obdh,09bh,OdOh,Oc5h,023h,Oclh,04ch那么在智能编程器中设置的表生成模块生成的随机数表向目标芯片中烧写的表首位置为OxlECO,表长度为256字节,与在被烧写程序中设置的表首位置和表长度一致。优选的,设置模块具体还可以为获取模块,用于根据预先定义的特征值,在程序存储模块存储的被烧写程序中査找并获取表首地址和表长度,作为表生成模块生成的随机数表的表首地址和表长度,其中表首地址指向所述随机数表向目标芯片中烧写的表首位置。举例说明,在被烧写程序中设置并初始化一个常量表TABLE一B,表长度为256字节,表首地址为0xlEC0,如AREATable(ROM,ABS,CON);指明该表存放在芯片Flash中org0xlECOexportTABLE—BTABLE—B:;256字节表的设置db0Gh,Oefh,09eh,086h,09ch,069h,01dh,098hdb03fh,0e4h,08eh,07lh,083h,OOdh,0f9h,O伤hdbOech,0d9h,06eh,05ch,068h,02eh,08dh,0d7hdb0e6h,Oceh,05eh,047h,034h,090h,Ofdh,085hdbOdfh,0c3h,04dh,032h,Olah,0d5h,091h,OelhdbOd8h,0b7h,02dh,007h,Oe5h,077h,Offh,OcOhdbOdlh,Oach,01ch,Oflh,096h,093h,020h,04bhdbOcbh,OaOh,OObh,0c6h,07bh,074h,Odbh,0f7hdb0c4h,094h,03bh,ObOh,060h,054h,06bh,050hdbObch,088h,0e9h,084h,OOfh,0d4h,046h,OOchdbOb5h,07ch,0c7h,058h,0f4h,0b4h,01eh,0a9hdbOaeh,06fh,0b6h,041h,033h,073h,040h,005hdb0a6h,063h,0a4h,02bh,0a2h,Of2h,Of5h,08bhdb09fh,056h,092h,014h,06ah,Occh,0c8h,061hdb097h,03ch,08lh,Ofeh,04fh,Oabh,Oa3h,Ofchdb08fh,02fh,05dh,037h,017h,08ah,07dh,05ahdb087h,015h,04ah,0e7h,Ofbh,006h,057h,Oalhdb07eh,008h,038h,Ocfh,Odeh,028h,OOah,076hdb075h,03dh,025h,Ob8h,0c2h,05fh,Olbh,072hdb06dh,0a8h,013h,059h,0a5h,01Oh,0d6h,Obbhdb064h,09ah,OOOh,02ah,06ch,Oeeh,089h,Oeahdb05bh,08ch,Oedh,012h,0f8h,026h,019h,044hdb052h,070h,03ah,0e2h,03lh,Oaah,Oddh,095hdb049h,062h,Odah,0c9h,048h,066h,055h,0a7hdb036h,053h,Ob3h,Oblh,O舰,043h,OeOh,Oadhdb02ch,045h,078h,099h,03Oh,02lh,042h,Obahdb022h,027h,065h,080h,Od3h,0b9h,Ocah,082hdb018h,009h,05lh,067h,079h,Oe8h,07ah,ObehdbOOeh,Oebh,029h,04eh,01fh,024h,002h,0d2hdb004h,Odch,039h,035h,OOlh,07fh,0b2h,09dhdbOfah,Ocdh,Oafh,003h,0e3h,016h,Ollh,Obfhdb03eh,Obdh,0%h,OdOh,0c5h,023h,Oclh,04ch再定义TABLE—C,用来存储TABLE—B表首位置和表长度,如TABLE—LEN:equ256;定义TABLE—B长度AREATable(ROM,ABS,CON);指明该表存放在芯片Flash中org0xlFF0;指明随机数表的特征值表的位置exportTABLE—CTABLE_C:;该表记录了随机数表的特征值项DWLTABLE—B;记录TABLE_B表位置DWLTABLE—LEN;记录TABLE—B长度那么在智能编程器中预先存储TABLE_C的首地址0xlFF0,智能编程器可以在特征值OxlFFO所对应的TABLE—C中获取到TABLE一B的表首地址和表长度,即,地址OxlFFO中存储的内容值OxlECO为TABLE_B的表首地址,地址OxlFFF中存储的内容值256为TABLE_B的表长度。或者,还可以利用字符串作为特征值进行标记,在其后面的数据依次为TABLE—B的表首地址和表长度,例如在被烧写程序中定义如下常量db'A,,'A,,'A,,'A,,'A,,'A,,'A,,'A,,'A,,'A,.DWLTABLE—B;记录TABLE_B表位置DWLTABLE一LEN;记录TABLE—B长度那么编程器只要在被烧产品固件区查找到10个字符A,从其后取2字节数据就是TABLE一B表位置,再后取2字节数据就是TABLE一B表长度,从而实现智能编程器对表首地址和表长度的自动获取。在实际应用中,设置模块设置的表首地址和表长度可以为一组或多组,分别与一个或多个目标芯片类型相对应,比如,智能编程器能够烧写CY7C63813芯片和FT08M08AE芯片两种类型的芯片,那么在设置模块中可以设置两对表首地址和表长度,比如<table>tableseeoriginaldocumentpage12</column></row><table>表生成模块,用于生成所述设置模块中设置的表长度的随机数表;表生成模块可以由随机数生成芯片或振荡电路实现,还可以由内置伪随机数生成算法的微模块还可以与编程模块集成在一颗控制芯片中实现。其中伪随机数生成算法可以是生产商或开发商自设置开发的伪随机数生成算法,也可以利用现有的一些伪随机数生成算法。优选的,表生成模块生成的随机数表具体为全排列随机数表,所谓全排列随机数表,通俗的说就是该随机数表中的随机数都是不重复的,是一种全排列的状态,以便进一步提高安全性。编程模块,用于通过编程接口将表生成模块生成的随机数表及程序存储模块中存储的被烧写程序以嵌套的方式烧写到目标芯片中,其中写入目标芯片中的随机数表的表首位置为设置模块中设置的表首地址处,替换被烧写程序中设置的所述常量表。编程模块优选的可以由一颗控制芯片实现。其中,参见图2,编程模块具体包括替换单元,用于将生成模块生成的随机数表替换程序存储模块存储的被烧写程序中的常量表;烧写单元,用于将替换随机数表的被烧写程序按块烧写到目标芯片中。举例说明被烧写程序存储在程序存储模块中,开始烧写后,先用表生成模块生成的随机数表替换被烧写程序中设置的常量表,比如被烧写程序中设置的常数表沿用上述TABLE—B,表生成模块生成的随机数表为TABLEA,该随机数表在设置模块中设置的表首地址为OxlEC,表长度为256个字节,则将随机数表TABLEA写入被烧写程序的0xlEC地址起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个字节一块烧写到目标芯片中直至完成。程序存储模块可以是片外存储器件,也可以是与编程模块集成在一颗控制芯片中实现。编程接口可以是编程座,也可以是从编程器上引出来的带编程接口的编程线,可以直接与放置有被烧写芯片的板子提供的相应接口相连接。优选的,智能编程器还包括用以将编程器连接到计算机的通信接口,在联机编程时,计算机中的上层软件可以通过该通信接口将需要下载的固件程序下载到放置在编程器的编程座(编程接口)中的目标芯片中;在脱机编程时,先将编程器通过通信接口连接到计算机,将需要下载到目标芯片中的固件程序下载到编程器的程序存储模块中,再断开编程器与计算机的连接,便可以进行脱机烧写了。优选的,智能编程器还包括为编程器提供电源管理的电源回路。优选的,智能编程器还包括用于指示当前编程器及其电源工作状态的状态指示模块。本发明实施例中的被烧写程序优选的为欲烧写在电子产品中的固件程序,利用本发明实施例中的智能编程器生产的电子产品,由于烧写到每个目标芯片中的随机数表都是不一样的,使即使是批量生产的电子产品,能够利用嵌入在固件程序中的随机数表使电子产品的存储器件的存储规则及加密规则等发生不一致性,从而大大提高电子产品的数据安全性,有效避免被破解的安全性。比如,以智能密钥装置为电子产品举例说明,该智能密钥装置由主控芯片和片外存储器构成,利用本发明实施例提供的智能编程器向智能密钥装置的主控芯片中烧写智能密钥装置的固件程序,则该固件程序则为已经嵌入随机数表的固件程序,这时,可以实现对上述片外存储器的安全读写操作,比如,利用烧写在主控芯片中的固件程序中嵌入的随机数表对片外存储器进行乱序写操作主控芯片要对片外存储器的Addressl地址进行写操作,要写入的内容为A,地址Addressl共16位,由前4位L、中间8位M和后4位N组成,取地址Addressl的中间8位M作为索引值,在固件程序中嵌入的随机数表中找到该索引值对应的内容值K,将该内容值K替代地址Addressl的中间8位,前4位L和后4位N不变,作为斬的地址Address2,将主控芯片要写入片外存储器中的内容A写入片外存储器地址Address2中。对应的,利用烧写在主控芯片中固件程序中的随机数表对片外存储器进行乱序读操作主控芯片要对片外存储器的Addressl地址进行读操作,地址Addressl共16位,由前4位L、中间8位M和后4位N组成,取地址Add'ressl的中间8位M作为索引值,在固件程序中嵌入的随机数表Table中找到该索引值对应的内容值K,将该内容值K替代Addressl的中间8位,前4位L和后4位N不变,作为新的地址Address2,主控芯片从新的地址Address2中读出内容到主控芯片中即可。由此可见,由于在生产电子产品即向电子产品中的主控芯片内烧写固件程序的时候,嵌入在每个电子产品中的随机数表是不固定的,是随机生成的,所以当电子产品中的主控芯片向与其相连的片外存储器进行写操作时,即使是批量生产的电子产品,写入到片外存储器中的地址也是不一致的,即利用嵌入在固件程序中的随机数表实现了对片外存储器的乱序存储,改变了其存储规则的一致性,这样,即使是破解了同一批次的其中一个或几个产品,其他的产品的安全性也是很高的,即大大提高了电子产品存储的安全能力。当然,还可以是利用主控芯片中的随机数表对片外存储器进行密文写操作主控芯片要对片外存储器的Addressl地址进行写操作,要写入的内容为A,地址Addressl共16位,由前4位L、中间8位M和后4位N组成,取地址Addressl的中间8位M作为索引值,在固件程序中嵌入的随机数表Table中找到该索引值对应的内容值K,利用该内容值K对要写入的内容A做加密运算,得到加密结果A',将加密结果A'写入地址Addressl中。对应的,还可以是利用主控芯片中的随机数表对片外存储器进行密文读操作主控芯片要对片外存储器的Addressl地址进行写操作,该地址Addressl内存储的内容为A',地址Addressl共16位,由前4位L、中间8位M和后4位N组成,取地址Addressl的中间8位M作为索引值,在固件程序中嵌入的随机数表Table中找到该索引值对应的内容值K,利用该内容值K对地址Addressl内存储的内容为A'做解密运算,得到解密结果A,将解密结果A读出到主控芯片中。由此可见,由于在生产电子产品即向电子产品中的主控芯片内烧写固件程序的时候,嵌入在每个电子产品中的随机数表是不固定的,是随机生成的,所以当电子产品中的主控芯片向与其相连的片外存储器进行写操作时,即使是批量生产的电子产品,写入到片外存储器中的内容也是不一致的,即利用嵌入在固件程序中的随机数表实现了对片外存储器的密文存储,改变了其存储及加密规则的一致性,同理,当电子产品中的主控芯片向与其相连的片外存储器进行读操作时也是一样,所以,即使是破解了同一批次的其中一个或几个产品,其他的产品的安全性也是很高的,即大大提高了电子产品存储的安全能力。参见图4,为本发明实施例的一个优选方案智能编程器由主控芯片M68HC908JB16FA、振荡电路、编程接口和USB接口构成,其中主控芯片M68HC908JB16FA内带16K字节的FLASH和256字节的RAM,USB接口用于将要烧写的程序下载到智能编程器中,并存储在主控芯片M68HC908JB16FA的FLASH中,振荡电路具体由晶振Y和信号处理电路组成,其中信号处理电路具体为电容CI串联上由电阻Rl和反相器74HC04构成的并联部分,这里选用50MHz的晶振Y来产生振荡信号,因为晶振Y的GND端脚处于悬空状态,故CLK端脚产生的振荡信号便是随机的不规则的,通过信号处理电路后得到一串的随机信号,振荡电路与主控芯片M68HC908JB16FA的1/01端脚相连,主控芯片M68HC908JB16FA便会按位采集1/01端脚输入的随机信号,每采集8位随机信号,便可得到1个字节的随机数,依次采集下去,便可以得到随机数表,存放在主控芯片M68HC908JB16FA的256字节的RAM区中。为了进一步增加安全性,可以选用全排列随机数表,所谓全排列随机数表,通俗的说就是该随机数表中的随机数都是不重复的,是一种全排列的状态,获得全排列随机数表的方法可以是主控芯片M68HC卯8JB16FA在采集到1个字节的随机数后,按照全排列随机数的排列规则判断是否有效,即判断本次采集的随机数是否已经在之前采集过了,也就是说判断随机数表中存储的随机数是否有和本次采集的随机数一样的,如果没有一样的,则说明本次采集的是有效的,有效则存储到随机数表中,无效则舍弃,继续采集下一个随机数,直至将随机数表采集满,因为每个随机数为1个字节,所以全排列随机数表优选的是由256个随机数组成的。在主控芯片M68HC908JB16FA的FLASH中设置模块,用来设置生成的随机数表的表首地址和表长度。编程接口用于将主控芯片M68HC908JB16FA的FLASH中存储的要烧写的程序和RAM中存储的随机数表烧写到目标芯片(比如CY7C63813芯片)中,SDATA端脚用于传输编程数据。上述优选方案的结构只是本发明的一个特例,在具体实施时,还可以采用具体的随机数生成芯片来代替振荡电路部分实现,也可以采用内置伪随机数生成算法的微控制芯片实现,等等;在实际应用中用户可以根据自己的设计需要自行选用其他频率的晶振,与50MHz的晶振在本发明实施例中作用和原理是类同的。实施例2:参见图5,本实施例提供了一种智能编程方法步骤501:预先设置一组或多组表首地址和表长度,分别与一个或多个目标芯片类型相对应,该表首地址指向随机数表向目标芯片中烧写的表首位置,该表首地址和表长度分别与被烧写程序中设置的常量表表首地址和表长度一致;其中,设置表首地址和表长度的方法可以是在智能编程器中存储被烧写程序中设置的常量表的表首地址和表长度,作为随机数表的表首地址和表长度。或者设置表首地址和表长度的方法还可以是根据预先定义的特征值,在被烧写程序中查找并获取表首地址和表长度,作为随机数表的表首地址和表长度;等等。步骤502:生成上述表长度的随机数表;随机数表的生成方法可以是利用随机数生成芯片生成,或利用振荡电路生成,还可以利用伪随机数生成算法生成,等。其中,随机数表优选的为全排列随机数表,所谓全排列随机数表,通俗的说就是该随机数表中的随机数都是不重复的,是一种全排列的状态。步骤503:将随机数表及被烧写程序以嵌套的方式烧写到目标芯片中。其中写入目标芯片中的随机数表的表首位置为预先设置的表首地址,替换被烧写程序中设置的所述常量表。烧写的方式可以是脱机方式烧写,也可以是联机方式烧写。参见图6,以嵌套的方式烧写具体为步骤60h将生成的随机数表替换被烧写程序中的常量表;步骤602:将替换随机数表的被烧写程序按块烧写到目标芯片中。或者,参见图7,以嵌套的方式烧写还可以具体为步骤701:在烧写前及每烧写一块数据后,比较目标芯片的下一块烧写程序的烧写首地址是否等于表首地址,等于则执行步骤702;否则执行步骤703;步骤702:向目标芯片中按块烧写随机数表,并在随机数表烧写完后,将剩余被烧写程序越过表长度后继续按块烧写到目标芯片中,结束;步骤703:比较目标芯片的下一块烧写程序的烧写首地址加上烧写程序的块长度是否大于表首地址,大于则执行步骤704,否则执行步骤705;步骤704:在下一块烧写程序的首地址与表首地址之间的被烧写程序后面填充随机数表满足一个块的长度后烧写到目标芯片中,再按块将剩余的随机数表烧写完成,然后将剩余被烧写程序越过表长度后继续按块烧写到目标芯片中,结束;步骤705:向目标芯片中烧写一块被烧写程序,然后返回继续执行步骤701。综上所述,本发明实施例提供的智能编程器及编程方法,利用其内置的智能编程功能,在对固件程序编程的过程中实现自动嵌入随机数表的功能,能够使即便是批量生产的电子产品,由于在每个电子产品中嵌入的随机数表都是不同的,都能够利用嵌入在固件程序中的随机数表使电子产品内部主控芯片连接的存储器件的存储规则及加密规则等互不相同,大大提高电子产品的数据安全性,有效避免被破解的风险;另外,本发明实施例提供的智能编程器及编程方法无需对计算机的硬件做任何改动,生产人员可以像使用现有编程器的方法来使用本发明实施例提供的智能编程器,使用户及生产人员的操作更简单方便,不会增加开发成本及培训成本。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。权利要求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所述的智能编程方法,其特征是所述所述随机数表具体为全排列随机数表。全文摘要提高电子产品的数据安全性,有效避免被破解的智能编程器,技术方案是包括设置模块、表生成模块、编程模块、程序存储模块和编程接口,其中设置模块和表生成模块分别与编程模块相连;设置模块用于设置所述表生成模块生成的随机数表的表首地址和表长度,表首地址为所述随机数表向目标芯片中烧写的表首位置;表首地址和表长度的数值分别为所述程序存储模块中存储的被烧写程序中设置的常量表表首地址和表长度的数值;表生成模块,用于生成所述设置模块中设置的表长度的随机数表;编程模块,用于通过编程接口将表生成模块生成的随机数表及程序存储模块中存储的被烧写程序以嵌套的方式烧写到目标芯片中。本发明还提供一种编程器的变成方法。文档编号G06F9/445GK101246432SQ200810102738公开日2008年8月20日申请日期2008年3月26日优先权日2008年3月26日发明者于华章,舟陆申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1