安全芯片 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
层 ,框架中提供了模板和示例,根据需求移植就行。需要注意的是这个框架在主机端需要用到软件加解密功能,默认框架中已经包含了 mbedtls
。 pal_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
(即可以通过 0x60
和 0x61
分别进行读和写)。访问安全芯片 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࿰…...

网络搜索引擎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:https://cesium.com/learn/cesiumjs/ref-doc/index.html CesiumJS 是一个开源的 JavaScript 库,它用于在网页中创建和控制 3D 地球仪(地图) 一、添加图片图层 <!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 :首先,将数字 number 转换为字符串。在 JavaScript 中,当你将一个数字与一个字符串相加时,JavaScript 会自动将数字转换为字符串…...
Zookeeper面试整理-故障排查和调试
在使用 Zookeeper 的过程中,可能会遇到各种问题,如性能下降、节点失效、集群不可用等。为了保持系统的稳定性和高可用性,掌握 Zookeeper 的故障排查和调试方法至关重要。以下是一些常见的故障排查技巧和调试方法: 1. 日志分析 Zookeeper 的日志是最直接的调试和故障排查工具…...
PG数据库之索引详解
PostgreSQL数据库中的索引是一种用于提高查询性能的重要数据结构。通过索引,数据库可以快速定位到表中的特定行,而无需进行全表扫描。PostgreSQL支持多种索引类型,每种类型都有其特定的应用场景和性能特点。下面将详细介绍PostgreSQL中的索引…...

springboot项目测试环境构建出的依赖包比本地构建出的依赖包多
本地能够正常启动服务,但是测试环境启动报错。 上述druid是服务pom文件中之前引入的依赖包,后续由于某种原因而不需要该依赖包了,故已在pom文件中移除掉了该依赖包。 移除该依赖包之后,本地服务可正常构建和启动。 而测试环境却…...
温湿度传感器(学习笔记上)
在学习这个项目之前,我们先了解一下传感器,查阅资料可知,电路板上温湿度传感器型号是GXHTC3,是北京中科银河芯科技有限公司研发的一款芯片,采用I2C接口与ESP32-C3通信,I2C地址是0x70。 接下来我们要进行编写i2c驱动程序,首先我们复制esp-idf-v5.1.3\examples\get-started\samp…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门  / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...