单片机编程器的许可保护方法

文档序号:6578714阅读:233来源:国知局

专利名称::单片机编程器的许可保护方法
技术领域
:本发明涉及单片机
技术领域
,更具体地说,涉及一种单片机编程器的许可保护方法。
背景技术
:单片机应用中,常以散件方式向用户提供单片机芯片,供用户自行生产相关电子产品,因此,需要通过单片机软件授权的方式来控制用户的生产数量。该授权方式分为两种其一是在提供用户单片机芯片之前预先将软件下载于芯片中;其二是直接提供未携带软件的单片机芯片,由用户自行通过单片机编程器下载软件。由于第一种方式需要破坏单片机芯片的包装,会导致芯片引脚氧化,因此,常采用第二种方式。第二种方式中,单片机编程器,是用来将软件代码写入存储器芯片或者单片机内部的工具。现有的单片机编程器多为公共平台,没有对用户进行许可控制,因此,无法对单片机编程器的下载许可进行限制保护,令他人很容易窃取或复制软件,即使部分编程器中对下载次数进行了限制,但其保护不够充分,很容易被破解。这样就不能很好地控制用户生产整机的数量,从而导致经济损失。
发明内容本发明要解决的技术问题在于,针对现有技术存在的上述缺陷,提供一种能够对单片机编程器的编程许可进行保护、防止他人窃取或复制软件从而有效控制用户生产整机数量的单片机编程器的许可保护方法。本发明解决其技术问题所采用的技术方案是提供一种单片机编程器的许可保护方法,该单片机编程器包括中央处理器和数据存储器,其中,所述中央处理器内设有信息存储器,所述中央处理器与所述数据存储器通过串行总线进行数据访问,所述中央处理器根据所接收的编程许可文件生成认证码以将该中央处理器与所述数据存储器进行数据绑定,并将所接收的编程许可文件中的许可信息加密且将其锁定,所述认证码和加密并锁定后的许可信息形成授权信息,存放于所述信息存储器和所述数据存储器中;所述编程器每次上电进行编程许可时所述中央控制器均对所述信息存储器和所述数据存储器中的授权信息进行验证,在所述授权信息正确时进入编程过程并更新所述认证码以及所述许可信息以生成新授权信息,存放于所述信息存储器和所述数据存储器中;在所述授权信息不正确时清除该授权信息。所述编程许可文件还包括登记信息,该登记信息包括用户标识、产品信息以及序列号。所述中央处理器将所接收的编程许可文件中的一固定数据作为运算因子,与该中央处理器所产生的随机数运算生成所述认证码。所述中央处理器将所述登记信息与其内部扰码编码形成授权码,将该授权码作为主密钥加密所述许可信息。所述许可信息加密后通过标准CRC算法和非标准CRC-A算法添加CRC校验码和非标准CRC-A校验码锁定。所述编程器每次上电时所述中央控制器对所述信息存储器和所述数据存储器中的授权信息的验证,包括下列步骤(1)所述中央处理器对所述数据存储器进行认证,确定连接至所述中央处理器的数据存储器是否是与该中央处理器数据绑定的数据处理器,若是,则执行后续步骤,否则,结束编程许可;'(2)所述中央处理器对所述信息存储器中的授权信息进行验证,确定其是否正确;(3)所述中央处理器对所述数据存储器中的授权信息进行验证,确定其是否正确。所述步骤(1)中所述中央处理器对所述数据存储器的认证包括读取所述信息存储器中的授权信息,将该授权信息经CPC运算后,判断其是否合法;读取所述数据存储器中的授权信息,将该授权信息经CPC运算后,判断其是否合法;计算所述授权信息中的扰码,并判断其是否合法;将所述信息存储器中的授权信息和所述数据存储器中的授权信息进行交叉验证由所述中央处理器验证所述数据存储器中的授权信息中的认证码是否正确以及所述信息存储器中相应绑定数据形式的认证码是否正确。所述步骤(1)和所述步骤(2)之间还包括所述中央处理器判断其是否存在许可;若存在许可,则计算生成新许可信息,并判断所述许可信息中所含许可编程次数是否为零,若该许可编程次数不为零,则执行所述步骤(2)并将所述许可编程次数减h.若许可编程次数为零,则提示许可用完;若不存在许可,则判断是否经通信接口收到编程许可文件,在收到编程许可文件时,所述中央处理器根据该编程许可文件生成认证码以将该中央处理器与所述数据存储器进行数据绑定,并根据所接收的许可文件加密许可信息且将其锁定,所述认证码和加密并锁定后的许可信息形成授权信息,存放于所述信息存储器和所述数据存储器中,随后执行所述步骤(3)。所述步骤(2)包括读取所述信息存储器中的授权信息,解密该授权信息,得到许可信息,判断该许可信息是否合法;若所述许可信息合法,则计算所述授权信息的CRC校验码,判断该CRC校验码是否为0;若所述CRC校验码为0,则依次计算所述授权信息的第一扰码和第二扰码并判断其是否合法;若所述第一扰码和第二扰码均合法,则根据所生成的新许可信息更新其信息存储器,并生成新认证码,将该新认证码保存在所述信息存储器中以更新所述中央处理器与所述数据存储器之间的数据绑定。所述步骤(3)包括读取所述数据存储器中的授权信息,经CRC运算,判断其是否合法;从所述授权信息中获取登记信息并判断其是否合法;解密授权信息中的授权码,进入编程过程,并根据新认证码以及新许可信息生成新授权信息,存放于所述信息存储器和所述数据存储器供下次上电使用。本发明通过将许可信息进行加密和锁定后存储在中央控制器的信息存储器和数据存储器中,在单片机编程器每次上电之后进行多次验证无误,才允许进入编程过程,故可以有效防止他人篡改许可信息,且在发现许可信息被篡改时,中央处理器可立即清除许可,锁定用户使用权,这样更为有效防止用户篡改许可信息进行编程。同时,单片机编程器每次上电,均对许可信息进行更新,且每次更新后都重新锁定,来对单片机编程器的下载许可进行有效保护,防止他人窃取或复制软件。进一步地,本发明是将编程许可文件中的登记信息与其扰码一起编码,形成授权码,作为主密钥,对许可信息进行加密,再将许可信息通过标准CRC算法和非标准CRC-A算法进行锁定,许可信息每次上电更新后均重新锁定,且扰码会根据伪随机数随时更新,这样就有效防止他人窃取或复制软件。此外,本发明将中央处理器与数据处理器进行数据绑定,编程器的每次上电都会对数据处理器进行校验认证,并更新所述绑定关系,从而有效防止用户采用拆除存储器复制许可的方式法来获得许可。因此,本发明能够非常有效地防止他人窃取或复制软件,从而避免用户自行采购器件生产,以控制用户生产整机数量,同时也可以避免单片机目标代码直接暴露给用户,有效防止用户采用反编译手段来获得源代码,避免由于他人窃取或复制软件而产生经济损失。下面将结合附图及实施例对本发明作进一步说明。图1是本发明对单片机编程器进行授权许可的流程图。图2是本发明中单片机编程器上电进行编程许可的流程图。图3是图2中本发明中单片机编程器上电认证的详细流程图。图4是图2中本发明中信息存储器数据验证的详细流程图。图5是图2中本发明中数据存储器数据验证的详细流程图。具体实施方式本发明单片机编程器的许可保护方法中,单片机编程器包括中央处理器(Centralprocessingunit,简称CPU)和数据存储器(电可擦可编程只读存储器(ElectricallyErasableProgrammableRead-OnlyMemory,简称EEPROM)),其中CPU内设有信息存储器(Flash存储器,简称闪存)和程序存储器。CPU和数据存储器之间可通过120(Inter—IntegratedCircuit)两线式串行总线进行数据访问。本发明单片机编程器的许可保护方法,在将该单片机编程器初次用于单片机芯片编程时,首先对单片机编程器进行授权许可。如图1所示,由该编程器通过通信接口(例如RS232接口)获取编程许可文件,该编程许可文件中包含有登记信息、许可信息等,步骤S100,其中登记信息包括用户标识、产品信息、序列号(ID号)等固定数据。编程器获得编程许可文件后,在步骤S101,将CPU与数据存储器进行数据绑定。CPU将所获取的编程许可文件中一固定数据存入其信息存储器中,作为运算基数,与该CPU所产生的随机数运算产生认证码,并将该认证码存入数据存储器,作为其授权信息的一部分,并以绑定数据的形式存入CPU信息存储器,作为其授权信息的一部分。在本实施例中,选用用户标识作为固定数据,认证码的运算方式则可以采用如下例举的方式CPU以用户标识作为运算基数(8个字节),通过与其随机数的运算获得6字节结果数据存储到数据存储器中,其中结果数据1=运算基数1+运算基数8+随机数1;结果数据2=运算基数2+运算基数7+随机数2;结果数据3=运算基数3+运算基数6+随机数1;结果数据4=运算基数4+运算基数5+随机数2;结果数据5=CRC16(运算基数1结果数据4)低字节;结果数据6=CRC16(运算基数1结果数据4)高字节。结果数据1表示结果数据的第一个字节,其他依次类推;CRC16是16位循环冗余校验(CyclicRedundancyCheck)。由此得到的结果数据即为认证码。当然也可以采用其他方式来计算认证码,令该认证码与随机数绑定。之后,编程器的每次上电均会通过认证码对数据存储器进行认证,并更新随机数和绑定关系,这一点在下文中进行详细描述。随后,CPU对编程许可文件中的许可信息进行加密并将其锁定,与认证码一起生成授权信息,该授权信息保存在CPU的信息存储器和数据存储器中,步骤S102。具体地说,CPU将编程许可文件中的登记信息(如用户标识、产品信息、序列号等)连同CPU内部扰码以及许可信息等存入数据存储器中,并对编程许可文件中登记信息的用户标识、产品信息、序列号以及CPU内部扰码进行编码,形成授权码,利用该授权码作为加密的主密钥,将许可信息加密。之后,通过标准CRC算法和非标准CRC-A算法将许可信息锁定,也就是对许可信息添加标准CRC校验码和非标准CRC-A校验码,其中,标准CRC算法可逆,其算法多项式可为Y(X)=X16+X15+X13+1;非标准CRC-A算法不可逆,其算法多项式可为Y(X)=X16+X12+X10+X8+X4+1。由此,可形成授权信息,将该授权信息保存在CPU信息存储器和数据存储器中。在一实施例中,数据存储器中所保存的授权信息的数据结构可举例如下表所列<table>tableseeoriginaldocumentpage10</column></row><table>在上述实施例中,许可信息以伪码的方式分别存储在两个位置30H和32H,各占用两字节,地址34H保存许可信息1四个字节的非标准CRC-A校验码,地址36H保存前6字节标准CRC校验码。具体而言,许可信息可以16位无符号整数形式存在,这意味着其最大值可为65535;存储时首先将许可信息循环左移5位,将结果高字节减5AH,低字节加5AH后保存到30H的"许可信息1",将结果高字节减85H,低字节加58H后保存到32H的"许可信息2";然后通过非标准CRC-A算法计算得到校验码,存放到"非标准CRC-A校验码"中,通过标准CRC算法计算得到校验码,存放到"标准CRC校验码"中。第一扰码则可通过将产品信息、编程器序号及许可信息1起始地址的8个字节对应相加,得出8字节结果后,通过循环累积相加法(例如,对于四个数据标识为数据l、数据2、数据3和数据4,结果1=数据1X2,结果2=结果1+数据2X2,......,结果n-结果(n—l)+数据nX2)获得。第二扰码则可通过将第一扰码与许可信息1起始地址的8个字节对应相加,然后将ID号的顺序颠倒后再顺序与前面的结果相加,得到8个字节之后,通过上述循环累积相加法得到。地址48H处存放的标准CRC校验码可通过将从"用于标识"至"ID号"的所有字节经标准CRC算法计算得到。当然,该授权信息还可采用其他形式的数据结构,并不限于上述实施例所举例的结构,而且其中扰码等的计算方式也可以进行变换。本发明单片机编程器的许可保护方法中,当单片机编码器每次上电欲进行编码许可时,如图2所示,首先,在步骤S200,上电过程中通过CPU对数据存储器进行认证,确认该数据存储器是否合法。确认数据存储器是否合法也就是由CPU校验数据存储器中的认证码是否正确,并验证CPU内部信息存储器中相应绑定数据形式的认证码是否正确,由此来判定该数据存储器是否是认证过的,即与CPU数据绑定的数据存储器,以有效防止用户通过拆除数据存储器复制许可的方式获得许可。该上电认证的具体步骤如图3所示。在图3中,CPU首先从其信息存储器中读取其中的授权信息,将该授权信息经CPC运算后,判断其是否合法;再从数据存储器中读取其中的授权信息,将该授权信息经CPC运算后,判断其是否合法;接着,根据扰码计算方法计算授权信息中的扰码,并判断其是否正确;最后,对于信息存储器中的授权信息和数据存储器中的授权信息进行交叉验证,该过程中包括CPU验证数据存储器授权信息中的认证码是否正确以及验证CPU信息存储器中相应的绑定数据是否正确,若认证码正确且信息存储器中的绑定数据正确,即确定该数据存储器是CPU认证过的即数据绑定的数据存储器。上述步骤中,无论哪一步骤判断出信息或数据不合法或不正确,均进行出错提示并清除授权信息,结束许可编程过程;只有在每一步骤中的信息或数据合法或正确的情况下,才进行下一个步骤。在最终的交叉验证正确的情况下,进入图2所示的步骤S201。在步骤S201,单片机编码器判断其是否存在许可,若存在许可,则进入步骤S202,CPU计算生成新许可信息。此时,进行许可信息中所含许可编程次数的判断,步骤S203,以确定许可编程次数是否为零,若许可编程次数不为零,则进入步骤S204,由CPU对其信息存储器进行数据验证,并将许可编程次数减1;若许可编程次数为零,则提示许可用完。步骤S204的信息存储器数据验证,用于验证信息存储器中的授权信息是否正确,若授权信息正确则更新许可信息以及认证码,并进入步骤S206。进一步如图4所示,首先,由CPU从其信息存储器中读取授权信息,解密该授权信息,得到许可信息,判断该许可信息是否合法,在合法的情况下,计算CRC校验码,判断该CRC校验码是否为0。若CRC校验码为0即数据正确,则依次计算第一扰码和第二扰码并判断其是否合法,若均合法,则根据CPU在步骤S202中获得的新许可信息更新其信息存储器,并重新计算生成和保存认证码,以更新CPU与数据存储器之间的绑定关系。该重新计算认证码的方式可如下结果数据1=运算基数1+运算基数8+CRCl+BCH;结果数据2=运算基数2+运算基数7+CRC2+CBH;结果数据3=运算基数3+运算基数6+CRCl+93H;结果数据4-运算基数4+运算基数5+CRC2+39H;运算基数1=运算基数1+运算基数8+结果数据l+BCH;运算基数2=运算基数2+运算基数7+结果数据2+CBH;运算基数3二运算基数3+运算基数6+结果数据3+93H;运算基数4=运算基数4+运算基数5+结果数据4+39H;运算基数5=结果数据1+BCH;运算基数6二结果数据2+CBH;运算基数7=结果数据3+93H;运算基数8=结果数据4+39H;结果数据5=CRC16(运算基数1结果数据4)低字节;结果数据6^CRC16(运算基数1结果数据4)高字节。由此得到的结果数据即为新认证码。当然也可以采用其他方式来更新认证码,从而更新CPU与数据存储器之间的绑定关系,以锁定数据存储器,防止数据存储器被盗用。上述信息存储器数据认证过程中,若还原得到的许可信息不合法,则清除信息存储器中的原许可信息,并跳过CRC校验码计算和判断过程,进入清除第一扰码的过程。若CRC校验码计算结果不为零,即数据有误,则清除计算过程数据,也进入清除第一扰码的过程。若第一扰码不合法,直接进入清除第一扰码的过程。进入清除第一扰码的过程后,判断原授权信息是否被破坏,如果已被破坏,则进行数据恢复,许可编程过程结束;否则,清除第二扰码。当然,如果第二扰码不合法,也直接进入清除第二扰码的过程,许可编程过程结束。由此,可完成信息存储器数据验证。若,信息存储器数据验证无误,则随后进入步骤S206,进行数据存储器数据验证及处理过程。若步骤S201中单片机编码器判断其不存在许可,则进入步骤S205,CPU判断是否经通信接口(例如RS232接口)收到编程许可文件,在收到编程许可文件的情况下,进行授权许可步骤,即执行步骤S101-S102,获得授权信息。随后进入步骤S206,进行数据存储器数据处理过程。否则,若并没有收到编程许可文件,则结束整个许可编程过程。步骤S206的数据存储器数据验证过程,如图5所示,再次对数据存储器中的授权信息进行验证。首先,CPU从数据存储器中读取授权信息,经CRC运算,判断其是否合法,若不合法,则返回错误代码,并清除授权信息,结束许可编程过程;若合法,则从授权信息中获取登记信息并判断其是否合法,若登记信息合法,则解密授权信息中的授权码,从而允许进行编程,即进入编程过程(软件下载过程)。若登记信息不合法,则返回错误代码,并清除授权信息,结束许可编程过程。在编程过程完成之后,CPU根据其信息存储器中所存储的新许可信息和新认证码生成新授权信息,将其保存在CPU信息存储器以及数据存储器中,此时,数据存储器与CPU再次数据绑定,以便单片机编程器下一次上电使用。本发明通过将许可信息进行加密和锁定后存储在中央控制器的信息存储器和数据存储器中,在单片机编程器每次上电之后进行多次验证无误,才允许进入编程过程,故可以有效防止他人篡改许可信息,即使发现许可信息被篡改,中央处理器也可立即清除许可,锁定用户使用权,这样更为有效防止用户篡改许可信息进行编程。同时,单片机编程器每次上电,均对许可信息进行更新,且每次更新后都重新加密和锁定,来对单片机编程器的下载许可进行有效保护,防止他人窃取或复制软件。进一步地,本发明是将编程许可文件中的登记信息与其扰码一起编码,形成授权码,作为主密钥,对许可信息进行加密,再将许可信息通过标准CRC算法和非标准CRC-A算法进行锁定,许可信息每次上电更新后均重新锁定,且扰码会根据伪随机数随时更新,这样就有效防止他人窃取或复制软件。此外,本发明将中央处理器与数据处理器进行数据绑定,编程器的每次上电都会对数据处理器进行校验认证,并更新绑定关系,从而有效防止用户采用拆除存储器复制许可的方式法来获得许可。因此,本发明能够非常有效地防止他人窃取或复制软件,从而避免用户自行采购器件生产,以控制用户生产整机数量,同时也可以避免单片机目标代码直接暴露给用户,有效防止用户采用反编译手段来获得源代码,避免由于他人窃取或复制软件而产生经济损失。权利要求1、一种单片机编程器的许可保护方法,该单片机编程器包括中央处理器和数据存储器,其中,所述中央处理器内设有信息存储器,所述中央处理器与所述数据存储器通过串行总线进行数据访问,其特征在于,所述中央处理器根据所接收的编程许可文件生成认证码以将该中央处理器与所述数据存储器进行数据绑定,并将所接收的编程许可文件中的许可信息加密且将其锁定,所述认证码和加密并锁定后的许可信息形成授权信息,存放于所述信息存储器和所述数据存储器中;所述编程器每次上电进行编程许可时所述中央控制器均对所述信息存储器和所述数据存储器中的授权信息进行验证,在所述授权信息正确时进入编程过程并更新所述认证码以及所述许可信息以生成新授权信息,存放于所述信息存储器和所述数据存储器中;在所述授权信息不正确时清除该授权信息。2、根据权利要求1所述的单片机编程器的许可保护方法,其特征在于,所述编程许可文件还包括登记信息,该登记信息包括用户标识、产品信息以及序列号。3、根据权利要求1或2所述的单片机编程器的许可保护方法,其特征在于,所述中央处理器将所接收的编程许可文件中的一固定数据作为运算因子,与该中央处理器所产生的随机数运算生成所述认证码。4、根据权利要求2所述的单片机编程器的许可保护方法,其特征在于,所述中央处理器将所述登记信息与其内部扰码编码形成授权码,将该授权码作为主密钥加密所述许可信息。5、根据权利要求l、2或4所述的单片机编程器的许可保护方法,其特征在于,所述许可信息加密后通过标准CRC算法和非标准CRC-A算法添加CRC校验码和非标准CRC-A校验码锁定。6、根据权利要求2所述的单片机编程器的许可保护方法,其特征在于,所述编程器每次上电时所述中央控制器对所述信息存储器和所述数据存储器中的授权信息的验证,包括下列步骤(1)所述中央处理器对所述数据存储器进行认证,确定连接至所述中央处理器的数据存储器是否是与该中央处理器数据绑定的数据处理器,若是,则执行后续步骤,否则,结束编程许可;(2)所述中央处理器对所述信息存储器中的授权信息进行验证,确定其是否正确;(3)所述中央处理器对所述数据存储器中的授权信息进行验证,确定其是否正确。7、根据权利要求6所述的单片机编程器的许可保护方法,其特征在于,所述步骤(1)中所述中央处理器对所述数据存储器的认证包括读取所述信息存储器中的授权信息,将该授权信息经CPC运算后,判断其是否合法;读取所述数据存储器中的授权信息,将该授权信息经CPC运算后,判断其是否合法;计算所述授权信息中的扰码,并判断其是否合法;将所述信息存储器中的授权信息和所述数据存储器中的授权信息进行交叉验证由所述中央处理器验证所述数据存储器中的授权信息中的认证码是否正确以及所述信息存储器中相应绑定数据形式的认证码是否正确。8、根据权利要求6或7所述的单片机编程器的许可保护方法,其特征在于,所述步骤(1)和所述步骤(2)之间还包括所述中央处理器判断其是否存在许可;若存在许可,则计算生成新许可信息,并判断所述许可信息中所含许可编程次数是否为零,若该许可编程次数不为零,则执行所述步骤(2)并将所述许可编程次数减l;若许可编程次数为零,则提示许可用完;若不存在许可,则判断是否经通信接口收到编程许可文件,在收到编程许可文件时,所述中央处理器根据该编程许可文件生成认证码以将该中央处理器与所述数据存储器进行数据绑定,并根据所接收的许可文件加密许可信息且将其锁定,所述认证码和加密并锁定后的许可信息形成授权信息,存放于所述信息存储器和所述数据存储器中,随后执行所述步骤(3)。9、根据权利要求8所述的单片机编程器的许可保护方法,其特征在于,所述步骤(2)包括读取所述信息存储器中的授权信息,解密该授权信息,得到许可信息,判断该许可信息是否合法;若所述许可信息合法,则计算所述授权信息的CRC校验码,判断该CRC校验码是否为0;若所述CRC校验码为0,则依次计算所述授权信息的第一扰码和第二扰码并判断其是否合法;若所述第一扰码和第二扰码均合法,则根据所生成的新许可信息更新其信息存储器,并生成新认证码,将该新认证码保存在所述信息存储器中以更新所述中央处理器与所述数据存储器之间的数据绑定。10、根据权利要求9所述的单片机编程器的许可保护方法,其特征在于,所述步骤(3)包括读取所述数据存储器中的授权信息,经CRC运算,判断其是否合法;从所述授权信息中获取登记信息并判断其是否合法;解密授权信息中的授权码,进入编程过程,并根据新认证码以及新许可信息生成新授权信息,存放于所述信息存储器和所述数据存储器供下次上电使用。全文摘要本发明涉及一种单片机编程器的许可保护方法,其中,中央处理器根据所接收的编程许可文件生成认证码以将该中央处理器与数据存储器进行数据绑定,并将所接收的编程许可文件中的许可信息加密且将其锁定,所述认证码和加密并锁定后的许可信息形成授权信息,存放于中央处理器的信息存储器和所述数据存储器中;所述编程器每次上电进行编程许可时所述中央控制器均对所述信息存储器和所述数据存储器中的授权信息进行验证,在所述授权信息正确时进入编程过程并更新所述认证码以及所述许可信息以生成新授权信息,存放于所述信息存储器和所述数据存储器中;在所述授权信息不正确时清除该授权信息。本发明能够保护编程器的编程许可、防止他人复制编程器软件。文档编号G06F21/22GK101576948SQ200910147309公开日2009年11月11日申请日期2009年6月9日优先权日2009年6月9日发明者刘志祥,张宗继,王学军,胡俊睿申请人:航天科工深圳(集团)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1