Files
autosar_standard_spec_v4.4/Crypto/AUTOSAR_EXP_UtilizationOfCryptoServices.md
T

18 KiB
Raw Blame History

加密服务的使用 (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 文档目的

本文档描述了自 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 中文术语库常用译法。