上一篇我们介绍了智能汽车的电子电气架构和网络拓扑,本篇主要是介绍汽车电电子电气架构的信息安全问题。数字通信的安全不是一个新话题了。在消费电子网络和互联网上,安全问题一直以来都非常重要。为了解决安全问题,相关人员已经开发、使用和改进许多标准。让我们一起来看下这些安全机制的基本原则。
汽车电子电气架构安全
01 信息安全三要素
信息安全具体表现为三个基本属性或目标:保密性(Confidentiality)、完整性(Integrity)和可用性(Availability),(见图1.2)。有些研究者还认为应加上责任和匿名性,但这些在汽车领域并不需要,因此在此不作讨论。
图1.2
—保密性
保密性是指防止攻击者读取信息的保护措施(见图1.2(a))。一般来说,只要攻击者可以接触到通信媒介,而且信息没有充分加密或根本没有加密,就有可能被读取。因此,为了确保保密性,需要有足够强大的加密方法。
—完整性
完整性是指防止攻击者创建或修改信息的保护措施(见图1.2(b))。为了保护消息的完整性,通常使用基于密码的消息认证码(CMAC)。CMAC是基于消息本身和加密密钥计算出来的消息认证码(MAC)。为了避免相同消息的CMAC相同,通常会引入一个随机元素,一般是一个唯一的随机数(nonce)。需要注意的是,加密并不能保证信息的完整性,因为消息可能会被攻击者篡改,而接收者却无法察觉这种篡改。在许多通信系统中,攻击者不一定需要读到信息后才能对信息进行篡改。
—可用性
可用性是指攻击者无法从通信系统中删除信息(见图1.2(c))。包括移除和中断,移除即对所有接收者的移除,中断即以攻击者自己可以接收消息而预期的接收者却无法接收消息的方式移除。通过在通信的更高层次上采取的额外措施不一定能保证可用性,这点需要由通信系统本身来保证。例如,CAN报文的可用性是无法保证的,因为总线上的任何参与者都可以在任何时候通过发送一个主导位来改变信号。如果这种改变是在报文ID传输时进行的,并且每次重传报文时都会重复这种改变,那么报文实际上就会从总线上删除。
02过程
为了能够实现上文提到的信息安全三个目标(CIA),我们需要采取不同的过程。下文将对这些过程进行解释。
—加密/解密
在安全通信过程中,加密和解密信息最为人广知。加密是通过密钥将纯文本信息转化为密码文本信息。根据加密的类型,密钥可能是秘密的(对称密钥加密),也可能是公开的(公共密钥加密)。解密就是加密的反过程,同样通过使用密钥,将加密信息转化为明文。解密密钥始终是秘密的。
—签署/验证
在签署信息时,在信息末尾添加一个签名的过程就叫签署。签名能确保接收者可以验证消息的发送者,并确保信息的完整性。为了做到这一点,签名通常是基于消息本身、一个唯一的随机数(nonce)和发送者的私钥而完成的。为了实现预期属性,需要采用了公钥加密技术。由于是基于对称密钥加密法CMAC的完整性,公钥加密技术通常被认为是签名。但是,却并不提供抗抵赖性,这就意味着,接收者无法验证哪一条是密钥持有者发送的信息。这是因为加密和解密使用的是同一把钥匙,而且所有参与者共享同一把钥匙。
—认证
认证是指安全地识别和验证通信伙伴的过程。通常,认证过程是在任何其他通信过程开始之前进行的。认证用于进一步交换在接下来的通信中使用的密钥。通常,这种技术是通过公共钥匙加密或对称钥匙加密的预编主钥匙来实现的。
—授权
授权是指授予对资源的访问权。是在对通信参与者进行认证后才会进行。通常情况下,中央控制单元通过访问控制列表(ACL)配置、授予或撤销对资源的访问。请求授权的资源一般是通过通信系统传输的消息,或需要授权对通信系统的整体访问。
03加密技术的类型
密码算法通常分为对称密钥算法和公钥密码算法。下文将对这两类算法进行解释,并在图1.3中加以说明。
图1.3
—对称密钥算法
在对称密钥加密法中,参与者之间共享一个秘密密钥(见图1.3(b))。每个参与者都可以用这个密钥加密或解密消息。为了保证通信的保密性,密钥必须保密。因此,通信必须通过所有参与者之间事先建立的安全通道才可以交换。对称密钥加密技术可以在软件中以相对较小的资源需求来实现,并且由于算法的典型重复性,也更容易在硬件中实现。对称钥匙算法的例子有高级加密标准(AES)、数据加密标准(DES)和3DES。
—公钥密码算法
在公用钥匙加密法中,每个通信参与者都需要有两把独特的钥匙(见图1.3(b))。其中一个密钥,即私钥,是要保密的,而另一个密钥,即公钥,则对通信参与者公开的。这些密钥在计算上是相互依赖的,用一个密钥进行的加密或解密操作,只能用另一个密钥进行解密。因此,用公钥加密的信息只能用私钥解密。这种操作方式,就需要持有公匙的信息接收者必须使用自己持有的私钥才能解密该信息。此外,公钥加密法允许使用私钥签署信息,并用公钥验证这些信息。由于私钥是秘密的,相应的信息签名只能由私钥的持有人创建。公钥算法是计算密集型的,并且限制了清晰文本输入的长度。因此,这些算法通常用于交换对称密钥,而对称密钥又用于通信。公钥加密算法的例子有RSA和椭圆曲线加密法(ECC)。
04算法
在了解了加密法和安全的基础知识后,本小节对实现和确保这些概念的现有算法进行概述。下文中对算法的优缺点进行了概述。从古至今,已经开发了无数的算法。由于算法的种类太多,本文无法一一列举。因此,只对使用最广泛的算法简要概述。
—数据保护标准(DES)
DES是20世纪70年代为美国(USA)情报机构开发的一种对称密钥算法。目前,该标准已广泛存在于密码软件库和密码加速器的硬件中。DES使用的密钥长度为56 Bits。这个密钥大小存在不安全因素。因为,攻击者可像对待现代计算机系统密码一样,通过蛮力分析(即测试每一个可能的密钥)来确定一个密钥。
—三重DES(3DES)
1998年开发的三重DES重用了DES的组成部分。是以DES为基础,在其主要运行方式上,是将DES算法的三个运行链起来,每个运行链都有一个独立的56 Bits的密钥,从而将密钥大小增加到了168 Bits。目前认为它是安全的。由于DES是为支持硬件而设计的,因此DES和三层DES(3DES)的软件实现通常比同类算法要慢。
—高级加密标准(AES)
高级加密标准(AES)是美国国家标准与技术研究所(NIST)的标准,来源于NIST举办的密码算法竞赛,并于2001年发布。这种加密方法是一种对称密钥算法,可谓是DES的继承者。AES可以使用大小为128 Bits、192 Bits和256 Bits的密钥。虽然除了蛮力之外,对这种加密方法的攻击已经出现,但这些攻击无法在合理的时间内完成,以目前的计算机的运算能力来看,该算法还算是安全的。当前,AES在许多软件库中都有,使用非常普遍,它还能作为专用和集成的硬件加速器使用。
—RSA
RSA是一种在世界范围内的许多领域广泛使用的公钥算法。最早于1977年提出。这种技术是利用将一个大数分解成两个质数时的多种可能性来实现公钥和私钥之间的安全关系。RSA通常用于2048-4096 Bits之间的密钥。低于1024 Bits的密钥,一般认为是不安全的。虽然在实际使用中,1024 Bits的密钥还没有被破解,但我们也不鼓励使用这种密匙。RSA的计算复杂度较高,这也导致了其加密和解密时间较长(见第四章)。可使用硬件加速器,但加速器与微控制器的集成不如AES的应用范围那么广。
—椭圆曲线加密法(ECC)
ECC是一种公钥算法,采用的是椭圆曲线上两点的点乘法的逆向难度。通过不能反转乘法,可以建立公钥算法所需的不对称性。在密钥长度相等的情况下,ECC的安全性要远远高于RSA。这种加密法还能减少密钥长度和操作步骤,使算法执行得更快。ECC通常用于256 Bits大小的密钥。虽然ECC的概念在1985年就已经被提出,但专用或集成硬件加速器的数量非常有限。目前只有少数软件库,如签名和验证等支持属于ECC的子集功能。
05算法安全性评估
随着安全算法和相关协议的不断推出,解决协议之间的可比性问题迫在眉睫。想要对算法和协议的安全性进行评估,使其具有可比性,并非易事。在下文中,我们将对算法和全性评估进行简要概述。
—对称算法
安全算法的特点是元素繁多且内部结构也有很大的不同,这个在比较对称算法和公钥算法时尤其明显。这些算法的共同点是都需要一个秘密参数,即加密密钥。然而,密匙的结构和功能也会有很大的不同。因此,通常仅将相同类型的算法进行比较(例如,对称算法与公钥算法)。对于对称算法,密钥长度是算法强度的一个指标。此外,在对称算法中,由于输入通常是以分块方式处理的,所以块长度是可以比较的元素。接下来,我们基于参数密匙长度和块大小的可比性进行简要讨论。
1)加密长度
在比较(已建立的)密码算法时,一般假设算法本身是安全的。因此,加密消息的安全性取决于给定的参数,这些参数可以是密钥(及其长度),也可以是要加密的明文。因此,对于安全性来说比较的重点是密钥,特别是其长度。以DES算法为例,56位的密钥长度在系统安全中是最为脆弱的,因此加密消息就容易受到暴力攻击。虽然56位的密钥长度在进行算法开发时仍然足够,但现在的计算机处理数据的速度更快,因此只需要通过对各种组合的反复试验(暴力)就可以找到密钥。为了减轻这种攻击并重新使用已开发的算法,开发了3DES,分别在三个阶段使用DES和三个不同的密钥,从而增加安全性。虽然这简化了过程,但3DES实际上并没有提高三倍的安全性,仅仅提高了安全性。对密钥长度的讨论也清楚地表明了安全性的变化性质。按照摩尔定律,随着计算能力的提高,需要更大的密钥或新的算法来维持安全性。在计算机技术不断提高的当下,曾经被认为是安全的EDS,现在也不那么安全了,计算机能够做到在短时间内暴力破解相对较短的密钥。
2)块大小
比较算法时的另一个问题是底层块大小和对块的处理。块是算法运行的输入。较长的明文输入需要剪切到块大小,较短的输入需要进行填充。需要注意的是,块大小决定了唯一密码块的数量。我们需要注意避免块的重复,因为它们可能使攻击者对密钥进行反向工程。因此,块大小决定了可以进行安全加密的最大数据量。3DES使用64位的块大小,将具有相同密钥的可安全加密数据量限制在32 GB左右。AES则使用128位,将可安全加密的数据量提高了232。
当使用这种基于块的密码加密数据时,需要注意的是,当简单地将明文分为块时,相同的明文会产生相同的密文。这种操作模式被称为电子代码块(ECB),极其不提倡此操作模式,因为它会使输入中的模式易于识别。为避免这种情况,应将块进行组合或添加随机因素。其他模式,例如密码块链(CBC)或密码反馈(CFB)执行这种级联,并且需要一个安全的初始化向量(IV)作为附加输入。基于这些因素,在本操作中,仅使用CBC模式中的AES。
—非对称算法
由于算法本身的工作原理,在比较非对称算法时,单独比较密钥大小是不合理的。例如,RSA算法利用大数分解的困难作为安全性的基础。ECC则以椭圆曲线离散对数问题(ECDLP)为基础。由于这些数学问题在本质上不同,所以比较参数(如键长)不成立。在加密长度相同的情况下,ECC比RSA更安全。然而,需要注意的是,这种更高的安全性在很大程度上取决于为ECC选择的曲线,因为ECDLP可以有效地求解一些曲线。
—协议
在安全领域,可以用协议来完成不同的任务。这些任务包括密钥交换、身份验证和授权。与算法类似,协议安全性的比较也不简单。虽然可以证明一个协议可以执行所设想的标准,但协议的安全性是基于协议核心的算法的,所以协议和非对称算法面临着相同的挑战。除此之外,协议的概念,就像算法一样,可以检查缺陷。当然,有工具可以自动进行此类分析,例如 Scyther 。
—执行
虽然算法和协议的比较并非易事,但是可以评估它们总体上是否提供了项目所需的安全级别,并选择了合适的候选者。然而,每周全世界的新闻都在报道安全问题。这是因为概念可能是安全的,但它们的实现可能并不安全。虽然具有正确密钥长度的AES是一种优秀的加密算法,但执行AES的库可能存在后门,将密钥发送给库的开发人员。在这种情况下,虽然AES是安全的,但是库本身并不安全。除了配置问题,这也是互联网最常见的安全漏洞。