Autosar Crypto Driver学习笔记(一)

news2024/11/16 22:29:21

文章目录

    • Crypto Driver
      • Pre-Configuration
        • Cryptographic capabilities加密能力
        • Available Keys可用密钥
      • General Behavior
        • Normal Operation
        • Functional Requirements
          • Synchronous Job Processing
          • Asynchronous Job Processing
        • Design Notes
          • Priority-dependent Job Queue基于优先级的作业队列
        • Key Management密钥管理
        • Key Formats
          • Definition of RSA Key Material
      • Error classification错误分类
        • Development Errors
        • Runtime Errors
      • Error detection

Crypto Driver

F:\Autosar配置\Crypto\image.png
Crypto Driver属于信息安全协议栈的最下层,与MCU紧密相关,一般Driver由芯片厂商提供(包含在MCAL中),而且一般还会提供对应的Framework(可能是芯片厂商,如NXP,也可能是第三方,如Vector)

Crypto Driver实现了同步和异步 cryptographic primitives的通用接口。它还支持加密服务的密钥存储、密钥配置和密钥管理

Pre-Configuration

Crypto Driver的供应商必须为代表Crypto Driver功能的Crypto Driver提供预配置。预配置应与Crypto Driver的bswmd文件一起交付

Cryptographic capabilities加密能力

Crypto Driver的功能可以分为两个主要主题:密钥存储和支持的算法。可以通过创建一个新的cryptopprimitive容器来预先配置受支持的算法.AES-CMAC算法配置示例如下:

static const Crypto_PrimitiveType Crypto_aPrimitives_CDO_Symmetric[1U] =

{

  {

   MAC_GENERATE,

   (uint8)CRYPTO_ALGOFAM_AES,

   (uint8)CRYPTO_ALGOMODE_CMAC,

   (uint8)CRYPTO_ALGOFAM_NOT_SET

  }

};

Crypto_PrimitiveType定义如下:

typedef struct
{
    const Crypto_PrimitiveServiceType eService;
    const uint8                       u8AlgoFamily;
    const uint8                       u8AlgoMode;
    const uint8                       u8SecondaryAlgoFamily;
} Crypto_PrimitiveType;

所有支持的加解密服务都需要通过配置CryptoPrimitives来实现。如果没有配置对应的服务,则驱动不支持对应的算法。

Available Keys可用密钥

由Crypto Driver提供的密钥也可以预配置。一个CryptoKey容器引用一个特定的CryptoKeyType。CryptoKeyType提供了在引用此CryptoKeyType的CryptoKey中包含哪些密钥元素的信息。

供应商还预先配置要定义的关键元素:

-读写权限

-元素的最大大小

-如果该元素可以用小于最大大小的数据进行读写

-如果元素尚未初始化,则启动后的init值

init值就是在初始化加密驱动程序时key元素为空时存储到key元素中的值。例如,它用于id为CRYPTO_KE_<Service>_ALGORITHM的key元素。这样才能配置密钥管理功能。为了在一个加密驱动程序中提供不同的密钥交换算法,供应商可以预先配置以下容器,并将CRYPTO_KE_<Service>_ALGORITHM密钥元素的初始化值设置为供应商特定的值:

CryptoKeyElement_KeyExchange_Algorithm_RSA

  • ID = 11
  • Init value = 0x00
  • Size = 1
  • Read Access = RA_NONE
  • Write Access = WA_NONE

General Behavior

The Crypto Driver can have one or more Crypto Driver Objects. Driver Objects会关联CryptoPrimitives.

一个 Crypto Driver Object一次只能支持处理一个job。多个Crypto Driver Objects可以同时处理多个job

Normal Operation

image-20240302171629525
调用Start开始运算,调用Update更新数据,调用Finish完成job

要通过使用Crypto_ProcessJob()的单个调用来处理加密服务,操作模式“CRYPTO_OPERATIONMODE_SINGLECALL”是3种模式“START”,“UPDATE”和“FINISH”的分离(按位或)。

Functional Requirements

注意:作业是同步处理还是异步处理的信息是Crypto_JobType的一部分,也就是在JobType中配置,对应的定义为Crypto_ProcessingType

Synchronous Job Processing

当使用同步作业处理时,相应的接口函数应在此函数调用的上下文中同步计算结果。

如果Crypto Driver有一个队列,并且如果发布了一个 synchronous job,并且优先级大于队列中可用的最高优先级,则Crypto Driver应禁止处理队列中的新作业,直到当前处理的作业完成后,下一次调用main function完成为止。

Asynchronous Job Processing

如果使用异步作业处理,接口函数应该只将必要的信息传递给primitive。实际的计算可能由 main function开始

对于每个异步请求,Crypto Driver应该通过调用CRYIF_CallbackNotification函数来通知CRYIF作业的完成,该函数传递job information和加密操作的结果

Design Notes

Crypto Driver提供两个服务:(1)加密服务本身和(2)密钥管理。

Priority-dependent Job Queue基于优先级的作业队列

(可选)每个Crypto Driver Object都能够将作业排成队列,一个接一个地处理它们。

当Crypto Driver队列的大小设置为0时,加密驱动程序对象应禁用队列。

队列按照配置的作业优先级对作业进行排序。作业优先级值越高,表示作业的优先级越高

如果调用Crypto_ProcessJob(),当队列为空且Crypto Driver Object不忙时,Job将切换到该状态

’ active '并执行crypto primitive

如果调用Crypto_ProcessJob()并且队列已满,该函数将返回CRYPTO_E_QUEUE_FULL

注意:必须确保异步作业的处理速度足够快,以避免同步作业必须等待很长时间。还建议对异步作业使用CRYPTO_OPERATIONMODE_SINGLECALL

注意:一个Crypto Driver Object可以同时处理不同的任务,包括同步和异步任务处理。但是,同步作业处理和作业队列可能没有用处。因此,如果选择同步作业处理,则不会使用作业队列,只有在Crypto Driver Object不忙时才会处理作业。

如果调用了Crypto_ProcessJob()并且Job在“ACTIVE”状态时,Crypto_ProcessJob()将检查请求的作业是否与Crypto Driver Object中的当前作业匹配,如果是,则将其从队列中绕过。

这意味着只有操作模式为“START”的作业才会排队。如果操作模式为“START”的作业已经完成,则Crypto Driver Object 正在等待输入。回调函数指示被调用方应该执行“UPDATE”或“FINISH”调用。

如果异步作业处理调用Crypto_ProcessJob(),且队列未满,但Crypto Driver Object is busy,且作业的操作模式为START,则Crypto Driver Object将该job放入队列并返回E_OK。

如果使用同步作业处理调用Crypto_ProcessJob()并且队列未满,但是Crypto Driver Object is busy,则Crypto Driver Object不将作业排队并返回CRYPTO_E_BUSY。任何作业都不能放在任何队列中

Key Management密钥管理

一个Key由一个或多个Key elements组成。

Key elements的示例包括key本身、初始化向量、随机数生成的种子状态或SHE标准的证明。

每个Key elements都具有定义的读或写访问权限。访问权限本身由具有赋值的枚举定义(参见

[ECUC_Crypto_00024]或[ECUC_Crypto_00027])CryptoKeyElement。

对于访问权限来说,值越小,权限越高。例如CRYPTO_RA_ALLOWED=0为最高权限,

当需要直接访问key elements时,应考虑访问权。这适用于读和写访问

当使用密钥复制接口复制密钥元素时,源密钥元素必须具有比目标密钥元素更高或相同的权限。源密钥必须至少具有以下权限CRYPTO_RA_INTERNAL_COPY或更低的值

信息:只有当key elements位于相同的crypto driver object中时,才能执行internal copy操作。

作业应使用指定的key elements,而不保护密钥访问权限,但以下情况除外:

•如果一个key元素用于使用输入重定向的输入,该key元素必须具有CRYPTO_RA_INTERNAL_COPY或更低的访问权限。如果对CryptoPrimitiveService ENCRYPT/DECRYPT或AEAD_ENCRYPT/AEAD_DECRYPT使用输入重定向,则访问权限必须设置为RA_ENCRYPTED或更低

•如果一个key元素用于输出重定向,该key元素必须具有CRYPTO_WA_INTERNAL_COPY或更低的访问权限。

•使用密钥交换操作生成密钥的任何密钥元素应具有至少CRYPTO_RA_INTERNAL_COPY或更低的访问权限

•对于密钥派生,源密钥的访问权限至少为CRYPTO_RA_INTERNAL_COPY或更低。目标密钥至少具有源密钥的访问权限或更低的访问权限

密钥的状态是“有效”或“无效”。

如果密钥处于“无效”状态,使用该密钥的加密服务将返回CRYPTO_E_KEY_NOT_VALID

Key Formats

具有标识的非对称密钥材料按照ASN.1格式的RFC5958规定。带格式说明符的关键材料

CRYPTO_KE_FORMAT_BIN_IDENT_PRIVATEKEY_ PKCS8需要遵循以下格式规范:

 OneAsymmetricKey ::= SEQUENCE {
 version Version,
 KeyAlgorithm KeyAlgorithmIdentifier,
 keyMaterial KeyMaterial,
 attributes* [0] Attributes OPTIONAL,
 ...,
 [[2: publicKey* [1] PublicKey OPTIONAL ]],
 ...
 }

Version:版本,KeyAlgorithmIdentifier:密钥算法标识,KeyMaterial:密钥值

Definition of RSA Key Material

对于CRYPTO_KE_FORMAT_BIN_ RSA_PRIVATEKEY, RSA私钥的参数’ KeyMaterial OCTET STRING '是根据IETF RFC8017定义的,具有以下内容:

KeyMaterial ::= RSAPrivateKey
 RSAPrivateKey ::= SEQUENCE {
 version Version,
 modulus INTEGER, -- n
 publicExponent INTEGER, -- e
 privateExponent INTEGER, -- d
 prime1 INTEGER, -- p
 prime2 INTEGER, -- q
 exponent1 INTEGER, -- d mod (p-1)
 exponent2 INTEGER, -- d mod (q-1)
 coefficient INTEGER -- (inverse of q) mod p }

“version”为版本号,以确保与本文档未来版本的兼容性。这个版本的文件应该是0。

·模为模n。

•publicExponent为公共指数e。

•privateExponent为私有指数d。

•prime1是n的质因数p。

•prime2是n的质因数q。

•exponent1为d mod (p-1)。

•exponent2为d mod (q-1)。

·系数为e Chinese Remainder Theorem coefficient(q的倒数) mod p

RSA公钥的格式为CRYPTO_KE_FORMAT_BIN _RSA_PUBLICKEY的示例如下:

RSAPublicKey ::= SEQUENCE {
 modulus INTEGER, -- n
 publicExponent INTEGER, -- e
 }

RSAPublicKey类型的字段含义如下:

·模为模n。

•publicExponent为公共指数e。

RSA公钥的格式为CRYPTO_KE_FORMAT_BIN _IDENT_RSA_PUBLICKEY的示例如下:

PublicKeyInfo ::= SEQUENCE {
 KeyAlgorithmIdentifier ::= AlgorithmIdentifier,
 publicKey ::= RSAPublicKey
 }

RSA密钥的算法标识符应该为1.2.840.113549.1.1.1。这对应于ASN.1编码的OID值“2A 86 48 86”
f70d 01 01 01”。

当需要RSA的算法标识符时,应提供此OID。换句话说,当一个密钥具有CRYPTO_KE_FORMAT_BIN_IDENT_PRIVATEKEY_ PKCS8
CRYPTO_KE_FORMAT_BIN_IDENT_PUBLICKEY且用于RSA时,AlgorithmIdentifier必须有这个值。

Error classification错误分类

Development Errors

Runtime Errors

Error detection

在执行作业之前,加密驱动程序应检查job->cryptoKeyId和(如果适用)job->targetCryptoKeyId是否在范围内。如果检查失败,函数Crypto_ProcessJob将报告CRYPTO_E_PARAM_HANDLE给DET并返回E_NOT_OK

如果调用了Crypto Driver API,且操作过程中寻址的缓冲区太小,则不执行该操作。如果启用了Crypto Driver的开发错误检测,则API函数应向DET报告CRYPTO_E_SMALL_BUFFER,否则返回E_NOT_OK

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1506647.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一元函数积分学——刷题(16

目录 1.题目&#xff1a;2.解题思路和步骤&#xff1a;3.总结&#xff1a;小结&#xff1a; 1.题目&#xff1a; 比较这两种题的求解方法 2.解题思路和步骤&#xff1a; 3.13&#xff1a; 这个题就很适合用万能公式&#xff0c;因为可以把1t2消掉&#xff1a; 也可以用三角…

大数据时代的数据保护:分布式存储系统的七大原则

第一原则&#xff1a;“灾”和“备”&#xff0c;区分容灾切换与数据备份的区别 管理对象 管理对象 防什么&#xff1f; 底层逻辑 核心评价指标 容灾切换 IT环境与业 物理灾难 …

基于C++和Qt Creator实现的仿制网易云音乐播放器

目录 总体介绍开发环境技术介绍项目目录项目介绍特殊说明Gitee地址 总体介绍 仿照网易云播放器界面实现&#xff0c;目的在于锻炼C编程能力&#xff0c;熟练掌握Qt Creator各种组件的使用及样式设置、界面布局、QtPlugin技术、QXml读写XML文件方法、Qss文件的编写及使用等。 …

【期刊】ACM Transactions on Privacy and Security

首页截图 subject areas 混合模式 根据官网介绍&#xff0c;本期刊不在金OA行列&#xff0c;可以自主选择出版模式。 出版方向 Topics of interest include 发文量 季刊&#xff0c;发文量很小 图像安全领域 未在今年发表图像安全领域论文。

CentOS 8启动流程

一、BIOS与UEFI BIOS Basic Input Output System的缩写&#xff0c;翻译过来就是“基本输入输出系统”&#xff0c;是一种业界标准的固件接口&#xff0c;第一次出现在1975年&#xff0c;是计算机启动时加载的第一个程序&#xff0c;主要功能是检测和设置计算机硬件&#xff…

【文档智能】再谈基于Transformer架构的文档智能理解方法论和相关数据集

前言 文档的智能解析与理解成为为知识管理的关键环节。特别是在处理扫描文档时&#xff0c;如何有效地理解和提取表单信息&#xff0c;成为了一个具有挑战性的问题。扫描文档的复杂性&#xff0c;包括其结构的多样性、非文本元素的融合以及手写与印刷内容的混合&#xff0c;都…

小程序 van-field label和输入框改成上下布局

在组件上面加个样式就行&#xff1a;custom-style"display:block;" <van-field label"备注说明" type"textarea" clearable title-width"100px" custom-style"display:block;" placeholder"请输入" /> …

JavaScript原型和原型链

JavaScript每个对象拥有一个原型对象 需要注意的是&#xff0c;只有函数对象才有 prototype 属性 当试图访问一个对象的属性时&#xff0c;它不仅仅在该对象上搜寻&#xff0c;还会搜寻该对象的原型&#xff0c;以及该对象的原型的原型&#xff0c;依次层层向上搜索&#xff…

02hadoop伪分布式搭建

3. 环境安装 3.1 安装方式 单机模式 只能启动MapReduce 伪分布式 能启动HDFS、MapReduce 和 YARN的大部分功能 完全分布式 能启动Hadoop的所有功能 3.2 安装JDK 3.2.1 JDK安装步骤 下载JDK安装包&#xff08;下载Linux系统的 .tar.gz 的安装包&#xff09; https://www…

企业微信HOOK协议,新设备二次验证处理

提示设备强制二次验证问题已处理 HOOK&#xff1a;https://www.showdoc.com.cn/1663062930779972/7859611259700402密码&#xff1a;999999999

代码随想录算法训练营第day6|242.有效的字母异位词 、 349. 两个数组的交集 、202. 快乐数、1. 两数之和

a.242.有效的字母异位词 题目链接 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram", t "n…

[ai笔记15] openAI官方提示词工程文档(图文重排版本)

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第15篇分享&#xff01; 最近在学习prompt提示词技巧&#xff0c;一番研究发现其实提示词的技巧并不是限定死的&#xff0c;所谓技巧和心法更像是教导我们如何更清晰、更结构化的大模型聊天工具进行沟通…

以题为例 浅谈sql注入二次注入

什么是二次注入 二次注入可以理解为&#xff0c;攻击者构造的恶意数据存储在数据库后&#xff0c;恶意数据被读取并进入到SQL查询语句所导致的注入。防御者即使对用户输入的恶意数据进行转义&#xff0c;当数据插入到数据库中时被处理的数据又被还原&#xff0c;Web程序调用存…

Vue 3中的reactive:响应式状态的全面管理

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Java高频面试之Mysql篇

有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 Java高频面试之总纲篇 Java高频面试之集合篇 Java高频面试之异常篇 Java高频面试之并发篇 Java高频面试之SSM篇 Java高频面试之Mysql篇 Java高频面试之Redis篇 Java高频面试之消息队列与分布式篇…

2024 年广东省职业院校技能大赛(高职组) “云计算应用”赛项样题①

2024 年广东省职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项样题① 模块一 私有云&#xff08;50 分&#xff09;任务 1 私有云服务搭建&#xff08;10 分&#xff09;任务 2 私有云服务运维&#xff08;25 分&#xff09;任务 3 私有云运维开发&#xf…

二分算法(蓝桥杯 C++ 题目 代码 注解)

目录 模板&#xff1a; 题目一&#xff08;分巧克力&#xff09;&#xff1a; 代码&#xff1a; 题目二&#xff08;M次方根&#xff09;&#xff1a; ​编辑代码&#xff1a; 题目三&#xff08;跳石头&#xff09;&#xff1a; 代码&#xff1a; 题目四&#xff08;扫…

LLM RAG系统中消除数据幻觉的几个绝招-OPENAI公司内称的“大招”

前言-什么是数据幻觉&#xff1f;它到底有什么危害呢 我们直接来举例&#xff1a; 我是金银花一区的&#xff0c;附近有什么小学&#xff1f; 此时RAG带出如下信息&#xff1a; 金银花小区一区、二区、三区附近教育资源有&#xff1a;银树大学、建设小学金银花校区、金树高…

左偏树,可并堆详解,OJ练习,代码详解

文章目录 一、左偏树的定义和性质1.1优先队列的定义1.2可并堆的定义1.3左偏树1.3.1左偏树的定义1.3.2左偏树的性质1.3.3左偏树的合并操作1.3.3.1合并操作流程1.3.3.2合并操作的代码实现 1.4左偏树OJ练习1.4.1模板1.4.1.1原题链接1.4.1.2思路分析1.4.1.3AC代码 1.4.2P1552 [APIO…

C++的类与对象(五):赋值运算符重载与日期类的实现

目录 比较两个日期对象 运算符重载 赋值运算符重载 连续赋值 日期类的实现 Date.h文件 Date.cpp文件 Test.cpp文件 const成员 取地址及const取地址操作符重载 比较两个日期对象 问题描述&#xff1a;内置类型可直接用运算符比较&#xff0c;自定义类型的对象是多个…