软件接口
支持的功能
AEAD(Authenticated Encryption with Associated Data) | 特性 | 说明 |
---|
| AES-128 GCM | - |
| AES-128 GCM-SIV | 仅当平台支持时可用 |
Cipher(密码学算法) | 特性 | 说明 |
| AES-128 ECB/CBC | 支持PKCS7填充和无填充 |
| AES-128 CTR | 无填充 |
| AES-192 ECB/CBC | 支持PKCS7填充和无填充,仅当平台支持时可用 |
| AES-192 CTR | 无填充,仅当平台支持时可用 |
| AES-256 ECB/CBC | 支持PKCS7填充和无填充,仅当平台支持时可用 |
| AES-256 CTR | 无填充,仅当平台支持时可用 |
Random(随机数生成) | 特性 | 说明 |
| TRNG | 真随机数生成器 |
MAC(消息认证码) | 特性 | 说明 |
| AES CMAC | - |
HASH(哈希函数) | 特性 | 说明 |
| SHA-256 | 仅当平台支持时可用 |
SIGNATURE(签名算法) | 特性 | 说明 |
| NIST/ANSI/SECp256R1 with prehashing | 仅当平台支持时可用 |
| Ed25519 | 支持纯模式、上下文和预哈希模式,仅当平台支持时可用 |
Key Derivation(密钥派生) | 特性 | 说明 |
| Counter Mode with CMAC-AES128 as PRF | 根据NIST SP800-108:2008标准 |
密钥管理
ROM-Keys的使用
CRYPTO模块支持使用硬件制造商预配置的密钥,这个特性是否被支持以及提供多少ROM-Keys取决于硬件平台。ROM-Keys的值只能在硬件内部访问,不能被写入或读出。为了使用一个ROM-Key,必须预先配置一个与之关联的密钥,该密钥可用于加密作业,CRYPTO模块负责硬件特定的配置。
对于需要额外密钥元素的加密操作,例如初始化向量,必须配置一个带有相应密钥元素的密钥,并在ROM-Key的“Key Aggregation Ref”字段中添加一个引用。然后,这两个密钥将由CRYPTO模块聚合并作为一个密钥管理。密钥元素的值必须通过预先配置的ROM-Key设置。添加聚合密钥是可选的,对于仅需要一个密钥的加密操作可以省略。
密钥派生
密钥派生实现了NIST800-108的计数器模式[7]。
可以通过添加子容器/MICROSAR/Crypto_30_Hwa/Crypto/CryptoGeneral/CryptoKeyDerive来激活密钥派生。
密钥派生算法的行为通过以下自定义密钥元素配置。
这些元素包括:
一个密码(CRYPTO_KE_KEYDERIVATION_PASSWORD),
一个上下文(CRYPTO_KE_KEYDERIVATION_CONTEXT),
以及元素标签(CRYPTO_KE_KEYDERIVATION_LABEL)。
这些元素用作PRF(伪随机函数)的输入。对于PRF,使用CMAC函数。因此,必须为选定的驱动对象激活CMAC函数,PRF的输入是通过连接元素生成的。
如果没有传递ROM-Key,则从源密钥的密钥元素CRYPTO_KE_KEYDERIVATION_PASSWORD中读取密钥。派生的密钥存储在目标密钥的密钥元素CRYPTO_KE_KEYDERIVATION_TARGET_KEY_ELEMENT中。派生密钥的长度由该元素的大小设置。
除了上述密钥元素外,源密钥中还必须存在密钥元素CRYPTO_30_VHSM_ALGO_KDF_NIST_800_108_CMAC。
如果使用ROM-Key,则必须将另一个带有密钥元素CRYPTO_KE_KEYDERIVATION_LABEL、CRYPTO_KE_KEYDERIVATION_CONTEXT和CRYPTO_30_VHSM_ALGO_KDF_NIST_800_108_CMAC的密钥聚合到ROM-Key。如果聚合到Rom-Key的密钥包含CRYPTO_KE_KEYDERIVATION_PASSWORD密钥元素,则此元素将被忽略,RomKey用于密钥派生。
显示了密钥派生的一个可能的密钥配置,源密钥的密钥元素包含密钥派生的信息,目标密钥包含派生密钥的空间。
真随机数生成器
可以使用大小为 CRYPTO_30_HWA_TRNG_PREFETCH_CAPACITY1 的环形缓冲区来预取 TRNG 模块的随机数。可以通过开启 CRYPTO_30_HWA_TRNG_PREFETCHING2 来激活预取。此外,支持两种预取模式:使用中断预取随机数据和通过轮询预取随机数据。当开启 CRYPTO_30_HWA_TRNG_PREFETCH_WITH_INTERRUPT3 时,启用中断模式,否则启用轮询模式。
使用 CRYPTO_30_HWA_TRNG_PREFETCHING 可以提高需要少量随机数据的任务的性能。当启用 CRYPTO_30_HWA_TRNG_PREFETCH_WITH_INTERRUPT 时,随机数据缓冲区会以并发方式填充,这比循环轮询新随机数据的性能要高。
以下是将静态文件和动态文件整理成表格的描述:
静态文件 (Static Files)
文件名 | 描述 |
---|
Crypto_30_Hwa.c | Crypto_30_Hwa的主要源文件。包含组件初始化、主函数和作业处理的函数。 |
Crypto_30_Hwa.h | Crypto_30_Hwa的头文件。包含基础组件和平台特定实现的修订历史。 |
Crypto_30_Hwa_Aead.c | AEAD的源文件。包含AEAD作业处理函数。 |
Crypto_30_Hwa_Cipher.c | 密码原语的源文件。包含AES作业处理函数。 |
Crypto_30_Hwa_Crypto.c | 加密辅助函数的源文件。 |
Crypto_30_Hwa_Mac.c | MAC原语的源文件。包含CMAC作业处理函数。 |
Crypto_30_Hwa_Custom.h | 定义Crypto_30_Hwa支持的自定义加密算法族的头文件。 |
Crypto_30_Hwa_Hash.c | HASH原语的源文件。包含SHA256作业处理函数。 |
Crypto_30_Hwa_Hw.h | 声明由平台特定实现实现的通用函数的头文件。 |
Crypto_30_Hwa_KeyM.c | 包含密钥管理函数的源文件。 |
Crypto_30_Hwa_Random.c | RANDOM的源文件。包含RANDOM作业处理函数。 |
Crypto_30_Hwa_Private.h | 包含仅在Crypto_30_Hwa组件内部使用的私有函数声明的头文件。 |
Crypto_30_Hwa_Public.h | Crypto_30_Hwa的主要头文件。包含组件提供的API的公共函数声明。 |
Crypto_30_Hwa_Signature.c | 签名原语的源文件。包含签名作业处理函数。 |
Crypto_30_Hwa_Types.h | 定义组件的加密算法所使用的工作区的头文件。 |
Crypto_30_Hwa_Hw_Cfg.h | 包含平台特定配置元素的头文件。 |
Crypto_30_Hwa_Hw_Types.h | 包含平台特定类型定义的头文件。 |
Crypto_30_Hwa_Hw.c | 包含通用硬件访问函数的低级实现的文件。* |
动态文件 (Dynamic Files)
文件名 | 描述 |
---|
Crypto_30_Hwa_Cfg.c | 组件配置的生成源文件。 |
Crypto_30_Hwa_Cfg.h | 组件配置的生成头文件。 |
Services provided by Crypto_30_Hwa
以下是简化后的API表格,不包含参数、返回码、特殊情况和调用上下文列:
通用服务 (General Services)
API | 功能描述 |
---|
Crypto_30_Hwa_Init | 初始化vHsm硬件抽象库。初始化Crypto_30_Hwa模块,初始化所有变量,并将模块状态设置为已初始化。 |
Crypto_30_Hwa_InitMemory | 初始化启动代码无法初始化的变量和内存区域。在上电时初始化组件变量。 |
Crypto_30_Hwa_MainFunction | 模块的主函数。周期性调用。 |
加密服务 (Crypto Services)
API | 功能描述 |
---|
Crypto_30_Hwa_ProcessJob | 处理接收到的作业。执行作业参数中配置的加密原语。 |
Crypto_30_Hwa_CancelJob | 取消接收到的作业。如果可能,从队列中移除提供的作业并取消作业的处理。 |
密钥管理服务 (Key Management Services)
API | 功能描述 |
---|
Crypto_30_Hwa_KeyElementGet | 获取由cryptoKeyId标识的密钥的密钥元素,并将密钥元素存储在result指针指向的内存位置。 |
Crypto_30_Hwa_KeyElementSet | 设置密钥元素。将给定的密钥元素字节设置为由cryptoKeyId标识的密钥。 |
Crypto_30_Hwa_KeyDerive | 通过使用由cryptoKeyId标识的密钥中的密钥元素派生新密钥,并将新密钥存储在targetCryptoKeyId的密钥元素(ID:1)中。 |
Crypto_30_Hwa_KeyValidSet | 将密钥设置为有效。将由cryptoKeyId标识的密钥的状态设置为有效。 |
中断服务例程 (Interrupt Service Routines)
API | 功能描述 |
---|
Crypto_30_Hwa_Hw_TrngIRQHandler | 用于处理来自TRNG模块的中断,当生成新的随机数据时触发。这个中断必须始终是类别1中断。 |
Services used by CRYPTO_30_HWA
错误报告 (Error Reporting) DET
API | 功能描述 |
---|
DET Det_ReportError() | 报告错误。 |
密钥管理 (Key Management) vHsm_Core
API | 功能描述 |
---|
vHsm_Api_GetAddrKeyStorage() | 获取密钥存储的地址。 |
vHsm_Api_GetKeyElementLength() | 获取密钥元素的长度。 |
vHsm_Api_GetSizeOfKey() | 获取密钥的大小。 |
vHsm_Api_KeyElementGet() | 获取密钥元素。 |
vHsm_Api_KeyElementGetForCryptoJobs() | 为加密作业获取密钥元素。 |
vHsm_Api_KeyElementSet() | 设置密钥元素。 |
vHsm_Api_KeyReadLockGetNotProtected() | 获取未受保护的密钥读取锁。 |
vHsm_Api_KeyReadLockReleaseNotProtected() | 释放未受保护的密钥读取锁。 |
vHsm_Api_KeyValidSet() | 设置密钥有效性。 |
vHsm_Api_Local_KeyElementGetStorageIndex() | 获取本地密钥元素的存储索引。 |
vHsm_Api_Local_KeyElementSearch() | 搜索本地密钥元素。 |
vHsm_Api_InitializeTempJob() | 初始化临时作业。 |
vHsm_Api_ProcessTempJob() | 处理临时作业。 |
内存操作 (Memory Operations) VstdLib
API | 功能描述 |
---|
VStdLib_MemClr() | 清除内存。 |
VStdLib_MemCpy() | 复制内存。 |
VStdLib_MemSet() | 设置内存。 |
哈希计算 (Hash Operations) vSecPrim
API | 功能描述 |
---|
vSecPrim_initHash() | 初始化哈希。 |
vSecPrim_updateHash() | 更新哈希。 |
vSecPrim_finalizeHash() | 完成哈希。 |
补充
缩写 | 描述 |
---|
AAD | Additional Authenticated Data(附加认证数据) |
AEAD | Authenticated Encryption with Associated Data(带有关联数据的认证加密) |
AES | Advanced Encryption Standard(高级加密标准) |
IPC | Inter Processor Communication(处理器间通信) |
HWA | Hardware Accelerator(硬件加速器) |
ALGOFAM | Algorithm Family(算法族) |
ALGOMODE | Algorithm Mode(算法模式) |
CBC | Cipher Block Chaining Mode(密码块链接模式) |
CMAC | Cipher-based Message Authentication Code(基于密码的消息认证码) |
CTR | Counter Mode(计数器模式) |
ECB | Electronic Code Book(电子密码本模式) |
ECDSA | Elliptic Curve Digital Signature Algorithm(椭圆曲线数字签名算法) |
FIPS | Federal Information Processing Standards Publication(联邦信息处理标准出版物) |
GCM | Galois Counter Mode(伽罗瓦计数器模式) |
NIST | National Institute of Standards and Technology(美国国家标准与技术研究院) |
RNG | Random Number Generator(随机数生成器) |
SHA | Secure Hash Algorithm(安全哈希算法) |
SHE | Secure Hardware Extension(安全硬件扩展) |
TRNG | True Random Number Generator(真随机数生成器) |
API | Application Programming Interface(应用程序编程接口) |
AUTOSAR | Automotive Open System Architecture(汽车开放系统架构) |
BSW | Basis Software(基础软件) |
DET | Development Error Tracer(开发错误追踪器) |
ECU | Electronic Control Unit(电子控制单元) |
ISR | Interrupt Service Routine(中断服务例程) |
MICROSAR | Microcontroller Open System Architecture (the Vector AUTOSAR solution)(微控制器开放系统架构,Vector公司的AUTOSAR解决方案) |
SRS | Software Requirement Specification(软件需求规格说明) |
SWC | Software Component(软件组件) |
SWS | Software Specification(软件规格说明) |