Autosar Crypto Driver学习笔记(一)

文章目录

    • 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 ::= RSAPrivateKeyRSAPrivateKey ::= SEQUENCE {version Version,modulus INTEGER, -- npublicExponent INTEGER, -- eprivateExponent INTEGER, -- dprime1 INTEGER, -- pprime2 INTEGER, -- qexponent1 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, -- npublicExponent 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.mzph.cn/news/735551.shtml

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

相关文章

【组合递归】【StringBuilder】Leetcode 17. 电话号码的字母组合

【组合递归】【StringBuilde】Leetcode 17. 电话号码的字母组合 StringBulider常用方法&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;17. 电…

文献阅读:Mistral 7B

文献阅读&#xff1a;Mistral 7B 1. 文章简介2. 模型结构说明 1. SWA (Sliding Window Attention)2. Rolling Buffer Cache3. Pre-fill and Chunking 3. 实验考察 & 结论 1. 基础实验2. Instruction Tuning3. 安全性分析 4. 总结 & 思考 文献链接&#xff1a;https://…

【牛客】2024牛客寒假算法基础集训营6ABCDEGHIJ

文章目录 A 宇宙的终结题目大意主要思路代码 B 爱恨的纠葛题目大意主要思路代码 C 心绪的解剖题目大意主要思路代码 D 友谊的套路题目大意主要思路代码 E 未来的预言题目大意主要思路代码 G 人生的起落题目大意主要思路代码 I 时空的交织题目大意主要思路代码 J 绝妙的平衡题目…

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

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

物联网开发 11 ESP32 和 ESP8266 比较有哪些不同?

首先&#xff0c;ESP32和ESP8266都是性价比非常高的Wi-Fi模块&#xff0c;都非常适合用来做物联网&#xff08;IoT&#xff09;领域的项目。两款芯片都属于32位处理器&#xff0c;ESP32是双核160MHz至240MHz CPU&#xff0c;而ESP8266是单核处理器&#xff0c;运行频率为80MHz。…

【fastllm】学习框架,本地运行,速度还可以,可以成功运行chatglm2模型

1&#xff0c;关于 fastllm 项目 https://www.bilibili.com/video/BV1fx421k7Mz/?vd_source4b290247452adda4e56d84b659b0c8a2 【fastllm】学习框架&#xff0c;本地运行&#xff0c;速度还可以&#xff0c;可以成功运行chatglm2模型 https://github.com/ztxz16/fastllm &am…

10个高级的 SQL 查询技巧

1.常见表表达式&#xff08;CTEs&#xff09; 如果您想要查询子查询&#xff0c;那就是CTEs施展身手的时候 - CTEs基本上创建了一个临时表。 使用常用表表达式&#xff08;CTEs&#xff09;是模块化和分解代码的好方法&#xff0c;与您将文章分解为几个段落的方式相同。 请在…

vue ui Starting GUI 图形化配置web新项目

前言&#xff1a;在vue框架里面&#xff0c; 以往大家都是习惯用命令行 vue create 、vue init webpack创建新前端项目&#xff0c;而vue ui是一个可视化的图形界面&#xff0c;对于新手来说更加友好了&#xff0c;不但可以创建、管理、还可以更新vue项目&#xff0c;也可以下载…

LTspice(14) Noise仿真

LTspice(14) Noise仿真 好久没有更新LTspice的教程了&#xff0c;大家想了没&#xff1f; 截止目前LTspice已经更新到24.0.9。界面发生了一些变化&#xff0c;但主要功能并不受影响&#xff0c;新的版本改了UI&#xff0c;找东西更加方便了&#xff0c;界面如下图1所示。 图1…

JAVA笔记15(程序控制结构)

1.程序控制结构 1.1 顺序控制 ​ *介绍&#xff1a;程序从上到下逐行地执行&#xff0c;中间没有任何判断和跳转 1.2 分支控制 ​ *分支控制If - else 1.单分支 ​ *基本语法&#xff1a; if(条件表达式){​ 语句;​ }​ 条件表达式为true时&#xff0c;会执行下面语句…

Leetcode 59.螺旋矩阵Ⅱ

1.题目 2.思路 &#xff08;借用代码随想录的图&#xff09; 1.我们将转一圈看作一个循环&#xff08;1->2->3->4->5->6->7->8 这是一个循环&#xff09; 2.在这个循环里&#xff0c;我们要画四条边&#xff08;上右下左&#xff09; 填充上行从左到右 填…

基于Vue的预约停车位APP设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 Vue简介 3 1.2 Node.js简介 3 1.3 JavaScript基本介绍 4 1.4 Ajax基本介绍 4 1.5 本章小结 4 2 软件需求分析与体系结构设计 5 2.1 系统定义用户 5 2.2 系统功能需求描述 5 2.3 系统用例分析 6 2. 3. 1 用户用例分析 6 2.…

深入理解JavaScript内存泄漏:原因与解决方法

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

链表的基础

目录 顺序表 链表 需要注意的 链表的优势 单链表的实现 1.单链表的准备 2.单链表的结构体的创建 3.单链表的准备 4.前插 5.后插 6.后删 7.前删 8.任意位置前插 9.任意位置后插 10.删除 11.修改 12.打印 13.释放链表 总说链表难&#xff0c;但我感觉只要认真听讲…

1572.矩阵对角线元素的和

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

(南京观海微电子)——Gamma调试

1.什么是Gamma&#xff1f; Gamma的概念源自于CRT响应曲线&#xff0c;最开始是用于反映显像管的图像亮度与输入电子枪的信号电压之间&#xff0c;非线性关系的一个参数。对于CRT显示器而言&#xff0c;电子流大小影响显示的图像亮度大小&#xff0c;而电子流大小与输入电压间…

力扣每日一题 找出数组的第 K 大和 小根堆 逆向思维(TODO:二分+暴搜)

Problem: 2386. 找出数组的第 K 大和 文章目录 思路复杂度&#x1f496; 小根堆&#x1f496; TODO&#xff1a;二分 暴搜 思路 &#x1f468;‍&#x1f3eb; 灵神题解 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂…

【最新版】ChatGPT/GPT4科研应用与AI绘图论文写作(最新增加Claude3、Gemini、Sora、GPTs技术及AI领域中的集中大模型的最新技术)

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

使用 Python 读取 NetCDF 数据

栅格通用数据格式(NetCDF)通常用于存储多维地理数据。这些数据的一些示例包括温度、降水量和风速。NetCDF 中存储的变量通常每天在大片(大陆)区域进行多次测量。由于每天进行多次测量,数据值会快速积累并且变得难以处理。当每个值还分配给一个地理位置时,数据管理会更加复…

springboot257基于SpringBoot的中山社区医疗综合服务平台

中山社区医疗综合服务平台的设计与实现 摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;居民信息因为其管理内容繁杂&#xff0c;管…