CN113407184A - 一种诊断安全算法封装及验证方法、系统及存储介质 - Google Patents

一种诊断安全算法封装及验证方法、系统及存储介质 Download PDF

Info

Publication number
CN113407184A
CN113407184A CN202010180057.XA CN202010180057A CN113407184A CN 113407184 A CN113407184 A CN 113407184A CN 202010180057 A CN202010180057 A CN 202010180057A CN 113407184 A CN113407184 A CN 113407184A
Authority
CN
China
Prior art keywords
algorithm
security
dll
diagnostic
file
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.)
Pending
Application number
CN202010180057.XA
Other languages
English (en)
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.)
Guangzhou Automobile Group Co Ltd
Original Assignee
Guangzhou Automobile Group 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 Guangzhou Automobile Group Co Ltd filed Critical Guangzhou Automobile Group Co Ltd
Priority to CN202010180057.XA priority Critical patent/CN113407184A/zh
Publication of CN113407184A publication Critical patent/CN113407184A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种诊断安全算法封装及验证方法,可以利用Visual Studio软件对算法源码进行函数封装,生成标准Windows平台的诊断安全算法dll文件、种子及密钥示例文件,以及根据零部件供应商的编译环境生成相应的库文件;然后将生成的相应文件分别发送给诊断仪软件开发商和零部件供应商进行集成验证。本发明还提供了相应的系统及存储介质。实施本发明,可以简单快速定位解锁失败的原因,提高诊断数据交互验证效率;同时适用于不同零部件供应商的编译环境,保密性好,且易于维护以及扩展。

Description

一种诊断安全算法封装及验证方法、系统及存储介质
技术领域
本发明涉及车辆诊断安全算法设计领域,特别是涉及一种诊断安全算法封装及验证方法、系统及存储介质。
背景技术
对于用于诊断仪(Tester)与车辆ECU((Electronic Control Unit,电子控制单元)之间的诊断安全算法的设计,通常都是主机厂(如整车厂或控制系统商)直接释放源码给供应用商进行软件集成,或者使用零部件供应商提供的编译器环境生成库文件后再给供应商软件集成;而诊断仪一般都是主机厂直接使用源码进行开发(也可以委外开发)。而直接使用源码的不足之处在于,对源码进行修改容易就会造成多个项目之间容易混淆,且同一源码在不同编译环境(数据对齐方式大端小端差异)下,经常出现ECU实际回复的密钥与诊断仪计算的不一样而解锁失败,诊断仪无法验证二者的正确性,排查起来非常困难。
目前主机厂的安全算法封装多用于零部件供应商,以减小安全算法源码泄漏的风险。常见的封装库文件为.lib或.a格式,但供应商软件开发编译环境及控制芯片差异很大,主机厂维护管理各个编译环境库文件需要耗费大量人力及成本。
发明内容
本发明所要解决的技术问题在于,提供一种诊断安全算法封装及验证方法、系统及存储介质。可以适用不同零部件供应商的编译环境,保密性好,且易于维护以及扩展。
本发所采用的技术方案在于,一方面提供一种诊断安全算法封装及验证方法,所述诊断安全算法用于诊断仪与车辆内部的ECU之间进行安全通信,所述方法包括如下步骤:
步骤S10,生成诊断安全算法的源码,所述源码中定义有种子与密钥的计算关系;
步骤S11,利用Visual Studio软件对所述诊断安全算法源码进行编译,生成诊断安全算法dll文件;
步骤S12,利用Visual Studio软件加载所述诊断安全算法dll文件,验证种子及密钥正确性,并生成包含多组种子和密钥对应关系的种子及密钥示例文件;
步骤S13,根据ECU零部件供应商所采用的软件编译环境,将所述诊断安全源码生成供ECU零部件供应商所使用的诊断安全算法库文件;
步骤S14,输出所述诊断安全算法dll文件、种子及密钥示例文件,供诊断仪软件开发方进行诊断仪软件集成验证;
步骤S15,输出所述诊断安全算法库文件、种子及密钥示例文件,供ECU零部件供应商进行ECU软件集成验证。
其中,所述步骤S11进一步包括:
步骤S110,利用Visual Studio软件的dll工程向导生成标准dll工程,确定供各类诊断仪使用的dll工程导出算法的函数接口及输入输出参数;
步骤S111,确定所述诊断安全算法与所述dll工程导出算法之间的调用接口及返回值信息。
其中,所述步骤S12进一步包括:
步骤S120,通过预生成的dll算法库文件校核软件加载所述诊断安全算法dll文件;
步骤S121,产生对于不同安全等级的多组随机数作为安全种子Seed,通过调用dll工程导出算法的函数接口,从所述诊断安全算法dll文件中获得对应组安全密钥Key;
步骤S122,把所述不同安全等级的多组安全种子与安全密钥一一对应,并组合起来存储于txt文本中,形成种子及密钥示例文件。
其中,所述步骤S12进一步包括:
步骤S120,通过预生成的dll算法库文件校核软件加载所述诊断安全算法dll文件;
步骤S123,手动输入安全种子及安全等级参数,并显示通过诊断安全算法计算出来的密钥;
步骤S124,通过调用dll工程导出算法的函数接口,从所述诊断安全算法dll文件中获得所述输入安全种子及安全等级所对应的安全密钥;
步骤S125,对比步骤S123中获得的密钥与步骤S124中的密钥是否相同,以完成手动验证功能。
其中,所述供ECU零部件供应商所使用的诊断安全算法库文件格式为.lib格式或.a格式。
相应地,作为本发明的另一方面,还提供一种诊断安全算法封装及验证系统,所述诊断安全算法用于诊断仪与车辆内部的ECU之间进行安全通信,所述系统包括:
源码生成单元,用于生成诊断安全算法的源码,所述源码中定义有种子与密钥的计算关系;
诊断安全算法dll文件生成单元,用于利用Visual Studio软件对所述诊断安全算法源码进行编译,生成诊断安全算法dll文件;
验证单元,用于利用Visual Studio软件加载所述诊断安全算法dll文件,验证种子及密钥正确性,并生成包含多组种子和密钥对应关系的种子及密钥示例文件;
供应商库文件生成单元,用于根据ECU零部件供应商所采用的软件编译环境,将所述诊断安全源码生成供ECU零部件供应商所使用的诊断安全算法库文件;
第一输出单元,用于输出所述诊断安全算法dll文件、种子及密钥示例文件,供诊断仪软件开发方进行诊断仪软件集成验证;
第二输出单元,用于输出所述诊断安全算法库文件、种子及密钥示例文件,供ECU零部件供应商进行ECU软件集成验证。
其中,所述诊断安全算法dll文件生成单元进一步包括:
标准dll工程生成单元,用于利用Visual Studio软件的dll工程向导生成标准dll工程,确定供各类诊断仪使用的dll工程导出算法的函数接口及输入输出参数;
关联调用生成单元,用于确定所述诊断安全算法与所述dll工程导出算法之间的调用接口及返回值信息。
其中,所述验证单元进一步包括:
加载单元,用于通过预生成的dll算法库文件校核软件加载所述诊断安全算法dll文件;
示例文件形成单元,用于产生对于不同安全等级的多组随机数作为安全种子Seed,通过调用dll工程导出算法的函数接口,从所述诊断安全算法dll文件中获得对应组安全密钥Key;把所述不同安全等级的多组安全种子与安全密钥一一对应,并组合起来存储于txt文本中,形成种子及密钥示例文件;
手工验证单元,用于通过手动输入安全种子及安全等级参数,并显示通过诊断安全算法计算出来的密钥;通过调用dll工程导出算法的函数接口,从所述诊断安全算法dll文件中获得所述输入安全种子及安全等级所对应的安全密钥;验证所述计算出来的密钥与获得的安全钥匙是否相同。
其中,所述供ECU零部件供应商所使用的诊断安全算法库文件格式为.lib格式或.a格式。
相应地,作为本发明的再一方面,还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行前述的方法。
实施本发明实施例,具有如下的有益效果:
本发明实施例提供一种诊断安全算法封装及验证方法、系统及方法,利用VisualStudio软件对算法源码进行函数封装,生成标准Windows平台dll算法库文件,主机厂可以掌握核心算法函数接口及输入输出参数,而诊断仪或零部件供应商无法进行修改,可以保证算法源码的保密性以及安全性;
同时,本发明所生成的dll文件可以被诊断仪直接调用集成,极大的减轻了诊断仪算法开发及验证的工作,若诊断仪和ECU正常数据交互过程中出现解锁失败,则能很容易地判断出零部件供应商软件集成问题;
而且,在本发明实施例中,通过软件自动生成多组种子/密钥示例,可方便诊断仪或零部件供应商进行软件集成验证,由于在生成相应库文件时已经进行了算法示例验证,在诊断仪或零部件供应商处进行的为二次验证,可以提高准确性,从而提高诊断开发效率;也可以减少实际开发中安全访问解锁失败率;
另外,在本发明实施例中,本发明的方法均基于标准C语言模块化开发,函数移植性强,可适配不同零部件供应商编译环境,降低主机厂诊断人员维护管理成本。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,根据这些附图获得其他的附图仍属于本发明的范畴。
图1是本发明提供的一种诊断安全算法封装及验证方法的主流程示意图;
图2是本发明涉及的诊断安全算法dll文件一个例子的属性示意图;
图3是图1中步骤S12的一个例子中的更详细的流程示意图;
图4是图3中涉及的dll算法库文件校核软件的主界面示意图;
图5是图3中涉及的种子及密钥示例文件的示意图;
图6是图1中步骤S12的另一个例子中的更详细的流程示意图;
图7是本发明提供的一种诊断安全算法封装及验证系统的结构示意图;
图8是图7中诊断安全算法dll文件生成单元的结构示意图;
图9是图7中验证单元的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
如图1所示,示出了本发明提供一种诊断安全算法封装及验证方法主流程示意图,一并结合图2至图6所示,在本实施例中,所述诊断安全算法用于诊断仪与车辆内部的ECU之间进行安全通信,所述方法包括如下步骤:
步骤S10,生成诊断安全算法的源码,所述源码中定义有种子与密钥的计算关系;
可以理解的是,此处所说诊断安全算法,简单来讲,就是诊断设备(诊断仪)与ECU之间提前约定好的一个种子/密钥的数学逻辑关系表达式。我们可以定义安全算法种子为Seed,安全密钥为Key,因此这里可以由主机厂(如汽车整车厂)根据ECU的安全等级要求,定义不同的数学公式。
例如,以最简单的“Key=Seed^0x11223344”为例来说明诊断设备与ECU之间的安全协商过程。
通过将Seed与固定值0x11223344进行“异或”操作可以得到Key值。诊断设备通过发送27服务请求Seed,ECU回复随机数Seed(如0x12345678)后,诊断设备将Seed与固定值0x11223344进行“异或”操作得到Key1值(如0x316653C),然后诊断设备将Key1发给ECU进行请求解锁,此时ECU内部使用相同的Seed(如0x12345678)与固定值0x11223344进行“异或”操作后计算出Key2(如0x 316653C),通过比较Key2与Key1值,若相同则解锁成功回复肯定应答;否则解锁失败,ECU回复否定应答。
另外,不同安全等级(Level1对应27 01/02诊断服务;Level2对应27 03/04等等)所使用的数学公式也可以不同,如Level1使用了固定值0x0x11223344,Level2可使用另外一个固定值0x55667788,或者使用更复杂的数学公式。可以理解的是,上述具体的数学公式仅为举例,非为限制。
步骤S11,利用Visual Studio软件对所述诊断安全算法源码进行编译,生成诊断安全算法dll文件;
此处的dll文件是由Visual Studio软件编译自动生成的Windows平台动态链接库文件。它是一个包含可由多个程序,同时使用的代码和数据的库文件,任何基于Windows平台的应用程序(如诊断仪软件)运行时,都可以通过封装后的导出函数接口来直接访问程序功能块,实现功能块共享及软件高效开发。本发明生成的dll文件式样如下图2所示。
进一步的,在具体的例子中,所述步骤S11进一步包括:
步骤S110,利用Visual Studio软件的dll工程向导生成标准dll工程,确定供各类诊断仪使用的dll工程导出算法的函数接口及输入输出参数;
具体地,不用类型的诊断仪可以采用不同的环境算法接口,例如一些诊断仪可以采用CANoe软件、Vehicle Spy软件等;故在定义导出算法函数接口及输入输出参数时,需要考虑诊断设备使用端的需求,若要支持多个设备,只需要将逐个定义各导出函数;
此处以CANoe软件接口为例,在一个例子中,可以定义导出函数接口原型为:
__declspec(dllexport)int GenerateKeyEx(const unsigned char*iSeedArray,unsigned short iSeedArraySize,const unsigned int iSecurityLevel,const char*iVariant,unsigned char*ioKeyArray,unsigned int iKeyArraySize,unsigned int&oSize);
其中:__declspec(dllexport)为Visual Studio软件动态链接库dll工程,对于导出函数、类、对象等供外面可调用的关键字。
函数返回值为int类型,0x00代表函数运行成功;其余值代表运行失败(也可详细枚举失败原因,如iSecurityLevel安全等级参数错误可返回0x01等等);
iSeedArray:该参数为输入安全种子数组,一般安全种子为多字节,因此需要使用字节数组存储;
iSeedArraySize:该参数为输入安全种子数组长度,一般长度为4字节,配合iSeedArray一起使用。
iSecurityLevel:该参数为输入诊断安全访问级别。如Ox01代表Level1等级;0x03代表Level2等级;
iVariant:该参数为输入预留参数,暂无使用。
ioKeyArray:该参数为输出Key安全密钥,这里也为多字节,需要使用字节数组存储;
iKeyArraySize:该参数为Key安全密钥数组支持的最大长度。
oSize:该参数为输出Key安全密钥数组实际长度,一般也为4字节,配合ioKeyArray一起使用。
步骤S111,确定所述诊断安全算法与所述dll工程导出算法之间的调用接口及返回值信息。
为了实现模块化调用,需要对步骤一中的主机厂核心算法进行封装。例如在一个例子中,主机厂核心算法函数原型可以采用下面的例子:
int GAC_SA(const unsigned char*iSeedArray,unsigned shortiSeedArraySize,const unsigned int iSecurityLevel,const char*iVariant,unsignedchar*ioKeyArray,unsigned int*oSize);
其中:函数返回值为int类型,0x00代表函数运行成功;其余值代表运行失败(也可详细枚举失败原因,如iSecurityLevel安全等级参数错误可返回0x01等等);
iSeedArray:该参数为输入安全种子数组,一般安全种子为多字节,因此需要使用字节数组存储;
iSeedArraySize:该参数为输入安全种子数组长度,一般长度为4字节,配合iSeedArray一起使用。
iSecurityLevel:该参数为输入诊断安全访问级别。如Ox01代表Level1等级;0x03代表Level2等级;
iVariant:该参数为输入预留参数,暂无使用。
ioKeyArray:该参数为输出Key安全密钥,这里也为多字节,需要使用字节数组存储;
oSize:该参数为输出Key安全密钥数组实际长度,一般也为4字节,配合ioKeyArray一起使用。
从上述步骤S110以及步骤S111,可以看出主机厂核心算法函数原型与dll导出算法函数原型参数及返回值基本相同,因此在调用的时候只需要对应参数直接传递即可,这里多余的iKeyArraySize参数可以忽略不传递。
步骤S12,利用Visual Studio软件加载所述诊断安全算法dll文件,验证种子及密钥正确性,并生成包含多组种子和密钥对应关系的种子及密钥示例文件;
在本发明的一个例子中,验证种子及密钥正确性的过程可以采用自动验证与手工验证的方式。
如图3所示,示出了采用自动验证的过程,所述步骤S12具体包括:
步骤S120,通过预生成的dll算法库文件校核软件加载所述诊断安全算法dll文件;
其中,dll算法库文件校核软件可以利用Visual Studio软件应用程序工程向导生成exe工程来实现;如图4所示,示出了dll算法库文件校核软件的主界面示意图。
在一个例子中,加载所述诊断安全算法dll文件具体过程如下:首先利用Windows平台提供的LoadLibrary函数或LoadLibraryEx函数在应用程序运行时加载dll文件,然后利用GetProcAddress函数获得要调用的导出的dll函数(如GenerateKeyEx)的地址信息,接着软件正常使用GenerateKeyEx函数功能完成种子/密钥生成解锁,最后使用完dll文件后利用FreeLibrary库函数释放库文件即可;
步骤S121,产生对于不同安全等级的多组随机数作为安全种子Seed,通过调用dll工程导出算法的函数接口(如GenerateKeyEx),从所述诊断安全算法dll文件中获得对应组安全密钥Key,具体地,可生成不同Level等级下的10组安全密钥Key;
步骤S122,把所述不同安全等级的多组安全种子与安全密钥一一对应,并组合起来存储于txt文本中,形成种子及密钥示例文件。如图5所示,即示出了包含两个不同安全等级下的十组安全种子与安全密钥对应关系的种子及密钥示例文件。
如图6所示,示出了采用人工验证的过程,所述步骤S12具体包括:
步骤S120,通过预生成的dll算法库文件校核软件加载所述诊断安全算法dll文件;此步骤的详细内部可以参照前述图中的步骤S120;
步骤S123,手动输入安全种子及安全等级参数,并显示通过诊断安全算法计算出来的密钥;
步骤S124,通过调用dll工程导出算法的函数接口(如GenerateKeyEx),从所述诊断安全算法dll文件中获得所述输入安全种子及安全等级所对应的安全密钥;
步骤S125,对比步骤S123中获得的密钥与步骤S124中的密钥是否相同,以完成手动验证功能。
步骤S13,根据ECU零部件供应商所采用的软件编译环境,将所述诊断安全源码生成供ECU零部件供应商所使用的诊断安全算法库文件;此处,库文件格式由零部件供应商所提供的软件编译器环境决定,一般嵌入式软件开发支持的库文件格式为.lib或.a格式。即,所述供ECU零部件供应商所使用的诊断安全算法库文件格式可以为诸如.lib格式或.a格式。不同格式的库文件生成原理是类似的,都是将基础的C语言源码利用软件开发环境提供的编译器编译后自动生成。
步骤S14,输出所述诊断安全算法dll文件、种子及密钥示例文件,供诊断仪软件开发方进行诊断仪软件集成验证;可以理解的是,此处输出的文件是给诊断仪软件设计开发人员,而非4s店售后诊断仪使用人员。其中诊断仪软件集成验证工作主要是诊断仪软件设计开发人员验证dll文件是否可以正常调用并准确计算出Key值,避免出现诊断仪调用错误从而计算错误key值造成解锁失败情况。
步骤S15,输出所述诊断安全算法库文件、种子及密钥示例文件,供ECU零部件供应商进行ECU软件集成验证。此处输出的文件是给零部件供应商的设计开发人员。这里的软件集成验证工作主要是供应商诊断设计开发人员验证相应库文件(.a或.lib)文件是否可以正常调用并准确计算出Key值,避免出现供应商诊断开发人员调用错误从而计算错误Key造成解锁失败情况。
可以理解的是,在本发明提供的诊断安全算法封装及验证方法中,将复杂的诊断安全算法源码通过dll文件方式封装及进行导出算法函数接口控制,软件通过加载封装后的dll文件,可灵活实现整车多个ECU的种子/密钥手动计算验证及自动生成种子/密钥示例txt文件。然后,利用于零部件供应商提供的软件编译环境重新编译生成相应的库文件,最后将dll文件、零部件供应商库文件、种子/密钥示例txt文件分别释放给诊断仪和零部件供应商软件集成并验证即可,操作简单可靠。
同时,在本发明实施例中,将诊断安全算法源码封装成dll文件,诊断仪可以直接调用,提高了算法源码的保密性同时也方便常用诊断仪的合理使用;可以理解的是,本发明中,将算法源码封装成dll文件管理,是由于dll文件比其他格式(如源码为文本格式)不容易被篡改,一般常用软件打不开(必须二次编程方可使用,但也不能修改其内容),因此能够提高算法源码的保密性;
再次,在本发明实施例中,可以自动生成多组种子/密钥示例,可方便诊断仪或零部件供应商软件集成验证,确保准确无误,提高诊断开发效率;可以理解的是,由于主机厂提供了多组种子/密钥示例说明,诊断仪或零部件供应商进行诊断软件集成时可用来做同步验证准确性;由于在生成相应库文件时已经做过算法示例验证,在诊断仪或零部件供应商处的验证为二次验证,故可以确保准确性;
另外,封装库文件也便于以后算法扩展性,例如在其他的例子中,也可以将源码设计的更为复杂(例如AES/DES算法等),通过本发明的方法计算Seed-Key示例远远比通过源码手动计算校验更为快捷准确。
相应地,如图7所示,示出了本发明提供的一种诊断安全算法封装及验证系统1的结构示意图。一并参考图8至图9所示,在本实施例中,所述诊断安全算法用于诊断仪与车辆内部的ECU之间进行安全通信,所述系统1包括:
源码生成单元11,用于生成诊断安全算法的源码,所述源码中定义有种子与密钥的计算关系;
诊断安全算法dll文件生成单元12,用于利用Visual Studio软件对所述诊断安全算法源码进行编译,生成诊断安全算法dll文件;
验证单元13,用于利用Visual Studio软件加载所述诊断安全算法dll文件,验证种子及密钥正确性,并生成包含多组种子和密钥对应关系的种子及密钥示例文件;
供应商库文件生成单元14,用于根据ECU零部件供应商所采用的软件编译环境,将所述诊断安全源码生成供ECU零部件供应商所使用的诊断安全算法库文件;在一些具体的例子,所述供ECU零部件供应商所使用的诊断安全算法库文件格式为.lib格式或.a格式;
第一输出单元15,用于输出所述诊断安全算法dll文件、种子及密钥示例文件,供诊断仪软件开发方进行诊断仪软件集成验证;
第二输出单元16,用于输出所述诊断安全算法库文件、种子及密钥示例文件,供ECU零部件供应商进行ECU软件集成验证。
在具体的例子中,所述诊断安全算法dll文件生成单元12进一步包括:
标准dll工程生成单元120,用于利用Visual Studio软件的dll工程向导生成标准dll工程,确定供各类诊断仪使用的dll工程导出算法的函数接口及输入输出参数;
关联调用生成单元121,用于确定所述诊断安全算法与所述dll工程导出算法之间的调用接口及返回值信息。
在具体的例子中,所述验证单元13进一步包括:
加载单元130,用于通过预生成的dll算法库文件校核软件加载所述诊断安全算法dll文件;
示例文件形成单元131,用于产生对于不同安全等级的多组随机数作为安全种子Seed,通过调用dll工程导出算法的函数接口,从所述诊断安全算法dll文件中获得对应组安全密钥Key;把所述不同安全等级的多组安全种子与安全密钥一一对应,并组合起来存储于txt文本中,形成种子及密钥示例文件;
手工验证单元132,用于通过手动输入安全种子及安全等级参数,并显示通过诊断安全算法计算出来的密钥;通过调用dll工程导出算法的函数接口,从所述诊断安全算法dll文件中获得所述输入安全种子及安全等级所对应的安全密钥;验证所述计算出来的密钥与获得的安全钥匙是否相同。
可以理解的是,更多的细节可以参照述对图1至图6的描述。
基于同一发明构思,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行本发明实施例的上述方法实施例中图1至图6所描述的诊断安全算法封装及验证方法。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
实施本发明实施例,具有如下的有益效果:
本发明实施例提供一种诊断安全算法封装及验证方法、系统及方法,利用VisualStudio软件对算法源码进行函数封装,生成标准Windows平台dll算法库文件,主机厂可以掌握核心算法函数接口及输入输出参数,而诊断仪或零部件供应商无法进行修改,可以保证算法源码的保密性以及安全性;
同时,本发明所生成的dll文件可以被诊断仪直接调用集成,极大的减轻了诊断仪算法开发及验证的工作,若诊断仪和ECU正常数据交互过程中出现解锁失败,则能很容易地判断出零部件供应商软件集成问题;
而且,在本发明实施例中,通过软件自动生成多组种子/密钥示例,可方便诊断仪或零部件供应商进行软件集成验证,由于在生成相应库文件时已经进行了算法示例验证,在诊断仪或零部件供应商处进行的为二次验证,可以提高准确性,从而提高诊断开发效率;也可以减少实际开发中安全访问解锁失败率;
另外,在本发明实施例中,本发明的方法均基于标准C语言模块化开发,函数移植性强,可适配不同零部件供应商编译环境,降低主机厂诊断人员维护管理成本。
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

Claims (10)

1.一种诊断安全算法封装及验证方法,所述诊断安全算法用于诊断仪与车辆内部的ECU之间进行安全通信,其特征在于,所述方法包括如下步骤:
步骤S10,生成诊断安全算法的源码,所述源码中定义有种子与密钥的计算关系;
步骤S11,对所述诊断安全算法源码进行编译,生成诊断安全算法dll文件;
步骤S12,加载所述诊断安全算法dll文件,验证种子及密钥正确性,并生成包含多组种子和密钥对应关系的种子及密钥示例文件;
步骤S13,根据ECU零部件供应商所采用的软件编译环境,将所述诊断安全源码生成供ECU零部件供应商所使用的诊断安全算法库文件;
步骤S14,输出所述诊断安全算法dll文件、种子及密钥示例文件,供诊断仪软件开发方进行诊断仪软件集成验证;
步骤S15,输出所述诊断安全算法库文件、种子及密钥示例文件,供ECU零部件供应商进行ECU软件集成验证。
2.如权利要求1所述的方法,其特征在于,所述步骤S11进一步包括:
步骤S110,利用Visual Studio软件的dll工程向导生成标准dll工程,确定供各类诊断仪使用的dll工程导出算法的函数接口及输入输出参数;
步骤S111,确定所述诊断安全算法与所述dll工程导出算法之间的调用接口及返回值信息。
3.如权利要求2所述的方法,其特征在于,所述步骤S12进一步包括:
步骤S120,通过预生成的dll算法库文件校核软件加载所述诊断安全算法dll文件;
步骤S121,产生对于不同安全等级的多组随机数作为安全种子,通过调用dll工程导出算法的函数接口,从所述诊断安全算法dll文件中获得对应组安全密钥;
步骤S122,把所述不同安全等级的多组安全种子与安全密钥一一对应,并组合起来存储于txt文本中,形成种子及密钥示例文件。
4.如权利要求2所述的方法,其特征在于,所述步骤S12进一步包括:
步骤S120,通过预生成的dll算法库文件校核软件加载所述诊断安全算法dll文件;
步骤S123,手动输入安全种子及安全等级参数,并显示通过诊断安全算法计算出来的密钥;
步骤S124,通过调用dll工程导出算法的函数接口,从所述诊断安全算法dll文件中获得所述输入安全种子及安全等级所对应的安全密钥;
步骤S125,验证所述计算的密钥以及获得的密钥是否相同。
5.如权利要求1至4任一项所述的方法,共特征在于,所述供ECU零部件供应商所使用的诊断安全算法库文件格式为.lib格式或.a格式。
6.一种诊断安全算法封装及验证系统,所述诊断安全算法用于诊断仪与车辆内部的ECU之间进行安全通信,其特征在于,所述系统包括:
源码生成单元,用于生成诊断安全算法的源码,所述源码中定义有种子与密钥的计算关系;
诊断安全算法dll文件生成单元,用于利用Visual Studio软件对所述诊断安全算法源码进行编译,生成诊断安全算法dll文件;
验证单元,用于利用Visual Studio软件加载所述诊断安全算法dll文件,验证种子及密钥正确性,并生成包含多组种子和密钥对应关系的种子及密钥示例文件;
供应商库文件生成单元,用于根据ECU零部件供应商所采用的软件编译环境,将所述诊断安全源码生成供ECU零部件供应商所使用的诊断安全算法库文件;
第一输出单元,用于输出所述诊断安全算法dll文件、种子及密钥示例文件,供诊断仪软件开发方进行诊断仪软件集成验证;
第二输出单元,用于输出所述诊断安全算法库文件、种子及密钥示例文件,供ECU零部件供应商进行ECU软件集成验证。
7.如权利要求6所述的系统,其特征在于,所述诊断安全算法dll文件生成单元进一步包括:
标准dll工程生成单元,用于利用Visual Studio软件的dll工程向导生成标准dll工程,确定供各类诊断仪使用的dll工程导出算法的函数接口及输入输出参数;
关联调用生成单元,用于确定所述诊断安全算法与所述dll工程导出算法之间的调用接口及返回值信息。
8.如权利要求7所述的方法,其特征在于,所述验证单元进一步包括:
加载单元,用于通过预生成的dll算法库文件校核软件加载所述诊断安全算法dll文件;
示例文件形成单元,用于产生对于不同安全等级的多组随机数作为安全种子,通过调用dll工程导出算法的函数接口,从所述诊断安全算法dll文件中获得对应组安全密钥;把所述不同安全等级的多组安全种子与安全密钥一一对应,并组合起来存储于txt文本中,形成种子及密钥示例文件;
手工验证单元,用于通过手动输入安全种子及安全等级参数,并显示通过诊断安全算法计算出来的密钥;通过调用dll工程导出算法的函数接口,从所述诊断安全算法dll文件中获得所述输入安全种子及安全等级所对应的安全密钥;验证所述计算出来的密钥与获得的安全钥匙是否相同。
9.如权利要求6至8任一项所述的系统,共特征在于,所述供ECU零部件供应商所使用的诊断安全算法库文件格式为.lib格式或.a格式。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机上运行时,使得计算机执行权利要求1-5中任一项所述的方法。
CN202010180057.XA 2020-03-16 2020-03-16 一种诊断安全算法封装及验证方法、系统及存储介质 Pending CN113407184A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010180057.XA CN113407184A (zh) 2020-03-16 2020-03-16 一种诊断安全算法封装及验证方法、系统及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010180057.XA CN113407184A (zh) 2020-03-16 2020-03-16 一种诊断安全算法封装及验证方法、系统及存储介质

Publications (1)

Publication Number Publication Date
CN113407184A true CN113407184A (zh) 2021-09-17

Family

ID=77676071

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010180057.XA Pending CN113407184A (zh) 2020-03-16 2020-03-16 一种诊断安全算法封装及验证方法、系统及存储介质

Country Status (1)

Country Link
CN (1) CN113407184A (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103166943A (zh) * 2011-12-19 2013-06-19 北汽福田汽车股份有限公司 一种对电子控制单元ecu目标文件加密传输的方法及系统
US20140189662A1 (en) * 2012-12-31 2014-07-03 Microsoft Corporation Extending A Development Environment
CN104331305A (zh) * 2014-10-15 2015-02-04 联合汽车电子有限公司 产品中应用程序的刷新配置方法
CN106203062A (zh) * 2016-08-29 2016-12-07 广州汽车集团股份有限公司 一种安全验证系统及方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103166943A (zh) * 2011-12-19 2013-06-19 北汽福田汽车股份有限公司 一种对电子控制单元ecu目标文件加密传输的方法及系统
US20140189662A1 (en) * 2012-12-31 2014-07-03 Microsoft Corporation Extending A Development Environment
CN104331305A (zh) * 2014-10-15 2015-02-04 联合汽车电子有限公司 产品中应用程序的刷新配置方法
CN106203062A (zh) * 2016-08-29 2016-12-07 广州汽车集团股份有限公司 一种安全验证系统及方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
李子臣,杨亚涛编著: "《典型密码算法C语言实现》", 国防工业出版社, pages: 15 - 19 *
汽车网络那些事儿: "UDS为什么需要安全算法?——UDS安全访问相关的安全算法(SeedKeyDLL)制作教程与应用示例剖析", pages 1 - 61, Retrieved from the Internet <URL:《https://blog.csdn.net/miracle8510/article/details/104472442?spm=1001.2014.3001.5501》> *

Similar Documents

Publication Publication Date Title
Chudnov et al. Continuous formal verification of Amazon s2n
KR100420569B1 (ko) 아키텍처중간프로그램의신뢰성있는컴파일아키텍처특정버전을발생시키기위한시스템및방법
Dupressoir et al. Guiding a general-purpose C verifier to prove cryptographic protocols
US20050060693A1 (en) Command string parsing
KR101579493B1 (ko) 소스코드 이관제어 방법 및 이를 위한 컴퓨터 프로그램, 그 기록매체
Tsai et al. Testing extensible design patterns in object-oriented frameworks through scenario templates
Bert et al. GeneSyst: a tool to reason about behavioral aspects of B event specifications. Application to security properties
CN114327390A (zh) 基于脚手架的微服务生成方法和装置
Bliudze et al. JavaBIP meets VerCors: towards the safety of concurrent software systems in Java
CN113407184A (zh) 一种诊断安全算法封装及验证方法、系统及存储介质
Simmonds et al. Property patterns for runtime monitoring of web service conversations
WO2009097072A2 (en) Dynamic intermediate language modification and replacement
KR102302229B1 (ko) 사용자 응용정의 파일 및 조종석 디스플레이 시스템 구성 파일의 생성 및 유효성 검증 장치 및 방법
CN114153435A (zh) 一种用于智能合约代码设计生成的eb2s系统及使用方法
Moebius et al. Model-driven code generation for secure smart card applications
Yu et al. Research on application’s credibility verification based on ABD
Runge et al. Information flow control-by-construction for an object-oriented language
EP4361818A1 (en) Generation of a computer simulation package
CN117032727B (zh) 基于区块链的文件编译方法、装置、设备、介质及产品
Lin et al. Justifying the transition from trustworthiness to resiliency via generation of safety cases
Yang et al. Constructing an automated testing oracle: An effort to produce reliable software
Béguelin Formalisation and verification of the globalplatform card specification using the b method
Ahmed et al. Design and Verification of Counter Using HARPO Programming Language
Chuat et al. Code-Level Verification
Scuglik et al. Automatically Generated CSP Specifications.

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination