AUTOSAR_EXP_UtilizationOfCryptoServices 中文翻译

文档编号:602 | 状态:Final(正式发布) | 发布于:AUTOSAR CP Release 4.4.0(2018-10-31)
所属标准:AUTOSAR Classic Platform 标准 | 文档责任方:AUTOSAR | 保密等级:AUTOSAR CONFIDENTIAL

本翻译覆盖原文档 1-13 页正文,约 0.47 MB / 13 页。
原文为应用说明(EXP, Explanatory Document),介绍 AUTOSAR 密码服务栈(Crypto Stack)的使用——含 CSM/CRYIF/CRYPTO 三层架构、作业概念、密钥处理、配置理念。
本翻译校对区块:6 章 + 3 子节(Job Concept 含同步/异步/队列/流式)+ 1 章节(Key Handling)+ 2 章节(Configuration Philosophy)+ 1 章节(Example 含 MAC)+ 9 个核心术语定义 + 4 项参考文献。


1 引言(Introduction)

1.1 文档目的(Purpose of the Document)

本文档描述 AUTOSAR 4.3 起规约的密码功能的预期使用。本文档的目的是向用户/集成商介绍 AUTOSAR 支持的密码功能的原则性概念。

1.2 文档范围(Scope of the Document)

本文档的范围是帮助密码栈集成商与用户理解:

1.3 限制(Limitations)

无限制。

2 缩略语与缩写(Acronyms and Abbreviations)

缩略语描述
BSWBasic Software(基础软件)
CDDComplex Device Driver(复杂设备驱动)
CRYIFCrypto Interface(密码接口)
CRYPTOCrypto Driver(密码驱动)
CSMCrypto Service Manager(密码服务管理器)
HSMHardware Security Module(硬件安全模块)
NvMNVRAM Manager(非易失性内存管理器)
RTERuntime Environment(运行时环境)
SHESecurity Hardware Extension(安全硬件扩展)
SWCSoftware Component(软件组件)

2.1 术语表(Glossary of Terms)

术语描述
密码驱动对象(Crypto Driver Object, CDO)密码驱动实现一个或多个密码驱动对象。密码驱动对象可在硬件或软件中提供不同的密码原语。一个密码驱动的密码驱动对象彼此独立。每个密码驱动对象仅有一个工作区(即同时只能执行一个密码原语)。
密码原语(Crypto Primitive)密码原语是密码驱动对象中实现的已配置密码算法的一个实例。
作业(Job)作业是已配置的密码原语连同引用的密钥。
密钥(Key)密钥可被作业或 CSM 中的密钥管理函数引用。在密码驱动中,密钥引用特定密钥类型。
密钥元素(Key Element)密钥元素用于存储数据。这些数据可以是密钥材料或 AES 加密所需的 IV 等。它也可用于配置密钥管理函数的行为。
密钥类型(Key Type)密钥类型由对密钥元素的引用组成。密钥类型通常由密码驱动的厂商预配置。
处理(Processing)— 同步(Synchronous)调用相应函数时,作业被立即处理。函数返回时结果可用。
处理(Processing)— 异步(Asynchronous)调用相应函数时,作业不被立即处理。通常在作业完成时通过回调函数通知调用方。

3 相关文档(Related Documentation)

3.1 输入文档(Input Documents)

  1. AUTOSAR_SWS_CryptoDriver — 密码驱动规范
  2. AUTOSAR_SWS_CryptoInterface — 密码接口规范
  3. AUTOSAR_SWS_CryptoServiceManager — 密码服务管理器规范
  4. AUTOSAR_EXP_LayeredSoftwareArchitecture — 分层软件架构

3.2 相关标准与规范(Related Standards and Norms)

无。

4 密码栈概述(Crypto Stack Overview)

密码服务包括例如:哈希计算、非对称签名验证、对称数据加密。在 AUTOSAR 中,这些服务由 AUTOSAR 密码栈提供,即密码服务管理器(CSM)、底层密码接口(CRYIF)和密码驱动(CRYPTO)。

CSM 服务使用通过密码软件或硬件模块实现的密码算法——两者都超出范围且未被 AUTOSAR 规约。硬件实现严重依赖目标平台支持的特性。软件实现缺乏例如安全密钥存储的支持,须依赖 AUTOSAR 栈提供的内存服务。

AUTOSAR 密码栈不提供安全概念。它提供可被用于支持和实现特定安全概念的密码服务。

4.1 栈架构(Stack Architecture)

AUTOSAR 密码栈跨越 AUTOSAR 分层架构 [4] 的所有层级:

  1. 在最低层(微控制器抽象层),密码驱动(CRYPTO)位于此。这些模块持有不同密码硬件与软件实例的实际实现,例如外部 HSM。密码栈的一个特定特征是可存在多于一个密码驱动模块;
  2. CRYIF 模块位于硬件抽象层。它为 CSM 提供到可用密码驱动模块的通用接口,并使访问独立于底层密码驱动;
  3. CSM 位于服务层。它提供抽象层,为应用通过 RTE 端口机制提供对密码服务的标准化访问。其他 BSW 模块与 CDD 可使用 CSM 提供的 C-API 调用以使用密码服务。

4.2 密码服务管理器(CSM)

CSM 控制一个或多个客户端对一个或多个同步/异步密码服务的并发访问。它提供优先级队列以管理不能由专用 CRYPTO 直接处理的作业。CSM 提供的功能涵盖:

CSM 服务是通用的,CSM 允许不同应用使用不同的密码算法的同一服务。这通过可单独配置与初始化服务实现。例如,一个应用可能需要哈希服务计算 SHA-2 摘要,另一个应用可能需要计算 SHA-3 摘要。

实际的密码例程由 CSM 封装。服务客户端无需关心例程是软件还是硬件实现,或哪个 CRYPTO 模块实际维护请求的密码例程。CSM 为密码栈中所有可用的密码特性提供抽象层。

4.3 密码接口(CRYIF)

CRYIF 被上层 CSM 与下层 CRYPTO 包围。它接收来自 CSM 的请求并将其映射到 CRYPTO 中适当的密码操作。CRYIF 转发 CSM 给出的请求到特定 CRYPTO。回调通知在请求为异步时通知结果。

CRYIF 可操作多个 CRYPTO 模块。例如,可能有一个 CRYPTO 模块用于外部密码硬件模块,一个 CRYPTO 模块持有密码软件库。CRYIF 提供通用接口,使来自 CSM 的访问无需区分实际的 CRYPTO 实现。

4.4 密码驱动(CRYPTO)

CRYPTO 通常持有实际的密码实现并支持密码服务的密钥存储、密钥配置与密钥管理。它可有一个或多个密码驱动对象,每个对象有独立的工作区。每个密码驱动对象可提供任意数量的密码原语。密码原语是已配置密码算法的实例。一个密码驱动对象同时只能执行一个密码原语。

多个 CRYPTO 模块与多个密码驱动对象的概念允许同一密码服务的不同且并发的实现。具有不同优化目标的 CRYPTO 模块变体可能存在。例如,同一哈希算法可在两个不同的 CRYPTO 模块中实现,一个由更快(更昂贵)的硬件方案实现,另一个由较慢(更便宜)的软件方案实现。

以下示例描述使用多个 CRYPTO 模块的可能场景:

存在两个不同厂商的两个 CRYPTO 实现。一个 CRYPTO 是硬件解决方案的抽象("CRYPTO_HW"),另一个 CRYPTO 是纯软件解决方案("CRYPTO_SW")。CRYPTO_SW 是提供哈希服务以及(伪)随机数生成器的密码库。为使两个服务能够并行处理,CRYPTO_SW 有两个密码驱动对象,一个用于哈希服务("CDO_HASH"),一个用于随机数生成器("CDO_RNG")。如果某些密码例程不应并行运行,则它们应被放置在同一个密码驱动对象中。

5 使用方面(Usage Aspects)

5.1 作业概念(Job Concept)

对 CSM 的密码例程请求被表示为作业。作业包含哪些密码例程与哪些密码密钥应被处理的信息。作业不包含实际密钥数据本身,而是引用适当的密钥。密钥管理函数不作为作业处理。

5.1.1 同步与异步模式(Synchronous and Asynchronous Mode)

由于密码服务的计算可能计算密集,作业处理应被视为同步或异步。

当使用同步作业处理时,CSM 服务在调用方的上下文中立即执行。函数返回时,密码例程的结果将直接可用。

异步作业由专用 CRYPTO 在稍后处理,在调度主函数的上下文中或硬件中处理。如果特定 CRYPTO 驱动对象因正忙而拒绝作业,CSM 将服务请求放入相应的 CSM 作业队列。CRYPTO 通过 CRYIF 的回调函数通知异步作业的完成。CRYIF 通过 CSM 的回调函数转发结果。

5.1.2 队列与优先级(Queuing and Priorities)

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。

5.1.3 流式 vs 单次调用(Streaming vs Single Call Approach)

密码服务的处理包含"START"、"UPDATE"与"FINISH"操作:

[3]、[SWS_Csm_00024] 给出了基于上述操作的作业状态机概述。请求的操作以操作模式参数形式传递给 CSM 作业。

密码服务可使用流式单次调用方式调用。流式方法在给定数据上分别执行单个操作。流式方法通过对每个操作模式分别调用如 Csm_MacGenerate() 来可用。使用流式方法允许例如通过多次以操作模式"UPDATE"调用服务函数处理非常大的输入数据。

为提高密码服务的性能,单次调用方法将多个作业操作合并为单次函数调用。这减少了多次调用函数的额外开销。操作模式声明应执行哪些操作并可被组合。操作按"START"、"UPDATE"、"FINISH"的顺序执行。在上述示例中,Csm_MacGenerate() 可被调用,传递包含所有操作模式的操作模式类型。单次调用方法在处理小数据集时尤其有益。在此情况下,密码服务可单次完成。

5.2 密钥处理(Key Handling)

密钥处理包括生成、更新、导入/导出、交换与派生命成密码密钥。密码密钥可存储于密码硬件中或使用 NvM。

通过引用特定密钥类型创建密码密钥。CRYPTO 实现的厂商预配置适合与所提供密码原语一起使用的密钥类型。密钥类型由对一个或多个密钥元素的引用组成。例如,密钥元素可以是 AES 加密所需的密钥材料或随机数生成的种子。密码栈使用密钥元素索引定义 [3]。例如,密码服务 MAC 具有一个强制密钥元素"Key Material",密钥元素 ID 为"1"。密钥元素索引可由厂商扩展。密钥元素也可作为多个密钥类型的一部分。

在密钥配置期间,必须指定对适当密钥类型的引用。特定 CRYPTO 为密钥类型中包含的密钥元素提供数据存储,实际密钥数据实际保存在此。HW CRYPTO 实现将典型地使用密钥槽。SW CRYPTO 将使用 NvM 管理密钥存储。

5.3 配置理念(Configuration Philosophy)

5.3.1 密码功能注册(Registration of Crypto Functionality)

任意数量 CRYPTO 模块的概念使得可用密码特性具有灵活性。这需要一种注册机制,使 CRYPTO 实现中实际的密码特性被 CRYIF 和 CSM 知晓。否则,在 CSM 中配置与使用实际的密码特性将是不可能的。

这通过由厂商提供的预配置解决,预配置表示每个 CRYPTO 模块的能力。预配置从下到上加载,即从 CRYPTO 经 CRYIF 到 CSM。CRYIF 挂载每个已注册的 CRYPTO 模块并将特定密码特性集成到提供给 CSM 的通用接口。CSM 接管已注册 CRYPTO 可用的密码特性并推导用户可配置的特定密码特性。

5.3.2 项目配置(Project Configuration)

密码栈的配置通常使用自顶向下方法进行,从 CSM 经 CRYIF 到 CRYPTO:

  1. 在 CSM 中,用户选择并配置要使用的密码原语与密钥,这些由 CRYIF 与 CRYPTO 提供。用户进一步定义作业与作业队列。
  2. 在 CRYIF 中,用户主要定义 CSM 请求的特性到已注册 CRYPTO 模块所提供特性的映射。
  3. 在 CRYPTO 中,用户调整并扩展密码原语与密钥的预配置。

6 示例(Example)

以下,使用服务"消息认证码"(Message Authentication Code, MAC)概述密码栈的使用。

6.1 模块配置(Configuration in Modules)

用户创建具有对请求的 MAC 密码原语与要使用的密码密钥引用的作业。他进一步配置作业应同步(CRYPTO_PROCESSING_SYNC)还是异步(CRYPTO_PROCESSING_ASYNC)处理。如果作业是异步的,他还定义处理作业的队列。

MAC 需要至少引用一个密钥元素"Key Material"(CRYPTO_KE_MAC_KEY)的密钥。

6.2 涉及的 API(APIs involved)

应用(即 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)