当前位置: 首页 > 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…...

sv标准研读第十九章-功能覆盖率

书接上回&#xff1a; sv标准研读第十八章-随机化和约束 第19章 功能覆盖率 19.1 总览 -定义cover group -定义cover point -定义cross cover -cover选项 -cover系统函数和系统方法 -cover计算 19.2 概述 覆盖率广义上分为两种&#xff1a;功能覆盖率和工具可以自动…...

图集短视频去水印云函数开发实践——小红书

前两篇主要讲解了抖音和快手的图集短视频对去水印解析的云函数开发实践&#xff0c;今天说一些小红书图集解析的云函数实践。 图集短视频去水印云函数开发实践——抖音 图集短视频去水印云函数开发实践——快手 其实都是大差不差的&#xff0c;首先获取到小红书的分享链接&…...

Uni-App-03

登录功能开发 实现POST提交 HTTP协议规定请求消息内容类型(Content-Type)有哪些&#xff1f;—— 只有四种 text/plain 没有编码的普通数据 application/x-www-form-urlencoded 编码后的普通数据 multipart/form-data 请求主体中包含文件上传域 application/json 请求主体是 J…...

解决 VScode 每次打开都是上次打开的文件问题

每次使用 VScode 打开总是上次的文件&#xff0c;可以简单设置即可&#xff0c;记录一下。 VScode Visual Studio Code&#xff08;简称VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言&#xff0c;并提供了代码高亮、智能代码补全、代码重构…...

redis高级篇之skiplist跳表 第164节答疑

跳表查询的空间复杂度分析 比起单纯的单链表&#xff0c;跳表需要存储多级索引&#xff0c;肯定要消耗更多的存储空间。那到底需要消耗多少额外的存储空间呢? 我们来分析一下跳表的空间复杂度。 第一步:首先原始链表长度为n&#xff0c; 第二步:两两取首&#xff0c;每层索引的…...

Java 线程池:深入理解与高效应用

在 Java 并发编程中&#xff0c;线程池是一种非常重要的技术。它可以有效地管理和复用线程&#xff0c;提高系统的性能和资源利用率。本文将深入探讨 Java 线程池的概念、原理、使用方法以及最佳实践&#xff0c;帮助读者更好地理解和应用线程池。 一、引言 在现代软件开发中&a…...

week08 zookeeper多种安装与pandas数据变换操作-new

课程1-hadoop-Zookeeper安装 Ububtu18.04安装Zookeeper3.7.1 环境与版本 这里采用的ubuntu18.04环境的基本配置为&#xff1a; hostname 为master 用户名为hadoop 静态IP为 192.168.100.3 网关为 192.168.100.2 防火墙已经关闭 /etc/hosts已经配置全版本下载地址&#xff1…...

js构造函数和原型对象,ES6中的class,四种继承方式

一、构造函数 1.构造函数是一种特殊的函数&#xff0c;主要用来初始化对象 2.使用场景 常见的{...}语法允许创建一个对象。可以通过构造函数来快速创建多个类似的对象。 const Peppa {name: 佩奇,age: 6,sex: 女}const George {name: 乔治,age: 3,sex: 男}const Mum {nam…...

电脑连接海康相机并在PictureBox和HWindowControl中分别显示。

展示结果&#xff1a; 下面附上界面中所有控件的Name&#xff0c;只需照着红字设置对应的控件Name即可 下面附上小编主界面的全部代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; …...

直播系统源码技术搭建部署流程及配置步骤

系统环境要求 PHP版本&#xff1a;5.6、7.3 Mysql版本&#xff1a;5.6&#xff0c;5.7需要关闭严格模式 Nginx&#xff1a;任何版本 Redis&#xff1a;需要给所有PHP版本安装Redis扩展&#xff0c;不需要设置Redis密码 最好使用面板安装&#xff1a;宝塔面板 - 简单好用的…...

网站开发包括网站的/seo专员是什么意思

题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶、门被吹飞了。 好在许多牛正在度假&#xff0c;所以牛棚没有住满。 牛棚一个紧挨着另一个被排成一行&#xff0c;牛就住在里面过夜。 有些牛棚里有牛&#xff0c;有些没有。 所有的牛棚有相同的宽度。 自门遗…...

建公司网站步骤/天津网络推广公司

往期精彩回顾前言 基于上一期的理论知识&#xff0c;我们本期跟大家分享一下如何通过Python和R语言完成Logistic回归分类器的构建。大家都知道&#xff0c;Logistic模型主要是用来解决二元分类问题&#xff0c;通过构建分类器&#xff0c;计算每一个样本为目标分类的概率&#…...

慈溪做网站公司/线下推广渠道有哪些方式

http://www.putty.ws/Putty-wanquanshiyong putty中文站 转载于:https://www.cnblogs.com/kex1n/p/5088531.html...

个人网站建设 免费/google seo怎么优化

在函数调用的执行代码中我们会看到这样一些强制转换&#xff1a;EX(function_state).function (zend_function *) op_array;或者&#xff1a;EG(active_op_array) (zend_op_array *) EX(function_state).function;这些不同结构间的强制转换是如何进行的呢&#xff1f;首先我们…...

深一网站建设/上海牛巨微seo优化

早晨起床时间&#xff1a;7:50 晚上休息时间&#xff1a;1:06 今日总结&#xff1a;今天继续在外场搭建实验环境。...

晋城网站制作/seo推广需要多少钱

E5□C(E5AC/E5EC/E5CC/E5DC)温控器如何进行AT自整定&#xff1f;第一步&#xff1a;更改控制方式为PID首先在操作菜单下按上键或下键设定目标值&#xff0c;然后按菜单键3秒以上进入初始设定菜单&#xff0c;按模式键找到CNTL选项并设为PID&#xff0c;即控制方式为PID方式&…...