ID Unit

ID Unit 是一款具备硬件安全密钥存储功能的加密协处理器,集成 ATECC608B 硬件加密芯片,并通过 I2C 通信接口工作。该芯片内置 10Kb EEPROM,用于存储密钥、证书、数据、消费记录和安全配置。

支持下列产品:

IDUnit

MicroPython 应用示例:

import os, sys, io
import M5
from M5 import *
from hardware import *
from unit import IDUnit


i2c0 = I2C(0, scl=Pin(1), sda=Pin(2), freq=100000)
id_0 = IDUnit(i2c0)
print(id_0.get_sha256_hash('Hello M5', 1))
print(id_0.get_generate_key(0, False))
print(id_0.randrange(500, 1000, 5))

UiFlow2 应用示例:

example.png

cores3_id_example.m5f2

class IDUnit

构造函数

class IDUnit(i2c)

创建一个 IDUnit 对象。

参数:

i2c (object) – I2C 对象。

UiFlow2:

init.png

方法

IDUnit.get_revision_number() int

返回 ATECC608B 的修订号。修订号是一个版本标识,用于指示硬件设计的特定迭代或更新,有助于区分同一芯片型号的不同版本。

  • 返回:int:十六进制数。

UiFlow2:

get_revision_number.png

IDUnit.get_serial_number() str

返回 ATECC 序列号。

9 字节序列号的结构如下:

前 4 字节:序列号的第一部分,包含固定模式以及设备特有部分。接下来的 2 字节:为保留字段,通常设为 0x00 或其他保留值。最后 3 字节:为序列号的最后一部分,对每个设备唯一。

  • 返回:string

UiFlow2:

get_serial_number.png

IDUnit.randint(min, max) int

返回随机数(4 字节)。通过其基于硬件的随机数发生器(RNG)生成真随机数,该 RNG 常用于需要高质量随机性的安全应用,例如密钥生成。

参数:
  • min (int) – 0 ~ 4294967295。

  • max (int) – 0 ~ 4294967295。

  • 返回:int:0 ~ 4294967295。

UiFlow2:

randint.png

IDUnit.random() float

返回范围在 [0.0 ~ 1.0] 之间的随机浮点数。

  • 返回:float:0.0 ~ 1.0。

UiFlow2:

random.png

IDUnit.randrange(min, max, step) int

第一种形式返回区间 (0, max) 内的随机整数。第二种形式返回区间 (min, max, step) 内、步长为 step 的随机整数。例如,调用 randrange(1, 10, 2) 将返回 1 到 9(含)之间的奇数。

参数:
  • min (int) – 0 ~ 4294967295。

  • max (int) – 0 ~ 4294967295。

  • step (int) – 0 ~ 4294967295。

  • 返回:int:0 ~ 4294967295。

UiFlow2:

randrange_max.png randrange.png

IDUnit.uniform(min, max) float

返回随机浮点数 N,当 min <= max 时满足 min <= N <= max,当 max < min 时满足 max <= N <= min。

参数:
  • 返回:float

UiFlow2:

uniform.png

IDUnit.get_generate_key(slot_num, private_key) bytearray

生成并返回私钥或公钥。私钥是在密码学中用于执行各种功能的机密数据;公钥是在公钥密码体系中与私钥配对使用的加密密钥。

参数:
  • slot_num (int) – 0 ~ 4。

  • private_key (bool) – True 或 False。

  • 返回:bytearray

UiFlow2:

get_generate_key.png

IDUnit.get_ecdsa_sign(slot, message) bytearray

返回 ECDSA 签名。ECDSA 广泛用于数字签名,以确保消息和文档的真实性和完整性。

参数:
  • slot (int) – 0 ~ 4。

  • messagestringlistbytearray

  • 返回:bytearray

UiFlow2:

get_ecdsa_sign.png

IDUnit.get_verify_ecdsa_sign(message, sign, key) bool

返回 ECDSA 签名验证状态。椭圆曲线数字签名算法(ECDSA)中的签名验证是检查给定数字签名是否有效、是否确由对应私钥持有者生成的过程,用于确保消息或数据的真实性。

参数:
  • messagestringlistbytearray

  • signbytearray

  • keybytearray

  • 返回:bool:True 或 False。

UiFlow2:

get_verify_ecdsa_sign.png

IDUnit.get_sha256_hash(message, format) str

获取并生成 SHA-256 哈希值。SHA-256(Secure Hash Algorithm 256-bit)是一种密码学哈希函数,无论输入数据大小如何,都会生成固定长度的 256 位(32 字节)哈希值。

参数:
  • messagestring

  • format – 0:十六进制,1:base64。

  • 返回:string

UiFlow2:

get_sha256_hash.png

IDUnit.set_certificate_signing_request(slot_num, private_key, country, state_prov, city, org, org_unit, file_path) None

证书签名请求(CSR)是一段在申请 SSL/TLS 证书时发送给证书颁发机构(CA)的编码文本,其中包含 CA 用于生成证书的信息,包括你的公钥以及关于你组织的一些信息。

参数:
  • slot_num (int) – 0 ~ 4。

  • private_key (bool) – True 或 False。

  • country (str) – 国家名称,例如:China。

  • state_prov (str) – 州或省名称。

  • city (str) – 城市名称。

  • org (str) – 组织或公司名称。

  • org_unit (str) – 组织或公司部门名称。

  • file_path (str) – 将文件存储到 flash 或 SD。

UiFlow2:

set_certificate_signing_request.png

IDUnit.aes_ecb_encrypt(position, data) bytearray

对数据执行 AES-ECB 模式加密。AES 密钥存储在芯片的槽 9 中。

参数:
  • position (int) – 加密操作的位置(左移 6 位后使用)。

  • data (bytearray) – 待加密数据,必须为 16 字节。

  • 返回:bytearray:返回 16 字节加密数据。

IDUnit.aes_ecb_decrypt(position, data) bytearray

对数据执行 AES-ECB 模式解密。AES 密钥存储在芯片的槽 9 中。

参数:
  • position (int) – 解密操作的位置(左移 6 位后使用)。

  • data (bytearray) – 待解密数据,必须为 16 字节。

  • 返回:bytearray:返回 16 字节解密数据。

IDUnit.aes_gfm_encrypt(data) bytearray

在 AES-GCM 模式下执行伽罗瓦域乘法(GFM)加密操作。

参数:

data (bytearray) – 待加密数据,必须为 16 字节。

  • 返回:bytearray:返回 16 字节加密数据。

IDUnit.ecdh_stored_key(slot_num, mode, external_public_key=None) bytearray

使用已存储密钥执行 ECDH 密钥交换操作。

参数:
  • slot_num (int) – 密钥槽编号。

  • mode (int) – ECDH 操作模式。

  • external_public_key (bytearray) – 外部公钥,必须为 64 字节。如果未提供,则会生成新的公钥。

  • 返回:bytearray:当模式为 0x0C 或 0x08 时,返回 32 字节共享密钥。