本文档描述 AUTOSAR 4.3 起规约的密码功能的预期使用。本文档的目的是向用户/集成商介绍 AUTOSAR 支持的密码功能的原则性概念。
本文档的范围是帮助密码栈集成商与用户理解:
无限制。
| 缩略语 | 描述 |
|---|---|
| BSW | Basic Software(基础软件) |
| CDD | Complex Device Driver(复杂设备驱动) |
| CRYIF | Crypto Interface(密码接口) |
| CRYPTO | Crypto Driver(密码驱动) |
| CSM | Crypto Service Manager(密码服务管理器) |
| HSM | Hardware Security Module(硬件安全模块) |
| NvM | NVRAM Manager(非易失性内存管理器) |
| RTE | Runtime Environment(运行时环境) |
| SHE | Security Hardware Extension(安全硬件扩展) |
| SWC | Software Component(软件组件) |
| 术语 | 描述 |
|---|---|
| 密码驱动对象(Crypto Driver Object, CDO) | 密码驱动实现一个或多个密码驱动对象。密码驱动对象可在硬件或软件中提供不同的密码原语。一个密码驱动的密码驱动对象彼此独立。每个密码驱动对象仅有一个工作区(即同时只能执行一个密码原语)。 |
| 密码原语(Crypto Primitive) | 密码原语是密码驱动对象中实现的已配置密码算法的一个实例。 |
| 作业(Job) | 作业是已配置的密码原语连同引用的密钥。 |
| 密钥(Key) | 密钥可被作业或 CSM 中的密钥管理函数引用。在密码驱动中,密钥引用特定密钥类型。 |
| 密钥元素(Key Element) | 密钥元素用于存储数据。这些数据可以是密钥材料或 AES 加密所需的 IV 等。它也可用于配置密钥管理函数的行为。 |
| 密钥类型(Key Type) | 密钥类型由对密钥元素的引用组成。密钥类型通常由密码驱动的厂商预配置。 |
| 处理(Processing)— 同步(Synchronous) | 调用相应函数时,作业被立即处理。函数返回时结果可用。 |
| 处理(Processing)— 异步(Asynchronous) | 调用相应函数时,作业不被立即处理。通常在作业完成时通过回调函数通知调用方。 |
AUTOSAR_SWS_CryptoDriver — 密码驱动规范AUTOSAR_SWS_CryptoInterface — 密码接口规范AUTOSAR_SWS_CryptoServiceManager — 密码服务管理器规范AUTOSAR_EXP_LayeredSoftwareArchitecture — 分层软件架构无。
密码服务包括例如:哈希计算、非对称签名验证、对称数据加密。在 AUTOSAR 中,这些服务由 AUTOSAR 密码栈提供,即密码服务管理器(CSM)、底层密码接口(CRYIF)和密码驱动(CRYPTO)。
CSM 服务使用通过密码软件或硬件模块实现的密码算法——两者都超出范围且未被 AUTOSAR 规约。硬件实现严重依赖目标平台支持的特性。软件实现缺乏例如安全密钥存储的支持,须依赖 AUTOSAR 栈提供的内存服务。
AUTOSAR 密码栈不提供安全概念。它提供可被用于支持和实现特定安全概念的密码服务。
AUTOSAR 密码栈跨越 AUTOSAR 分层架构 [4] 的所有层级:
CSM 控制一个或多个客户端对一个或多个同步/异步密码服务的并发访问。它提供优先级队列以管理不能由专用 CRYPTO 直接处理的作业。CSM 提供的功能涵盖:
CSM 服务是通用的,CSM 允许不同应用使用不同的密码算法的同一服务。这通过可单独配置与初始化服务实现。例如,一个应用可能需要哈希服务计算 SHA-2 摘要,另一个应用可能需要计算 SHA-3 摘要。
实际的密码例程由 CSM 封装。服务客户端无需关心例程是软件还是硬件实现,或哪个 CRYPTO 模块实际维护请求的密码例程。CSM 为密码栈中所有可用的密码特性提供抽象层。
CRYIF 被上层 CSM 与下层 CRYPTO 包围。它接收来自 CSM 的请求并将其映射到 CRYPTO 中适当的密码操作。CRYIF 转发 CSM 给出的请求到特定 CRYPTO。回调通知在请求为异步时通知结果。
CRYIF 可操作多个 CRYPTO 模块。例如,可能有一个 CRYPTO 模块用于外部密码硬件模块,一个 CRYPTO 模块持有密码软件库。CRYIF 提供通用接口,使来自 CSM 的访问无需区分实际的 CRYPTO 实现。
CRYPTO 通常持有实际的密码实现并支持密码服务的密钥存储、密钥配置与密钥管理。它可有一个或多个密码驱动对象,每个对象有独立的工作区。每个密码驱动对象可提供任意数量的密码原语。密码原语是已配置密码算法的实例。一个密码驱动对象同时只能执行一个密码原语。
多个 CRYPTO 模块与多个密码驱动对象的概念允许同一密码服务的不同且并发的实现。具有不同优化目标的 CRYPTO 模块变体可能存在。例如,同一哈希算法可在两个不同的 CRYPTO 模块中实现,一个由更快(更昂贵)的硬件方案实现,另一个由较慢(更便宜)的软件方案实现。
以下示例描述使用多个 CRYPTO 模块的可能场景:
存在两个不同厂商的两个 CRYPTO 实现。一个 CRYPTO 是硬件解决方案的抽象("CRYPTO_HW"),另一个 CRYPTO 是纯软件解决方案("CRYPTO_SW")。CRYPTO_SW 是提供哈希服务以及(伪)随机数生成器的密码库。为使两个服务能够并行处理,CRYPTO_SW 有两个密码驱动对象,一个用于哈希服务("CDO_HASH"),一个用于随机数生成器("CDO_RNG")。如果某些密码例程不应并行运行,则它们应被放置在同一个密码驱动对象中。
对 CSM 的密码例程请求被表示为作业。作业包含哪些密码例程与哪些密码密钥应被处理的信息。作业不包含实际密钥数据本身,而是引用适当的密钥。密钥管理函数不作为作业处理。
由于密码服务的计算可能计算密集,作业处理应被视为同步或异步。
当使用同步作业处理时,CSM 服务在调用方的上下文中立即执行。函数返回时,密码例程的结果将直接可用。
异步作业由专用 CRYPTO 在稍后处理,在调度主函数的上下文中或硬件中处理。如果特定 CRYPTO 驱动对象因正忙而拒绝作业,CSM 将服务请求放入相应的 CSM 作业队列。CRYPTO 通过 CRYIF 的回调函数通知异步作业的完成。CRYIF 通过 CSM 的回调函数转发结果。
CSM 可有多个队列,异步作业在其中按优先级处理。CSM 的每个队列被映射到一个密码驱动对象,从而能够访问所选密码驱动对象的密码原语。在 CRYPTO 因正忙而拒绝 CSM 服务请求后,特定作业根据其优先级被放入适当的 CSM 队列。排队的作业在周期性的 Csm_MainFunction() 期间被传递给 CRYIF。CRYIF 将作业转发到特定 CRYPTO。可选地,密码驱动对象也可拥有作业队列。这对优化密码驱动对象的硬件使用可能有用。
每个作业的优先级由其配置定义。优先级值越高,作业的优先级越高。作业将根据其优先级执行。
参考 4.4 节中引入的示例,以下可能是可能的场景:CSM 接收两个异步作业请求,一个用于 CDO_HASH,一个用于 CDO_RNG。两个密码驱动对象都属于 CRYPTO_SW。CSM 拥有两个密码驱动对象的作业队列。由于 CDO_HASH 没有队列且正在处理另一个作业,CRYPTO_SW 拒绝该作业且 CRYIF 通知 CSM。如果相应的 CSM 队列未满,则该作业按优先级被排入 CSM。下一次 Csm_MainFunction() 将从 CSM 队列处理具有最高优先级的作业。当哈希作业被出队时,它将从 CSM 队列中移除,CRYIF 将作业交给 CDO_HASH。
密码服务的处理包含"START"、"UPDATE"与"FINISH"操作:
CRYPTO_OPERATIONMODE_START)通知特定作业的新开始并初始化密码计算;CRYPTO_OPERATIONMODE_UPDATE)提供并计算中间结果;CRYPTO_OPERATIONMODE_FINISH)指示应执行最终密码计算。[3]、[SWS_Csm_00024] 给出了基于上述操作的作业状态机概述。请求的操作以操作模式参数形式传递给 CSM 作业。
密码服务可使用流式或单次调用方式调用。流式方法在给定数据上分别执行单个操作。流式方法通过对每个操作模式分别调用如 Csm_MacGenerate() 来可用。使用流式方法允许例如通过多次以操作模式"UPDATE"调用服务函数处理非常大的输入数据。
为提高密码服务的性能,单次调用方法将多个作业操作合并为单次函数调用。这减少了多次调用函数的额外开销。操作模式声明应执行哪些操作并可被组合。操作按"START"、"UPDATE"、"FINISH"的顺序执行。在上述示例中,Csm_MacGenerate() 可被调用,传递包含所有操作模式的操作模式类型。单次调用方法在处理小数据集时尤其有益。在此情况下,密码服务可单次完成。
密钥处理包括生成、更新、导入/导出、交换与派生命成密码密钥。密码密钥可存储于密码硬件中或使用 NvM。
通过引用特定密钥类型创建密码密钥。CRYPTO 实现的厂商预配置适合与所提供密码原语一起使用的密钥类型。密钥类型由对一个或多个密钥元素的引用组成。例如,密钥元素可以是 AES 加密所需的密钥材料或随机数生成的种子。密码栈使用密钥元素索引定义 [3]。例如,密码服务 MAC 具有一个强制密钥元素"Key Material",密钥元素 ID 为"1"。密钥元素索引可由厂商扩展。密钥元素也可作为多个密钥类型的一部分。
在密钥配置期间,必须指定对适当密钥类型的引用。特定 CRYPTO 为密钥类型中包含的密钥元素提供数据存储,实际密钥数据实际保存在此。HW CRYPTO 实现将典型地使用密钥槽。SW CRYPTO 将使用 NvM 管理密钥存储。
任意数量 CRYPTO 模块的概念使得可用密码特性具有灵活性。这需要一种注册机制,使 CRYPTO 实现中实际的密码特性被 CRYIF 和 CSM 知晓。否则,在 CSM 中配置与使用实际的密码特性将是不可能的。
这通过由厂商提供的预配置解决,预配置表示每个 CRYPTO 模块的能力。预配置从下到上加载,即从 CRYPTO 经 CRYIF 到 CSM。CRYIF 挂载每个已注册的 CRYPTO 模块并将特定密码特性集成到提供给 CSM 的通用接口。CSM 接管已注册 CRYPTO 可用的密码特性并推导用户可配置的特定密码特性。
密码栈的配置通常使用自顶向下方法进行,从 CSM 经 CRYIF 到 CRYPTO:
以下,使用服务"消息认证码"(Message Authentication Code, MAC)概述密码栈的使用。
用户创建具有对请求的 MAC 密码原语与要使用的密码密钥引用的作业。他进一步配置作业应同步(CRYPTO_PROCESSING_SYNC)还是异步(CRYPTO_PROCESSING_ASYNC)处理。如果作业是异步的,他还定义处理作业的队列。
MAC 需要至少引用一个密钥元素"Key Material"(CRYPTO_KE_MAC_KEY)的密钥。
应用(即 SWC 的可运行实体)通过 RTE 端口与密码栈(即 CSM)通信。对于每个已配置的作业,RTE 生成一个名为 {Job}_MacGenerate 的端口,使用客户端/服务器接口 CsmMacGenerate_{Primitive}()。该端口有一个端口定义参数值 Crypto_OperationModeType,值为 CRYPTO_OPERATIONMODE_SINGLECALL。因此,SWC 可通过调用 CsmMacGenerate_{Primitive} 启动 MAC 服务,并在单次调用中提供执行 MAC 请求所需的所有数据。BSW 模块或 CDD 通过直接调用 C-API Csm_MacGenerate() 使用 MAC 服务。要处理的作业须作为输入参数传递。
根据所应用作业的配置,作业的处理将是异步或同步。在本示例中,我们假设作业应同步处理,在调用方上下文中。CSM 通过调用 CryIf_ProcessJob() 将请求的 MAC 服务分派到 CRYIF,传递作业作为输入参数。CRYIF 通过调用 Crypto_ProcessJob() 将作业的处理转移到 CRYPTO,最终执行作业参数中配置的密码原语。注意,如果不同的 CRYPTO 实现可用,函数命名将通过使用 vendorId(vi)与 vendorApiInfix(ai)区分。因此,调用将是 Crypto_{vi}_{ai}_ProcessJob()。最后,CRYPTO 将 MAC 存储在 CSM 作业中配置的内存空间中。
校对轮次:L1 自动校对(2026-06-13)
{Job}_MacGenerate 等 30+ 关键 API、宏、类型、参数名完整保留。CsmMacGenerate_{Primitive}()、CRYPTO_OPERATIONMODE_SINGLECALL、Csm_MacGenerate()、CryIf_ProcessJob()、Crypto_ProcessJob()、Crypto_{vi}_{ai}_ProcessJob() 等完整 API 链路。AUTOSAR_SWS_CryptoDriver、AUTOSAR_SWS_CryptoInterface、AUTOSAR_SWS_CryptoServiceManager、AUTOSAR_EXP_LayeredSoftwareArchitecture)完整保留。