本发明涉及嵌入式系统技术领域,尤其涉及一种用于芯片的代码保护方法。
背景技术:
为客户提供方案的sdk,定制开发等服务,定制开发交付以后,客户需要购买某种硬件模块,并烧写定制固件进行批量生产。因为批量生产时,固件的成本是随着硬件模块走的,所以需要限制客户必须使用某种硬件模块。
目前产品主要为wifi模块,其模块内的固件,客户是可以从flash中读取到的,而且由于提供sdk和定制开发服务,在与客户的交流中难免会让客户了解到加密方法,甚至是密钥。所以需要定义一种,即使在客户知道以上信息的情况下,也是不能批量的生成有效的密钥;目前通常的做法是增加加密芯片,这样就会增加模块的成本。
技术实现要素:
鉴于目前存在的上述不足,本发明提供一种用于芯片的代码保护方法,对唯一标识芯片的识别码进行加密,从而达到定制的固件不能被简单的批量复制到其它芯片上,达到代码保护的作用,不增加成本。
为达到上述目的,本发明的实施例采用如下技术方案:
一种用于芯片的代码保护方法,所述用于芯片的代码保护方法包括以下步骤:
采用非对称的加密方法对唯一标识芯片的识别码进行加密生成密文并将密文和识别码写入芯片中;
启动芯片时,对密文进行解密后与识别码进行匹配验证;
若验证通过则芯片启动成功,否则芯片启动失败。
依照本发明的一个方面,所述采用非对称的加密方法对唯一标识芯片的识别码进行加密生成密文并将密文和识别码写入芯片中包括以下步骤:
定义芯片具有一个唯一标识芯片的识别码;
采用rsa加解密算法生成对应的公钥和私钥;
使用私钥对唯一标识芯片的识别码进行加密生成密文;
将密文保存到芯片flash中。
依照本发明的一个方面,所述公钥保存在芯片flash中。
依照本发明的一个方面,所述用于芯片的代码保护方法包括:所述芯片至少由otp和flash两部分组成,所述密文写入flash中,所述识别码存放在otp中。
依照本发明的一个方面,所述唯一标识芯片的识别码为mac地址。
依照本发明的一个方面,所述启动芯片为运行芯片中程序,在运行芯片中程序时,先运行解密算法对密文进行解密获得密文中的识别码。
依照本发明的一个方面,所述用于芯片的代码保护方法包括:在进行芯片固件开发时,把解密算法放在固件开发的程序的lib库中,确保这部分代码在固件启动时会被运行到。
依照本发明的一个方面,所述用于芯片的代码保护方法包括:固件开发的程序还包括检验代码,在程序中校验代码以2进制的形式与芯片重要参数的使用函数存放在一起,放在芯片驱动代码区内,芯片驱动启动时必然调用这些参数来配置芯片的性能,同时也就运行到了密文校验的函数。
依照本发明的一个方面,所述启动芯片时,对密文进行解密后与识别码进行匹配验证包括以下步骤:
在芯片上电启动时从芯片中读取识别码和密文;
在读取到识别码和密文后通过解密算法对密文进行解密得到明文;
判断明文是否与识别码一致;
若明文与识别码一致则芯片进入正常工作状态,否则芯片进入出错状态。
依照本发明的一个方面,所述用于芯片的代码保护方法包括:在芯片上电启动时从芯片中读取识别码和密文执行后,若没能读取到识别码和密文,芯片进入出错状态。
依照本发明的一个方面,所述芯片包括:系统配置区、程序运行区、程序备份区、用户配置区和其它数据区,其中系统配置区为保护区,所述识别码和密文被写入所述系统配置区,所述程序运行区写入解密算法及程序。
本发明实施的优点:本发明所述的用于芯片的代码保护方法,包括以下步骤:采用非对称的加密方法对唯一标识芯片的识别码进行加密生成密文并将密文和识别码写入芯片中;启动芯片时,对密文进行解密后与识别码进行匹配验证;若验证通过则芯片启动成功,否则芯片启动失败;利用芯片中唯一标识芯片的识别码(mac地址)的唯一性,对其进行加密,从而达到保护代码的功能;利用非对称加密方法的特性,即私钥加密,公钥解密的特性,只要保护好私钥,即使公开公钥和解密算法,也可以达到保护效果;在生产流程中用服务器对唯一标识芯片的识别码(mac地址)进行加密生成密文,并通过生产工具把唯一标识芯片的识别码(mac地址)和密文保存到芯片模块中,其中唯一标识芯片的识别码(mac地址)写入芯片中,从而避免了由于唯一标识芯片的识别码(mac地址)存放位置的暴露而使用其他地址存放唯一标识芯片的识别码(mac地址)的可能性。通过把校验代码和芯片参数使用函数混合编译为2进制文件的方法,可以确保该校验代码可以被运行到。即使在加密算法和解密密钥(公钥)公开的情况下,其保护效果依然有效,并不增加模块成本。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明所述的一种用于芯片的代码保护方法示意图;
图2为本发明所述的应用芯片的模块结构示意图;
图3为本发明所述的芯片flash地址划分示意图;
图4为本发明所述的wifi模块结构示意图;
图5为本发明所述的服务器生成密钥对和加密mac地址流程图;
图6为本发明所述的wifi模块解密和验证的流程图;
图7为本发明所述的wifi模块flash地址划分示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,一种用于芯片的代码保护方法,包括以下步骤:
步骤s1:采用非对称的加密方法对唯一标识芯片的识别码进行加密生成密文并将密文和识别码写入芯片中;
在应用芯片的模块生产过程中,采用非对称的加密方法对唯一标识芯片的识别码进行加密生成密文并将密文和识别码写入芯片中。所述唯一标识芯片的识别码可为mac地址,在其它应用情况下还可为其它识别码,例如二维码、条形码、数字id等。本发明应用以mac地址为例进行说明。此为本发明实施例应用时采用的加密方法是rsa加密算法,在其它应用时还可采用其它非对称加密方法进行实现,例如,采用elgamal、背包算法、rabin、d-h、ecc(椭圆曲线加密算法)等。熟知各种算法的本领域技术人员应能替换应用到本发明中。
用rsa生成一对密钥,公钥和私钥。私钥只保存在公司的服务器上,用于加密,公钥保存在芯片的flash中,用于解密。
模块生产过程中,提交模块的mac地址到服务器上申请密文,服务器把mac用私钥加密后生产密文返回给模块,模块把mac地址保存到芯片的otp中,把密文都保存到flash中;模块的基本结构如图2所示,一般有2个芯片组成,一个为集成了mcu功能的芯片,另一个为保存代码和数据的flash芯片。
如果把mac地址也存放在flash芯片中,就容易暴露mac地址在falsh芯片中的存放地址,这样在客户程序中有可能会让过这块地址而使用其他地址存放真正的mac地址。这样存入的mac地址就没有唯一性的作用,从而也就失去了mac地址加密的效果。所以需要把mac地址存放在芯片中(芯片存放mac地址的位置具有唯一性),就可以保证加密的有效性。
所述芯片包括:系统配置区、程序运行区、程序备份区、用户配置区和其它数据区,其中系统配置区为保护区,所述识别码和密文被写入所述系统配置区,所述程序运行区写入解密算法及程序;如图3所示,为芯片模块flash的地址划分。其中mac地址和mac地址的密文写入系统配置区中,该区域为写保护区,以防止该区域被误操作导致整个模块不能运行。其次,解密公钥被编译到程序的lib库中,该库以二进制出现在给客户的sdk中,所以确保该代码启动时可以被运行到。
步骤s2:启动芯片时,对密文进行解密后与识别码进行匹配验证;
芯片模块启动时,需要检查芯片中的mac地址和flash中的密文是否匹配,模块先把密文通过公钥进行解密,解密后的数据如果和mac地址匹配,则检验通过,否则,检验失败;为了确保这段校验的代码能够运行,在sdk中校验代码以2进制的形式与模块重要参数的使用函数存放在一起,放在驱动代码区内,驱动启动时必然调用这些参数来配置模块的性能,同时也就运行到了密文校验的函数。
由于加密时必须用到私钥,解密时使用公钥,所以只要保护好私钥不泄漏,就可以保证加密过程的安全性。而由于解密时只需要公钥,所以只需要把公钥保存在模块的flash中就行,这样就不会出现无意中把私钥泄露给客户的风险。
由于芯片模块的mac地址必须是每个模块唯一的,否则模块不能正常工作,所以我们可以利用这个特性对mac地址进行加密。
步骤s3:若验证通过则芯片启动成功,否则芯片启动失败。
把密文通过sdk中的公钥解密,得到的明文和mac地址比较是否匹配,如果匹配,则程序进入正常工作状态,否则进入出错状态。
下面,如图4、图5、图6和图7所示,以应用本发明技术方案的wifi模块为例进行实施说明:
由于是客户可能会知道解密算法甚至解密密钥,所以必须采用非对称的加密方式,即加密的过程和解密的过程是不一致的,最终我们采用的是rsa加解密算法;
用rsa生成一对密钥,公钥和私钥。私钥只保存在公司的服务器上,用于加密,公钥保存在wifi模块的flash中,用于解密;
wifi模块生产过程中,提交模块的mac地址到服务器上申请密文,服务器把mac用私钥加密后生产密文返回给wifi模块,模块把mac地址保存到wifi芯片的otp中,把密文都保存到flash中;wifi模块的基本结构如图4所示,一般有2个芯片组成,一个为集成了mcu功能的wifi芯片,另一个为保存代码和数据的flash芯片。
如果把mac地址也存放在flash芯片中,就容易暴露mac地址在falsh芯片中的存放地址,这样在客户程序中有可能会让过这块地址而使用其他地址存放真正的mac地址。这样存入的mac地址就没有唯一性的作用,从而也就失去了mac地址加密的效果。所以需要把mac地址存放在wifi芯片中(wifi芯片存放mac地址的位置具有唯一性),就可以保证加密的有效性。
wifi模块启动时,需要检查wifi芯片中的mac地址和flash中的密文是否匹配,wifi模块先把密文通过公钥进行解密,解密后的数据如果和mac地址匹配,则检验通过,否则,检验失败后,模块不能正常启动;为了确保这段校验的代码能够运行,在sdk中校验代码以2进制的形式与wifi重要参数的使用函数存放在一起,放在wifi驱动代码区内,wifi驱动启动时必然调用这些参数来配置wifi的性能,同时也就运行到了密文校验的函数。
其中,参照图5,其描述了本发明提供的服务器端生成密钥对和加密mac地址的流程:
步骤1:服务器启动后首先从配置文件中读取已有的密钥对,如果可以正确读取,则初始化完毕,等待终端工具发起申请。如果读不到密钥对,则自动生成一个密钥对并保存;
步骤2:服务器收到终端工具(如生产工具)发起的登录申请,经过用户名、密码等合法性认证后,允许其登录;
步骤3:服务器收到终端工具发起的mac地址加密申请后,服务器用私钥对mac地址进行rsa加密;
步骤4:服务器把加密后的密文回复给终端工具
步骤5:终端工具接收的密文后,把mac地址和密文一起发送给wifi模块。
步骤6:wifi模块发mac地址写入到wifi芯片中,同时把密文写入到flash中。
参照图6,其描述了本发明提供的wifi模块解密和验证的流程:
步骤1:wifi模块开发时,先把公钥和解密算法放在固件开发的sdk的lib库中,确保这部分代码在固件启动时会被运行到;
如图7所示,为wifi模块2mbyteflash的地址划分。其中mac地址和mac地址的密文写入系统配置区中,该区域为写保护区,以防止该区域被误操作导致整个wifi模块不能运行。其次,解密公钥被编译到程序的lib库中,该库以二进制出现在给客户的sdk中,所以确保该代码启动时可以被运行到。
步骤2:wifi模块上电启动时,分别从wifi芯片和flash中读取mac地址和密文;
步骤3:如果没有读到mac地址和密文,则程序进入出错状态,否则进行下一步mac地址和密文的验证;
步骤4:把密文通过sdk中的公钥解密,得到的明文和mac地址比较是否匹配,如果匹配,则程序进入正常工作状态,否则进入出错状态。
wifi模块中有mac地址作为每个wifi模块的唯一性标志,所以每个wifi模块必须在生产过程中烧写不同的mac地址,本方法就是通过对mac地址进行加密,从而达到加密的目的。对wifi模块的mac地址进行加密,从而达到定制的固件不能被简单的批量复制到非汉枫生产的wifi模块上。即使,其加解密算法、解密密钥都已经公开的情况下,也不能批量的生成密文。
本发明实施的优点:本发明所述的用于芯片的代码保护方法,包括以下步骤:采用非对称的加密方法对唯一标识芯片的识别码进行加密生成密文并将密文和识别码写入芯片中;启动芯片时,对密文进行解密后与识别码进行匹配验证;若验证通过则芯片启动成功,否则芯片启动失败;利用芯片中唯一标识芯片的识别码(mac地址)的唯一性,对其进行加密,从而达到保护代码的功能;利用非对称加密方法的特性,即私钥加密,公钥解密的特性,只要保护好私钥,即使公开公钥和解密算法,也可以达到保护效果;在生产流程中用服务器对唯一标识芯片的识别码(mac地址)进行加密生成密文,并通过生产工具把唯一标识芯片的识别码(mac地址)和密文保存到芯片模块中,其中唯一标识芯片的识别码(mac地址)写入芯片中,从而避免了由于唯一标识芯片的识别码(mac地址)存放位置的暴露而使用其他地址存放唯一标识芯片的识别码(mac地址)的可能性。通过把校验代码和芯片参数使用函数混合编译为2进制文件的方法,可以确保该校验代码可以被运行到。即使在加密算法和解密密钥(公钥)公开的情况下,其保护效果依然有效,并不增加模块成本。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本领域技术的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。