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

安全芯片 OPTIGA TRUST M 使用介绍与示例(基于STM32裸机)

文章目录

  • 目的
  • 资料索引
  • 硬件电路
  • 软件框架介绍
    • 数据存储
    • 框架移植
    • 框架使用
  • 使用示例
    • 示例地址与硬件连接
    • 通讯测试
    • 功能测试
  • 总结

目的

OPTIGA TRUST M 是英飞凌推出的安全芯片,芯片通提供了很多 slot ,用于存放各类安全证书、密钥、用户数据等,内置很多加解密算法,另外还内置一些计数器等。芯片通过I2C和主机通讯,这个通讯也是可以加密进行的,防止被监听。这篇文章将对该芯片相关的使用做个介绍。

资料索引

OPTIGA™ 嵌入式安全解决方案

我这里使用的是:OPTIGA TRUST M SLS32AIA
在这里插入图片描述

这个芯片虽然是I2C通讯的,但是通讯本身比较复杂,涉及到英飞凌自己的传输层以及加密通讯等,所以开发都是基于英飞凌提供的库( OPTIGA™ Trust M Software Framework )之上进行的:
https://github.com/Infineon/optiga-trust-m

上面项目 release-v5.0.0 以前是带文档的,之后的版本中移除了文档,现在文档可以在下面仓库找到:
https://github.com/Infineon/optiga-trust-m-overview

本文介绍示例编写时用的 release-v4.2.0 版本,新版本和旧版本可能在文件命名或分布上有所区别,但是基本的思路都是一样的。

硬件电路

硬件电路搭建可以参考《OPTIGA™ Trust M Datasheet》文档,唯一需要注意的是引出RST引脚给单片机控制,如果不手动来复位的话可能芯片无法正确工作:
在这里插入图片描述

可以用下面板子进行测试:
https://github.com/NaisuXu/OPTIGA_Trust_M_Module
在这里插入图片描述

软件框架介绍

英飞凌 OPTIGA™ Trust M Software Framework 使用上主要参考 《OPTIGA™ Trust M Solution reference manual》 文档。

数据存储

OPTIGA TRUST M 最主要的提供了两类功能,一个是存储密钥、证书、用户自定义数据、芯片特定数据、计数值等的槽位(Slot)。可用槽位视图如下:
在这里插入图片描述

每个槽位,有一个最大44字节的元数据(Metadata)来描述其作用、属性、操作权限等。比如你可以向密钥槽中存放密钥,然后通过元数据设定属性为密钥、设定其不能读写、设定其可以用作芯片内部加解密算法执行使用。

槽位相关的内容主要在参考手册的《OPTIGA™ Trust M data structures》章节。

框架移植

下图是框架的内容布局:
在这里插入图片描述
移植工作主要需要处理的是 PAL 层 ,框架中提供了模板和示例,根据需求移植就行。需要注意的是这个框架在主机端需要用到软件加解密功能,默认框架中已经包含了 mbedtlspal_os_memory.c 这个文件提供内存申请释放等接口, 4.2.0 版本中该文件可以从上一级目录下各平台PAL示例中拷贝一份修改用。
在这里插入图片描述

PAL层需要处理的东西不多,下面介绍些基本的需要处理的地方,其他没有介绍到的部分可以根据自己的需求来处理:

  • pal_gpio.c
    根据前面讲的需要控制RST引脚,这里就是对相关引脚的操作函数接口;
  • pal_i2c.c
    这里是i2c读写相关接口,如果是同步方式处理i2c,那么只需要实现write和read函数功能即可,如果是异步方式操作,write和read只是实现了一般,结束后还需调用该文件中定义的几个callback函数;
  • pal_os_event.c
    这是该库最核心的一个功能。这个库中有非常多的异步操作,通过这里来实现。库运行时需要执行异步操作时会调用这里的 pal_os_event_register_callback_oneshot 函数,你需要保存传入的回调函数、参数、时间信息,然后在过了前面的时间之后调用这里的 pal_os_event_trigger_registered_callback 函数。
  • pal_os_timer.c
    需要提供系统微秒毫秒时间及毫秒延时接口,微秒无法提供了话至少每次返回一个自增的值;

框架使用

移植完成后框架基本使用本身挺简单,框架中也带了非常多的例程:
在这里插入图片描述

主要操作就是初始化一些句柄,然后向安全芯片打开应用,之后就是处理自己的业务功能,处理完成之后关闭应用,销毁句柄。

需要注意的是这个库使用时很多操作都是需要和芯片通讯,然后芯片处理完成之后再次通讯去取结果的,看例程的话可以看到很多 WAIT_AND_CHECK_STATUS(return_status, optiga_lib_status); 这种操作,这里有可能是非常耗时的,这在有操作系统的情况下挺好开发,没有操作系统的情况下就要使用合适的方式来处理了。在本文下面的示例中我使用了 protothreads(pt-1.4) 来实现不阻塞的异步功能。

使用示例

示例地址与硬件连接

https://github.com/NaisuXu/OPTIGA_Trust_M_Examples

在这里插入图片描述

在这里插入图片描述

通讯测试

《STM32_Check_I2C_STATE_Register_Without_Host_Library》这个示例用于测试I2C和芯片间通讯是否可用。 OPTIGA TRUST M 的地址固定位 0x30 (即可以通过 0x600x61 分别进行读和写)。访问安全芯片 0x82 命令,如果通讯正常可以获取到 0x08 0x80 0x00 0x00 内容。

在这里插入图片描述

需要注意的是这个安全芯片会自动进入休眠,初次访问可能会失败,连续访问下之后的访问应该会成功。

功能测试

《STM32_NonOS_With_Host_Library》这个示例移植了英飞凌代码框架,另外还移植了 protothreads(pt-1.4) 来实现无操作系统下的异步功能(协程)。

示例中演示了 生产随机数、读取芯片UID、使用计数器 几个功能,可以通过主函数中的宏定义来切换:
在这里插入图片描述

example_crypt _random
在这里插入图片描述

example_read_coprocessor_id
在这里插入图片描述

example_util_update_count
该示例设置了计数器的阈值位10,到达阈值后再计数就报错。
在这里插入图片描述

总结

OPTIGA TRUST M 本身的通讯访问上还是比较复杂的,不过官方提供了库,用起来倒也不复杂。这类安全芯片在对安全要求高或是成本不敏感的场合使用还是挺不错的。

相关文章:

安全芯片 OPTIGA TRUST M 使用介绍与示例(基于STM32裸机)

文章目录 目的资料索引硬件电路软件框架介绍数据存储框架移植框架使用 使用示例示例地址与硬件连接通讯测试功能测试 总结 目的 OPTIGA TRUST M 是英飞凌推出的安全芯片,芯片通提供了很多 slot ,用于存放各类安全证书、密钥、用户数据等,内置…...

【AI换装整合及教程】CatVTON:时尚与科技的完美融合

在当今数字化时代,时尚行业正经历着一场前所未有的变革,而 CatVTON 作为一款由中山大学、Pixocial 等机构联合研发的轻量化 AI 虚拟换装工具,无疑是这场变革中的璀璨明星。 一、独特的技术架构 CatVTON 基于 Stable Diffusion v1.5 inpainit…...

接口测试(七)jmeter——参数化(RandomString函数)

一、RandomString函数 需求:模拟10个用户注册 1. 【工具】–>【函数助手对话框】 2. 选择RandomString函数 假设手机号码前3位设置为固定数值136,后8位可用RandomString函数随机产生数值 ① Random string length:8(随机长度…...

simple_php

访问靶场 这里传入a和b参数,绕过三个if即可拿到flag a a a_GET[ a’ ];中是抑制报错信息的。 第一个if非常的抽象, if($a0 and $a){echo $flag1; }处理a 要输出flag1,a0,但是,在php中0被视为假也就是Flase 如果a0&#xff0…...

网络搜索引擎Shodan(4)

声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。 感谢泷…...

【Flask】一、安装与第一个测试程序

目录 Flask简介 安装Flask 安装pip(Python包管理器) 使用pip安装Flask 验证安装 创建Flask程序 创建应用 运行 访问测试 Flask简介 Flask是一个用Python编写的轻量级Web应用框架。它被设计为易于使用和扩展,使其成为构建简单网站或复…...

R语言笔记(二):向量

文章目录 一、Data structure: vectors二、Indexing vectors三、Re-assign values to vector elements四、Generic function for vectors五、Vector of random samples from a distribution六、Vector arithmetic七、Recycling八、Element-wise comparisons of vectors九、Comp…...

信息安全工程师(71)隐私保护技术与应用

前言 隐私保护技术是指通过一系列的技术手段来保护人们的隐私不被公开泄露。随着数字化和网络化社会的发展,个人隐私的保护变得尤为重要,隐私保护技术也因此得到了广泛的应用和发展。 一、隐私保护技术概述 隐私保护技术主要包括数据加密技术、身份认证技…...

层和块学习

1.生成一个网络,其中包含一个具有256个单元和ReLU激活函数的全连接隐藏层,然后是一个具有10个隐藏单元且不带激活函数的全连接输出层。 import torch from torch import nn from torch.nn import functional as Fnet nn.Sequential(nn.Linear(20, 256)…...

Zookeeper面试整理-源码及实现细节

Zookeeper 的源码和实现细节是理解其高可用性、分布式一致性和高效性的关键。以下是 Zookeeper 的核心实现细节,涵盖其架构、关键模块、以及具体的代码实现机制。 1. Zookeeper 架构 Zookeeper 采用 Leader-Follower 架构,集群由多个节点组成。主要分为三种角色:Leader、Fol…...

岭回归的MATLAB步骤

MATLAB 实现框架,它涵盖了从数据导入到岭回归的步骤,包括计算共线性、使用 MAE、MSE、R、MAPE 进行评价,以及绘制相应的可视化图表。 1. 数据导入 首先,导入你的 Excel 文件 data.xlsx。假设前面的列是因变量(特征&a…...

智能指针(unique_ptr,shared_ptr,weak_ptr)

在实际的C开发中,我们经常会遇到诸如程序运行中突然崩溃,程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的(内存泄漏) 比如: 有些内存资源已经被释放,但指向它的指针并没有改变指…...

Sql执行较慢的排查方式

SQL执行较慢的排查方式涉及多个方面,包括检查SQL语句本身、数据库配置、硬件资源等。以下是一些具体的排查步骤和优化建议: 一、检查SQL语句 启用慢查询日志: 大多数数据库管理系统(如MySQL、PostgreSQL)都支持慢查询…...

CesiumJS 案例 P6:添加图片图层、添加图片图层并覆盖指定区域

CesiumJS CesiumJS API&#xff1a;https://cesium.com/learn/cesiumjs/ref-doc/index.html CesiumJS 是一个开源的 JavaScript 库&#xff0c;它用于在网页中创建和控制 3D 地球仪&#xff08;地图&#xff09; 一、添加图片图层 <!DOCTYPE html> <html lang"…...

Python画笔案例-094 绘制 神奇彩条动画

1、绘制 神奇彩条动画 通过 python 的turtle 库绘制 神奇彩条动画,如下图: 2、实现代码 绘制 神奇彩条动画,以下为实现代码: """神奇彩条动画.py一个用海龟画图的图章功能配合颜色渐变和动画原理做成的动画。 """ from random import randi…...

javaScript整数反转

function _reverse(number) { // 补全代码 return (number ).split().reverse().join(); } number &#xff1a;首先&#xff0c;将数字 number 转换为字符串。在 JavaScript 中&#xff0c;当你将一个数字与一个字符串相加时&#xff0c;JavaScript 会自动将数字转换为字符串…...

Zookeeper面试整理-故障排查和调试

在使用 Zookeeper 的过程中,可能会遇到各种问题,如性能下降、节点失效、集群不可用等。为了保持系统的稳定性和高可用性,掌握 Zookeeper 的故障排查和调试方法至关重要。以下是一些常见的故障排查技巧和调试方法: 1. 日志分析 Zookeeper 的日志是最直接的调试和故障排查工具…...

PG数据库之索引详解

PostgreSQL数据库中的索引是一种用于提高查询性能的重要数据结构。通过索引&#xff0c;数据库可以快速定位到表中的特定行&#xff0c;而无需进行全表扫描。PostgreSQL支持多种索引类型&#xff0c;每种类型都有其特定的应用场景和性能特点。下面将详细介绍PostgreSQL中的索引…...

springboot项目测试环境构建出的依赖包比本地构建出的依赖包多

本地能够正常启动服务&#xff0c;但是测试环境启动报错。 上述druid是服务pom文件中之前引入的依赖包&#xff0c;后续由于某种原因而不需要该依赖包了&#xff0c;故已在pom文件中移除掉了该依赖包。 移除该依赖包之后&#xff0c;本地服务可正常构建和启动。 而测试环境却…...

温湿度传感器(学习笔记上)

在学习这个项目之前,我们先了解一下传感器,查阅资料可知,电路板上温湿度传感器型号是GXHTC3,是北京中科银河芯科技有限公司研发的一款芯片,采用I2C接口与ESP32-C3通信,I2C地址是0x70。 接下来我们要进行编写i2c驱动程序,首先我们复制esp-idf-v5.1.3\examples\get-started\samp…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态&#xff0c;这是一个可以多选的控件。 二、属性 其实功能大差不差&#xff0c;除了特殊的几个外&#xff0c;与button基本相同&#xff0c;所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...

基于Python的气象数据分析及可视化研究

目录 一.&#x1f981;前言二.&#x1f981;开源代码与组件使用情况说明三.&#x1f981;核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.&#x1f981;演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…...

从0开始学习R语言--Day17--Cox回归

Cox回归 在用医疗数据作分析时&#xff0c;最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据&#xff0c;往往会有很多的协变量&#xff0c;即使我们通过计算来减少指标对结果的影响&#xff0c;我们的数据中依然会有很多的协变量&#xff0c;且…...