用于对要在总线系统(bu)、特别是机动车辆的总线系统中传输的至少一个数据分组进行生成和认证检查的装置和方法
1.本发明涉及用于对要在总线系统(bu)、尤其是机动车辆(kfz)的总线系统中传送的至少一个数据分组进行生成(在传送方处)和认证检查(在接收方处)的装置和方法。
2.以下公开文献涉及消息的安全传输:[1] w. zimmermann, r. schmidgal, bussysteme in der fahrzeugtechnik [车辆工程技术中的总线系统],第四版,vieweg + teubner 2011[2] autosar specification of secure onboard communication [autosar安全车载通信规范], 4.3.1版, www.autosar.com [3] yang, g., zhu, b., suder, v., aagaard, m. d., gong, g:the simeck family of block ciphers [simeck块密码系列], cryptographic hardware and embedded systems
‑
ches 2011 [加密硬件和嵌入式系统
‑
ches 2011] (第342
‑
357页). 2015柏林海德堡, 施普林格出版社. pdf位于eprint.iacr.org。
[0003]
消息认证码“mac”可以用于确保所传输消息的完整性,类似于校验和。在加密mac(即,cmac)的情况下,这仅当密钥已知时可以在接收方处计算得到。因此,同样拥有该密钥的接收总线订户可以检查消息内容的真实性。消息本身以未加密形式与mac或cmac一起传输。
[0004]
本发明的目的是在车辆的总线系统中有效地实施安全通信。
[0005]
该目的通过每个独立专利权利要求的主题来实现,特别是在传送方处和在接收方处,在每种情况下实施为方法和装置。本发明的实施例可以有效地允许在车辆的网络中进行安全通信。该方法可以例如有效地允许在数据分组的接收方处对以抗重放方式传送的消息认证码cmac进行认证。
[0006]
在从属权利要求和说明书中指明了本发明的一些特别有利实施例。
[0007]
根据本发明的实施例,计数可以是例如使用计数器生成的、例如表示特别是自上次重启该总线系统至今经由总线系统传送和/或接收的消息的数量(这可以特别容易例如在软件中实施),或者该计数可以是特别是在多个或所有总线订户上可用的至少一个定时器的定时器值(这可以增加安全性,特别是当多个总线订户上可用相同的时间/定时器值时)。
[0008]
根据本发明的实施例,接收方处的认证检查在比较当前接收的消息计数和先前接收的消息计数时特别是可以使用阈值,所述阈值优选地在总线系统重启之后被设置为与其他正常操作相比更高的值,这可以根据情况优化安全性。
[0009]
该总线系统特别是can总线、或can
‑
fd总线、或lin总线、或spi总线、或以太网总线、或i2c总线),可以被提供用于ecu之间的通信。
[0010]
参照附图,本发明的一些有利实施例的另外的特征和优点从本发明的示例性实施例的以下描述中显现,在附图中,通过示例以简化且示意性的方式展示了本发明的一些可能实施例:图1示出了具有根据本发明的呈具有多个总线订户的总线系统形式的网络的机动
车辆,图2示出了通常可以在常规总线系统中使用的待传送数据分组的结构以及数据分组的各部分的生成,图3示出了常规总线系统中的四个数据分组中的每个数据分组中包含的消息和消息认证码的可能值、以及例如数据分组中传输的截断的新鲜度值,图4示出了(在传送方和接收方处的)根据本发明的示例性实施例的步骤和装置,图5通过示例示出了根据本发明的示例性实施例的四个数据分组中的每个数据分组中包含的消息和消息认证码的值、以及例如未在数据分组中传输的计算的中间值。
[0011]
图1针对本发明的一些实施例示意性地示出了在机动车辆kfz(例如,汽车或卡车)的网络(例如,总线bu、特别是can总线和/或lin总线和/或其他总线系统)中数据分组dp1、dp2、dp3、dp4(例如,特别是pdu或协议数据单元,或特别是在can总线中,也称为帧、特别是数据帧)通常如何从传送数据分组dp1、dp2、dp3、dp4的总线订户sg7传输到总线系统bu(其具有多个总线订户/ecu sg1至sg10)的接收数据分组dp1、dp2、dp3、dp4的总线订户sg6的简化描述,这些数据分组dp1、dp2、dp3、dp4可以用于例如控制(连接到总线订户的)马达mot或车门开启器toeff1、toeff2或传输来自传感器的数据等。
[0012]
在de.wikipedia.org/wiki/controller_area_network中通过说明采用can总线形式的网络的示例描述了数据分组dp1、dp2、dp3、dp4的结构。
[0013]
图2提供了传送总线订户sg7使用消息认证码(mac)(以截短形式作为cmac传送)的一般且简化的图示,mac的使用旨在确保所传送的数据分组dp1、dp2、dp3的完整性,这例如类似于校验和,即,允许在数据分组的接收总线订户sg6处对所传送的数据分组dp1、dp2、dp3、dp4进行认证检查。
[0014]
消息认证码(mac,例如从de.wikipedia.org/wiki/message_authentication_code已知)是从长度为m个字节(字节例如每个包括8个位;m例如 = 8)的消息msg(即,待传送的用户数据和/或数据分组中的data字段)中生成的,即,
‑ꢀ
使用(例如,对称)加密方法f(例如,aes
‑
128),该方法使用密钥key(其对于传送总线订户sg7和接收总线订户sg6而言是已知的)和新鲜度值fv(例如,以(消息)计数器或时间戳的形式),即,简化形式为:mac = f(msg, fv, key)。
[0015]
传送总线订户sg7例如在数据分组dp1(或dp2或dp3或dp4或dp0)中向接收总线订户sg6传送以下内容:
‑ꢀ
字节长度为m的(用户数据)消息msg本身(例如,以未加密形式),
‑ꢀ
以及截断(至字节长度f)(该截断的附图标记是trunc)的新鲜度值fv,称为截断后的截断的新鲜度值或tfv(例如,以未加密形式),
‑ꢀ
以及截断(至字节长度n)(附图标记为trunc)的消息认证码mac(在此截断后称为cmac)。
[0016]
m、f、n是自然数,例如是在每种情况下用于所有数据分组的固定值。
[0017]
在未知密钥key的情况下,无法计算出所传送的截断(至长度n)的消息认证码cmac。
[0018]
同样拥有该密钥key的接收总线订户可以使用所接收的截断的消息认证码cmac来
检查消息msg的内容的真实性。
[0019]
如果具有相同消息内容msg的数据分组dg1、dg2、dg3被重复传送,则结果同样始终会是相同的消息认证码mac,并且因此也始终会是相同的所传送的截短的消息认证码cmac。
[0020]
为了避免这种重复(重放攻击),消息可以包含不断变化的值(截断的新鲜度值tfv),例如足够长的计数器(用于数据分组dp1、dp2、dp3的计数器)、时间戳(用于消息的发送)或随值fv、或截断的tfv。
[0021]
一种常用的认证方法是安全车载通信(secoc),其在开头提到的参考文献 [2] [autosar] 中进行了描述,并且用于例如经由机can在车辆中进行安全的实时通信。
[0022]
根据 [2] 的标准secoc方法提供了对关键数据的消息(pdu)的资源高效的认证,并且还提供了对消息新鲜度的确保以防止重放攻击。使用基本对称加密来进行传送(tx
‑
ecu,图1中的sg7)和接收rx
‑
ecu(图1中的sg
‑
6)二者,在此特别是标准aes
‑
128算法。典型的can总线和can
‑
fd扩展也特别适合作为通信介质。
[0023]
图2示出了根据 [2] 的用于通过加密认证器功能生成真实消息的示意性表示。为了稳健地抵抗重放攻击,新鲜度值fv必须随着每次传送而改变,即使消息msg是不变的。因此,fv例如通常是具有足够长的字长的单调计数器,或者是表示多个或所有总线订户已知的全局时间的时间戳。在该表示中,出于效率的原因,新鲜度值和计算出的mac都被截断。
[0024]
通常使用如图2所示的每条消息最多8个字节的典型can总线,例如,长度[m,f,n] = [4,1,3],以免超过(数据分组dp1的)最大数据字节数8。
[0025]
然后,截断本身要求接收总线订户中的未截短的新鲜度值fv(即,更长的单调计数器或时间戳)保持最新或与传送总线订户同步,这可能相当成问题,例如在(总线系统的)启动期间。如果接收总线订户中的cmac不等于所传送的值,则整个消息将因不真实而被拒绝。
[0026]
尽管替代性选项不进行截断完全避免了同步问题,但这需要总线上更高的带宽或传输时间。
[0027]
图3使用表格(为了简单起见复制到这里)示出了标准secoc方法的示例,其中,数据分组dp1的各部分为以下长度(以字节为单位):m = 4,f = 1,n = 3,并且其中,加密方法f(=“认证器”)采用aes
‑
128的形式,并且还有其中,密钥key = 0x2b7e151628aed2a6abf7158809cf4f3c。
msgcount=fvmactfv,cmac0x000000000x000000000x7df76b0c1ab899b33e42f047b91b546f0x007df76b0x000000000x000000010x57127d4034b1bebfaef466b9c7726fc60x0157127d0x000000000x000001000xa0733521fefc4ce22b1981d3ec0df91c0x00a073350x000000000x000001010x82f46d70b372b9b226db1e6142f19a8b0x0182f46d
[0028]
所传送的消息msg在每种情况下都为“0x00000000”;新鲜度值(例如,所发送的数据分组dp1、dp2、dp3、dp4的数量的计数器)fv、消息认证码(mac)以及截短的消息认证码cmac如所示出的。
[0029]
图3中的示例示出了针对恒定消息msg = 0的每个截短的消息认证码cmac(每个的长度都为n = 3个字节)的不同值,这种不同是由于新鲜度值fv(计数器或时间戳)的变化而导致的。
[0030]
这有效地防止了重放攻击,并且真实性通过获知传送总线订户和接收总线订户中
的密钥得到确保。作为截断的结果,现在只有低位字节的tfv(因为f = 1)被传送,这意味着关于fv的高位字节的信息是通过附加的同步来确保的。
[0031]
除了单调计数器之外,例如对全局时间(例如,自2019年1月1日以来的秒数)进行编码的时间戳也适合作为新鲜度值。该解决方案适用于希望每秒进行认证的消息;时间戳仅会在大约136年后溢出。
[0032]
由于常用振荡器的频率容差,即使使用时间戳,也必须通过额外的通信足够频繁地确保网络中全球时间的充分同步。
[0033]
在这方面,根据本发明的方法和装置示出了替代性方法。
[0034]
下面对本发明的示例性实施例进行了描述。
[0035]
图4针对本发明的一些示例性实施例示出了,
‑
(在步骤s1中)在进行传送之前,(传送诸如dp1等数据分组的)传送总线订户sg7可以如何从要包括在数据分组dp1中的(用户数据)消息msg生成同样要包括在数据分组dp1中的消息认证码cmac,
‑
(在步骤s2中)网络、特别是(can等)总线系统bu可以如何用于将数据分组dp1(其特别是包含或仅包含消息msg和消息认证码cmac)从(dp1、dp2、dp3、dp4等的)传送总线订户sg7传输到(dp1、dp2、dp3、dp4等的)接收总线订户sg6,
‑
(在步骤s3中)(接收诸如dp1等数据分组的)接收总线订户sg6可以如何使用所接收的数据分组dp1中包含的消息msg和消息认证码cmac(也包含在dp1中)来对数据分组dp1执行认证检查。
[0036]
在步骤s1中,在进行传送之前,(传送诸如dp1等数据分组的)传送总线订户sg6通过以下方式从要包括在数据分组dp1中的(用户数据)消息msg生成同样要包括在数据分组dp1中的消息认证码cmac:
‑ꢀ
使用在第一加密装置bc1中实施的第一加密方法(bc1)通过第一密钥k1从消息msg生成加密的消息代码cmac1,
‑ꢀ
使用在第二加密装置bc2中实施的第二加密方法(bc2)通过第二密钥k2从计数count++(特别是用于所传送/接收的消息dp1、dp2、dp3、dp4的计数器、或定时器的定时器值)生成加密的计数cyph,
‑ꢀ
使用“异或”(= xor)逻辑运算x利用(xor)逻辑器件x从加密的消息代码cmac1和加密的计数cyph生成(要经由总线系统bu传送的)消息认证码cmac。
[0037]
用于阐明传送总线订户sg7(在传送数据分组之前)的加密的公式可以如下:用于阐明传送总线订户sg7(在传送数据分组之前)的加密的公式可以如下:用于阐明传送总线订户sg7(在传送数据分组之前)的加密的公式可以如下:。
[0038]
本发明的一个实施例可以在传送方处实施为根据s1的方法或装置。
[0039]
本发明的一个实施例可以在接收方处实施为根据s3的方法或装置。
[0040]
本发明的一个实施例还可以实施为根据s1 + s2 + s3组合的方法或装置。
[0041]
因此,提出了在步骤s1中在传送方生成抗重放的cmac。bc1是例如用于使用密钥k1从长度为m个字节的消息msg生成cmac1的块密码算法。bc2是例如具有密钥k2和随着每次传
送而递增的计数器的块密码算法,其块长度为n,例如等于cmac1的长度,即,例如n = 4,bc1 = aes,bc2 = simeck。
[0042]
在步骤s2中,网络、特别是(can等)总线系统bu用于将如此的(一个或多个)数据分组dp1(特别是包含或仅包含消息msg和消息认证码cmac)从(dp1、dp2、dp3、dp4等的)传送总线订户sg6传输到(dp1、dp2、dp3、dp4等的)接收总线订户sg6。
[0043]
在步骤s3中,(接收诸如dp1等数据分组)接收总线订户sg6可以通过以下各项、使用所接收的数据分组dp1中包含的消息msg和消息认证码cmac(也包含在dp1中的)来对数据分组dp1执行认证检查:
‑ꢀ
另一个第一加密设备bc1(例如,与传送方sg7的bc1相同),
‑ꢀ
xor逻辑器件x,
‑ꢀ
解密设备bc2
‑1(bc2上标负一的操作与加密设备bc2相逆)以及
‑ꢀ
比较装置vg(例如,考虑用于计数差(rx
‑
count [n]减去rx
‑
count [n
‑
1])的阈值,例如为1或2或3或4或5或更大)。
[0044]
在步骤3中,(另一个例如以与传送方的bc1相同的方式操作的)第一加密装置bc1利用(由接收总线订户sg6)接收的包含在数据分组dp1中的消息msg,使用(例如不对称或对称的和/或与传送方sg7的已知的相同的)密钥k1来生成加密的消息代码cmac1。
[0045]
利用包含在所接收的数据分组dp1中的消息认证码cmac和加密的消息代码cmac1,使用(xor)逻辑器件x生成中间值ciph。
[0046]
使用解密设备bc2
‑1(bc2上标负一的操作例如与加密设备bc2相逆)从中间值ciph生成当前接收的消息计数rx
‑
count [n](n = 当前接收的消息dp1的数量,即,在此n = 1),使用减法设备sub从当前接收的消息计数减去先前接收的消息计数rx
‑
count [n
‑
1](n = 当前接收的消息dp1的数量,即,当前n = 1)(针对在数据分组dp1之前接收的数据分组dp0相应地确定)。
[0047]
比较装置vg将当前接收的消息计数rx
‑
count [n]与先前接收的消息计数rx
‑
count [n
‑
1]之间的差与1或与阈值s进行比较,并且如果差为一或小于阈值s,则所接收的数据分组dp1被定义为通过认证,但是如果差大于一或大于阈值s,则所接收的数据分组dp1被定义为未通过认证。
[0048]
因此,步骤s3或图4中下部的装置示出了用于在接收方sg6认证抗重放cmac的示意性表示。bc1是例如用于使用密钥k1从消息msg生成cmac1块密码算法。bc2是例如具有密钥k2的块密码算法。使用上次接收的值rx
‑
count [n
‑
1]以例如检查当前接收的计数器rx
‑
count [n]是否符合的认证可接受的容差范围0 < rx
‑
count < s。
[0049]
阈值s可以在(例如,网络/总线系统bu的)重启(restart)、特别是重启(reboot)期间或之后被设置为与其他正常操作(例如s = 1)相比更高的值(例如s = 2...5)。
[0050]
加密设备bc1和加密设备bc2尤其可以彼此不同,或者也可以相同。加密方法bc1、bc2尤其可以彼此不同,或者也可以相同。密钥k1、k2尤其可以彼此不同,或者也可以相同。
[0051]
有利地,在多个或所有总线订户(例如,sg6、sg7)上,加密设备bc1是相同的,加密设备bc2是相同的,加密方法bc1、bc1是相同的,密钥k1是相同的,并且密钥k2是相同的,特别是在使用对称加密的情况下;另一方面,如果使用非对称加密,则有利的是所有订户进行的加密和解密相互匹配。
[0052]
用于阐明接收总线订户sg6的加密、解密和认证检查的公式可以如下:公式可以如下:公式可以如下:。
[0053]
代替在根据图2和图3讨论更常规的方法时用于新鲜度值的附图标记“fv”,使用附图标记“count++”表示根据本发明的示例性实施例的描述中的计数以便区分。
[0054]
可以使用例如随着每次传输而递增的计数器来生成计数count++,例如块长度n等于所传送的消息认证码cmac1的长度,例如n = 4,bc1 = aes,bc2 = simeck,加密的计数cyph。
[0055]
图5使用表格(为了简单起见复制在此)示出了根据本发明的示例性实施例(例如根据图4)的方法和/或装置中的数据分组dp1、dp2、dp3、dp4中的所包含的消息msg和所包含的消息认证码cmac可以具有的值、以及加密的消息代码cmac1(不包含在dp1中)、计数count++(不包含在dp1中)和中间值ciph(不包含在dp1中)可以具有的值的示例:m = 4,n = 4,bc1:aes
‑
128,bc2 simeck32 [3]k1 = 0x2b7e151628aed2a6abf7158809cf4f3c,k2 = 0x1918111009080100,msgcmac1countciphcmac0x000000000x0c6bf77d0x000000000x20dd44f00x2cb6b38d0x000000000x0c6bf77d0x000000010x2b3ec7e70x2755309a0x000000000x0c6bf77d0x000001000x8a48dfef0x862328920x000000000x0c6bf77d0x000001010x1a54d0ef0x163f2792
[0056]
图5中的示例示出了针对恒定消息msg = 0,cmac1值同样恒定(正如所预期的),但这些值不会被传送。然而,不同的cmac值是由消息计数器(在传送总线订户sg7上,用于该传送总线订户(例如自上次总线重置以来和/或经由数据总线等)传送的数据分组dp1、dp2、dp3、dp4;和/或在接收总线订户sg6上,用于该接收总线订户(例如自上次总线重置和/或经由数据总线)接收的数据分组dp1、dp2、dp3、dp4)的计数器值(count+++)或定时器的变化导致的。
[0057]
cmac值被传输;这有效地防止了重放攻击,并且真实性通过获知发送方和接收方中的密钥得到确保。与图2和图3中使用常用方法的示例相比,在此没有截断计数器,这意味着不需要附加的同步。
[0058]
由于根据本发明的方法与标准secoc方法相比具有更长的计数器和cmac值,因此对抗暴力攻击的安全性可以更高。此外,可以在接收方中设置可自由选择的容差s,这使得可以容忍启动时的计数器偏差,例如从而使得允许紧接在启动后的大于1的计数器偏差。
[0059]
另一个可能的优势是利用恒定消息可能节省计算时间,汽车或iot应用通常是这种情况。然后,取决于消息的cmac1可以例如提前计算;取决于计数器的值ciph例如与具有较低运行时间和资源要求的轻量级块密码方法一起使用。
[0060]
常用的标准cmac算法bc1当前是aes
‑
128,在较大控制器的情况下,以硬件支持该算法。根据所使用的网络或ecu上的通信(lin、can、can
‑
fd、spi、i2c)[1],可以为各种
µ
c考虑各种lw块密码算法;通过说明的方式,在此可以使用来自simeck系列 [3] 的算法:
µ
cmnbc1bc2经典can44aessimeck32ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(4字节块支持)can
‑
fd(1)84aessimeck64ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ(8字节块支持)can
‑
fd(2)604aessimeck64
[0061]
所使用的缩写可以例如具有以下含义:bc
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
块密码算法can,can
‑
fd
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
控制器局域网,can灵活数据速率cmac
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
加密消息认证码count
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ“
新鲜度”计数器cyph
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
密文hsm
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
硬件安全模块lin
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
精益信息网络lw
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
轻量级msg
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
消息secoc
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
安全车载通信。