基于汽车soa的安全访问控制方法
技术领域
1.本发明属于汽车安全访问控制技术领域,更为具体地讲,涉及一种基于汽车soa的安全访问控制方法。
背景技术:2.汽车内传统的静态通信方法难以解决先进驾驶辅助系统(advanced driving assistance system,adas)、空中传输技术(over-the-air technology,ota)、智能座舱等新兴技术对带宽和速度的要求。随着智能化的发展,汽车将来会在物联网中占有重要的地位,因此需具备开放性、网联性和自进化性等特征。
3.在未来,汽车电子电气将从分布式通信变为集中式,业务需要集中的局部功能完成。由此,面向服务的架构(service-oriented architecture,soa)的设计理念和汽车以太网被引入智能汽车,为车联网提供更加灵活便捷的通信和服务方式。在传统车内通信如can总线内,提供了多种安全机制以保护车辆通信的信息和功能安全。但是总线式的通信方法极大剥削了报文的有效负载,难以针对服务做扩展,因此不适合实现soa。车载以太网和some/ip协议则为soa提供了数据高速传输的平台,让车载软件soa化成为可能。但是处在设计初期的汽车soa,需要考虑诸多安全问题,some/ip协议存在很多安全隐患,如信息未加密,无法提供完整性保护、身份认证、访问控制等。
技术实现要素:4.本发明的目的在于克服现有技术的不足,提供一种基于汽车soa的安全访问控制方法,构建基于soa的车载以太网访问控制模型,对some/ip协议进行了改进,提高车载网络的安全访问控制能力。
5.为了实现上述发明目的,本发明基于汽车soa的安全访问控制方法包括以下步骤:
6.s1:构建基于汽车soa服务管理系统,包括整车服务器、域服务器和子服务器,其中整车服务器用于管理整车内的各个域服务器,域服务器用于管理域内的各个子服务器,子服务器用于管理服务发布、订阅和发现,并根据需要请求上级域服务器的服务;每个子服务器对应一个汽车的电子控制单元ecu,并且预先为每个电子控制单元ecu设置一个数字证书;
7.s2:服务端向对应的子服务器进行服务注册,上传该服务的信息,包括服务名称、服务id和作用范围向量x={x1,x2,x3},其中x1=0表示服务不暴露在子系统内,x1=1表示服务暴露在子系统内,x2=0表示服务不暴露在本域内,x2=1表示服务暴露在本域内,x3=0表示服务不暴露在整车范围内,x3=1表示服务暴露在子系统内;
8.子服务器在接收到服务的信息后,首先为服务分配服务地址并设置一个数字证书,然后在本地服务列表中添加该服务的服务名称、服务id、服务地址和数字证书,再根据服务的作用范围向量x判断是否将服务上报,如果x={0,0,0}或x={1,0,0},则不作任何操作,如果x={1,1,0},则子服务器将服务的信息上报至域服务器,如果x={1,1,1},则子服
务器将服务的信息上报至域服务器,再通过域服务器上报至整车服务器;整车服务器在接收到服务信息后,则向其管理的各个域服务器发送服务信息;域服务器在接收到服务信息后,则向其管理的各个子服务器发送服务信息;
9.s3:根据实际需要在汽车的ecu中部署应用;
10.s4:服务管理系统根据各个服务的作用范围,基于some/ip协议进行服务发布,使得该服务作用范围内的各个应用获取服务的服务名称、服务id和服务地址;
11.s5:当应用需要访问某个服务,则根据服务发布阶段获取的服务地址,向服务管理系统申请与该服务建立安全会话,具体步骤包括:
12.s5.1:应用根据自身id生成peerid,然后产生一个椭圆曲线基点g,利用基点g随机生成一个私钥da和公钥qa=da·
g,根据应用所在ecu的数字证书生成数字证书指纹fpa,然后产生一个随机数值n,将应用id、基点g、公钥qa、数字证书指纹fpa连同应用所支持的加密算法识别号一起打包得到会话建立请求报文并发送给服务管理系统;
13.s5.2:服务管理系统在接收到会话建立请求报文后并转发给对应的服务,服务对会话建立请求报文进行解析,获得各字段参数;服务首先根据数字证书指纹对应用进行身份验证,具体方法为:服务通过所在子服务器查询获取应用所在ecu的数字证书,采用数字签名算法计算出服务的指纹,并与会话建立请求报文中解析得到的数字证书指纹fpa进行对比,如果不同则身份验证不通过,丢弃此会话建立请求报文,如果相同则身份验证通过,进行会话建立应答;
14.在进行会话建立应答时,服务根据从会话建立请求报文中解析得到的基点g随机生成临时私钥db和公钥qb=db·
g,根据服务自身所在ecu的数字证书生成数字证书指纹fpb,然后将服务id、基点g、公钥qb、数字证书指纹fpb、随机数值n连同服务所支持的加密算法识别号一起打包得到会话建立响应报文并反馈给应用;
15.s5.3:应用在接收到会话建立响应报文后对其进行解析,获得各字段参数;应用采用步骤s5.2中同样方法根据数字证书指纹fpb对服务进行身份验证,验证通过后应用和服务采用以下方法生成会话密钥:
16.应用根据自身私钥da和服务的公钥qb计算椭圆曲线公钥(xa,ya)=da·
qb,服务根据自身私钥db和应用的公钥qa计算椭圆曲线公钥(xb,yb)=db·
qa;然后应用和服务各自根据椭圆曲线公钥采用相同算法生成会话密钥k;
17.s6:根据实际需要选择tcp协议或udp协议建立应用和服务之间的底层会话;
18.s7:应用向服务发送事件订阅请求报文,服务向应用反馈事件订阅应答报文,完成服务的事件订阅;
19.s8:当服务中发生应用所订阅事件时,则向应用发送订阅内容。
20.本发明基于汽车soa的安全访问控制方法,构建包括整车服务器、域服务器和子服务器的分层服务管理系统,服务注册至子服务器,通过服务的作用范围设置服务的暴露范围,在汽车ecu中部署应用,基于some/ip协议向应用进行服务发布,当应用需要访问某个服务,则向服务管理系统申请与该服务建立安全会话,协商得到会话密钥,在后续事件订阅中,服务和应用采用会话密钥进行报文传输。
21.本发明具有以下有益效果:
22.1)对服务管理系统采用分层管理,便于实际应用中的服务设置和应用部署;
23.2)对some/ip协议进行了改进,增加了安全会话建立机制,提高了服务和应用通信的安全性;
24.3)在应用和服务传输请求/响应报文过程中,可以采用访问管理组件进行访问权限授权,进一步提高了安全性。
附图说明
25.图1是本发明基于汽车soa的安全访问控制方法的具体实施方式流程图;
26.图2是本发明服务管理系统的结构示意图;
27.图3是发明中安全会话建立的流程图;
28.图4是本实施例中会话建立请求/响应报文的报文格式图;
29.图5是本实施例中事件订阅请求/响应报文的报文格式图;
30.图6是本实施例中应用和服务的报文时序图;
31.图7是本实施例中访问管理组件进行请求/响应访问控制的流程图。
具体实施方式
32.下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
33.实施例
34.图1是本发明基于汽车soa的安全访问控制方法的具体实施方式流程图。如图1所示,本发明基于汽车soa的安全访问控制方法的具体步骤包括:
35.s101:构建服务管理系统:
36.由于汽车内的服务种类繁多、数目庞大,车载soa的分布式服务也将导致服务之间的联系变得松散,因而需要构建基于汽车soa的服务管理系统用于进行服务发现,使得这种分布式的服务能够融合成一个整体,让服务能够动态配置、动态扩展、动态加载。本发明中采用中心化和分层级结合的方式来构建服务管理系统,在不同安全范围和层次上实现安全高效的管理服务。
37.图2是本发明服务管理系统的结构示意图。如图2所示,本发明中服务管理系统的节点包括整车服务器、域服务器和子服务器,其中整车服务器用于管理整车内的各个域服务器,域服务器用于管理域内的各个子服务器,子服务器用于管理服务发布、订阅和发现,并根据需要请求上级域服务器的服务。每个子服务器对应一个汽车的电子控制单元ecu(electronic control unit),并且预先为每个电子控制单元ecu设置一个数字证书,该数字证书主要用于后续的安全会话建立,身份验证等。
38.采用以上架构,本发明将车内网络分为子系统、域、整车总控的层级关系,实现分层控制。在实际应用中,不同子服务器所对应的操作系统可能不同,例如linux、windows、qnx、osek等,使用域服务器就可以将不同子服务器联合起来,而整车服务器又可以将不同域服务器联合起来。
39.s102:服务注册:
40.服务端向对应的子服务器进行服务注册,上传该服务的信息,包括服务名称、服务
id和作用范围向量x={x1,x2,x3},其中x1=0表示服务不暴露在子系统内,x1=1表示服务暴露在子系统内,x2=0表示服务不暴露在本域内,x2=1表示服务暴露在本域内,x3=0表示服务不暴露在整车范围内,x3=1表示服务暴露在子系统内。通过作用范围,可以控制外界对于服务的访问范围,提高安全性。显然,作用范围向量有4种取值,分别为{0,0,0}、{1,0,0}、{1,1,0}、{1,1,1}。
41.子服务器在接收到服务的信息后,首先为服务分配服务地址并设置一个数字证书,然后在本地服务列表中添加该服务的服务名称、服务id、服务地址和数字证书,再根据服务的作用范围向量x判断是否将服务上报,如果x={0,0,0}或x={1,0,0},则不作任何操作,如果x={1,1,0},则子服务器将服务的信息上报至域服务器,如果x={1,1,1},则子服务器将服务的信息上报至域服务器,再通过域服务器上报至整车服务器。整车服务器在接收到服务信息后,则向其管理的各个域服务器发送服务信息。域服务器在接收到服务信息后,则向其管理的各个子服务器发送服务信息。子服务器根据服务的作用范围完成服务上报后,可以使得各子服务器下的服务在域范围内或者整车范围内服务共享,能够互相发现。
42.在本发明中,通过服务管理系统的架构和服务的作用范围,可以实现服务的访问控制,例如暴露在整车范围内的服务,只要应用接入整车系统,即可访问该服务,而暴露在域范围内的服务,就只能供接入域服务器的应用进行访问。
43.s103:应用部署:
44.根据实际需要在汽车的ecu中部署应用。
45.s104:服务发布:
46.服务管理系统根据各个服务的作用范围,基于some/ip协议进行服务发布,使得该服务作用范围内的各个应用获取服务的服务名称、服务id和服务地址。
47.s105:安全会话建立:
48.当应用需要访问某个服务,则根据服务发布阶段获取的服务地址,向服务管理系统申请与该服务建立安全会话。在现有some/ip协议中,未提供安全会话建立的方法,本发明对此进行了改进,提出了安全会话建立的具体方式。图3是发明中安全会话建立的流程图。如图3所示,本发明中安全会话建立的具体步骤包括:
49.s301:应用方发送会话建立请求报文:
50.应用产生一个椭圆曲线基点g,利用基点g随机生成一个私钥da和公钥qa=da·
g,根据应用所在ecu的数字证书生成数字证书指纹fpa,然后产生一个随机数值n,将基点g、公钥qa、数字证书指纹fpa连同应用所支持的加密算法识别号一起打包得到会话建立请求报文并发送给服务管理系统。
51.s302:服务反馈会话建立响应报文:
52.服务管理系统在接收到会话建立请求报文后并转发给对应的服务,服务对会话建立请求报文进行解析,获得各字段参数。服务首先根据数字证书指纹对应用进行身份验证,具体方法为:服务通过所在子服务器查询获取应用所在ecu的数字证书,采用数字签名算法计算出服务的指纹,并与会话建立请求报文中解析得到的数字证书指纹fpa进行对比,如果不同则身份验证不通过,丢弃此会话建立请求报文,如果相同则身份验证通过,进行会话建立应答。
53.在进行会话建立应答时,服务生成一个peerid用于标识本次会话,再根据从会话
建立请求报文中解析得到的基点g随机生成临时私钥db和公钥qb=db·
g,根据服务自身所在的ecu的数字证书生成数字证书指纹fpb,然后将peerid、基点g、公钥qb、数字证书指纹fpb、随机数值n连同服务所支持的加密算法识别号一起打包得到会话建立响应报文并反馈给应用。
54.s303:生成会话密钥:
55.应用在接收到会话建立响应报文后对其进行解析,获得各字段参数。相应地,应用采用步骤s302中同样方法根据数字证书指纹fpb对服务进行身份验证,验证通过后应用和服务采用以下方法生成会话密钥:
56.应用根据自身私钥da和服务的公钥qb计算椭圆曲线公钥(xa,ya)=da·
qb,服务根据自身私钥db和应用的公钥qa计算椭圆曲线公钥(xb,yb)=db·
qa。由于椭圆曲线满足乘法交换律和结合律,所以双方计算得到的椭圆曲线公钥相等。然后应用和服务各自根据椭圆曲线公钥采用相同算法生成会话密钥k。本实施例中会话密钥采用哈希算法生成。
57.通过以上方法,应用和服务互相进行了身份验证,建立起了安全会话,在后续过程中即可使用会话密钥进行加密通信,保证会话的安全性。值得一提的是,虽然本发明中应用和服务双方根据非对称密码算法协商会话密钥,但之后的过程则使用对称密码算法和会话密钥k来加解密数据。这是因为非对称算法速度慢,但更安全,而对称算法虽然安全性较低,但是加密速度快。临时的会话密钥采用对称算法在有利于消息的保护的同时,还能提高传输速度。
58.图4是本实施例中会话建立请求/响应报文的报文格式图。如图4所示,本实施例中会话建立请求报文中包括以下字段:
59.some/ip header:报文头部字段,用于标识消息类型,即会话建议请求报文的类型编码。
60.version:版本号;
61.signature algorithm id:数字签名算法id,由应用指定;
62.mac algorithm id:mac(message authentication code,消息认证码)算法id,由应用指定,用来保护报文完整性;
63.length of g:椭圆曲线基点g的长度;
64.ellipse curve cryptography base point:g:椭圆曲线基点g;
65.public key:q:公钥;
66.nonce(n):随机数值n;
67.certificate fingerprint:数字证书指纹。
68.而会话建立响应报文中,除以上字段外,还包括以下字段:
69.symmetric algorithm id:对称加密算法id,用来加解密负载报文;
70.peerid:会话的请求id,随着次数的增加,peerid也会递增;
71.signature length:签名长度;
72.response signature:签名的具体值;
73.s106:建立底层会话:
74.根据实际需要选择tcp协议或udp协议建立应用和服务之间的底层会话。一般来说,在传输少量报文或者对传输时延有特殊要求时,可以选择udp协议,而tcp可以传输超过
1400字节的报文,可在响应速度要求不高时使用。
75.s107:事件订阅:
76.应用向服务发送事件订阅请求报文,服务向应用反馈事件订阅应答报文,完成服务的事件订阅,其中事件订阅请求报文和订阅应答报文中的报文负载采用步骤s105中的会话密钥k进行加密。
77.图5是本实施例中事件订阅请求/响应报文的报文格式图。如图5所示,本实施例中事件订阅请求报文分为报文头部、报文负载和计算得到的mac,其中报文头部包括以下字段:
78.service id:服务id;
79.method id:方法id,包括请求/响应方法,事件通知方法等;
80.length:报文有效部分长度,即length字段之后所有字段的长度;
81.client id:应用id;
82.session id:会话id;
83.protocol version:协议版本;
84.interface version:接口版本;
85.mseeage type:消息类型;
86.return code:返回代码;
87.报文负载中包括以下字段:
88.check number:核对序列号,随地方创建顺序而递增,用于防止重放报文;
89.action type:动作类型或回复标识,当表示请求动作时,一般有:执行服务程序但不返回数据、执行服务程序并返回数据;当表示服务端的回应时,此字段值也会进行标识,后面跟所有返回的参数;
90.parameter number:参数数量;
91.param1 length,param2 length,
…
:各个参数长度;
92.parameters:参数;
93.在应用或服务接收到事件订阅请求/响应报文后,根据length字段提取中报文中的有效部分进行mac计算,然后与报文中附带的mac进行比较,如果两者相同则接收,否则丢弃该报文。这也可以在一定程度上提升访问的安全性。
94.s108:发送订阅内容:
95.当服务中发生应用所订阅事件时,则向应用发送订阅内容。
96.图6是本实施例中应用和服务的报文时序图。如图6所示,本实施例中将改进后的some/ip协议按照功能划分为三个协议组件,分别为se-some/ip-es组件、se-some/ip-sd组件、se-some/ip组件,其中se-some/ip-sd组件、se-some/ip组件与传统some/ip协议中的some/ip-sd组件、some/ip组件的功能相同,se-some/ip-es组件用于建立安全会话。应用和服务通信的过程可以简述如下:
97.1)服务和应用的se-some/ip-sd组件完成服务发布;
98.2)服务和应用的se-some/ip-es组件实现安全会话建立;
99.3)服务和应用的tcp/ip组件建立底层会话;
100.4)服务和应用的se-some/ip-sd组件之间传输事件订阅请求/响应报文,完成事件
订阅;
101.5)服务和应用的se-some/ip组件传输订阅内容。
102.在本实施例中,为了进一步提高访问的安全性,每当应用和服务传输请求/响应报文时,采用预设在服务的访问管理组件进行启动请求/响应访问控制,访问管理组件包括策略强制点pep(policy enforcement point)模块、策略决策点pdp(policy decision point)模块、策略信息点pip(policy information point)模块、访问向量缓存avc(access vector cache)模块和策略管理点pap(policy access point)模块,其中:
103.策略强制点pep模块:用于拦截请求报文,通过执行管理(execution management,em)模块获取应用id,并将请求报文打包发送给策略决策点pdp进行授权计算。
104.策略决策点pdp模块:用于接收来自策略强制点pep转发的请求报文,并调用策略信息点pip模块和策略管理点pap模块计算访问授权结果,然后反馈给策略强制点pep模块。
105.策略信息点pip模块:用于接收策略决策点pdp模块发送的请求报文,从中解析得到属性信息,包括主体、服务、环境、动作。
106.访问向量缓存avc模块:用于记录请求报文的访问权限授权结果。本实施例中访问向量缓存avc模块采用无序字典+双链表组成的lru缓存模块,有一定的容量限制和时效性。
107.策略管理点pap模块:用于管理访问策略和服务的访问策略数据库,包括访问策略的添加、删除,以及访问策略数据库的部署、更新、维护。目前访问策略通常用xacml语言来表示,访问策略由规则组合而来,有4种规则组合算法:拒绝优先算法、允许优先算法、首先采用算法和唯一应用算法。但是xcaml语言书写较为繁琐,并且大多车载设备不支持xacml语言,因此本实施例中将xacml语言编写的访问策略转换成c++语言,具体过程如下:
108.1)由已安装alfa插件的eclipse软件编写alfa语言的访问规则和策略,通过配置必要的属性值和规则,即可完成alfa语言的规则和策略。
109.2)eclipse软件根据alfa语言的规则和策略自动生成xacml语言的策略和规则。
110.3)准备好c++语言的策略模板,策略为类的形式。python安装jinja2库,将关键字段从xacml库中提取出来,并填充到c++模板中,形成访问策略存储至访问策略数据库中策略管理点pap模块。
111.图7是本实施例中访问管理组件进行请求/响应访问控制的流程图。如图7所示,本实施例中访问管理组件进行请求/响应访问控制的具体步骤包括:
112.s701:发起请求:
113.应用根据服务地址将请求报文发送至服务。
114.s702:拦截请求:
115.策略强制点pep模块拦截请求报文并将其发送至策略决策点pdp模块。
116.s703:解析属性:
117.策略决策点pdp模块将请求报文发送给策略信息点pip模块进行属性解析,得到解析后的属性,包括请求报文的主体、服务、环境和动作。
118.s704:查询缓存:
119.策略决策点pdp模块根据请求报文解析得到的属性查询访问向量缓存avc模块中是否存在现有的访问授权结果,如果有,直接向服务反馈访问授权结果,否则执行步骤s705。
120.s705:查询策略:
121.策略决策点pdp模块根据请求报文解析得到的属性查询访问策略管理点pap模块的服务策略数据库,判断应用是否具有访问权限,得到访问权限授权结果。
122.s706:返回访问权限:
123.策略决策点pdp模块将得到的访问权限授权结果返回给策略强制点pep模块。
124.s707:反馈给应用:
125.策略强制点pep模块解析访问权限授权结果,如果允许访问,则将请求报文发送给服务进行处理,反馈响应报文,如果不允许访问,则向应用反馈提示信息。一般来说,策略强制点pep模块会将请求报文和访问权限授权结果进行日记记录,方便以后问责。
126.采用访问控制组件,本实施例中实现了两级访问控制,第一级通过在服务注册的设置的作用范围实现,可以控制服务被发现的范围,屏蔽不必要的授权计算;第二级则使用访问控制组件进行授权计算,根据属性信息动态生成策略,方便部署。
127.尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。