当前位置: 首页 > news >正文

YTM32的HSM模块在信息安全场景中的应用

YTM32的HSM模块在信息安全场景中的应用

文章目录

  • YTM32的HSM模块在信息安全场景中的应用
    • 引言
    • 应用场景:一点点密码学基础
    • 硬件:YTM32的信息安全子系统
      • HCU外设模块
        • 硬件特性
        • 基本的应用操作流程,以计算AES-ECB为例
        • 硬件上对处理多块数据上的一些设计细节
          • 处理多块消息 for AES / SHA
          • 存储上下文数据,使用CR[CS]寄存器
          • 操作流步骤
        • 存放密钥Key
        • 关于FIFO
    • 软件资源
    • Performance
    • 小节

引言

随着汽车上通信系统越来越复杂,云端、远程通信的场景越来越多,信息安全变得越来越重要,在通信领域常用的AES、SHA、RSA等加密算法被越来越多地应用到汽车电子系统中。通常这类加解密算法都需要大量的数学运算,需要消耗相当多的CPU时间,但同时汽车应用场景对ECU有比较高的实时性要求,为了节省主CPU的资源,专用于执行加解密算法的硬件HSM模块应运而生。

广义上的HSM(Hardware Security Module),是MCU上专门用于实现加解密算法的外设模块,它一般会有一个独立的CPU,专门用来进行加解密运算,还有一些针对特定算法的硬件加速器(如AES-128、SHA-256等)。有了HSM模块,程序中就可以把加解密运算交给HSM来执行,同时主CPU就可以去做其他工作,一段时间后来查询结果,或等待HSM计算完成后通过中断等方式通知主CPU计算结果即可。HSM通常还拥有单独的存储区,包括RAM和NVM(Flash存储器),HSM的存储区在正常运行状态下应只允许HSM读写,主CPU不能读写。这样就可以把算法秘钥等重要数据存储在HSM存储区,与主CPU进行隔离,进一步加强安全性。此外HSM模块还会集成(或者共存)真随机数生成器等加密算法常用外设。

应用场景:一点点密码学基础

常用的加密方法,比较耳熟能详的是摘要算法(哈希算法,HASH)、对称加密、非对称加密等。

  • 摘要算法是不可逆的,主要作用是对信息的完整性一致性进行校验。
  • 对称加密算法是可逆的,主要作用是保证私密信息不被泄露。不同于摘要算法(HASH),是真正意义上的加密算法。
  • 相对于对称加密在加解密过程中使用同一个密钥,非对称加密在加密和解密过程中使用的密钥也是不同的(公钥和私钥)。

假设有发送方向接收方发送消息。如果没有任何加密算法,接收方发送的是一条明文消息:我是小灰
在这里插入图片描述

如果中间人截获到消息,即使中间人无法篡改消息,也可以窥探到消息的内容,从而暴露了通信双方的私密。

因此,我们不再直接传送明文,而改用对称加密的方式传输密文,画风就变成了下面这样:

在这里插入图片描述
具体工作的步骤如下:

  1. 发送方利用密钥123456,加密明文我是小灰,加密结果为TNYRvx+SNjZwEK+ZXFEcDw==
  2. 发送方把加密后的内容TNYRvx+SNjZwEK+ZXFEcDw==传输给接收方。
  3. 接收方收到密文TNYRvx+SNjZwEK+ZXFEcDw==,利用密钥123456还原为明文我是小灰。(使用相同密钥的对称加密方法)

硬件:YTM32的信息安全子系统

HCU外设模块

YTM32的HCU(Hardware Cryptography Unit)是HSM的一种典型实现,使用硬件计算引擎,可以实现对用户数据的加解密计算,其中包括AESSM4SHA等算法,并配合真随机数发生器TRNGHCU_NVR存储区,完成了对加解密系统的硬件支持。如图x所示。

在这里插入图片描述

图x YTM32的HCU外设系统框图

从HCU外设的系统框图中可以看到,HCU的核心是一个复用成多种模式的计算引擎,用户可以通过FIFO向计算引擎送数参与计算,并在计算结束后,通过FIFO读出计算结果。HCU的用户操作接口(寄存器)并不复杂,主要的配置选项都在选择计算引擎的工作模式上(HCU_CR寄存器),DMA和中断,以及标志位的设置,都是面向FIFO的常规功能。

需要特别关注的是,HCU外设模块从Flash(EFM模块)存储器中导入Key到HCU_KEY寄存器的机制,以及众多面向具体加解密算法,需要通过专用的寄存器传入专用的参数,例如通过HCU_MSGINFO寄存器和HCU_MSGADL寄存器指定输入数据(“消息”,Message)的长度,通过HCU_ASECV寄存器为计算ASE-CTR算法时传入Counter参数,通过HCU_ASEIV寄存器为计算ASE-CBC算法时传入Initial Vector参数,通过HCU_ASEMAC寄存器为计算ASE-CMAC算法时传入或传出MAC值。

硬件特性
  • 支持使用128-bit、192-bit、256-bit等不同长度的密钥。
  • 可以实现加密和解密运算。
  • 可以使用安全的硬件密钥(存放在以Flash为存储介质的HCU_NVR)和灵活的软件密钥(可软件写入HCU_KEY寄存器)。
  • 实现了多种硬件加密算法的计算引擎
    • AES (ECB, CBC, CTR, CCM, CMAC )
    • SM4 (ECB)
    • SHA (SHA-256, SHA-384)
  • 以大端方式保存输入数据和输出数据,但支持按位、按字节和按16位字逆序。
  • 使用输入FIFO和输出FIFO缓存数据,最大缓存深度可达128 Byte。
  • 支持DMA和中断,可以从MCU的内存空间中取数和送数。
基本的应用操作流程,以计算AES-ECB为例

使用HCU计算引擎的流程大体相似:先准备密钥Key、配置引擎,到准备数据、执行计算,最后等待计算完成读取计算结果。这里以AES-ECB为例,具体说明使用HCU计算引擎的操作过程:

  • 导入计算过程的密钥,可以使用预先烧录至Flash存储区的HCU_NVR,也可以人工向HCU_KEY寄存器中写数。
  • 配置计算引擎,设置HCU_CR[ENGSEL]=1, HCU_CR[ALGSEL]=0,指定即将以AES-ECB模式进行计算。
  • 指定实际使用密钥的长度,设置HCU_CR[KEYLEN],例如,可指定长度为128。
  • 向HCU的数据FIFO中写入即将要参与计算的数据,向HCU_IFDAT寄存器中写数。
  • 指定即将要参与计算的数据长度,向HCU_MSGADL[MSGLEN]寄存器中写数。
  • [可选的步骤] 根据不同计算模式的需要,需要额外写入计算参数:
    • 对于AES-CBC计算,需要在这个阶段写入HCU_IV寄存器。
    • 对于AES-CTR计算,需要在这个阶段写入HCU_CTR寄存器。
  • 指定即将要进行的是加密计算还是解密计算,设置HCU_CR[ENC]寄存器。
  • 启动计算,设置HCU_GO[GO]=1
  • 等待计算完成。
  • 当硬件计算完成后,将有标志位HCU_SR[OD]=1
  • 从HCU的数据FIFO中读出计算的结果,从HCU_OFDAT寄存器中读数。

其他计算模式的过程大体相同,在软件应用上,可以直接调用SDK软件包中的API,或者阅读参考手册对照具体的操作。

硬件上对处理多块数据上的一些设计细节
处理多块消息 for AES / SHA

一般应用中,AES / SHA计算引擎处理一个消息块的长度小于 32768 / 65536 字节,对应在HCU外设的寄存器字段HCU_CR[MSGLEN]中配置。但当用户需要处理(加密或解密)长度大于 32768 / 65536 字节的消息块,就需要使用处理多块消息的机制:需要指定寄存器HCU_CR[MSGB]HCU_CR[MSGE],表示即将要进行处理的数据块是开始块(Begin Message)、中间块(Middle Message)或是结束块(End Message),并且需要配置HCU_CR[CS]=1指定即将处理完成数据块后,需要为下次计算保留种子(在AES-CBCAES-CTR两种计算模式下,除了Key之外,还需要配合IVCTR值才能启动数据块的计算)。

存储上下文数据,使用CR[CS]寄存器

大部分计算过程,都是对于一段不长的数据进行计算,经过一次计算就可以得到最终的结果。

但对于AES-CBCAES-CTR这两种计算过程,可能会计算一组比较长的数据。在开始计算数据前,还需要预先设定IV寄存器(Initial Vector)和CTR寄存器参与计算。当设置HCU_CR[CS]=1,处理完数据块后,产生的IV和CTR值将被载入到硬件的HCU_IV寄存器和HCU_CTR寄存器,供下一个数据块的处理过程使用,并以此类推。

操作流步骤

通过HCU_MSGINFOHCU_MSGADL分别指定完整数据块的长度和每次参与计算的数据子块的长度。设置HCU_CR[CS]=1,启用保存计算上下文。设置[HCU_CR[MSGB]:HCU_CR[MSGE]]的值为0b100b000b01,指定即将处理最开始的子数据块、若干个中间子数据块和最后一个字数据块。

  1. 配置准备开始执行分多块的计算:
  • 配置HCU_MSGINFO寄存器,设定真个长消息的数据长度(如果是AES-CCM,则不包含额外的数据长度)。
  • 设置HCU_CR[CS]=1,启用保存计算上下文。
  1. 配置计算第一个数据块:
  • 设置HCU_CR[MSGB]=1, HCU_CR[MSGE]=0,指定即将处理长消息的第一个子数据块。
  • 设置HCU_MSGADL[MSGLEN],指定即将处理的一个子数据块的长度。
  • 配置执行加解密引擎。
  • 设置HCU_GO[GO]=1,启动计算引擎。等待计算完成。
  • 当硬件计算完成后,将有标志位HCU_SR[OD]=1
  1. 配置计算中间的数据块:
  • 设置HCU_CR[MSGB]=0, HCU_CR[MSGE]=0,指定即将处理长消息的中间子数据块。
  • 其余操作同上述计算过程相同。
  1. 配置计算最后的数据块:
  • 设置HCU_CR[MSGB]=0, HCU_CR[MSGE]=1,指定即将处理长消息的中间子数据块。
  • 其余操作同上述计算过程相同。

注意:

  • 分多块计算的功能仅适用于AES(CCM / CMAC)和 SHA 引擎。
  • 设置各分块的大小,在计算SHA-256时,应为64字节的倍数,在计算SHA-384时,应为128字节的倍数。
存放密钥Key

根据手册中存储空间(Memory Map)和EFM模块(Embedded Flash Module)章节中的介绍,YTM32微控制器片内的Flash中,还划分了一块区域HCU_NVR,专门用于存放同HCU相关的密钥数据。如图x所示。

在这里插入图片描述

图x YTM32B1ME微控制器的存储映射

HCU_NVR中可以存放32组 AES-256的Key。用户可通过配置EFM_CTRL[AES_KEY_SEL]寄存器,指定AES-256的Key序号,然后在EFM_CMD寄存器中写入Load AES Key命令,如图x所示,就可以将对应的Key从Flash中的HCU_NVR载入到HCU_KEY寄存器中,参与AES算法的计算。这就是使用硬件密钥的方法。

在这里插入图片描述

图x EFM中的CMD寄存器可以识别的命令

当然,在调试阶段,或者需要使用灵活密钥的情况下,用户软件也可以不使用预先存放在硬件Flash中的密钥,而直接向HCU_KEY寄存器中写入Key值参与计算。

出于安全的考虑,用户软件(通过CPU)不能直接读取HCU_NVR存储区和HCU_KEY寄存器中的数据。用户可以通过写Flash的方式(带有KEY)向HCU_NVR中写数,但除了最初写数的人,别人是无法再读出正确的数。

关于FIFO

Input FIFO入口寄存器的位宽是32b,但手册上明确说明,要求每次向FIFO中写数必须为128b,这也就意味着对Input FIFO的操作,每次都要加倍再加倍,连续4次写入才算完成一次操作。

在这里插入图片描述

图x Input FIFO每次必须以128b写入

Input FIFO可以通过Watermark触发中断,但Watermark的值是以字(1 Word)为单位的,这也就意味着Watermark的实际设定值必须是4的倍数(4个Word对应128b)。

至于Input FIFO Watermark的中断,这里有一个逻辑。在Operation Done事件到来之前,Input FIFO Watermark的事件都是按需触发的,即只要当前FIFO中的数据量(Word数量)小于Watermark的设定值,就可以触发对应的中断。但若Operation Done事件到来,此时Input FIFO的检测逻辑就停了,哪怕Input FIFO中的数据已经耗尽,库存低于Watermark值,(刚消耗掉最后一组128b数据后),也不会再产生Input FIFO Watermark的中断。因此在YTMicro SDK的样例代码中,停用Input FIFO Watermark中断的操作并不是等着一个空的Input FIFO触发,而是同Operation Done事件放在一起停用的。

void HCU_IRQHandler(void)
{/* Operate done handler */if ((HCU_GetStatusFlag(OPERATION_DONE_FLAG)) && (HCU_GetIntMode(OPERATION_DONE_FLAG))){/* clear flags. */HCU_ClearStatusFlag(OPERATION_DONE_FLAG); /* Clear operate done flag *//* disable interrupts. */HCU_SetIntMode(OPERATION_DONE_FLAG, false);HCU_SetIntMode(INPUT_FIFO_WATERMARK_FLAG, false);  /* Disable input watermark interrupt */...
}

软件资源

YTMicro SDK中,提供了HCU外设模块的驱动程序,以及一个基本的样例工程hcu_ecb

从笔者的经验看来,目前设计这个样例工程更多是为验证HCU驱动代码,并简单演示HCU模块的应用流程。从用户角度看,如果需要更充分有效地利用好HCU外设,原厂的开发团队应该在后续会设计和发布专门的功能安全软件组件,将这些硬件细节隐藏在将来会逐渐统一的通用HSM软件接口之下(例如集成到AutoSAR软件体系中),因为HSM的开发者大多是算法专家,相对于某个具体的外设模块的实现,他们更多关注的是软件的应用场景,以及实际计算的速率。

所以,这里还是期待原厂的软件开发团队继续为开发者带来一些惊喜。

Performance

HCU模块在YTM的M系列中都有集成,但每个子系列中的HCU功能略有不同,如表x所示。

在这里插入图片描述
在这里插入图片描述
以 YTM32B1ME0 为例,在系统时钟为 120MHz PLL 下,测量各个算法处理 1KB 明文与 4KB 明文所需的时间。如下表所示。

在这里插入图片描述

小节

本文简要介绍了密码学在汽车电子系统中的应用场景,详细介绍了YTM32信息安全子系统中的核心模块HCU外设模块,以及基本用法,在文末汇总了HCU在YTM32微控制器中的分布情况,以及执行速度的参考指标。

本文尚未深入探究HCU以及信息安全的应用,期待后续HSM技术的应用规范逐渐形成标准,开发团队可依据规范开发和发布专用信息安全软件包。

相关文章:

YTM32的HSM模块在信息安全场景中的应用

YTM32的HSM模块在信息安全场景中的应用 文章目录 YTM32的HSM模块在信息安全场景中的应用引言应用场景:一点点密码学基础硬件:YTM32的信息安全子系统HCU外设模块硬件特性基本的应用操作流程,以计算AES-ECB为例硬件上对处理多块数据上的一些设计…...

时间序列大模型:TimeGPT

论文:https://arxiv.org/pdf/2310.03589.pdf TimeGPT,这是第一个用于时间序列的基础模型,能够为训练期间未见过的多样化数据集生成准确的预测。 大规模时间序列模型通过利用当代深度学习进步的能力,使精确预测和减少不确定性成为…...

CloudPanel RCE漏洞复现(CVE-2023-35885)

0x01 产品简介 CloudPanel 是一个基于 Web 的控制面板或管理界面,旨在简化云托管环境的管理。它提供了一个集中式平台,用于管理云基础架构的各个方面,包括虚拟机 (VM)、存储、网络和应用程序。 0x02 漏洞概述 由于2.3.1 之前的 CloudPanel 具有不安全的文件管理器 cook…...

WPF多值转换器

背景&#xff1a;实现Slider拖动可以调整rgb 单转换器&#xff1a;WPF中数据绑定转换器Converter-CSDN博客 在View中&#xff1a; <StackPanel Orientation"Vertical"><Slider x:Name"slider_R" Minimum"0" Maximum"255" Wi…...

x-cmd pkg | perl - 具有强大的文本处理能力的通用脚本语言

目录 介绍首次用户技术特点竞品进一步阅读 介绍 Perl 是一种动态弱类型编程语言。Perl 内部集成了正则表达式的功能&#xff0c;以及巨大的第三方代码库 CPAN;在处理文本领域,是最有竞争力的一门编程语言之一 生态系统&#xff1a;综合 Perl 档案网络 (CPAN) 提供了超过 25,0…...

Jedis(一)与Redis的关系

一、Jedis介绍&#xff1a; 1、背景&#xff1a; Jedis是基于Java语言的Redis的客户端&#xff0c;Jedis Java Redis。Redis不仅可以使用命令来操作&#xff0c;现在基本上主流的语言都有API支持&#xff0c;比如Java、C#、C、PHP、Node.js、Go等。在官方网站里有一些Java的…...

K8S--安装Nginx

原文网址&#xff1a;K8S--安装Nginx-CSDN博客 简介 本文介绍K8S安装Nginx的方法。 1.创建Nginx目录及配置文件 mkdir -p /work/devops/k8s/app/nginx/{config,html} 在config目录下创建nginx.conf配置文件&#xff0c;内容如下&#xff1a; # events必须要有 events {wo…...

[BUUCTF]-PWN:babyfengshui_33c3_2016解析

又是一道堆题&#xff0c;先看保护 关键信息是32位&#xff0c;没开pie 直接看ida 大致是alloc创建堆块&#xff0c;free释放堆块&#xff0c;show查看堆块内容&#xff0c;fill填充堆块内容 其他的都没啥关键的要讲&#xff0c;但alloc那里非常需要解析一下 解释如上图 再具…...

小程序系列--9.生命周期

1. 什么是生命周期&#xff1f; 2. 生命周期的分类 3. 什么是生命周期函数 4. 生命周期函数的分类 5. 应用的生命周期函数 6. 页面的生命周期函数...

SQL注入实战操作

一&#xff1a;SQl注入分类 按照注入的网页功能类型分类&#xff1a; 1、登入注入&#xff1a;表单&#xff0c;如登入表单&#xff0c;注册表单 2、cms注入&#xff1a;CMS逻辑:index.php首页展示内容&#xff0c;具有文章列表(链接具有文章id)、articles.php文 章详细页&a…...

Microsoft Remote Desktop for Mac(远程桌面连接)激活版

Microsoft Remote Desktop是一款由微软开发的远程桌面连接工具&#xff0c;它允许用户从另一台计算机或移动设备远程连接到Windows桌面或服务器。 以下是该软件的一些主要特点和功能&#xff1a; 跨平台支持&#xff1a;Microsoft Remote Desktop支持Windows、macOS、iOS和Andr…...

分布式日志

1 日志管理 1.1 日志管理方案 服务器数量较少时 直接登录到目标服务器捞日志查看 → 通过 rsyslog 或shell/python 等脚本实现日志搜集并集中保存到统一的日志服务器 服务器数量较多时 ELK 大型的日志系统&#xff0c;实现日志收集、日志存储、日志检索和分析 容器环境 …...

21.云原生之ArgoCD CICD实战(部分待补充)

云原生专栏大纲 文章目录 部署项目介绍项目结构介绍GitLab CI/CDGitLab CI/CD主要特点和功能 部署测试argocd的cd过程CICD工作流准备工作github中工作流文件创建gitlab中工作流文件创建【实操待补充】GitLab CI示例 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami …...

一文读懂JavaScript DOM节点操作(JavaScript DOM节点操作详解)

一、什么是节点 DOM模型是树状结构模型&#xff0c;二组成这棵树的就是一个个点&#xff0c;在网络术语中称之为节点。 节点是一个模型中最基本的组成单位。DOM模型是由一个个节点组成的&#xff0c;DOM节点也有其不同的类型。 二、节点类型 DOM节点分为5种类型&#xff1a;…...

【Linux】常见指令(一)

前言: Linux有许多的指令&#xff0c;通过学习这些指令&#xff0c;可以对目录及文件进行操作。 文章目录 一、基础指令1. ls—列出目录内容2. pwd—显示当前目录3. cd—切换目录重新认识指令4. touch—创建文件等5. mkdir—创建目录6. rmdir指令 && rm 指令7. man—显…...

C语言大师(8)异常处理

引言 异常处理是C编程中处理运行时错误的关键机制。它通过 try、catch 和 throw 关键字提供了一种强大的方法来处理程序执行中可能出现的异常情况。了解如何有效地使用这些机制对于编写健壮且可维护的程序至关重要。 1. 基本异常处理 在C中&#xff0c;try 块用于包围可能发生…...

网络防御保护——1.网络安全概述

一.网络安全概念 通信保密阶段 --- 计算机安全阶段 --- 信息系统安全 --- 网络空间安全 APT攻击 --- 高级持续性威胁 网络安全(网络空间安全--Cyberspace)从其本质上讲就是网络上的信息安全&#xff0c;指网络系统的硬件、软件及数据受到保护。不遭受破坏、更改、泄露&#xf…...

SpringBoot整合ElasticSearch实现分页查询

本文使用SpringBoot整合ElasticSearch实现分页查询 文章目录 环境准备 环境准备 还是继续使用spring-boot-starter-data-elasticsearch来实现分页查询操作...

[C++]使用yolov8的onnx模型仅用opencv和bytetrack实现目标追踪

【官方框架地址】 yolov8: https://github.com/ultralytics/ultralytics bytetrack: https://github.com/ifzhang/ByteTrack 【算法介绍】 随着人工智能技术的不断发展&#xff0c;目标追踪已成为计算机视觉领域的重要研究方向。Yolov8和ByTetrack作为当前先进的算法&…...

打造专业级ChatGPT风格聊天界面:SpringBoot与Vue实现动态打字机效果,附完整前后端源码

大家好&#xff0c;今天用SpringBoot、vue写了一个仿ChatGPT官网聊天的打字机效果。 所有代码地址:gitee代码地址 &#xff0c;包含前端和后端&#xff0c;可以直接运行 使用本技术实现的项目&#xff1a;aicnn.cn&#xff0c;欢迎大家体验 如果文章知识点有错误的地方&#xf…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...