本规范规定密码服务管理器(Crypto Service Manager, CSM)软件模块的功能、API 与配置,以满足 CSM 需求规范(SRS)[CSM_SRS] 所表达的顶层需求。
CSM 应(shall)提供同步或异步服务,以使所有软件模块能够对基础密码功能进行唯一访问。CSM 应提供一个抽象层,向更高软件层提供标准化接口以访问这些功能。不同软件模块所需的功能可能与其他软件模块不同;因此,CSM 应(shall)能够为每个软件模块单独配置和初始化所提供的服务。此配置还包括选择 CSM 服务的同步或异步处理方式。
CSM 模块的构造遵循通用方法(generic approach)。在任何详细规范会限制 CSM 可用性范围的地方,接口和结构以通用方式定义,以为未来扩展提供机会。
本章列出仅具有局部作用域的缩略语与缩写;其他缩略语参见 AUTOSAR 词汇表 [13]。
| 缩略语 | 描述 |
|---|---|
| AEAD | Authenticated Encryption with Associated Data(带关联数据的认证加密) |
| CDD | Complex Device Driver(复杂设备驱动) |
| CSM | Crypto Service Manager(密码服务管理器) |
| CRYIF | Crypto Interface(密码接口) |
| CRYPTO | Crypto Driver(密码驱动) |
| DET | Default Error Tracer(默认错误追踪器) |
| HSM | Hardware Security Module(硬件安全模块) |
| HW | Hardware(硬件) |
| SHE | Security Hardware Extension(安全硬件扩展) |
| SW | Software(软件) |
| 术语 | 描述 |
|---|---|
| 密码驱动对象(Crypto Driver Object, CDO) | 密码驱动实现一个或多个密码驱动对象。密码驱动对象可在硬件或软件中提供不同的密码原语。一个密码驱动的密码驱动对象彼此独立。每个密码驱动对象仅有一个工作区(即同时只能执行一个密码原语)。 |
| 密钥(Key) | 密钥可被 CSM 中的作业引用。在密码驱动中,密钥引用特定密钥类型。 |
| 密钥类型(Key Type) | 密钥类型由对密钥元素的引用组成。密钥类型通常由密码驱动的厂商预配置。 |
| 密钥元素(Key Element) | 密钥元素用于存储数据。这些数据可以是密钥材料或 AES 加密所需的 IV。它也可用于配置密钥管理函数的行为。 |
| 作业(Job) | 作业是引用了密钥和密码原语的已配置对象。 |
| 通道(Channel) | 通道是从密码服务管理器队列经密码接口到特定密码驱动对象的路径。 |
| 密码原语(Crypto Primitive) | 密码原语是已配置密码算法在密码驱动对象中实现的实例。 |
| 操作(Operation) | 密码原语的操作声明应执行密码原语的哪一部分。有三种不同的操作模式:START(指示密码原语的新请求,且应取消同一作业和原语的所有先前请求)、UPDATE(指示密码原语期望输入数据)、FINISH(指示此后所有数据完全馈送,密码原语可完成计算)。也可通过连接 operation_mode 参数的对应位一次执行多于一个操作。 |
| 优先级(Priority) | 作业的优先级定义其重要性。优先级越高(值越大),作业将被越即时地执行。密码作业的优先级是配置的一部分。 |
| 处理(Processing) | 指示作业处理的种类:Asynchronous(作业不是在调用相应函数时立即处理;调用者通常通过回调函数在作业完成时被通知);Synchronous(作业在调用相应函数时立即处理;函数返回时,结果将可用)。 |
AUTOSAR_EXP_LayeredSoftwareArchitecture — 分层软件架构AUTOSAR_SRS_BSWGeneral — 基础软件通用需求AUTOSAR_SWS_BSWGeneral — 基础软件通用规范AUTOSAR_SWS_CryptoInterface — 密码接口规范AUTOSAR_SWS_CryptoDriver — 密码驱动规范AUTOSAR_SRS_CryptoStack — 密码栈需求AUTOSAR 提供基础软件通用规范(SWS BSW General)[3],对 CSM 模块同样有效。SWS BSW General [3] 应被视为 CSM 模块的附加必备规范。
本 SWS 仅涵盖 CSM 模块的规范,不包括 CRYIF、CRYPTO、KeyM 完整规范。
CSM 适用于所有汽车域。
无(CSM 不直接处理安全敏感数据;其实现应遵循 AUTOSAR 安全规范)。
Csm.c # 主源文件
Csm_Lcfg.c # Link-time 配置
Csm_PBcfg.c # PostBuild 配置
头文件结构遵循 AUTOSAR BSW 通用结构。
CSM 满足的 RS_BRF_NNNNN 需求:
| 需求 | 描述 |
|---|---|
| RS_BRF_01000 | AUTOSAR 架构应将 BSW 组织为硬件独立与硬件依赖两层 |
| RS_BRF_01056 | AUTOSAR BSW 模块应提供标准化接口 |
| RS_BRF_01456 | AUTOSAR 服务应提供系统范围的密码功能 |
| RS_BRF_02031 | AUTOSAR 应提供对软件或硬件实现的密码方案的统一访问 |
| RS_BRF_02032 | AUTOSAR 安全应允许密码原语集成到密码服务管理器 |
CSM 自身的 SWS_Csm_NNNNN 规范项 ID 约 200+ 条(详细列表见原文第 6/7/8/10 章;编号范围 00001-20000+)。
CSM 模块的设计遵循以下架构指南:
CSM 的正常操作流程:
Csm_CallbackNotification()(同步模式)或 Csm_ApplicationCallbackNotification()(异步模式)通知应用。| 错误码 | 值 | 含义 |
|---|---|---|
CSM_E_PARAM_POINTER | 0x01 | 无效的指针 |
CSM_E_SMALL_BUFFER | 0x03 | 缓冲区过小 |
CSM_E_PARAM_HANDLE | 0x04 | 无效的句柄(keyID 越界) |
CSM_E_UNINIT | 0x05 | CSM 未初始化 |
CSM_E_INIT_FAILED | 0x07 | 初始化失败 |
CSM_E_PROCESSING_MODE | 0x08 | 当前处理模式不支持此操作 |
| 错误码 | 值 | 含义 |
|---|---|---|
CSM_E_QUEUE_FULL | 0x01 | 队列已满(队列溢出) |
无。
无。
无。
CSM 的开发错误检测由配置开关 CsmDevErrorDetect 控制:
Det_ReportError() 上报;Std_ReturnType、Std_VersionInfoType、Std_ConfigTypeCrypto_JobType、Crypto_KeyElementIdType、Crypto_KeyFormat、Crypto_KeyState、Crypto_OperationModeType、Crypto_PrimitiveInfoType、Crypto_AlgorithmInfoType、Crypto_KeyDeriveAlgorithmInfoType| 类型 | 描述 |
|---|---|
Csm_ConfigType | CSM 抽象配置类型 |
Crypto_AlgorithmFamilyType | 密码算法族类型枚举(AES/SHA/RSA/ECC/...) |
Crypto_AlgorithmModeType | 密码算法模式类型枚举(ECB/CBC/GCM/CMAC/...) |
Crypto_InputOutputRedirectionConfigType | 输入输出重定向配置类型 |
Crypto_JobStateType | 作业状态类型枚举(IDLE/ACTIVE/PROCESSING/CANCEL/...) |
Crypto_ProcessingType | 处理类型枚举(SYNC/ASYNC) |
Csm_ResultType | CSM 操作结果类型(E_OK/CSM_E_BUSY/CSM_E_KEY_NOT_VALID/...) |
| API | 签名 | 功能 |
|---|---|---|
Csm_Init | void Csm_Init(const Csm_ConfigType* configPtr) | 初始化 CSM |
Csm_GetVersionInfo | void Csm_GetVersionInfo(Std_VersionInfoType* VersionInfoPtr) | 获取版本信息 |
| API | 签名 | 功能 |
|---|---|---|
Csm_Hash | Std_ReturnType Csm_Hash(uint32 jobId, Crypto_OperationModeType mode, const uint8* dataIn, uint32 dataInLength, uint8* resultPtr, uint32* resultLengthPtr) | 同步哈希计算 |
| API | 签名 | 功能 |
|---|---|---|
Csm_MacGenerate | Std_ReturnType Csm_MacGenerate(uint32 jobId, Crypto_OperationModeType mode, const uint8* dataIn, uint32 dataInLength, uint8* macPtr, uint32* macLengthPtr) | 同步 MAC 生成 |
Csm_MacVerify | Std_ReturnType Csm_MacVerify(uint32 jobId, Crypto_OperationModeType mode, const uint8* dataIn, uint32 dataInLength, const uint8* macPtr, uint32 macLength, Crypto_VerifyResultType* verifyPtr) | 同步 MAC 验证 |
| API | 签名 | 功能 |
|---|---|---|
Csm_Encrypt | Std_ReturnType Csm_Encrypt(uint32 jobId, Crypto_OperationModeType mode, const uint8* dataIn, uint32 dataInLength, uint8* dataOut, uint32* dataOutLengthPtr) | 同步加密 |
Csm_Decrypt | Std_ReturnType Csm_Decrypt(uint32 jobId, Crypto_OperationModeType mode, const uint8* dataIn, uint32 dataInLength, uint8* dataOut, uint32* dataOutLengthPtr) | 同步解密 |
| API | 签名 | 功能 |
|---|---|---|
Csm_AEADEncrypt | Std_ReturnType Csm_AEADEncrypt(uint32 jobId, Crypto_OperationModeType mode, const uint8* plaintextIn, uint32 plaintextLength, const uint8* associatedDataIn, uint32 associatedDataLength, uint8* ciphertextOut, uint32* ciphertextLengthPtr, uint8* tagOut, uint32* tagLengthPtr) | 同步 AEAD 加密 |
Csm_AEADDecrypt | Std_ReturnType Csm_AEADDecrypt(uint32 jobId, Crypto_OperationModeType mode, const uint8* ciphertextIn, uint32 ciphertextLength, const uint8* associatedDataIn, uint32 associatedDataLength, uint8* plaintextOut, uint32* plaintextLengthPtr, const uint8* tagIn, uint32 tagLength, Crypto_VerifyResultType* verifyPtr) | 同步 AEAD 解密 |
| API | 签名 | 功能 |
|---|---|---|
Csm_SignatureGenerate | Std_ReturnType Csm_SignatureGenerate(...) | 同步签名生成 |
Csm_SignatureVerify | Std_ReturnType Csm_SignatureVerify(...) | 同步签名验证 |
| API | 签名 | 功能 |
|---|---|---|
Csm_RandomGenerate | Std_ReturnType Csm_RandomGenerate(uint32 jobId, uint8* resultPtr, uint32* resultLengthPtr) | 同步随机数生成 |
| API | 签名 | 功能 |
|---|---|---|
| 8.3.8.1 密钥设置接口(Key Setting Interface) | ||
Csm_KeyElementSet | Std_ReturnType Csm_KeyElementSet(uint32 keyId, uint32 keyElementId, const uint8* keyElementPtr, uint32 keyElementLength) | 设置密钥元素 |
Csm_KeySetValid | Std_ReturnType Csm_KeySetValid(uint32 keyId) | 标记密钥为有效 |
| 8.3.8.2 密钥提取接口(Key Extraction Interface) | ||
Csm_KeyElementGet | Std_ReturnType Csm_KeyElementGet(uint32 keyId, uint32 keyElementId, uint8* keyElementPtr, uint32* keyElementLengthPtr) | 获取密钥元素 |
| 8.3.8.3 密钥复制接口(Key Copying Interface) | ||
Csm_KeyElementCopy | Std_ReturnType Csm_KeyElementCopy(uint32 keyId, uint32 keyElementId, uint32 targetKeyId, uint32 targetKeyElementId) | 复制密钥元素 |
Csm_KeyCopy | Std_ReturnType Csm_KeyCopy(uint32 keyId, uint32 targetKeyId) | 复制密钥 |
Csm_KeyElementCopyPartial | Std_ReturnType Csm_KeyElementCopyPartial(uint32 keyId, uint32 keyElementId, uint32 keyElementSourceOffset, uint32 keyElementTargetOffset, uint32 keyElementCopyLength, uint32 targetKeyId, uint32 targetKeyElementId) | 部分复制密钥元素 |
| 8.3.8.4 密钥生成接口(Key Generation interface) | ||
Csm_RandomSeed | Std_ReturnType Csm_RandomSeed(uint32 keyId, const uint8* seedPtr, uint32 seedLength) | 设置随机种子 |
Csm_KeyGenerate | Std_ReturnType Csm_KeyGenerate(uint32 keyId) | 生成密钥 |
| 8.3.8.5 密钥派生接口(Key Derivation Interface) | ||
Csm_KeyDerive | Std_ReturnType Csm_KeyDerive(uint32 keyId, uint32 targetKeyId) | 派生密钥 |
| 8.3.8.6 密钥交换接口(Key Exchange Interface) | ||
Csm_KeyExchangeCalcPubVal | Std_ReturnType Csm_KeyExchangeCalcPubVal(uint32 keyId, uint8* publicValuePtr, uint32* publicValueLengthPtr) | 密钥交换计算公钥 |
Csm_KeyExchangeCalcSecret | Std_ReturnType Csm_KeyExchangeCalcSecret(uint32 keyId, const uint8* partnerPublicValuePtr, uint32 partnerPublicValueLength) | 密钥交换计算共享密钥 |
| 8.3.8.7 证书接口(Certificate Interface) | ||
Csm_CertificateParse | Std_ReturnType Csm_CertificateParse(uint32 keyId) | 解析证书 |
Csm_CertificateVerify | Std_ReturnType Csm_CertificateVerify(uint32 keyId, uint32 verifyKeyId, Crypto_VerifyResultType* verifyPtr) | 验证证书 |
共 14 个密钥管理 API 函数。
CSM 提供基于作业(Job)的密码原语与方案 API。Job 形式将同步 API 包装为可配置原语,与上述 Csm_Hash/MacGenerate 等共享同一组原语:
| API | 签名 | 功能 |
|---|---|---|
Csm_JobKeySetValid | Std_ReturnType Csm_JobKeySetValid(uint32 jobId, uint32 keyId) | Job: 标记密钥为有效 |
Csm_JobRandomSeed | Std_ReturnType Csm_JobRandomSeed(uint32 jobId, uint32 keyId, const uint8* seedPtr, uint32 seedLength) | Job: 设置随机种子 |
Csm_JobKeyGenerate | Std_ReturnType Csm_JobKeyGenerate(uint32 jobId, uint32 keyId) | Job: 生成密钥 |
Csm_JobKeyDerive | Std_ReturnType Csm_JobKeyDerive(uint32 jobId, uint32 keyId, uint32 targetKeyId) | Job: 派生密钥 |
Csm_JobKeyExchangeCalcPubVal | Std_ReturnType Csm_JobKeyExchangeCalcPubVal(uint32 jobId, uint32 keyId, uint8* publicValuePtr, uint32* publicValueLengthPtr) | Job: 密钥交换公钥 |
Csm_JobKeyExchangeCalcSecret | Std_ReturnType Csm_JobKeyExchangeCalcSecret(uint32 jobId, uint32 keyId, const uint8* partnerPublicValuePtr, uint32 partnerPublicValueLength) | Job: 密钥交换共享密钥 |
Csm_JobCertificateParse | Std_ReturnType Csm_JobCertificateParse(uint32 jobId, uint32 keyId) | Job: 解析证书 |
Csm_JobCertificateVerify | Std_ReturnType Csm_JobCertificateVerify(uint32 jobId, uint32 keyId, uint32 verifyKeyId, Crypto_VerifyResultType* verifyPtr) | Job: 验证证书 |
| API | 签名 | 功能 |
|---|---|---|
Csm_CancelJob | Std_ReturnType Csm_CancelJob(uint32 jobId, Crypto_OperationModeType mode) | 取消作业 |
| API | 签名 | 功能 |
|---|---|---|
Csm_CallbackNotification | void Csm_CallbackNotification(Crypto_JobType* job, Csm_ResultType result) | CRYIF 调用 CSM 的回调(同步模式) |
Csm_ApplicationCallbackNotification | void Csm_ApplicationCallbackNotification(Crypto_JobType* job, Csm_ResultType result) | CSM 调用应用的回调(异步模式) |
| API | 签名 | 功能 |
|---|---|---|
Csm_MainFunction | void Csm_MainFunction(void) | 主函数(处理异步作业队列) |
CSM API 完整清单:
Csm_Init、Csm_GetVersionInfoCsm_Hash、Csm_MacGenerate、Csm_MacVerify、Csm_Encrypt、Csm_Decrypt、Csm_AEADEncrypt、Csm_AEADDecrypt、Csm_SignatureGenerate、Csm_SignatureVerify、Csm_RandomGenerateCsm_KeyElementSet/Get/Copy/CopyPartial、Csm_KeySetValid/Copy、Csm_RandomSeed/KeyGenerate/KeyDerive、Csm_KeyExchangeCalcPubVal/CalcSecret、Csm_CertificateParse/VerifyCsm_JobKeySetValid/RandomSeed/KeyGenerate/KeyDerive/KeyExchangeCalcPubVal/KeyExchangeCalcSecret/CertificateParse/CertificateVerifyCsm_CancelJobCsm_CallbackNotification、Csm_ApplicationCallbackNotificationCsm_MainFunctionCSM API 调用可返回以下错误码:
| 错误码 | 含义 |
|---|---|
CSM_E_BUSY | 请求失败,服务仍忙 |
CSM_E_SMALL_BUFFER | 提供的缓冲区过小 |
CSM_E_KEY_NOT_VALID | 密钥未标记为有效 |
CSM_E_KEY_READ_FAIL | 密钥读访问失败 |
CSM_E_KEY_WRITE_FAIL | 密钥写访问失败 |
CSM_E_KEY_NOT_AVAILABLE | 密钥不可用 |
CSM_E_KEY_SIZE_MISMATCH | 密钥元素大小不匹配 |
CSM_E_KEY_EMPTY | 密钥元素未初始化 |
CSM 序列图(9.1-9.x)描述典型调用流程:
CSM 配置容器共 35 个,按层次结构组织:
| 参数 | 描述 |
|---|---|
| CsmDevErrorDetect | 开发错误检测开关 |
| CsmVersionInfoApi | Csm_GetVersionInfo() API 开关 |
| CsmEcucPartitionRef | ECU 分区引用 |
| 参数 | 描述 |
|---|---|
| CsmMainFunctionPeriod | 主函数调度周期 |
| CsmNumberOfJobs | 作业总数 |
| CsmNumberOfQueues | 队列总数 |
| 参数 | 描述 |
|---|---|
| CsmQueueId | 队列 ID |
| CsmQueueSize | 队列大小 |
| 参数 | 描述 |
|---|---|
| CsmJobId | 作业 ID |
| CsmJobPriority | 作业优先级 |
| CsmJobProcessingType | 处理类型(SYNC/ASYNC) |
| CsmJobKeyRef | 密钥引用 |
| CsmJobQueueRef | 队列引用 |
| CsmJobCallbackRef | 回调引用 |
| CsmJobPrimitiveRef | 密码原语引用 |
CSM 服务配置:
| 容器 | 描述 |
|---|---|
| CsmHash | 哈希服务 |
| CsmHashConfig | 哈希服务配置(算法族/模式/密钥长度) |
| CsmMacGenerate | MAC 生成服务 |
| CsmMacGenerateConfig | MAC 生成服务配置 |
| CsmMacVerify | MAC 验证服务 |
| CsmMacVerifyConfig | MAC 验证服务配置 |
| CsmEncrypt | 加密服务 |
| CsmEncryptConfig | 加密服务配置 |
| CsmDecrypt | 解密服务 |
| CsmDecryptConfig | 解密服务配置 |
| CsmAEADEncrypt | AEAD 加密服务 |
| CsmAEADEncryptConfig | AEAD 加密服务配置 |
| CsmAEADDecrypt | AEAD 解密服务 |
| CsmAEADDecryptConfig | AEAD 解密服务配置 |
| CsmSignatureGenerate | 签名生成服务 |
| CsmSignatureGenerateConfig | 签名生成服务配置 |
| CsmSignatureVerify | 签名验证服务 |
| CsmSignatureVerifyConfig | 签名验证服务配置 |
| CsmRandomGenerate | 随机数生成服务 |
| CsmRandomGenerateConfig | 随机数生成服务配置 |
| CsmJobKeySetValid | Job: 密钥有效服务 |
每个 CsmXxxConfig 子容器包含:
CsmXxxAlgorithmFamily:算法族(AES、SHA、RSA、ECC 等);CsmXxxAlgorithmMode:算法模式(ECB、CBC、GCM、CMAC 等);CsmXxxAlgorithmSecondaryFamily:二级算法族;CsmXxxKeyLength:密钥长度;CsmXxxServiceJobRef:关联 Job 引用列表。| 参数 | 描述 |
|---|---|
| CsmCallbackId | 回调 ID |
| CsmCallbackFunc | 回调函数名 |
发布信息包括 CSM 模块版本、配置变体、支持的服务列表、密钥数量、作业数量、队列数量等。
校对轮次:L1 自动校对(2026-06-13)
CSM_E_PARAM_POINTER=0x01/SMALL_BUFFER=0x03/PARAM_HANDLE=0x04/UNINIT=0x05/INIT_FAILED=0x07/PROCESSING_MODE=0x08) + 1 个运行时错误 CSM_E_QUEUE_FULL=0x01 + 8 个 CSM 错误返回(CSM_E_BUSY/SMALL_BUFFER/KEY_NOT_VALID/KEY_READ_FAIL/KEY_WRITE_FAIL/KEY_NOT_AVAILABLE/KEY_SIZE_MISMATCH/KEY_EMPTY)完整翻译。