校验--ECC详细分析

news2024/11/17 1:57:25

ECC介绍

ECC

以下是针对瑞萨MCU的应用的ECC检测的详细分析。

当前公认安全有效的三大类公钥密钥体制分别为基于大数因子分解难题(RSA)离散对数难题(DSA)椭圆曲线离散对数(ECC)难题的密码体制。

保证RSA的安全性,则必须要增加密钥长度,所以我们可以看到RSA密钥从1024bit慢慢来到了4096比特。

由于汽车网络安全近几年才兴起,专为密钥存储设计的硬件资源有限,如果用RSA算法,密钥存储数量有限,而ECC(Elliptic Curve Cryptography)的出现有效弥补了这方面的缺憾,实现了密钥效率上的突破,根据NIST.SP.800-57pt1r5描述,对称算法和非对称算法的安全强度。

可以看到,160bits的ECC密钥长度实现的安全强度等同于RSA 密钥长度1024bits。

所以目前,汽车行业越来越倾向使用ECC来实现验签、会话密钥协商等。

RS-CANFD

在RS-CANFD中实现了ECC检查机制来检查RAM中数据的一致性
RAM中的每个内存位置由39位组成

其中32位用于存储用户数据;

7位用于存储用户数据。


对于存储ECC数据。对于每个长字(32位)内存位置,ECC数据是分配

该ECC数据的值由ECC生成逻辑计算。


ECC校验机制对从CAN侧或CPU侧读访问时的数据进行校验RAM如果检测到单个比特错误,则纠正它并在ECC状态寄存器中设置一个标志(寄存器在CAN IP之外)


如果在传输扫描期间从CAN侧读取检测到多个比特错误,则发送在传输扫描下的CAN信道的请求将被抑制,并进行相应的处理寄存器。设置标志位。这样做是为了避免传输损坏的数据。


一般来说,如果检测到多个比特错误,则执行RAM测试以检查RAM状态。当没有
发现问题,切换到全局复位模式,然后进行通信初始化再一次

如果ECC逻辑检测到错误,则RAM访问的错误地址将为
在捕获寄存器中捕获,
该寄存器是ECC宏的一部分(不是RS-CANFD)。

ECC理解

密码学中的ECC校验通常指的是椭圆曲线密码学(Elliptic Curve Cryptography)中的校验过程

在ECC中,校验通常涉及到使用公钥对消息进行数字签名,并使用签名验证算法来验证签名的有效性。ECC的数字签名方案通常基于椭圆曲线数字签名算法(ECDSA,Elliptic Curve Digital Signature Algorithm)或其他类似的算法。

简要来说,ECC校验的步骤通常包括以下几个阶段:

  1. 密钥生成:首先,生成一对公钥和私钥。公钥用于验证签名,私钥用于生成签名。

  2. 签名生成:发送方使用私钥对消息进行签名。这个过程通过特定的算法生成一个数字签名,该签名与消息相关联,且仅能由发送方的私钥生成。

  3. 签名验证:接收方使用发送方的公钥来验证签名的有效性。通过将签名、消息和公钥作为输入,利用签名验证算法来验证签名的正确性。如果验证成功,则可以确定消息的完整性和来源。

ECC的校验过程依赖于椭圆曲线的数学性质,使得它在相对较短的密钥长度下提供了与传统RSA等算法相当的安全性。

真正搞懂ECC,我们需要先了解椭圆曲线的概念和分类

一般来讲,椭圆曲线是一个具体两个变量x、y的三次方程,满足

图片

的所有点(x,y)的集合,以及一个无穷远点O(y趋于无穷)

不同域上,椭圆曲线的方程也有不同,所以还需要掌握实数域、有限域上的椭圆曲线方程

椭圆曲线是平面解析几何学中的一种特殊曲线,其方程通常表示为:

[y^2 = x^3 + ax + b]

其中,(a) 和 (b) 是常数,并且 (4a^3 + 27b^2 \neq 0),这是为了保证曲线不存在奇点。在这个方程中,(x) 和 (y) 是变量,而 (a) 和 (b) 是参数。

椭圆曲线在密码学中有着广泛的应用,特别是在椭圆曲线密码学(Elliptic Curve Cryptography,ECC)中。在密码学中,椭圆曲线的方程通常在有限域上定义,例如在素数域上的椭圆曲线可以表示为:

[y^2 \equiv x^3 + ax + b \pmod{p}]

其中,(p) 是一个素数,(a) 和 (b) 是有限域上的常数。在密码学中,通常选择满足一些特定性质的椭圆曲线来进行加密和签名操作,例如,曲线上的点的阶(order)应该是一个大素数,以确保安全性。

椭圆曲线的一些特性使其成为密码学中的理想工具之一,包括:

  1. 抗量子计算攻击:相比传统的RSA等加密算法,椭圆曲线密码学提供了更高的安全性,对量子计算攻击更为抵抗。

  2. 小密钥尺寸:相比于传统的RSA算法,椭圆曲线密码学需要更小的密钥尺寸来提供相同的安全性,这使得它在资源受限的环境下更为适用。

  3. 高效性:椭圆曲线算法的加密、解密、签名和验证操作通常需要的计算量较小,因此更加高效。。

ECC原理

椭圆曲线真的不是一个椭圆

以实数域上的椭圆曲线为例,它是一条由方程

图片

给定的曲线,a和b是常数,并满足

图片

这与椭圆的方程

图片

差别很大

那么为什么要叫椭圆曲线呢?

这是数学家在研究椭圆周长时,发现椭圆周长公式变换后可以得到 

图片

,因此椭圆曲线一直沿用至今。

椭圆曲线因为a、b的取值不同,在坐标系上有不同的形态

注意观察曲线,可以发现它们有两个明显共同点:

  • 曲线关于X轴对称

  • 任何非垂直X轴的直线与曲线至多三个交点

 基于以上特性,我们来进行几何作图操作。

了解ECC

  1. 过曲线上的A和B作直线,得到与曲线相交的第三个点C,

  2. 过C做X轴的垂线得到C’’,这里我们定义A⊕B = C’’,读作A点加 B;

  3. 过A与C’’与曲线相较于D点D点有一个基于水平对称的点D’’,这里我们定义A ⊕C’’ = D’’,

如果我们继续用A去做点运算,可以轻易得到,A⊕D’’=E’’,依次类推。 

那么假设我们已知起点A终点Z,请问这期间一共做了多少次点运算才能得到Z?

这就好像你在室内足球场踢球,朋友在外面等待,比赛结束后,你让朋友猜你一共踢了多少次皮球才得到1分,这显然是非常困难的。

有了这个思路,我们继续往下。

假设A点与曲线相切,这时候因为A和B是同一个点,所以公式 A⊕B = C’’,就变为了A⊕A = C’’,简写为C’’ = 2A:

注意这里的2A,不是简单的把坐标轴的值乘以2,而是计算曲线上的点,具体我在Desmos上的公式推导,这里不多赘述以免迷糊。

现在A与C’’再次连线,我们可以得到A⊕C’’ = A⊕2A = D’’,那么D’’ = 3A。

 以此类推,我们可以得到最常见的标量运算公式:

P = kG

通过G点进行k次运算可以得出P,但反过来,如果只知道G和P,就很难求出k是多少。

因为P和Q都是椭圆曲线上的一个点,是坐标,k是整数;假设P = (-2,3),Q= (2,-6),要求出k是多少,这被公认是非常难的。

因此,我们可以把k作为私钥,G和P作为公钥。

PS:个人认为,作为使用者,ECC基本原理了解到这个程度即可,如果真要刨根问底,那得先从数学复习,建议从群论到有限域再到曲线推导。

ECC用法

ECC一般用于签名或者密钥协商。我们看看如何实现会话密钥协商:

  1.  Bob使用私钥b和公钥G生成结果B,并发给Alice;

  2. Alice拿到公钥后,用私钥a和G生成结果A = aG,并发给Bob;

  3. Bob拿到计算结果A,并用自己的私钥b与A生成新的密钥,bA = baG;

  4. Alice拿到计算结果B,并用自己的私钥a与B生成新的密钥,aB = abG;

由于公式P = kG,k是整数,因此上述ba = ab。所以上述过程生成了只有Alice和Bob才知道的密钥,该密钥可用于会话的数据对称加解密。

即使攻击者拿到了G和B这些数据,由于私钥b\a的难以攻破(已知椭圆曲线上的起点和终点,求运算了多少次是非常难的),因此该方式也是比较安全。


ECC曲线

从上面的原理我们知道,要使用ECC进行数据加解密,最难得是建立起ECC曲线方程,所以现目前车规行业常用标准中推荐的椭圆曲线。

ECC寄存器

E710CTL — ECC Control Register

控制ECC模块的状态和模式。
可以读写使用16位或8位操作指令

E710TMC — ECC Test Mode Control Register

一个16位寄存器,用于切换模式到测试模式和控制模式
可以使用16位或8位操作指令进行读写。

E710TED — ECC Encoder and Decoder Data Test Register

用于ECC编码和解码的32位数据测试寄存器。
当可以使用32位操作指令对E710TED进行读写
在测试模式下,可作为编码电路的数据输入和解码电路。

E710TRC — ECC Redundant Bit Data Control Test Register

一个32位测试寄存器,由四个字段组成,对应ECC的冗余位区。每个字段都可以作为8位寄存器访问名字都一样。有关每个字段的详细信息,请参阅这四个寄存器的描述。
当是读取;使用32位操作指令读取。

ECSYND — ECC Decoder Syndrome Data Register

是一个只读寄存器,用于确认解码电路产生的综合征码
处于测试模式。忽略对的写访问。

ECHORD — ECC 7-Bit Redundant Data Holding Test Register

保存了7位ECC冗余区域(上7位RAM数据),无法通过当外设模块在测试模式(ECTMCE)下访问RAM进行读取时

ECECRD — ECC Encoder Test Register

确认外设模块输入数据产生的冗余位
这里,读取的数据是编码的结果(ECC[6:0]),而不是输出值。读取时,返回重置后的值。

ECERDB — ECC Redundant Bit Input and Output Substitution Buffer Register

E710EAD — ECC Error Address Register

一个只读寄存器,用于保存发生ECC错误的地址。
如果在启用ECC错误检测的情况下检测到ECC错误,则使用
检测信号作为触发器,并将地址存储在E710EAD中,作为ECC的地址错误发生。
当没有设置错误状态时,在检测到第一个ECC错误时存储该地址。但是,如果
1位错误后面跟着2位错误,后者的地址被存储。地址可以计算通过添加基址。
E710EAD中只能保存一个地址。

RTCAnSECC — RTCA Seconds Count Register

这个寄存器是秒计数器。它计数秒从00到59在BCD。
这个寄存器计数如下。
每次RTCAnSUBC子计数器溢出时触发
如果子计数器溢出而秒计数器停止
秒计数器的行为如下:
—当秒计数器停止时,如果有一个子计数器溢出,则保持溢出在内部。
秒计数器在重新启动时加1。
—当秒计数停止时,如果发生两次或两次以上溢出,则不能设置溢出计数
内部举行。

秒计数器在重新启动时加1。
—如果秒计数器被更新,而秒计数器停止,则子计数器溢出忽略了
当数值从59变为00时,输出溢出信号。溢出信号触发分钟计数器。

流程 比较第一次和第二次读到秒计数器的值。当两者都是时,
相同的。如果没有,重复。

错误校验

瑞萨MCU内部有集成的ECC ;存储器集成ECC。ECC可以进行检测和校正
保存在内存中的数据的错误。ECC还可以检测和纠正错误
在ECC编码器和存储器之间产生;以及存储器和ECC解码器

当除ECC外的1位纠错发生在指令取时,cache miss或
缓存无效,
ECM错误源可能不会被通知,错误状态/错误地址寄存器可能不会被通知
更新。出现数据位和ECC位的所有0和1都不是合法的组合,并且被检测为2位错误。

可以同寄存器去配置几位进行校验;这样对于外部来说就是一个黑盒,实现完全的检测和保密。

可以设置纠错机制

这里的纠错机制包括

可以开启或关闭ECC错误检测和纠错功能。
启用后,可以选择以下任意一种设置。
·ECC纠错
进行检测和校正)。
·ECC纠错检测
当禁用时,既不进行错误检测也不进行错误纠正。
初始状态下,开启该功能;2位错误检测,1位错误检测和进行校正。

对于MCU中不同模块来说 会做不同模块的错误码 错误码可以进行校验去获取当前的故障错误

另外还有ECC的使能和配置函数
 


 

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

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

相关文章

影响视频视觉质量的因素——各类视觉伪影

模糊效应(Blurring Artifact) 图像模糊(blurring):平滑图像的细节和边缘产生的现象,模糊对于图像来说,是一个低通滤波器(low-pass filter)。一般而言,用户更…

Layer1 公链竞争破局者:Sui 生态的全面创新之路

随着 Sui 生态逐渐在全球范围内树立起声望,并通过与 Revolut 等前沿金融科技平台合作,推广区块链教育与应用,Sui 生态的未来发展方向已成为业界瞩目的焦点。如今,Sui 的总锁定价值已攀升至 5.93 亿美元,充分展示了其在…

python如何整体缩进

python自带编辑器的缩进和取消缩进快捷键: 整体缩进 Ctrl【 整体取消缩进 Ctrl】 pycharm编辑器的缩进和取消缩进快捷键: 整体缩进: tab 整体取消缩进: tabshift

【ZIP技巧】ZIP分卷压缩包如何解压?

经过压缩的文件仍然过大,大家可能都会选择“分卷压缩”来压缩ZIP文件,但是当我们将压缩包分卷之后,解压的时候该如何解压?今天我们分享两个ZIP分卷压缩包如何解压的方法给大家。 一、 我们可以直接点击第一个分卷压缩包&#xf…

USB系列四:USB数据传输类型(重要)

本章包括知识点如下,也是学习USB比较重要的一部分。 USB的块传输方式 USB的中断传输方式 USB的同步传输方式 USB的控制传输方式 USB3.0与USB2.0数据传输对比 USB总线技术协议具有极大的灵活性,可以针对不同的应用场合需求来采用最适合的…

分布式链路追踪工具Sky walking详解

1,为什么要使用分布式链路追踪工具 随着分布式系统和微服务架构的出现,且伴随着用户量的增加,项目的体量变得十分庞大,一次用户请求会经过多个系统,不同服务之间调用关系十分复杂,一旦一个系统出现错误都可…

逆向中webpack需要补充的模块很多怎么办

如下面这种典型的形式 进入i找到加载器 找到加载器所在函数r,在 return e[a].call(c.exports, c, c.exports, r),打上断点。 在控制台打印e,会发现它总共有的模块,这些模块需要我们在别的webpack中复制,有时很多,很麻烦。 我们可以注入代码在…

性能优化的核心思路,纯干货分享!

前言 平时技术交流的时候,很多同学都会问一些性能优化方面的问题。 比如: 有一张订单表为了保持订单记录,更新数据时不能删除,需要打算加上版本号,查询时取版本号最新的给前端,还有场景是查询订单历史给前…

AI日报|Stack Overflow和OpenAI达成合作,Apple正在为数据中心开发人工智能芯片...

欢迎大家在 GitHub 上 Star 我们: 分布式全链路因果学习系统 OpenASCE: https://github.com/Open-All-Scale-Causal-Engine/OpenASCE 大模型驱动的知识图谱 OpenSPG: https://github.com/OpenSPG/openspg 大规模图学习系统 OpenAGL: https://github.com/TuGraph-…

自注意力架构大成者_Transformer(Pytorch 17)

1 模型简介 在上节比较了 卷积神经网络(CNN)、循环神经网络(RNN)和 自注意力(self‐attention)。值得注意的是, 自注意力同时具有并行计算和最短的最大路径长度这两个优势。因此,使…

linux 性能监控命令之dstat

1. dstat 系统默认为安装,直接安装阿里源后,yum install -y dstat安装即可,该命令整合了 vmstat , iostat 和 ifstat,我们先看下效果: 我们先看看具体参数: [rootk8s-master ~]# dstat --help …

解决ModuleNotFoundError: No module named ‘skfuzzy‘,这个库全名可不叫skfuzzy哦,否则直接报错!!

ModuleNotFoundError: No module named skfuzzy 在这里插入图片描述在这里插入图片描述如何解决 ModuleNotFoundError: No module named skfuzzy 的问题?skfuzzy 模块介绍什么是模糊C均值聚类?skfuzzy 的应用如何使用 skfuzzy 进行模糊聚类 结论 如何解决…

电子学会C/C++编程等级考试2024年03月(二级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:满足条件的数的累加2 现有n个整数,将其中个位数为k的数进行累加求和 输入 第一行一个整数n。第二行n个非负整数,以空格分割,每个数不大于100000。第三行一个整数k。 输出 输出满足题目要求的累加和 样例输入 10 2 5 7 17 11 18 4…

YOLOv8独家改进:backbone改进 | 轻量化之王MobileNetV4 开源 | Top-1 精度 87%,手机推理速度 3.8ms,原地起飞!

💡💡💡创新点:轻量化之王MobileNetV4 开源 | Top-1 精度 87%,手机推理速度 3.8ms,原地起飞! MobileNetV4(MNv4),其特点是针对移动设备设计的通用高效架构。创新1):引入了通用倒瓶颈(UIB)搜索块,这是一个统一且灵活的结构,它融合了倒瓶颈(IB)、ConvNext、…

如何用mathtype7? MathType7数学公式编辑器使用图文教程2024最新

在我们的日常工作中,经常会使用和编辑到数学公式,那么我们该怎么编辑数学公式呢?今天我们就来看看 MathType7的使用方法 强大的MathType软件是一款适用于Windows和Mac的交互式方程编辑器,你可以为网页、出版物、说明以及TeX、LaT…

用HAL库改写江科大的stm32入门例子_1、按键控制led灯

使用STM32CubeMX生成Keil工程并完成流水灯 ,就不重复了:直接参考: 使用STM32CubeMX生成Keil工程并完成流水灯 进入主题,用中断实现,操作步骤如下: 1 如下图设置PB11 管脚 2 设置PB11为下降沿中断: 3 PA…

使用 electron-vite-vue 构建 electron + vue3 项目并打包

文章目录 一、使用 electron-vite-vue 构建 Vue3 项目1、创建项目并安装相关依赖2、安装依赖时报错 (operation not permitted) 二、项目打包1、执行打包命令2、下载失败处理3、手动方式下载后,将文件放至指定路径下4、打包成功后 参考资料 一、使用 electron-vite-…

Google Chrome浏览器便携增强版 v124.0.6367.61

01 软件介绍 Google Chrome v124.0.6367.61,这一版本经过精心设计,集成了一系列的功能增强和关键补丁,旨在提升用户体验。其中,Chrome引入了便携性数据保存选项,优化了标签页及标签栏的操作机制。此外,它还…

【Linux 性能详解】CPU性能篇

目录 平均负载(Load Average) CPU上下文切换 进程上下文切换 线程上下文切换 中断上下文切换 中断 硬中断 软中断 CPU使用率 性能分析工具 平均负载(Load Average) 平均负载?这个词对很多人来说&#xff0c…

参数化建模系列-cityengine篇之:如何基于GIS数据快速构建道路三维建模模型

结合上期介绍的基于GIS数据自动化构建城市三维建筑模型,本期在上期的知识点上继续介绍道路模型的自动化构建方法。 数据获取 本期道路自动化建模从获取道路数据开始。 首先打开“QuickOSM”插件,在“Key”中选择“highway”;其次选择数据范…