P2 batch translation: 49 PDFs (Memory + Safety + Crypto + ModeManagement + IO)
This commit is contained in:
@@ -0,0 +1,264 @@
|
||||
# 加密服务的使用 (Utilization of Crypto Services)
|
||||
|
||||
**AUTOSAR CP Release 4.4.0**
|
||||
|
||||
> 翻译说明:本文档为 AUTOSAR 经典平台 (CP) Release 4.4.0 中 EXP 文档 602《加密服务的使用》的中文翻译版本。原始英文文档中的 AUTOSAR 方框符 `⌈⌋`、API 标识符(如 `Crypto_ProcessJob`)、模块缩写(Crypto、CryIf、Csm、KeyM 等)、加密算法名(AES、SHA、RSA、ECC 等)以及文档交叉引用均予以保留。
|
||||
|
||||
## 文档标识
|
||||
|
||||
| 项目 | 内容 |
|
||||
|---|---|
|
||||
| 文档标题 (Document Title) | 加密服务的使用 (Utilization of Crypto Services) |
|
||||
| 文档所有者 (Document Owner) | AUTOSAR |
|
||||
| 文档责任方 (Document Responsibility) | AUTOSAR |
|
||||
| 文档标识号 (Document Identification No) | 602 |
|
||||
| 文档状态 (Document Status) | Final |
|
||||
| 所属 AUTOSAR 标准 | Classic Platform |
|
||||
| 所属标准版本 (Part of Standard Release) | 4.4.0 |
|
||||
|
||||
## 文档变更历史 (Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更者 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 移除对 Crypto Abstraction Library 的引用;编辑性修订 |
|
||||
| 2017-12-08 | 4.3.1 | AUTOSAR Release Management | 编辑性修订 |
|
||||
| 2016-11-30 | 4.3.0 | AUTOSAR Release Management | 编辑性修订 |
|
||||
| 2015-07-31 | 4.2.2 | AUTOSAR Release Management | 编辑性修订 |
|
||||
| 2014-10-31 | 4.2.1 | AUTOSAR Release Management | 编辑性修订 |
|
||||
| 2013-03-15 | 4.1.1 | AUTOSAR Administration | 初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录 (Table of Contents)
|
||||
|
||||
- [1 引言](#1-引言)
|
||||
- [1.1 文档目的](#11-文档目的)
|
||||
- [1.2 文档范围](#12-文档范围)
|
||||
- [1.3 限制](#13-限制)
|
||||
- [2 缩略语和缩写](#2-缩略语和缩写)
|
||||
- [3 相关文档](#3-相关文档)
|
||||
- [3.1 输入文档](#31-输入文档)
|
||||
- [3.2 相关标准和规范](#32-相关标准和规范)
|
||||
- [4 加密栈概述](#4-加密栈概述)
|
||||
- [4.1 栈架构](#41-栈架构)
|
||||
- [4.2 加密服务管理器 (CSM)](#42-加密服务管理器-csm)
|
||||
- [4.3 加密接口 (CRYIF)](#43-加密接口-cryif)
|
||||
- [4.4 加密驱动 (CRYPTO)](#44-加密驱动-crypto)
|
||||
- [5 使用方面](#5-使用方面)
|
||||
- [5.1 作业概念](#51-作业概念)
|
||||
- [5.1.1 同步和异步模式](#511-同步和异步模式)
|
||||
- [5.1.2 队列和优先级](#512-队列和优先级)
|
||||
- [5.1.3 流式方法与单次调用方法](#513-流式方法与单次调用方法)
|
||||
- [5.2 密钥处理](#52-密钥处理)
|
||||
- [5.3 配置理念](#53-配置理念)
|
||||
- [5.3.1 加密功能注册](#531-加密功能注册)
|
||||
- [5.3.2 项目配置](#532-项目配置)
|
||||
- [6 示例](#6-示例)
|
||||
- [6.1 模块中的配置](#61-模块中的配置)
|
||||
- [6.2 涉及的 API](#62-涉及的-api)
|
||||
|
||||
---
|
||||
|
||||
## 1 引言
|
||||
|
||||
### 1.1 文档目的
|
||||
|
||||
本文档描述了自 AUTOSAR 4.3 起开始规范的 AUTOSAR 加密功能的预期使用方法。文档的目的是向用户/集成商介绍 AUTOSAR 所支持的加密功能的基本概念。
|
||||
|
||||
### 1.2 文档范围
|
||||
|
||||
本文档的范围是帮助加密栈的集成商和使用者理解:
|
||||
|
||||
- AUTOSAR 加密栈的架构;
|
||||
- 各模块的整体表示及其相互关系;
|
||||
- 加密硬件与软件的集成。
|
||||
|
||||
### 1.3 限制
|
||||
|
||||
无限制。
|
||||
|
||||
---
|
||||
|
||||
## 2 缩略语和缩写
|
||||
|
||||
| 缩略语 | 描述 |
|
||||
|---|---|
|
||||
| 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) |
|
||||
|
||||
### 2.1 术语表
|
||||
|
||||
| 术语 | 描述 |
|
||||
|---|---|
|
||||
| Crypto Driver Object (加密驱动对象) | 一个 Crypto Driver 实现一个或多个 Crypto Driver Object。Crypto Driver Object 可在硬件或软件中提供不同的加密原语。同一 Crypto Driver 的各 Crypto Driver Object 之间相互独立。每个 Crypto Driver Object 仅有一个工作区(即同一时刻只能执行一种加密原语)。 |
|
||||
| Crypto Primitive (加密原语) | 加密原语是由 Crypto Driver Object 实现的已配置加密算法的一个实例。 |
|
||||
| Job (作业) | 作业是已配置的加密原语以及所引用密钥的组合。 |
|
||||
| Key (密钥) | 密钥可由 CSM 中的作业或密钥管理功能引用。在 Crypto Driver 中,密钥引用特定的密钥类型。 |
|
||||
| Key Element (密钥元素) | 密钥元素用于存储数据。该数据可以是密钥材料,或 AES 加密所需的 IV 等。也可用于配置密钥管理功能的行为。 |
|
||||
| Key Type (密钥类型) | 密钥类型由对若干密钥元素的引用构成。密钥类型通常由 Crypto Driver 的供应商预配置。 |
|
||||
| Processing (处理模式) | 指示作业的处理方式。**异步 (Asynchronous)**:调用对应函数时作业不会立即被处理。通常,当作业完成时通过回调函数通知调用者。**同步 (Synchronous)**:调用对应函数时作业被立即处理。函数返回时即可获得结果。 |
|
||||
|
||||
---
|
||||
|
||||
## 3 相关文档
|
||||
|
||||
### 3.1 输入文档
|
||||
|
||||
- [1] Specification of Crypto Driver — `AUTOSAR_SWS_CryptoDriver.pdf`
|
||||
- [2] Specification of Crypto Interface — `AUTOSAR_SWS_CryptoInterface.pdf`
|
||||
- [3] Specification of Crypto Service Manager — `AUTOSAR_SWS_CryptoServiceManager.pdf`
|
||||
- [4] Layered Software Architecture — `AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf`
|
||||
|
||||
### 3.2 相关标准和规范
|
||||
|
||||
无。
|
||||
|
||||
---
|
||||
|
||||
## 4 加密栈概述
|
||||
|
||||
加密服务包括哈希计算、非对称签名验证、对称数据加密等。在 AUTOSAR 中,这些服务由 AUTOSAR 加密栈提供,即加密服务管理器 (CSM)、底层的加密接口 (CRYIF) 以及加密驱动 (CRYPTO)。
|
||||
|
||||
CSM 服务所使用的加密算法由加密软件或硬件模块实现——这两者均超出 AUTOSAR 的范围,未在 AUTOSAR 中规定。硬件实现严重依赖于目标平台所支持的功能。软件实现缺乏例如安全密钥存储等支持,必须依赖 AUTOSAR 栈所提供的内存服务。
|
||||
|
||||
AUTOSAR 加密栈不提供安全概念 (security concept)。它提供可用于支持和实现某种安全概念的加密服务。
|
||||
|
||||
### 4.1 栈架构
|
||||
|
||||
AUTOSAR 加密栈跨越 AUTOSAR 分层架构 [4] 的所有层级:
|
||||
|
||||
> **图 1:AUTOSAR 分层视图中加密栈的位置 [3]**
|
||||
|
||||
(i) 在最低层——微控制器抽象层 (Microcontroller Abstraction Layer)——是加密驱动 (CRYPTO)。这些模块持有不同加密硬件和软件实例(例如外部 HSM)的实际实现。加密栈的一个特定特性是:可以存在多个 Crypto Driver 模块;
|
||||
|
||||
(ii) CRYIF 模块位于硬件抽象层 (Hardware Abstraction Layer)。它为 CSM 提供到可用 Crypto Driver 模块的通用接口,并使访问与底层 Crypto Driver 无关;
|
||||
|
||||
(iii) CSM 位于服务层 (Service Layer)。它提供一个抽象层,通过 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 Driver Object,每个都具有独立的工作区。每个 Crypto Driver Object 可提供任意数量的加密原语。加密原语是已配置加密算法的一个实例。一个 Crypto Driver Object 在同一时刻只能执行一种加密原语。
|
||||
|
||||
多个 CRYPTO 模块和多个 Crypto Driver Object 的概念允许对相同加密服务进行不同且并发的实现。可以存在具有不同优化目标的 CRYPTO 模块变体。例如,同一哈希算法可能在两个不同的 CRYPTO 模块中实现——一个由更快速(更昂贵)的硬件方案实现,另一个由较慢(较便宜)的软件方案实现。
|
||||
|
||||
以下示例描述了使用多个 CRYPTO 模块的一种可能场景:有两个由不同供应商提供的 CRYPTO 实现。一个 CRYPTO 是对硬件方案的抽象("CRYPTO_HW"),另一个 CRYPTO 是纯软件方案("CRYPTO_SW")。CRYPTO_SW 是一个加密库,提供哈希服务以及(伪)随机数生成器。为了能够并行处理这两类服务,CRYPTO_SW 具有两个 Crypto Driver Object:一个用于哈希服务("CDO_HASH"),另一个用于随机数生成器("CDO_RNG")。如果某些加密例程不应并行运行,则应将它们放入同一个 Crypto Driver Object 中。
|
||||
|
||||
---
|
||||
|
||||
## 5 使用方面
|
||||
|
||||
### 5.1 作业概念
|
||||
|
||||
对 CSM 的加密例程请求以作业 (job) 表示。一个作业包含将处理哪种加密例程以及将使用哪把密钥的信息。作业本身不包含实际的密钥数据,而是引用适当的密钥。密钥管理功能不作为作业处理。
|
||||
|
||||
#### 5.1.1 同步和异步模式
|
||||
|
||||
由于加密服务的计算可能非常密集,作业处理应考虑为同步或异步。当使用同步作业处理时,CSM 服务将在调用者的上下文中被立即执行。加密例程的结果在函数返回时即可直接获得。
|
||||
|
||||
异步作业稍后由专用 CRYPTO 在调度的主函数上下文或硬件中处理。如果特定 CRYPTO 驱动对象由于繁忙而拒绝该作业,则 CSM 将服务请求放入相应的 CSM 作业队列。CRYPTO 通过 CRYIF 的回调函数向 CRYIF 通知异步作业的完成。CRYIF 再通过 CSM 的回调函数将结果转发出去。
|
||||
|
||||
#### 5.1.2 队列和优先级
|
||||
|
||||
CSM 可以具有多个队列,在这些队列中异步作业按其优先级顺序处理。CSM 的每个队列映射到一个 Crypto Driver Object,从而可以访问所选 Crypto Driver Object 的加密原语。在 CRYPTO 因繁忙而拒绝 CSM 服务请求之后,特定作业会被放入与自身优先级相对应的 CSM 队列中。排队的作业在周期性的 `Csm_MainFunction()` 中传递给 CRYIF。CRYIF 会将作业转发给特定的 CRYPTO。可选地,Crypto Driver Object 也可以具有作业队列。这对于优化 Crypto Driver Object 的硬件使用可能有用。
|
||||
|
||||
每个作业的优先级由其配置定义。优先级值越高,作业的优先级越高。作业将按其优先级被处理。
|
||||
|
||||
参考 4.4 中引入的示例,以下为可能的场景:CSM 收到两个异步作业请求,一个用于 CDO_HASH,另一个用于 CDO_RNG。两个 Crypto Driver Object 均属于 CRYPTO_SW。CSM 对这两个 Crypto Driver Object 各有一个作业队列。由于 CDO_HASH 没有队列且正在处理另一作业,CRYPTO_SW 拒绝该作业并由 CRYIF 通知 CSM。如果相应的 CSM 队列未满,则该 CDO_HASH 的作业会按其优先级入队到 CSM。`Csm_MainFunction()` 的下一次执行将处理 CSM 队列中优先级最高的作业。当哈希作业出队时,会将其从 CSM 队列中移除,并由 CRYIF 移交给 CDO_HASH。
|
||||
|
||||
#### 5.1.3 流式方法与单次调用方法
|
||||
|
||||
加密服务的处理包含三种操作:"START"、"UPDATE" 和 "FINISH":
|
||||
|
||||
- **"START"**(`CRYPTO_OPERATIONMODE_START`):通知特定作业的新开始,并初始化加密计算;
|
||||
- **"UPDATE"**(`CRYPTO_OPERATIONMODE_UPDATE`):可使用此模式提供输入数据并计算中间结果;
|
||||
- **"FINISH"**(`CRYPTO_OPERATIONMODE_FINISH`):指示应执行最终的加密计算。
|
||||
|
||||
[3],[SWS_Csm_00024] 给出基于上述操作的作业状态机的概述。所请求的操作以 operation mode 参数的形式传递给 CSM 作业。
|
||||
|
||||
可以通过流式方法或单次调用方法调用加密服务。流式方法对给定数据分别执行各单次操作。流式方法可通过分别针对每个操作模式调用例如 `Csm_MacGenerate()` 来使用。使用流式方法可以例如通过对服务函数多次以 "UPDATE" 操作模式进行调用来处理非常大的输入数据。
|
||||
|
||||
为了提高加密服务的性能,单次调用方法将多个作业操作合并到单次函数调用中。这减少了多次调用函数的开销。操作模式声明应执行哪些操作,并且这些模式可以组合。操作按 "START"、"UPDATE"、"FINISH" 的顺序执行。在上面的示例中,可以调用 `Csm_MacGenerate()`,并传入一个包含所有操作模式的 operation mode 类型。单次调用方法在处理小数据集合时尤其有益。在这种情况下,加密服务可以一次完成。
|
||||
|
||||
### 5.2 密钥处理
|
||||
|
||||
密钥处理包括加密密钥的生成、更新、导入/导出、交换以及派生。加密密钥可以存储在加密硬件中或使用 NvM。
|
||||
|
||||
加密密钥通过引用某种密钥类型来创建。CRYPTO 实现的供应商会预配置适用于所提供的加密原语的密钥类型。密钥类型由一个或多个对密钥元素的引用构成。例如,密钥元素可以是 AES 加密所需的密钥材料或随机数生成的种子。加密栈使用密钥元素索引定义 [3]。例如,加密服务 MAC 具有一个强制性的密钥元素 "Key Material",其密钥元素 ID 为 "1"。密钥元素索引可由供应商扩展。一个密钥元素也可以属于多个密钥类型。
|
||||
|
||||
在密钥配置期间,必须指定对适当密钥类型的引用。特定 CRYPTO 为密钥类型所包含的密钥元素提供数据存储,实际的密钥数据就保存在那里。硬件 CRYPTO 实现通常使用密钥槽 (key slot)。而软件 CRYPTO 则使用 NvM 来管理密钥存储。
|
||||
|
||||
### 5.3 配置理念
|
||||
|
||||
#### 5.3.1 加密功能注册
|
||||
|
||||
任意数量 CRYPTO 模块的概念使得可用的加密功能具有灵活性。这要求存在一种注册机制,使 CRYPTO 实现中实际的加密功能对 CRYIF 和 CSM 可见。否则,在 CSM 中配置和使用实际的加密功能将是不可能的。
|
||||
|
||||
这通过由供应商提供的预配置解决,该预配置表示每个 CRYPTO 模块的能力。预配置从底层向上层加载,即从 CRYPTO 开始,经 CRYIF,到 CSM。CRYIF 挂载每个已注册的 CRYPTO 模块,并将各加密功能集成到提供给 CSM 的通用接口中。CSM 接管已注册 CRYPTO 的可用加密功能,并推导出可供用户配置的特定加密功能。
|
||||
|
||||
#### 5.3.2 项目配置
|
||||
|
||||
加密栈的配置通常采用自顶向下的方法进行,从 CSM 开始,经 CRYIF,到 CRYPTO:
|
||||
|
||||
(i) 在 CSM 中,用户选择并配置将由 CRYIF 和 CRYPTO 提供的加密原语和密钥。用户进一步定义作业和作业队列。
|
||||
|
||||
(ii) 在 CRYIF 中,用户主要定义由 CSM 请求的功能到已注册 CRYPTO 模块所提供功能的映射。
|
||||
|
||||
(iii) 在 CRYPTO 中,用户调整并扩展加密原语和密钥的预配置。
|
||||
|
||||
---
|
||||
|
||||
## 6 示例
|
||||
|
||||
下面使用 "消息认证码" (MAC) 服务来说明加密栈的使用。
|
||||
|
||||
### 6.1 模块中的配置
|
||||
|
||||
用户创建一个作业,引用所请求的 MAC 加密原语以及要使用的加密密钥。还需要配置作业是同步 (`CRYPTO_PROCESSING_SYNC`) 还是异步 (`CRYPTO_PROCESSING_ASYNC`) 处理。如果作业是异步的,还需要定义处理该作业的队列。
|
||||
|
||||
MAC 要求密钥至少引用一个密钥元素 "Key Material"(`CRYPTO_KE_MAC_KEY`)。
|
||||
|
||||
### 6.2 涉及的 API
|
||||
|
||||
应用(即 SWC 的可运行实体)通过 RTE 端口与加密栈(即 CSM)通信。对于每个已配置的作业,RTE 生成一个名为 `{Job}_MacGenerate` 的端口,其客户端/服务器接口为 `CsmMacGenerate_{Primitive}()`。该端口具有一个端口定义参数 `Crypto_OperationModeType`,其值为 `CRYPTO_OPERATIONMODE_SINGLECALL`。因此,SWC 可以通过调用 `CsmMacGenerate_{Primitive}` 一次性向 CSM 提供执行 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 作业中配置的内存空间中。
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
- 本文档为 AUTOSAR EXP 602《Utilization of Crypto Services》(CP 4.4.0) 的中文翻译;
|
||||
- 文档标识号:602;
|
||||
- 文档共 13 页,已完整翻译核心内容;
|
||||
- 保留了所有 AUTOSAR 方框符、API 标识符、模块缩写和算法名;
|
||||
- 翻译以保证技术含义准确为前提,语句尽量贴近 AUTOSAR 中文术语库常用译法。
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,867 @@
|
||||
# 密钥管理器规范 (Specification of Key Manager)
|
||||
|
||||
**AUTOSAR CP Release 4.4.0**
|
||||
|
||||
> 翻译说明:本文档为 AUTOSAR 经典平台 (CP) Release 4.4.0 中 SWS 文档 907《Specification of Key Manager》的中文翻译版本。原始英文文档中的 AUTOSAR 方框符 `⌈⌋`、API 标识符(如 `KeyM_Init`、`KeyM_Update`)、模块缩写(Crypto、CryIf、Csm、KeyM 等)、加密算法名(AES、SHA、RSA、ECC、X.509 等)以及需求 ID(如 `SWS_KeyM_xxxxx`)均予以保留。本文采用"重点翻译 + 摘要"策略:完整翻译封面、标识、变更历史、目录、关键 API 及核心概念;重复的需求条目和服务接口详细定义予以摘要处理。
|
||||
|
||||
## 文档标识
|
||||
|
||||
| 项目 | 内容 |
|
||||
|---|---|
|
||||
| 文档标题 (Document Title) | Specification of Key Manager(密钥管理器规范) |
|
||||
| 文档所有者 (Document Owner) | AUTOSAR |
|
||||
| 文档责任方 (Document Responsibility) | AUTOSAR |
|
||||
| 文档标识号 (Document Identification No) | 907 |
|
||||
| 文档状态 (Document Status) | Final |
|
||||
| 所属 AUTOSAR 标准 | Classic Platform |
|
||||
| 所属标准版本 (Part of Standard Release) | 4.4.0 |
|
||||
|
||||
## 文档变更历史 (Document Change History)
|
||||
|
||||
| 日期 | 版本 | 变更者 | 变更描述 |
|
||||
|---|---|---|---|
|
||||
| 2018-10-31 | 4.4.0 | AUTOSAR Release Management | 初始发布 |
|
||||
|
||||
---
|
||||
|
||||
## 目录 (Table of Contents)
|
||||
|
||||
- [1 引言与功能概述](#1-引言与功能概述)
|
||||
- [2 缩略语和缩写](#2-缩略语和缩写)
|
||||
- [3 相关文档](#3-相关文档)
|
||||
- [4 约束和假设](#4-约束和假设)
|
||||
- [5 对其他模块的依赖](#5-对其他模块的依赖)
|
||||
- [6 需求可追溯性](#6-需求可追溯性)
|
||||
- [7 功能规范](#7-功能规范)
|
||||
- [7.1 加密密钥子模块](#71-加密密钥子模块)
|
||||
- [7.2 证书子模块](#72-证书子模块)
|
||||
- [7.3 错误分类](#73-错误分类)
|
||||
- [8 API 规范](#8-api-规范)
|
||||
- [9 序列图](#9-序列图)
|
||||
- [10 配置规范](#10-配置规范)
|
||||
- [11 不适用的需求](#11-不适用的需求)
|
||||
|
||||
---
|
||||
|
||||
## 1 引言与功能概述
|
||||
|
||||
AUTOSAR KeyM 模块由两个子模块组成:加密密钥子模块 (crypto key submodule) 和证书子模块 (certificate submodule)。
|
||||
|
||||
加密密钥子模块提供 API 和配置项,用于引入或更新预定义的加密密钥材料。它充当密钥客户端 (key client),用于解释来自密钥服务器 (key server) 提供的数据并创建相应的密钥材料。这些密钥提供给加密服务管理器。在成功安装密钥材料后,应用程序能够使用加密操作。这允许 OEM 在生产或维护阶段将密钥材料独立于应用程序引入到 ECU。
|
||||
|
||||
证书子模块提供用于操作证书的 API 和配置。它允许定义证书槽并以 PKI 中使用的方式按层次结构关联它们。证书可以永久存储,例如根证书或中间证书,以便可以使用它们针对证书链验证给定证书。此外,证书子模块允许访问证书元素或验证其内容。
|
||||
|
||||
### 1.1 重要说明
|
||||
|
||||
本规范为车辆密钥和证书管理系统提供了 API 骨架。并非所有功能都已完全指定。这可能允许一些解释和实现细节的自由度。尽管接口已以通用和灵活的方式设计,但它们仍可能在未来的 AUTOSAR 版本中发生变化。
|
||||
|
||||
---
|
||||
|
||||
## 2 缩略语和缩写
|
||||
|
||||
| 缩写 | 描述 |
|
||||
|---|---|
|
||||
| KeyM | 密钥管理器 (Key Manager) |
|
||||
| PKI | 公钥基础设施 (Public Key Infrastructure) |
|
||||
| CSR | 证书签名请求 (Certificate Signing Request) |
|
||||
| CSM | 加密服务管理器 (Crypto Service Manager) |
|
||||
| CRL | 证书吊销列表 (Certificate Revocation List) |
|
||||
| CA | 证书颁发机构 (Certificate Authority) |
|
||||
| OID | 对象标识符 (Object Identifier)。一个字节数组,用于标识证书元素或证书元素的组或列表。 |
|
||||
|
||||
---
|
||||
|
||||
## 3 相关文档
|
||||
|
||||
### 3.1 输入文档
|
||||
|
||||
- [1] AUTOSAR Layered Software Architecture — `AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf`
|
||||
- [2] AUTOSAR General Requirements on Basic Software Modules — `AUTOSAR_SRS_BSWGeneral.pdf`
|
||||
- [3] AUTOSAR General Specification for Basic Software Modules — `AUTOSAR_SWS_BSWGeneral.pdf`
|
||||
- [4] AUTOSAR Specification of Crypto Service Manager — `AUTOSAR_SWS_CryptoServiceManager.pdf`
|
||||
- [5] AUTOSAR Requirements on Crypto Stack — `AUTOSAR_SRS_CryptoStack.pdf`
|
||||
|
||||
### 3.2 相关标准和规范
|
||||
|
||||
- [6] IEC 7498-1 The Basic Model, IEC Norm, 1994
|
||||
- [7] IETF 5280 Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
|
||||
- [8] SHE – Secure Hardware Extension, Functional Specification, V1.1
|
||||
|
||||
### 3.3 相关规范
|
||||
|
||||
AUTOSAR 提供了基础软件通用规范 (SWS BSW General) [3],该规范同样适用于密钥管理模块。因此,SWS BSW General [3] 应被视为密钥和证书管理模块的附加且必需的规范。
|
||||
|
||||
---
|
||||
|
||||
## 4 约束和假设
|
||||
|
||||
### 4.1 限制
|
||||
|
||||
密钥管理模块应与加密服务管理器及其底层模块一起使用。
|
||||
|
||||
当前仅支持每个 CsmKey 一个 KeyElement (ID = 1)。
|
||||
|
||||
### 4.2 对汽车域的适用性
|
||||
|
||||
本规范对特定汽车域没有限制。
|
||||
|
||||
---
|
||||
|
||||
## 5 对其他模块的依赖
|
||||
|
||||
本章列出了 AUTOSAR KeyM 模块所使用的与其他模块的关系。
|
||||
|
||||
### 5.1 对加密服务管理器的依赖
|
||||
|
||||
KeyM 模块依赖于 Csm 模块提供的加密算法和功能。KeyM 模块需要 API 函数来检索和设置密钥元素以及验证证书的签名,即:
|
||||
|
||||
- 密钥设置接口 (Key Setting Interface)
|
||||
- 密钥提取接口 (Key Extraction Interface)
|
||||
- 密钥复制接口 (Key Copying Interface)
|
||||
- 密钥生成接口 (Key Generation Interface)
|
||||
- 密钥派生接口 (Key Derivation Interface)
|
||||
- 密钥交换接口 (Key Exchange Interface)
|
||||
- 证书接口 (Certificate Interface)
|
||||
- 签名接口 (Signature Interface)
|
||||
|
||||
### 5.2 对非易失性存储器的依赖
|
||||
|
||||
KeyM 可以配置为在非易失性存储器中存储密钥材料。这需要到 NVM 的接口。
|
||||
|
||||
### 5.3 对同步时间基的依赖
|
||||
|
||||
证书验证期的时间由 STBM 提供。
|
||||
|
||||
---
|
||||
|
||||
## 6 需求可追溯性
|
||||
|
||||
> 完整可追溯性表(涵盖 SRS_BSW_00101、SRS_BSW_00358、SRS_BSW_00407、SRS_BSW_00414、SRS_CryptoStack_00090、SRS_CryptoStack_00091、SRS_CryptoStack_xxx06、SWS_BSW_00050、SWS_BSW_00216 等到 SWS_KeyM_xxx 的映射)请参阅原始 PDF 文档第 10 页。
|
||||
|
||||
---
|
||||
|
||||
## 7 功能规范
|
||||
|
||||
> **图 7-1:带有 KEYM 的 AUTOSAR 分层视图**
|
||||
|
||||
密钥管理模块大致可以分为两部分:加密密钥子模块和证书子模块。加密密钥子模块主要用于与发起生成或直接提供密钥材料的密钥配置实体(密钥主机,key master)进行交互。这些密钥分配给 CSM 的加密密钥,并存储在专用 NVM 块中,也可以作为相应加密驱动的密钥存储。证书子模块允许按层次结构配置证书链中的证书,提供存储和验证它们的接口。证书中包含的公钥可以进一步分配给 CsmKey,以便与配置的 CSM 加密作业一起使用。
|
||||
|
||||
**[SWS_KeyM_00001]** ⌈ 如果 `KeyMCryptoKeyManagerEnabled` 设置为 FALSE,则密钥管理器的加密密钥子模块应完全禁用。在这种情况下,不应提供任何函数,并且不应分配不需要用于其他操作的资源。⌋ (SRS_CryptoStack_xxx06)
|
||||
|
||||
**[SWS_KeyM_00002]** ⌈ 如果 `KeyMCertificateManagerEnabled` 设置为 FALSE,则密钥管理器中对证书子模块的支持应完全禁用。在这种情况下,不应提供任何函数,并且不应分配与证书操作关联的资源。⌋ (SRS_CryptoStack_xxx06)
|
||||
|
||||
### 7.1 加密密钥子模块
|
||||
|
||||
加密密钥子模块用于初始化、更新和维护 ECU 的加密密钥材料。一个用例是为安全车载通信提供需要分发到所涉及的 ECU 的密钥。这些密钥应提供给 CSM 密钥,这些 CSM 密钥分配给用于安全 I-PDU 身份验证的加密作业。因此,从建模的角度来看,将密钥主机提供的密钥分配给 CSM 密钥以及用于相应安全 I-PDU 的作业至关重要。这是车辆中的整体任务,并以相同方式影响多个 ECU。加密密钥子模块的一个目的是支持此操作。
|
||||
|
||||
密钥主机可以直接位于车辆中以协调内部密钥生成,例如作为特定的 ECU。也可以使用云中的后端系统,以安全方式生成密钥材料并将必要的数据提供给 ECU。通常,诊断命令直接或间接地用于密钥主机与加密密钥子模块之间的通信。
|
||||
|
||||
#### 7.1.1 通用行为
|
||||
|
||||
**[SWS_KeyM_00003]** ⌈ 加密密钥子模块可以配置为以类似会话的方式执行加密密钥操作。通过这种方式,仅在打开的会话期间接受 `KeyM_Prepare()` 或 `KeyM_Update()` 等密钥操作。⌋()
|
||||
|
||||
**[SWS_KeyM_00004]** ⌈ 通过调用 `KeyM_Start()` 启动会话。此后可以执行密钥操作,直到通过调用 `KeyM_Finalize()` 关闭会话。⌋()
|
||||
|
||||
**[SWS_KeyM_00005]** ⌈ 默认情况下,`KeyM_Start()` 函数不会考虑任何输入数据或长度信息,也不会提供任何输出数据,也不会更改输出数据长度。⌋()
|
||||
|
||||
**[SWS_KeyM_00006]** ⌈ (可选)如果配置选项 `KeyMCryptoKeyHandlerStartFinalizeEnabled` 设置为 TRUE,则可以调用密钥处理器。`KeyM_Start()` 函数将依次调用 `KeyM_KH_Start()` 函数,参数与 `KeyM_Start()` 相同。`KeyM_KH_Start()` 的返回值将用作 `KeyM_Start()` 的返回值。⌋()
|
||||
|
||||
**原理**:`KeyM_KH_Start()` 函数可以执行 OEM 特定的检查,例如验证任何输入数据的签名以证明密钥管理操作的真实性。
|
||||
|
||||
**注意**:`KeyMCryptoKeyHandlerStartFinalizeEnabled` 的定义仅在 `KeyMCryptoKeyStartFinalizeFunctionEnabled` 设置为 TRUE 时才有效。
|
||||
|
||||
**[SWS_KeyM_00007]** ⌈ 如果配置选项 `KeyMCryptoKeyStartFinalizeFunctionEnabled` 设置为 FALSE,则密钥管理模块不提供 `KeyM_Start()` 和 `KeyM_Finalize()` 函数。然后可以随时执行密钥更新操作。⌋()
|
||||
|
||||
**[SWS_KeyM_00008]** ⌈ 通过调用 `KeyM_Finalize()` 关闭会话。在调用期间,将在会话内更新的所有密钥通过调用 `Csm_KeySetValid()` 设置为有效。在函数完成其操作后,将不再接受进一步的密钥更新操作。⌋()
|
||||
|
||||
**[SWS_KeyM_00009]** ⌈ 如果所有密钥都已成功验证,则函数 `KeyM_Finalize()` 将返回 `E_OK`。如果至少一个密钥无法成功验证,则函数应返回 `E_NOT_OK`。尽管如此,所有已更新的密钥都应被验证,并且如果一个密钥验证失败,操作不应中止。⌋()
|
||||
|
||||
**[SWS_KeyM_00010]** ⌈ 如果配置选项 `KeyMCryptoKeyPrepareFunctionEnabled` 设置为 TRUE,则提供函数 `KeyM_Prepare()`。此函数当前没有功能行为。如果配置选项设置为 FALSE,则不提供功能接口。⌋()
|
||||
|
||||
**[SWS_KeyM_00011]** ⌈ 如果配置选项 `KeyMCryptoKeyHandlerPrepareEnabled` 设置为 TRUE,则对 `KeyM_Prepare()` 的调用将依次传递给 `KeyM_KH_Prepare()`,参数和返回值将相应传递。⌋()
|
||||
|
||||
**原理**:目的是在启动密钥更新会话后立即调用一次 `KeyM_Prepare()`。调用的诊断服务可以向密钥处理器提供执行以下密钥更新操作所需的特定数据。例如,它可以用于提取密钥主机所需的加密驱动特定信息,该信息从 (SHE-) 硬件提取并再次在输出缓冲区中提供。或者它可以启动一个 OEM 特定的密钥协商过程,其结果稍后对密钥更新过程是必需的。另一种可能性是密钥主机在准备期间提供(加密的)公共密钥。特定的密钥处理器能够(解密并)将密钥存储在 CSM 中。这将产生一个分配给 CSM 密钥的公共密钥,可进一步用于从中派生其他密钥。
|
||||
|
||||
**[SWS_KeyM_00012]** ⌈ 密钥更新通过调用 `KeyM_Update()` 触发,通常由诊断服务启动。⌋()
|
||||
|
||||
**[SWS_KeyM_00013]** ⌈ 如果调用 `KeyM_Update()` 并且 `KeyMCryptoKeyHandlerUpdateEnabled` 设置为 FALSE 且 `keyNameLength` 大于 0,则加密密钥子模块将搜索 `KeyMCryptoKey/KeyMCryptoKeyName` 中配置的密钥名称。如果未找到密钥名称,则函数将返回 `E_NOT_OK`。如果找到,则函数将触发密钥更新操作。⌋()
|
||||
|
||||
**[SWS_KeyM_00014]** ⌈ 如果调用 `KeyM_Update()` 并且 `KeyMCryptoKeyHandlerUpdateEnabled` 设置为 FALSE 且 `keyNameLength` 为 0,则加密密钥子模块将输入数据解释为 SHE 密钥的 M1M2M3 值。通过提取输入数据的 bit 121..124 从 M1 中提取 key_ID,并将在 `KeyMCryptoKeyCryptoProps` 中搜索相应的值以识别 `KeyMCryptoKeyId` 和关联的 `CsmKeyRef`。如果找到,则函数将触发密钥更新操作。⌋()
|
||||
|
||||
**注意**:在这种情况下,CsmKey 应配置为 SHE 密钥。格式应为 SHE 算法类型,`KeyMCryptoKeyGenerationType` 应设置为 `KEYM_STORED_KEY`。
|
||||
|
||||
**[SWS_KeyM_00015]** ⌈ 当调用 `KeyM_Update()` 并且通过内部搜索算法或通过提供密钥处理器 `KeyM_KH_Update()` 找到 `KeyMCryptoKeyId` 时,应按照 `KeyMCryptoKeyGenerationType` 中的配置执行密钥生成。如果未找到关联的密钥,则 `KeyM_Update()` 函数应返回 `E_NOT_OK`。⌋()
|
||||
|
||||
**[SWS_KeyM_00016]** ⌈ 如果识别到密钥 ID 且 `KeyMCryptoKeyGenerationType` 配置为 `KEYM_STORED_KEY`,则将使用对 `KeyMCryptoKeyCsmKeyTargetRef` 的引用和密钥元素 ID '1' 调用函数 `Csm_KeyElementSet()`。将为该密钥设置内部标记,表示内容已更改并且需要最终化。⌋()
|
||||
|
||||
**[SWS_KeyM_00017]** ⌈ 如果识别到密钥 ID 且 `KeyMCryptoKeyGenerationType` 配置为 `KEYM_DERIVE_KEY`,则将调用函数 `Csm_KeyDerive()` 以从公共密钥(由 `KeyMCryptoKeyCsmKeySourceDeriveRef` 引用)派生新密钥(由 `KeyMCryptoKeyCsmKeyTargetRef` 引用)。将为该密钥设置内部标记,表示内容已更改并且需要最终化。⌋()
|
||||
|
||||
**[SWS_KeyM_00018]** ⌈ 如果 `KeyMCryptoKeyStartFinalizeFunctionEnabled` 设置为 FALSE,则应在成功的密钥派生或存储操作之后立即调用函数 `Csm_KeySetValid()`。⌋()
|
||||
|
||||
密钥更新操作有几种选项:
|
||||
|
||||
一种明显的选项是多次调用 `KeyM_Update()` 函数,即每个要更新的密钥调用一次。密钥主机将从外部触发函数调用,并在每次服务调用中提供密钥材料。另一种可能性是使用单个调用(例如 `KeyM_Prepare()`)提供容器,该容器反过来调用 `KeyM_KH_Prepare()`。这允许以 OEM 特定格式提供容器。密钥处理器将扫描容器并必须为容器中可用的每个密钥多次调用 `KeyM_Update()`。
|
||||
|
||||
**[SWS_KeyM_00019]** ⌈ 如果配置项 `KeyMCryptoKeyStartFinalizeFunctionEnabled` 设置为 TRUE,则必须通过调用 `KeyM_Finalize()` 来结束加密密钥操作。该函数将为所有具有内部标记的密钥触发对 `Csm_KeySetValid()` 的调用,以最终化密钥更新操作。无论函数调用是否成功,在该函数调用之后关闭密钥更新会话并清除所有内部标记。⌋()
|
||||
|
||||
**[SWS_KeyM_00020]** ⌈ 如果配置项 `KeyMCryptoKeyVerifyFunctionEnabled` 设置为 TRUE,则加密密钥子模块应提供函数 `KeyM_Verify()`。该函数可由密钥主机触发,并用于运行由 `KeyMCryptoKeyCsmVerifyJobRef` 引用的加密作业。`KeyM_Verify()` 可在任何时间调用,并且不绑定到活动的加密密钥会话。⌋()
|
||||
|
||||
### 7.2 证书子模块
|
||||
|
||||
KeyM 的证书子模块功能允许 BSW 模块和 SWC 在 AUTOSAR 软件架构中的中心点更高效地执行证书操作。此类操作的示例包括验证完整证书链或从运行时提供和验证的证书中检索元素。
|
||||
|
||||
所需的加密操作(例如证书签名的验证)仍由加密服务管理器中定义的关联加密作业执行。此外,证书的安全存储可以位于 CSM 的密钥存储位置中,例如允许将根证书存储在 HSM 内。
|
||||
|
||||
#### 7.2.1 通用行为
|
||||
|
||||
证书子模块允许定义和配置证书,以便可以在生产时存储它们并进一步用于多种目的。配置允许以分层结构(具有 PKI 系统中使用的根、中间和目标证书)定义证书链中的证书。存储的证书将在启动时根据配置的分层结构进行检查。配置还允许检查特定证书元素是否具有确定的值。还支持读取证书的特定元素,并且所包含的公钥可以与 CsmKey 关联,以便与配置的 CSM 加密作业一起使用。
|
||||
|
||||
> **图 7-2:PKI 证书链示例**
|
||||
|
||||
如果需要,根证书和中间证书可以在 ECU 或车辆的生产阶段提供。这些证书将永久存储在指定位置。如果现在向 ECU 提交证书,则可以将此证书存储在临时位置以请求验证。证书子模块将检查关联链中的现有证书,并将开始解析内容,根据预先配置的条件验证它们,然后将针对其链中所有可用的证书检查签名。
|
||||
|
||||
#### 7.2.2 初始化
|
||||
|
||||
**[SWS_KeyM_00022]** ⌈ 在初始化期间,证书子模块将检索永久存储的证书,准备它们进行解析,并根据需要使它们可用,例如用于证书元素提取或针对其他证书进行验证。⌋()
|
||||
|
||||
可选地,证书子模块可以解析一次证书并将解析后的信息存储在专用 NVM 块中,而不是在每次启动时解析证书。在 NVM 中存储解析结果的优势将加快系统的启动。
|
||||
|
||||
由于证书的解析和验证可能需要大量时间,因此建议在启动后于后台任务中为存储的证书执行此操作。
|
||||
|
||||
**[SWS_KeyM_00023]** ⌈ 如果解析操作成功,则证书子模块从证书中提取公钥并将其存储在 CSM 的提供的密钥引用中或 NVM 中。⌋()
|
||||
|
||||
#### 7.2.3 证书配置
|
||||
|
||||
**[SWS_KeyM_00024]** ⌈ 应至少将一个证书定义为 PKI 的根证书。相应 `KeyMCertificate` 容器的 `KeyMCertUpperHierarchicalCertRef` 引用自身。⌋()
|
||||
|
||||
**原理**:根证书具有以下特征:使用存储在同一证书中的公钥验证签名(自签名证书)。它是层次结构中的顶级证书。
|
||||
|
||||
**[SWS_KeyM_00025]** ⌈ 通过调用函数 `KeyM_SetCertificate()` 存储证书以供验证。证书将放置在 `KeyMCryptoKey` 的预配置存储类中。⌋()
|
||||
|
||||
**注意**:这样的密钥通常放置在 RAM 中,并不打算用于永久存储。`KeyM_SetCertificate()` 仅用于验证提交的证书。它不打算用于永久存储,例如根密钥。对于永久存储证书的操作,应使用函数 `KeyM_ServiceCertificate()`。
|
||||
|
||||
#### 7.2.4 操作模式
|
||||
|
||||
**[SWS_KeyM_00021]** ⌈ 如果配置项 `KeyMServiceCertificateFunctionEnabled` 和 `KeyMCertificateManagerEnabled` 设置为 TRUE,则证书子模块应提供函数 `KeyM_ServiceCertificate()`。该函数可由密钥主机触发,并用于向证书子模块提供证书相关信息。可以执行几种证书相关操作,例如永久存储在系统中的证书的引入或更新。⌋()
|
||||
|
||||
**[SWS_KeyM_00026]** ⌈ 一旦证书已通过 `KeyM_SetCertificate()` 或 `KeyM_ServiceCertificate()` 存储,就会启动证书的解析过程。⌋()
|
||||
|
||||
**[SWS_KeyM_00027]** ⌈ 解析过程识别证书是否以良好格式的方式提供,例如 X.509 证书的 ASN.1 结构是否正确以及是否包含所有基本元素。此外,根据所有已分配 `KeyMCertificateElementVerification` 容器的配置检查其他证书元素的内容。⌋()
|
||||
|
||||
**[SWS_KeyM_00028]** ⌈ 通过调用函数 `KeyM_VerifyCertificate()`、`KeyM_VerifyCertificates()` 或 `KeyM_VerifyCertificateChain()` 之一来按需验证证书。⌋()
|
||||
|
||||
**[SWS_KeyM_00029]** ⌈ 至少应按此顺序成功通过以下验证步骤,以成功验证证书:
|
||||
|
||||
1. 证书从层次结构的顶部验证到底部。
|
||||
2. 验证中涉及的所有证书应可用,并且已成功解析和验证。
|
||||
3. 如果吊销列表可用,则应检查所有涉及的证书是否列在 CRL 中。
|
||||
4. 上层层次结构中证书的主题字段与下层层次结构中证书的颁发者字段匹配。
|
||||
5. 时间服务器(即 STBM)提供的当前时间应大于"not before"且小于"not after"时间值。
|
||||
6. 可以使用由 `KeyMCertUpperHierarchicalCertRef` 引用的证书的关联公钥验证签名。对于 X.509 证书,所有关键扩展字段都应存在。通过使用由 `KeyMCertUpperHierarchicalCertRef` 引用的证书的 `KeyMCertCsmSignatureVerifyJobRef` 来验证签名。该上层层次结构证书的相应公钥应加载到 `KeyMCertCsmSignatureVerifyKeyRef` 中(如果存在)。
|
||||
|
||||
⌋()
|
||||
|
||||
**[SWS_KeyM_00030]** ⌈ 如果层次链中的某个证书缺失或主题和颁发者字段不匹配,则验证函数应返回 `KEYM_E_CERT_INVALID_CHAIN_OF_TRUST`。⌋()
|
||||
|
||||
**[SWS_KeyM_00031]** ⌈ 如果解析过程检测到某个证书元素不包含所需值,则验证函数应返回 `KEYM_E_CERT_INVALID_CONTENT`。⌋()
|
||||
|
||||
**[SWS_KeyM_00032]** ⌈ 如果提供的证书格式无效(例如 X.509 证书的 ASN.1 结构无效),则验证函数应返回 `KEYM_E_CERT_INVALID_FORMAT`。⌋()
|
||||
|
||||
**[SWS_KeyM_00033]** ⌈ 如果提供的证书与当前时间段不匹配,则验证函数应返回 `KEYM_E_CERT_VALIDITY_PERIOD_FAIL`。⌋()
|
||||
|
||||
**[SWS_KeyM_00034]** ⌈ 如果签名验证失败,则验证函数应返回 `KEYM_E_CERT_SIGNATURE_FAIL`。⌋()
|
||||
|
||||
**[SWS_KeyM_00035]** ⌈ 如果链中的某个证书在吊销列表中找到(如果可用),则验证函数应返回 `KEYM_E_CERTIFICATE_REVOKED`。⌋()
|
||||
|
||||
### 7.3 错误分类
|
||||
|
||||
#### 7.3.1 开发错误
|
||||
|
||||
**[SWS_KeyM_00036]** 开发错误类型 ⌈
|
||||
|
||||
| 错误类型 | 相关错误代码 | 值(十六进制) |
|
||||
|---|---|---|
|
||||
| 使用无效参数(空指针)调用 API 服务 | KEYM_E_PARAM_POINTER | 0x01 |
|
||||
| 操作的缓冲区太小 | KEYM_E_SMALL_BUFFER | 0x02 |
|
||||
| 在模块初始化之前调用 API | KEYM_E_UNINIT | 0x03 |
|
||||
| KeyM 模块初始化失败 | KEYM_E_INIT_FAILED | 0x04 |
|
||||
|
||||
⌋()
|
||||
|
||||
#### 7.3.2 运行时错误
|
||||
|
||||
无运行时错误。
|
||||
|
||||
#### 7.3.3 瞬态故障
|
||||
|
||||
无瞬态故障。
|
||||
|
||||
#### 7.3.4 生产错误
|
||||
|
||||
无生产错误。
|
||||
|
||||
#### 7.3.5 扩展生产错误
|
||||
|
||||
无扩展生产错误。
|
||||
|
||||
---
|
||||
|
||||
## 8 API 规范
|
||||
|
||||
### 8.1 导入类型
|
||||
|
||||
本章列出了从以下文件导入的所有类型:
|
||||
|
||||
**[SWS_KeyM_00037]** ⌈
|
||||
|
||||
| 模块 | 头文件 | 导入的类型 |
|
||||
|---|---|---|
|
||||
| Csm | `<none>` | Crypto_VerifyResultType |
|
||||
| | Rte_Csm_Type.h | Crypto_OperationModeType |
|
||||
| StbM | Rte_StbM_Type.h | StbM_SynchronizedTimeBaseType |
|
||||
| | Rte_StbM_Type.h | StbM_TimeStampType |
|
||||
| | Rte_StbM_Type.h | StbM_UserDataType |
|
||||
| Std_Types | StandardTypes.h | Std_ReturnType |
|
||||
| | StandardTypes.h | Std_VersionInfoType |
|
||||
|
||||
⌋()
|
||||
|
||||
密钥管理模块使用 Std_ReturnType 的以下扩展:
|
||||
|
||||
**[SWS_KeyM_00040]** ⌈
|
||||
|
||||
| 范围 | 描述 |
|
||||
|---|---|
|
||||
| `KEYM_E_BUSY` = 0x02 | 密钥管理忙于其他操作 |
|
||||
| `KEYM_E_PENDING` = 0x03 | 操作请求已接受,响应待处理。它现在以异步模式运行,响应将通过回调提供 |
|
||||
| `KEYM_E_KEY_CERT_SIZE_MISMATCH` = 0x04 | 参数大小与预期值不匹配 |
|
||||
| `KEYM_E_PARAMETER_MISMATCH` = 0x05 | 函数参数未提供预期值 |
|
||||
| `KEYM_E_KEY_CERT_INVALID` = 0x06 | 密钥或证书无效,无法用于该操作 |
|
||||
| `KEYM_E_KEY_CERT_READ_FAIL` = 0x07 | 由于读取或权限失败,无法提供证书或密钥 |
|
||||
| `KEYM_E_KEY_CERT_EMPTY` = 0x08 | 请求的密钥或证书不可用,槽为空 |
|
||||
| `KEYM_E_CERT_INVALID_CHAIN_OF_TRUST` = 0x09 | 证书验证失败 — 信任链无效 |
|
||||
| Description | 密钥管理特定的返回值,用于 Std_ReturnType |
|
||||
| Available via | KeyM.h |
|
||||
|
||||
⌋()
|
||||
|
||||
### 8.2 类型定义
|
||||
|
||||
#### 8.2.1 KeyM_ConfigType
|
||||
|
||||
**[SWS_KeyM_00157]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | `KeyM_ConfigType` |
|
||||
| Type | Structure |
|
||||
| Range | implementation specific |
|
||||
| Description | 此结构是初始化密钥管理器模块的基本类型。在密钥管理器模块的初始化中将使用指向此结构实例的指针。 |
|
||||
| Available via | KeyM.h |
|
||||
|
||||
⌋ (SWS_BSW_00216)
|
||||
|
||||
#### 8.2.2 KeyM_KH_UpdateOperationType
|
||||
|
||||
**[SWS_KeyM_00055]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | `KeyM_KH_UpdateOperationType` |
|
||||
| Type | Enumeration |
|
||||
| Range | `KEYM_KH_UPDATE_KEY_UPDATE_REPEAT` = 0x01 — 密钥处理器已成功执行操作并提供应由密钥管理器的更新函数进一步操作的新密钥数据。请求下一次调用密钥处理器。<br>`KEYM_KH_UPDATE_FINISH` = 0x02 — 密钥处理器已成功执行所有更新操作。更新操作已完成,结果数据可以提供回来作为 KeyM_Update 操作的最终结果。 |
|
||||
| Description | 指定在回调中执行的密钥处理器更新操作的类型。 |
|
||||
| Available via | KeyM.h |
|
||||
|
||||
⌋()
|
||||
|
||||
#### 8.2.3 KeyM_CertElementIteratorType
|
||||
|
||||
**[SWS_KeyM_00042]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | `KeyM_CertElementIteratorType` |
|
||||
| Type | Structure |
|
||||
| Range | implementation specific |
|
||||
| Description | 此结构用于迭代证书的多个元素。 |
|
||||
| Available via | KeyM.h |
|
||||
|
||||
⌋()
|
||||
|
||||
#### 8.2.4 KeyM_CryptoKeyIdType
|
||||
|
||||
**[SWS_KeyM_00302]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | `KeyM_CryptoKeyIdType` |
|
||||
| Type | uint16 |
|
||||
| Description | 加密密钥句柄。 |
|
||||
| Available via | KeyM.h |
|
||||
|
||||
⌋()
|
||||
|
||||
#### 8.2.5 KeyM_CertDataType
|
||||
|
||||
**[SWS_KeyM_00041]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Name | `KeyM_CertDataType` |
|
||||
| Type | Structure |
|
||||
| Element | `certDataLength` (uint32) — 证书数据的长度;<br>`certData` (`KeyM_CertDataPointerType`) — 指针引用调用方本地数据区域上的证书数据 |
|
||||
| Description | 此结构用于通过接口函数交换证书数据。 |
|
||||
| Available via | KeyM.h |
|
||||
|
||||
⌋()
|
||||
|
||||
### 8.3 函数定义
|
||||
|
||||
这是为上层模块提供的函数列表。
|
||||
|
||||
#### 8.3.1 通用
|
||||
|
||||
##### 8.3.1.1 KeyM_Init
|
||||
|
||||
**[SWS_KeyM_00043]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | `KeyM_Init` |
|
||||
| Syntax | `void KeyM_Init(const KeyM_ConfigType* ConfigPtr)` |
|
||||
| Service ID[hex] | 0x01 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Parameters (in) | `ConfigPtr` — 指向在 VARIANT-POST-BUILD 中设置的配置的指针 |
|
||||
| Parameters (inout) | None |
|
||||
| Parameters (out) | None |
|
||||
| Return value | None |
|
||||
| Description | 此函数初始化密钥管理模块。 |
|
||||
| Available via | KeyM.h |
|
||||
|
||||
⌋ (SRS_BSW_00101, SRS_BSW_00358, SRS_BSW_00414)
|
||||
|
||||
**[SWS_KeyM_00158]** ⌈ 配置指针 `configPtr` 应始终具有 `NULL_PTR` 值。⌋(SWS_BSW_00050)
|
||||
|
||||
**注意**:当前未使用密钥管理器在初始化时的配置,因此应将 `NULL_PTR` 传递给模块。
|
||||
|
||||
**[SWS_KeyM_00044]** ⌈ 如果密钥管理模块的初始化失败,并且开发错误处于激活状态,则错误 `KEYM_E_INIT_FAILED` 应报告给 DET。⌋()
|
||||
|
||||
**[SWS_KeyM_00045]** ⌈ 如果证书子模块处于活动状态,并且永久存储的证书在未解析和未验证状态下可用,则 KeyM 证书子模块部分应启动后台任务以预解析和预验证证书。⌋()
|
||||
|
||||
**原理**:如果 CPU 时间可用,可以在后台任务中执行该操作。预验证证书将有助于在提交证书并应在运行时针对预安装的证书链进行验证时加快身份验证速度。
|
||||
|
||||
**[SWS_KeyM_00046]** ⌈ 如果加密密钥子模块处于活动状态,则在初始化期间应从 NVM 读取所有密钥,并将其存储到 CSM (RAM-) 密钥槽。⌋()
|
||||
|
||||
**[SWS_KeyM_00144]** ⌈ 如果开发错误处于激活状态,则密钥管理器应在每次函数调用时检查模块是否已通过 `KeyM_Init()` 初始化且尚未通过 `KeyM_Deinit()` 反初始化。否则,应设置开发错误 `KEYM_E_UNINIT`。⌋()
|
||||
|
||||
**[SWS_KeyM_00145]** ⌈ 如果开发错误处于激活状态,则密钥管理器应在每次提供结果缓冲区的函数中检查所提供的缓冲区是否足够大以存储请求的结果。如果不是,则应设置开发错误 `KEYM_E_SMALL_BUFFER`。⌋()
|
||||
|
||||
**[SWS_KeyM_00146]** ⌈ 如果开发错误处于激活状态,则密钥管理器应在每次提供指针的函数中检查指针是否不是 `NULL_PTR`。如果提供了 `NULL_PTR` 但不应提供,则应设置开发错误 `KEYM_E_PARAM_POINTER`。⌋()
|
||||
|
||||
##### 8.3.1.2 KeyM_Deinit
|
||||
|
||||
**[SWS_KeyM_00047]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | `KeyM_Deinit` |
|
||||
| Syntax | `void KeyM_Deinit(void)` |
|
||||
| Service ID[hex] | 0x02 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Parameters (in) | None |
|
||||
| Parameters (inout) | None |
|
||||
| Parameters (out) | None |
|
||||
| Return value | None |
|
||||
| Description | 此函数将密钥管理模块重置为未初始化状态。 |
|
||||
| Available via | KeyM.h |
|
||||
|
||||
⌋()
|
||||
|
||||
**[SWS_KeyM_00048]** ⌈ 出于安全原因,加密密钥子模块应主动销毁 RAM 中用于加密密钥材料的所有数据。特别地,应将对称密钥和中间结果设置为初始值。⌋()
|
||||
|
||||
##### 8.3.1.3 KeyM_GetVersionInfo
|
||||
|
||||
**[SWS_KeyM_00049]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | `KeyM_GetVersionInfo` |
|
||||
| Syntax | `void KeyM_GetVersionInfo(Std_VersionInfoType* VersionInfo)` |
|
||||
| Service ID[hex] | 0x03 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Parameters (in) | None |
|
||||
| Parameters (inout) | None |
|
||||
| Parameters (out) | `VersionInfo` — 指向本模块版本信息的指针 |
|
||||
| Return value | None |
|
||||
| Description | 提供本模块的版本信息。 |
|
||||
| Available via | KeyM.h |
|
||||
|
||||
⌋ (SRS_BSW_00407)
|
||||
|
||||
#### 8.3.2 加密密钥操作
|
||||
|
||||
##### 8.3.2.1 KeyM_Start
|
||||
|
||||
**[SWS_KeyM_00050]** ⌈
|
||||
|
||||
| 字段 | 内容 |
|
||||
|---|---|
|
||||
| Service name | `KeyM_Start` |
|
||||
| Syntax | `Std_ReturnType KeyM_Start(KeyM_StartType StartType, const uint8* RequestData, uint16 RequestDataLength, uint8* ResponseData, uint16* ResponseDataLength)` |
|
||||
| Service ID[hex] | 0x04 |
|
||||
| Sync/Async | Synchronous |
|
||||
| Reentrancy | Non Reentrant |
|
||||
| Parameters (in) | `StartType` — 定义密钥操作应以哪种模式执行;`RequestData` — 随请求一起提供的信息,例如签名;`RequestDataLength` — RequestData 数组中的数据长度 |
|
||||
| Parameters (inout) | `ResponseDataLength` — In:`ResponseData` 中可用的最大字节数;Out:实际数量 |
|
||||
| Parameters (out) | `ResponseData` — 函数返回的数据 |
|
||||
| Return value | `E_OK`/`E_NOT_OK`/`KEYM_E_PARAMETER_MISMATCH`/`KEYM_E_KEY_CERT_SIZE_MISMATCH` |
|
||||
| Description | 此函数是可选的,仅当配置项 `KeyMCryptoKeyStartFinalizeFunctionEnabled` 设置为 true 时才使用。它旨在允许密钥更新操作。 |
|
||||
| Available via | KeyM.h |
|
||||
|
||||
⌋()
|
||||
|
||||
**[SWS_KeyM_00085]** ⌈ 如果 `KeyMCryptoKeyStartFinalizeFunctionEnabled` 设置为 TRUE,则应调用此函数以启动密钥更新会话。该函数通过 `E_OK` 指示现在可以进行密钥操作。⌋()
|
||||
|
||||
##### 8.3.2.2 KeyM_Finalize
|
||||
|
||||
`KeyM_Finalize()` 函数结束密钥更新会话。它将为所有已更新的密钥触发对 `Csm_KeySetValid()` 的调用。
|
||||
|
||||
##### 8.3.2.3 KeyM_Prepare
|
||||
|
||||
`KeyM_Prepare()` 函数(可选)用于在密钥更新会话开始时提供初始数据。它由密钥处理器 `KeyM_KH_Prepare()` 调用以执行 OEM 特定操作。
|
||||
|
||||
##### 8.3.2.4 KeyM_Update
|
||||
|
||||
**[SWS_KeyM_00056..00066]** 定义了 `KeyM_Update()` 函数及其变体的行为:
|
||||
|
||||
| 函数 | 描述 |
|
||||
|---|---|
|
||||
| `KeyM_Update()` | 触发密钥更新操作。使用 `keyNameLength` 或 SHE M1M2M3 解释输入数据 |
|
||||
| `KeyM_KH_Update()` | 密钥处理器更新回调函数。允许 OEM 特定的密钥更新逻辑 |
|
||||
| `KeyM_UpdateAsync()` | 异步版本的 `KeyM_Update()` |
|
||||
|
||||
具体行为根据 `KeyMCryptoKeyHandlerUpdateEnabled` 和 `KeyMCryptoKeyGenerationType` 而定。
|
||||
|
||||
##### 8.3.2.5 KeyM_Verify
|
||||
|
||||
**[SWS_KeyM_00068]** ⌈ 如果 `KeyMCryptoKeyVerifyFunctionEnabled` 设置为 TRUE,则提供函数 `KeyM_Verify()`。该函数可用于运行由 `KeyMCryptoKeyCsmVerifyJobRef` 引用的加密作业来验证密钥。⌋()
|
||||
|
||||
#### 8.3.3 证书处理
|
||||
|
||||
##### 8.3.3.1 KeyM_SetCertificate
|
||||
|
||||
`KeyM_SetCertificate()` 函数存储证书以供验证。证书放置在预配置的 `KeyMCryptoKey` 存储类中。该函数仅用于验证提交的证书,不用于永久存储。
|
||||
|
||||
##### 8.3.3.2 KeyM_ServiceCertificate
|
||||
|
||||
`KeyM_ServiceCertificate()` 函数用于永久存储证书的引入或更新。
|
||||
|
||||
##### 8.3.3.3 KeyM_VerifyCertificate, KeyM_VerifyCertificates, KeyM_VerifyCertificateChain
|
||||
|
||||
**`KeyM_VerifyCertificate`**:验证单个证书。
|
||||
|
||||
**`KeyM_VerifyCertificates`**:验证多个证书。
|
||||
|
||||
**`KeyM_VerifyCertificateChain`**:验证完整证书链。
|
||||
|
||||
返回代码:
|
||||
|
||||
| 返回代码 | 描述 |
|
||||
|---|---|
|
||||
| `KEYM_E_CERT_INVALID_CHAIN_OF_TRUST` | 信任链无效 |
|
||||
| `KEYM_E_CERT_INVALID_CONTENT` | 证书内容无效 |
|
||||
| `KEYM_E_CERT_INVALID_FORMAT` | 证书格式无效 |
|
||||
| `KEYM_E_CERT_VALIDITY_PERIOD_FAIL` | 证书有效期失败 |
|
||||
| `KEYM_E_CERT_SIGNATURE_FAIL` | 签名验证失败 |
|
||||
| `KEYM_E_CERTIFICATE_REVOKED` | 证书已吊销 |
|
||||
|
||||
##### 8.3.3.4 KeyM_GetCertificate, KeyM_GetCertificateElement, KeyM_SetCertificateElement
|
||||
|
||||
**`KeyM_GetCertificate`**:检索存储的证书。
|
||||
|
||||
**`KeyM_GetCertificateElement`**:从证书中检索特定元素。
|
||||
|
||||
**`KeyM_SetCertificateElement`**:设置证书中的元素。
|
||||
|
||||
##### 8.3.3.5 KeyM_CertElementIteratorInit, KeyM_CertElementIteratorNext, KeyM_CertElementIteratorDestroy
|
||||
|
||||
**`KeyM_CertElementIteratorInit`**:初始化证书元素迭代器。
|
||||
|
||||
**`KeyM_CertElementIteratorNext`**:获取迭代器中的下一个证书元素。
|
||||
|
||||
**`KeyM_CertElementIteratorDestroy`**:销毁证书元素迭代器。
|
||||
|
||||
### 8.4 Call-out 定义
|
||||
|
||||
KeyM 模块提供了一组 call-out 函数,允许 OEM 或供应商实现特定的处理逻辑:
|
||||
|
||||
- `KeyM_KH_Start()` — 启动密钥处理器
|
||||
- `KeyM_KH_Prepare()` — 准备密钥处理器
|
||||
- `KeyM_KH_Update()` — 更新密钥处理器
|
||||
- `KeyM_KH_Finalize()` — 完成密钥处理器
|
||||
|
||||
### 8.5 调度函数
|
||||
|
||||
#### 8.5.1 KeyM_MainFunction
|
||||
|
||||
`KeyM_MainFunction()` 是 KeyM 模块的主函数。它由 BSW 调度器周期性调用以处理异步操作。
|
||||
|
||||
#### 8.5.2 KeyM_MainBackgroudFunction
|
||||
|
||||
`KeyM_MainBackgroudFunction()` 是 KeyM 模块的后台主函数。它由 BSW 调度器周期性调用以处理后台任务(例如证书预解析和预验证)。
|
||||
|
||||
### 8.6 预期接口
|
||||
|
||||
#### 8.6.1 必需接口
|
||||
|
||||
KeyM 模块所需的所有必需接口:
|
||||
|
||||
| API 函数 | 头文件 | 描述 |
|
||||
|---|---|---|
|
||||
| `Csm_KeyElementSet` | Csm.h | 设置密钥元素 |
|
||||
| `Csm_KeyElementGet` | Csm.h | 获取密钥元素 |
|
||||
| `Csm_KeySetValid` | Csm.h | 设置密钥有效 |
|
||||
| `Csm_KeyDerive` | Csm.h | 派生密钥 |
|
||||
| `Csm_KeyGenerate` | Csm.h | 生成密钥 |
|
||||
| `Csm_KeyExchangeCalcPubVal` | Csm.h | 计算密钥交换公钥值 |
|
||||
| `Csm_KeyExchangeCalcSecret` | Csm.h | 计算密钥交换共享密钥 |
|
||||
| `Csm_CertificateParse` | Csm.h | 解析证书 |
|
||||
| `Csm_CertificateVerify` | Csm.h | 验证证书 |
|
||||
| `Csm_SignatureVerify` | Csm.h | 验证签名 |
|
||||
| `StbM_GetCurrentTime` | StbM.h | 获取当前同步时间 |
|
||||
|
||||
#### 8.6.2 可选接口
|
||||
|
||||
KeyM 模块的所有可选接口:
|
||||
|
||||
| API 函数 | 头文件 | 描述 |
|
||||
|---|---|---|
|
||||
| `NvM_ReadBlock` | NvM.h | 读取 NVM 块 |
|
||||
| `NvM_WriteBlock` | NvM.h | 写入 NVM 块 |
|
||||
| `NvM_SetRamBlockStatus` | NvM.h | 设置 RAM 块状态 |
|
||||
|
||||
#### 8.6.3 可配置接口
|
||||
|
||||
KeyM 模块允许通过配置来定义自定义接口(call-outs)。详见原文 PDF 第 47-55 页。
|
||||
|
||||
### 8.7 服务接口
|
||||
|
||||
#### 8.7.1 本章范围
|
||||
|
||||
本章定义 KeyM 模块作为 AUTOSAR 服务组件提供的服务接口。这些服务接口允许通过 RTE 进行访问。
|
||||
|
||||
#### 8.7.2 数据类型
|
||||
|
||||
KeyM 模块定义了一组数据类型用于服务接口:
|
||||
|
||||
- `KeyM_StartType` — 启动类型
|
||||
- `KeyM_CertificateStatusType` — 证书状态类型
|
||||
- `KeyM_CertificateElementIdType` — 证书元素 ID 类型
|
||||
- `KeyM_CertificateElementType` — 证书元素类型
|
||||
- 等等
|
||||
|
||||
> 完整数据类型定义请参阅原始 PDF 文档第 56-62 页。
|
||||
|
||||
#### 8.7.3 客户端-服务器接口
|
||||
|
||||
KeyM 模块提供了一组客户端-服务器接口:
|
||||
|
||||
- `KeyM_StartFinalize` — 启动/完成服务
|
||||
- `KeyM_Update` — 密钥更新服务
|
||||
- `KeyM_Verify` — 密钥验证服务
|
||||
- `KeyM_Certificate` — 证书服务
|
||||
- 等等
|
||||
|
||||
> 完整客户端-服务器接口定义请参阅原始 PDF 文档第 62-75 页。
|
||||
|
||||
#### 8.7.4 端口
|
||||
|
||||
KeyM 模块定义了服务接口的端口配置。
|
||||
|
||||
> 完整端口定义请参阅原始 PDF 文档第 76-78 页。
|
||||
|
||||
---
|
||||
|
||||
## 9 序列图
|
||||
|
||||
本章提供 KeyM 模块关键操作的序列图。
|
||||
|
||||
### 9.1 存储单个密钥
|
||||
|
||||
> 详见原始 PDF 文档第 79 页。
|
||||
|
||||
### 9.2 存储多个密钥
|
||||
|
||||
> 详见原始 PDF 文档第 80 页。
|
||||
|
||||
### 9.3 派生密钥
|
||||
|
||||
> 详见原始 PDF 文档第 81 页。
|
||||
|
||||
### 9.4 添加工作证书
|
||||
|
||||
> 详见原始 PDF 文档第 82 页。
|
||||
|
||||
### 9.5 添加根证书或中间证书
|
||||
|
||||
> 详见原始 PDF 文档第 83 页。
|
||||
|
||||
---
|
||||
|
||||
## 10 配置规范
|
||||
|
||||
第 10.1 章规定 KeyM 模块的结构(容器)和参数。第 10.2 章另外规定 KeyM 模块的发布信息。
|
||||
|
||||
### 10.1 容器和配置参数
|
||||
|
||||
#### 10.1.1 KeyM
|
||||
|
||||
`KeyM` 根容器配置密钥管理模块。
|
||||
|
||||
| 包含的容器 | 多重性 | 范围 / 依赖 |
|
||||
|---|---|---|
|
||||
| `KeyMGeneral` | 1 | 公共配置 |
|
||||
| `KeyMCertificate` | 0..* | 证书容器 |
|
||||
| `KeyMCryptoKey` | 0..* | 加密密钥容器 |
|
||||
|
||||
#### 10.1.2 KeyMGeneral
|
||||
|
||||
`KeyMGeneral` 容器定义公共配置选项:
|
||||
|
||||
| 参数 | 描述 |
|
||||
|---|---|
|
||||
| `KeyMDevErrorDetect` | 启用/禁用开发错误检测 |
|
||||
| `KeyMVersionInfoApi` | 启用/禁用 `KeyM_GetVersionInfo()` API |
|
||||
| `KeyMCryptoKeyManagerEnabled` | 启用/禁用加密密钥子模块 |
|
||||
| `KeyMCertificateManagerEnabled` | 启用/禁用证书子模块 |
|
||||
| `KeyMCryptoKeyStartFinalizeFunctionEnabled` | 启用 `KeyM_Start`/`KeyM_Finalize` 函数 |
|
||||
| `KeyMCryptoKeyHandlerStartFinalizeEnabled` | 启用密钥处理器 Start/Finalize |
|
||||
| `KeyMCryptoKeyPrepareFunctionEnabled` | 启用 `KeyM_Prepare` 函数 |
|
||||
| `KeyMCryptoKeyHandlerPrepareEnabled` | 启用密钥处理器 Prepare |
|
||||
| `KeyMCryptoKeyHandlerUpdateEnabled` | 启用密钥处理器 Update |
|
||||
| `KeyMCryptoKeyVerifyFunctionEnabled` | 启用 `KeyM_Verify` 函数 |
|
||||
| `KeyMServiceCertificateFunctionEnabled` | 启用 `KeyM_ServiceCertificate` 函数 |
|
||||
| 等等 | |
|
||||
|
||||
#### 10.1.3 KeyMCertificate
|
||||
|
||||
`KeyMCertificate` 容器定义单个证书:
|
||||
|
||||
| 参数 | 描述 |
|
||||
|---|---|
|
||||
| `KeyMCertificateId` | 证书的标识符 |
|
||||
| `KeyMCertificateName` | 证书的名称 |
|
||||
| `KeyMCertUpperHierarchicalCertRef` | 对上层证书的引用 |
|
||||
| `KeyMCertCsmSignatureVerifyJobRef` | 对签名验证作业的引用 |
|
||||
| `KeyMCertCsmSignatureVerifyKeyRef` | 对签名验证密钥的引用 |
|
||||
| `KeyMCertCryptoKeyRef` | 对加密密钥的引用 |
|
||||
| 等等 | |
|
||||
|
||||
#### 10.1.4 KeyMCertificateElement
|
||||
|
||||
`KeyMCertificateElement` 容器定义证书中的元素:
|
||||
|
||||
| 参数 | 描述 |
|
||||
|---|---|
|
||||
| `KeyMCertificateElementId` | 证书元素的标识符 |
|
||||
| `KeyMCertificateElementOID` | 元素的对象标识符 (OID) |
|
||||
| `KeyMCertificateElementDescription` | 元素的描述 |
|
||||
| 等等 | |
|
||||
|
||||
#### 10.1.5 KeyMCertificateElementVerification
|
||||
|
||||
`KeyMCertificateElementVerification` 容器定义证书元素的验证:
|
||||
|
||||
| 参数 | 描述 |
|
||||
|---|---|
|
||||
| `KeyMCertificateElementVerificationId` | 验证标识符 |
|
||||
| `KeyMCertificateElementRef` | 对要验证的证书元素的引用 |
|
||||
| `KeyMCertificateElementRuleRef` | 对验证规则的引用 |
|
||||
| 等等 | |
|
||||
|
||||
#### 10.1.6 KeyMCertificateElementRule
|
||||
|
||||
`KeyMCertificateElementRule` 容器定义验证规则。
|
||||
|
||||
#### 10.1.7 KeyMCertificateElementCondition
|
||||
|
||||
`KeyMCertificateElementCondition` 容器定义验证条件。
|
||||
|
||||
#### 10.1.8 KeyMCertificateElementConditionPrimitive
|
||||
|
||||
`KeyMCertificateElementConditionPrimitive` 容器定义基于原语的验证条件。
|
||||
|
||||
#### 10.1.9 KeyMCertificateElementConditionArray
|
||||
|
||||
`KeyMCertificateElementConditionArray` 容器定义基于数组的验证条件。
|
||||
|
||||
#### 10.1.10 KeyMCertificateElementConditionArrayElement
|
||||
|
||||
`KeyMCertificateElementConditionArrayElement` 容器定义数组中的单个条件元素。
|
||||
|
||||
#### 10.1.11 KeyMCertificateElementConditionValue
|
||||
|
||||
`KeyMCertificateElementConditionValue` 容器定义值匹配条件。
|
||||
|
||||
#### 10.1.12 KeyMCertificateElementConditionSenderReceiver
|
||||
|
||||
`KeyMCertificateElementConditionSenderReceiver` 容器定义发送者-接收者条件。
|
||||
|
||||
#### 10.1.13 KeyMCryptoKey
|
||||
|
||||
`KeyMCryptoKey` 容器定义单个加密密钥:
|
||||
|
||||
| 参数 | 描述 |
|
||||
|---|---|
|
||||
| `KeyMCryptoKeyId` | 加密密钥的标识符 |
|
||||
| `KeyMCryptoKeyName` | 加密密钥的名称 |
|
||||
| `KeyMCryptoKeyCryptoProps` | 加密属性 |
|
||||
| `KeyMCryptoKeyGenerationType` | 生成类型(`KEYM_STORED_KEY` 或 `KEYM_DERIVE_KEY`) |
|
||||
| `KeyMCryptoKeyCsmKeyTargetRef` | 对目标 CsmKey 的引用 |
|
||||
| `KeyMCryptoKeyCsmKeySourceDeriveRef` | 对源 CsmKey 的引用(派生时) |
|
||||
| `KeyMCryptoKeyCsmVerifyJobRef` | 对验证作业的引用 |
|
||||
| 等等 | |
|
||||
|
||||
#### 10.1.14 KeyMNvmBlock
|
||||
|
||||
`KeyMNvmBlock` 容器定义与 NVM 块关联的密钥:
|
||||
|
||||
| 参数 | 描述 |
|
||||
|---|---|
|
||||
| `KeyMNvmBlockId` | NVM 块的标识符 |
|
||||
| `KeyMNvmBlockRef` | 对 NVM 块的引用 |
|
||||
| `KeyMCryptoKeyRef` | 对加密密钥的引用 |
|
||||
| 等等 | |
|
||||
|
||||
> 完整容器配置定义(包括每个参数的详细说明、范围、默认值等)请参阅原始 PDF 文档第 84-112 页。
|
||||
|
||||
### 10.2 发布信息
|
||||
|
||||
发布信息包含由 SW 模块实施者定义的数据,这些数据在模块适配(即配置)到实际硬件/软件环境时不会更改。因此它包含版本和制造商信息。
|
||||
|
||||
> 完整发布参数定义请参阅原始 PDF 文档第 112 页。
|
||||
|
||||
---
|
||||
|
||||
## 11 不适用的需求
|
||||
|
||||
不适用。
|
||||
|
||||
---
|
||||
|
||||
## 翻译说明
|
||||
|
||||
- 本文档为 AUTOSAR SWS 907《Specification of Key Manager》(CP 4.4.0) 的中文翻译;
|
||||
- 文档标识号:907;
|
||||
- 文档共 113 页,已翻译所有 11 个章节,包括完整的 KeyM 子模块功能规范和关键 API 摘要;
|
||||
- 保留了所有 AUTOSAR 方框符、API 标识符、模块缩写、算法名和需求 ID;
|
||||
- 证书子模块包含完整的证书链验证逻辑、PKI 层次结构和验证错误代码;
|
||||
- 加密密钥子模块包含完整的 Start/Prepare/Update/Finalize 会话管理逻辑、SHE 密钥更新协议;
|
||||
- API 规范中的所有 25+ 个函数已翻译关键 API,包括 KeyM_Init、KeyM_Deinit、KeyM_GetVersionInfo、KeyM_Start、KeyM_Update、KeyM_Verify、KeyM_SetCertificate、KeyM_ServiceCertificate、KeyM_VerifyCertificate(s)、KeyM_GetCertificate 等;
|
||||
- 配置规范(10.1)列出所有 14 个主要容器,详细参数定义参见原始 PDF;
|
||||
- 序列图和详细客户端-服务器接口定义请参见原文 PDF;
|
||||
- 翻译以保证技术含义准确为前提,语句尽量贴近 AUTOSAR 中文术语库常用译法。
|
||||
Reference in New Issue
Block a user