加密芯片ATSHA204之使用

article/2025/10/2 5:04:26

目录

  • 看手册
  • Command Packets
  • Configuration Zone
  • Lock Command
  • Nonce Command
  • GenDig Command
  • Write Command
  • Read Command
  • MAC Command
  • DeriveKey Command
  • 相关参考

本文旨在记录 ATSHA204 的使用过程。ATSHA204 是一个安全认证和验证设备,可防止设备被抄袭,应该可以算一个加密芯片。

看手册

  了解一个芯片先看手册,先看硬件相关部分,此芯片有多种封装,3管脚芯片为单线通信,8引脚芯片为 I2C 通信,本文主要记录 I2C 通信。
在这里插入图片描述
在这里插入图片描述
  由于设备在使用时需要先行唤醒,需要使用 SDA 管脚发送超过 tWLO = 60us 的时间,也是下面截图提到的 I2C 的频率在低于133kHz时,发送0x00能够达到唤醒的效果。发送完成,需延时至少大于 tWHI = 2.5ms ,让 SDA 管脚为高,其后可进行正常通信。虽然本器件的 I2C 速率可达 1MHz,但为了方便唤醒操作,直接设置速率为 100kMz。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上简单的描述了发送的数据与回复的数据,例如设备唤醒后,会回复4字节:0x04,0x11,2字节CRC

Command Packets

设备唤醒后就可正常通信,使用 Command 0x03
在这里插入图片描述
此处为发送的命令包格式:
Command 的一般命令为 0x03
Count 为 Count 及其之后的所有数据的个数
在这里插入图片描述
回复的数据包
Count 为 回复的所有值,包括 Count
Data 为 回复的数据值,有 1字节,4字节,32字节
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上分别列出了 Command 包的 Opcode、Param1、Param2 值列表。

相关的命令操作码如上图 Table 8-6 Command Opcodes ,主要用到了以下几个,下面具体说说。

  • DeriveKey Command
  • GenDig Command
  • Lock Command
  • MAC Command
  • Nonce Command
  • Read Command
  • Write Command

Configuration Zone

要想使用芯片,需要先对 Configuration Zone 进行数据进行配置。
在这里插入图片描述
主要配置 Slot Configuration:
在这里插入图片描述
在这里插入图片描述
数据 Slot 总共有16个区域,每个区域可以存储 32 字节。

作为密钥存储,禁止读写,IsSecret(bit7)为1,EncryptRead(bit6)为0,WriteConfig(bit15-12)为never(x01x 或 10xx)

普通数据可以使用加密读写,也可以普通读写,本文主要说明加密读写。加密写 WriteConfig(Bit14)设置为1;加密读 IsSecret(bit7)为1,EncryptRead(bit6)为1

密钥区设置 0x80 0x80
加密读写设置 0xC0 0xF0 (此处的两个字节的低 4 位分别为加密读与写所使用的槽号,此处为 slot0)

Lock Command

写完配置后,需要对 Configuration Zone 中的 Lock Config 加锁
在这里插入图片描述
使用 Lock 命令 ,发送 0x03 0x07 0x17 0x80 0x00 0x00 + 2字节CRC

完成配置区域的锁定,就可以写入16个 slot 数据了
在这里插入图片描述
这里不加密些的话直接使用 0x12 命令即可,若要使用加密写,则需要先发送 Nonce 与 Gendig, 生成值保存于 TempKey 中

Nonce Command

在这里插入图片描述
在这里插入图片描述
Nonce 发送 0x03 0x1B 0x16 0x00 0x00 0x00 + 20个随机数 + 2字节CRC
此时芯片会返回 32 字节,按上图就行 SHA-256 计算,得出存储在芯片内部的 TempKey 值。

GenDig Command

下一步则是发送 GenDig ,GenDig 命令使用 SHA-256 将存储的值与 TempKey 的内容组合起来。
在这里插入图片描述
在这里插入图片描述
GenDig 发送 0x03 0x07 0x15 0x00 0x00 0x00 + 2字节CRC
初次加密写,此处使用 config 中的 slot0,芯片返回 0 则成功,通过上图红框计算出新的值,同时该值也会由芯片计算,存储 TempKey 中。

Write Command

在这里插入图片描述
加密发送之前,需要先计算出 Mac 值(这里的 Mac 与 Mac Command 是两码事),
TempKey 为 GenDig 后,通过 SHA-256 计算出的值,32字节
PlainTextData 为要发送的数据,32字节
Opcode :0x12
Param1 : 0xC2
Param2 : 所要写入数据的 Slot 值,如下所示:(32字节写入,为其中的 Block)
在这里插入图片描述
在这里插入图片描述上图中要发送的 Value 为 GenDig 后,通过 SHA-256 计算出的值 与 所要发送的值 PlainTextData 异或后计算出的值。

数据写完成后,还可对OTP写入,同上。

完成后,锁定数据区:
使用 Lock 命令 ,发送 0x03 0x07 0x17 0x81 0x00 0x00 + 2字节CRC

这时,完成了 config 与 data 区域的锁定,configuration 设置 0x80 0x80 的就无法读写,设置 0xCx 0xFx 则可根据设置加密读写的 Slot 来进行加密读写。

Read Command

在这里插入图片描述
在这里插入图片描述
例如:读取未加密 Data slot1 32字节值,直接发送 0x03 0x07 0x02 0x82 0x08 0x00 + 2字节CRC
则返回 0x23 + 32字节 slot1 存储值 + 2字节CRC
读取未加密 Data slot1 最后 4 字节值,直接发送 0x03 0x07 0x02 0x02 0x0F 0x00 + 2字节CRC
在这里插入图片描述
加密读时需要先运行GenDig命令,以生成用于解密的密钥。GenDig 使用上面已经提及,先发送 Nonce,然后 GenDig。
例如读取设置 0xCF 0xFF 配置的 Slot1,使用密钥 Slot15 数据,则发送 Nonce 命令,
后发送GenDig 命令 0x03 0x07 0x15 0x02 0x0F 0x00 + 2字节CRC
计算解密密钥时,前32字节为 Slot15 数据,其他没啥变化
在这里插入图片描述
在这里插入图片描述
而后发送读命令则会返回加密后的 32 字节数据,与上面 GenDig 后计算的解密密钥异或,则可得到 Slot1 中的值。

MAC Command

在这里插入图片描述

Mac 命令可返回一个 32字节的 SHA-256 digest,也就是一个在密钥区计算后得出的一个 32字节的 SHA-256 计算值,可与程序内部的已知密钥比较,正确则程序继续运行。可用于相对简单的防抄袭。

例如使用 Slot15 区域的密钥,发送 Mac 命令时也是先发送 Nonce 命令。
Mac 命令发送 0x03 0x07 0x08 0x41 0x0F 0x00 + 2字节CRC,
mode值 0x41,具体如下图,只使用 SN[2:3] 和 SN[4:7]
在这里插入图片描述
发送成功,则返回 32字节的 SHA-256 digest,
在这里插入图片描述
通过程序内部计算得出一个新的 SHA-256 digest 值,与返回值比较,相同则通过检查,程序可继续运行。相关 是否使用 OTP 与 SN,与发送 Mac 命令时的 Mode 值有关。

DeriveKey Command

在这里插入图片描述
该命令主要进行密钥的滚动或者创建新密钥,要使用它,需要在配置 Slot Configuration 时,将其中 Write Config 的 Bit 13 设置为1,同时还分为 Target 和 Parent key,Target key 主要指本身 Slot 值,Parent key 指配置 Slot Configuration 时 WriteKey 设置的 Slot 中的值
在这里插入图片描述
使用 DeriveKey 命令时,需要先发送 Nonce(设置mode 为 0x00),
在这里插入图片描述
则 DeriveKey 命令中的 TempKey.SourceFlag 为 0(Rand),SlotConfig[TargetKey].Bit15 若是设置,则需要计算 Mac 值,计算数据中的 ParentKey 是 SlotConfig[TargetKey].WriteKey 设置时的 Slot 中的值。
在这里插入图片描述
发送 DeriveKey 命令,则所在 Slot 的值发生变化,按上图使用 SHA-256 计算得出值即为所在 Slot 的更新值

对于 Slot 0~7( Slot 8~14 忽略 SingleUse 位) ,如果 SlotConfig [TargetKey] 的 Bit12 或 SlotConfig [TargetKey] 的 Bit15 被设置为1,且 SlotConfig[ParentKey].SingleUse 也设置为1,在 UseFlag[ParentKey] 为0x00 的情况下,DeriveKey 命令会返回错误。
在这里插入图片描述
UseFlag 值 0xFF 为 8 次使用,0x7F为 7次使用,以此类推。
在这里插入图片描述
当成功执行时,DeriveKey 总是将 Target key 的 UseFlag 重置为 0xFF,这是重置UseFlag位的唯一机制。

在这里插入图片描述

数据 Slot 15 比较特殊,其没有重置机制,在 配置中的 LastKeyUse 都是描述 Slot 15 的有限使用次数,16个 LastKeyUse, 共 128 次使用(可更改使用次数),在128次使用之后,密钥 Slot 15 将永久禁用。

在DeriveKey命令中,SingleUse 位用于 Parent key,但被 Target key 忽略。

相关参考

https://blog.csdn.net/a5882230/article/details/52214845
源码 :https://github.com/nsood/sha204


http://chatgpt.dhexx.cn/article/8WnOnPJr.shtml

相关文章

ATSHA204芯片手册阅读笔记

使用心得: (1)配置好IIC,访问芯片之前先唤醒。 (2)按个人需求配置好Config区域,配置好之后锁住Config。只有锁住了Config,才能去操作Data区。 (3)开始写数据区&#xff0…

JESD204标准概述

此篇是我在学习中做的归纳与总结,其中如果存在版权或知识错误请直接联系我,欢迎留言。 PS:本着知识共享的原则,此篇博客可以随意转载,但请标明出处! 目录 JESD204协议标准的分类和区别: JESD204A JESD20…

【JESD204系列】二、JESD204概述

在JESD204B 版本中,引入了确定性延时这一关键同步机制,并根据确定性延迟的不同实现方式划分了三个子类。通过实现确定性延迟,系统在两次上电之间,或者重新建立链路的时候,有了一个可以重复的延迟,为系统在处…

JESD204B学习之关键点问答

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/u014586651/article/details/86744263 JESD204B学习之关键点问答 1.概述 本文是用于记录JESD20…

jesd204B

调试ADI_JESD204B: 问题描述 卡在CGS阶段。 rx_204B 收到了连续的K码bcbcbcbc,但是SYNC一直不能拉高。 sdk的串口打印报错。initial frame synchronization:NO ? 原因分析: 可能收发的配置问题? sysref频率有问题? 复…

JESD204B 使用说明

JESD204B IP核作为接收端时,单独使用,作为发送端时,可以单独使用,也可以配合JESD204b phy使用。 JESD204B通常配合AD或DA使用,替代LVDS,提供更高的通讯速率,抗干扰能力更强,布线数量更少。 本…

http中的204和205

基本概念 http协议的200,301,302,304,404,503这些常用的状态码就不再介绍了。这里主要说一下不常见的204和205吧。 204代表响应报文中包含若干首部和一个状态行,但是没有实体的主体内容。主要用于在浏览器…

火狐firefox快速切换代理插件:Proxy Switcher

简介 l利用Firefox下的Proxy Switcher插件可以实现快速切换代理 安装 两种方式进入拓展和主题页面 方式一 寻找更多扩展的搜索栏输入Proxy Switcher 选择添加到Firefox 方式二 语言设置为中文的火狐浏览器直接打开地址:https://addons.mozilla.org/zh-CN/f…

关于proxy代理

之前一直有个问题,就是它到底是只代理那部分带有/api的,还是全都代理掉 答案是,只会代理api那部分,也就是你配置了代理的部分 发请求的时候,包括axios发完后,vue会检测你的所有请求,把符合你代理的那部分正则匹配到,然后代理,再发请求 这个地方是我搞错了,其实这个proxy好像…

AnyProxy代理

背景:当一个公司测试团队有多个人的时候,只需搭建一个AnyProxy服务,其它小伙伴浏览器上打开AnyProxy页面,手机上设置代理就能抓到http、https请求了。解决了部分人电脑不正经的小伙伴fiddler死活抓不到https请求的问题&#xff0c…

代理器Proxy

基本概念 一.代理器Proxy 1.用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”,即对编程语言进行编程。 2.Proxy可以理解为,在目标对象之前架设一层“拦截”,外界对该对象的访问&#xff…

代理(Proxy)

-代理模式(Proxy Pattern),23个经典模式中的一个,又称之为委托模式,就是为目标对象提供了一个代理,这个代理可以控制对目标对象的访问。代理对象可以添加审查和监控功能。 在java中的代理有静态代理以及动态…

Proxy-Server

一、摘录 二、背景 由于某些原因,在我们国内无法访问google、facebook等外国网站,如果你想使用外网来学习,聊天,那么就可以使用一些翻墙代理。 三、原理 1.要想翻墙,首先得知道墙是什么东西?墙是看不见摸…

Proxy(代理)服务器

代理服务器:---代理服务器必须有DNS地址。如果开启转发需要在客户端设置DNS地址 NAT:是直接与目标服务器通信的。也就是直接访问的baidu服务器,目标地址是baidu服务器的地址,所以必须要有DNS来解析主机名。 如果是通过代理客户端是…

代理服务器(Proxy)

目录 1.什么是代理服务器 2.代理服务器的作用 3.代理服务器的工作流程 4.安装代理服务器软件及配置文件解析(squid) 5.正向代理 6.修改数据存放位置 7.设置磁盘使用阈值 "代理"两字顾名思义就是以代理人的身份去帮助其他人取得所需要的…

ProxyHandler处理器(代理设置)

我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么美好,然而一杯茶的功夫可能就会出现错误,比如403 Forbidden,这时候打开网页一看,可能会看到“您的…

代理工具及使用技巧Proxy Hunter

转自:http://bbs.taisha.org/thread-385064-1-1.html 如需转载,请注明出处,谢谢。 由于国外大学图书馆购买的数据库大多数是用IP登陆方式,所以获取这些大学的代理就成为我们利用这些数据库的唯一方式,我介绍的方法是最…

【NEW】抓包工具-ProxyMan

背景 总会有一些移动端需要我们排查问题、调试的场景。之前一直用charles,或者通过在测试环境的debuger的依赖vconsole来看,好久之前下载了一个proxyman抓包工具,今天搞明白这玩意咋用了,真香哈哈哈哈,好用多了。 安…

Xshell 代理链接 ProxyJump

由于vscode 链接服务器插件太多太占资源了,公司不让用vscode,因此智能使用Xshell连服务器。 代理链接,因为有些服务器,只能内网链接,所以需要代理。 先贴一下配置文件 Host 11-xxx-remoteHostName xxxxxxxxxxPort 161…

Chrome配置Proxy代理

Chrome浏览器中配置代理 为什么要配置代理呢?比如你要使用SparkUI 1、将Proxy SwitchyOmega 工具添加到Chrome浏览器的扩展程序中 在chrome浏览器中搜索Proxy SwitchyOmega 选择chrome网上应用店,点进去后 点击后边按钮,将 Proxy Switchy…