[学习资料] 使用Python来操作Microchip安全芯片[转自FlyerInk]

[复制链接]
 楼主| 泡椒风爪 发表于 2020-12-31 15:08 | 显示全部楼层 |阅读模式
使用Python来操作Microchip安全芯片
Microchip提供业界优秀的安全方案,包括支持SHA256,ECC P256和AES128的完整算法支持,同时提供了基于C语言的器件支持库cryptoauthlib.

由于Python语言的通用性和便利性,Microchip同时提供了基于Python语言的CryptoAuthLib和相关的例程cryptoauthtools。

 楼主| 泡椒风爪 发表于 2020-12-31 15:09 | 显示全部楼层
CryptoAuthLib Python库可以做什么 ?
CryptoAuthLib库提供了访问cryptoauthlib大部分功能的模块,这些模块只是对C语言库cryptoauth中的API做了一层封装,以实现在Python中的调用。

 楼主| 泡椒风爪 发表于 2020-12-31 15:10 | 显示全部楼层
准备工作
软件部分
首先从github上下载最新的例程代码,地址如下:
https://github.com/MicrochipTech/cryptoauthtools
 楼主| 泡椒风爪 发表于 2020-12-31 15:11 | 显示全部楼层
安装Python需要的组件。
进入cryptoauthtools\python\examples目录中,运行以下命令:
  1.    pip install -r requirements.txt
 楼主| 泡椒风爪 发表于 2020-12-31 15:11 | 显示全部楼层
Python将自动安装cryptoauthlib和cryptography库(需要v2.3以上的版本)

另外,也可以手动安装cryptoauthlib和cryptography
  1. pip install cryptoauthlib
  2.     pip install cryptography
 楼主| 泡椒风爪 发表于 2020-12-31 15:12 | 显示全部楼层
硬件部分
支持的硬件如下:

AT88CK101
CryptoAuthentication Starter Kit (DM320109)
ATECC508A, ATECC608A, ATSHA204A device directly connected via I2C (Linux Only)
 楼主| 泡椒风爪 发表于 2020-12-31 15:12 | 显示全部楼层
支持的器件型号如下:

ATSHA204A
ATECC508A
ATECC608A
 楼主| 泡椒风爪 发表于 2020-12-31 15:13 | 显示全部楼层
下面的演示是在Windows 10 64bit,Python 3.6下运行的,使用的硬件是CryptoAuthentication Starter Kit。使用SAMD21实现USB HID通信,再转换为I2C接口控制安全芯片。

Tips: 需注意USB线应该插到Target USB上。
可以使用SAMD21的开发板烧录一个固件来实现的。这个固件可以在官网下载ATCRYPTOAUTHSSH-XSTK_v1.0.1.zip
 楼主| 泡椒风爪 发表于 2020-12-31 15:14 | 显示全部楼层
运行例程
这些例子旨在简单明了地说明基本概念。
要获得任何示例的帮助,您可以参考相关文档(例如:[info.py] 有一个[info.md]说明文档)或者通过命令行:
  1.    info.py -h
  2. usage: info.py [-h] [-i {i2c,hid}] [-d {ecc,sha}] [-p [PARAMS [PARAMS ...]]]
 楼主| 泡椒风爪 发表于 2020-12-31 15:14 | 显示全部楼层
示例列表:

[info.py]: 读器件信息. 详见[info.md]
[config.py]: 配置器件. 详见[config.md]
[ecdh.py]: 演示 ECDH 运算. 详见[ecdh.md]
[sign_verify.py]: 演示 ECDSA 签名和验证. 详见[sign_verify.md]
[read_write.py]: 演示从Slot中连续加密写和读. 详见[read_write.md]
 楼主| 泡椒风爪 发表于 2020-12-31 15:15 | 显示全部楼层
Info例程
这个示例从设备中提取标识信息和配置。

设备类型识别和掩码OTP修改
序列号
配置区数据
锁状态
 楼主| 泡椒风爪 发表于 2020-12-31 15:16 | 显示全部楼层
可选的参数:
  1. -h, --help            显示帮助信息
  2.   -i {i2c,hid}, --iface {i2c,hid}
  3.                         接口类型 (默认: hid)
  4.   -d {ecc,sha}, --device {ecc,sha}
  5.                         器件类型(默认: ecc)
  6.   -p [PARAMS [PARAMS ...]], --params [PARAMS [PARAMS ...]]
  7.                         接口参数如key=value
 楼主| 泡椒风爪 发表于 2020-12-31 15:16 | 显示全部楼层
使用DM320109和ATECC508A运行如下:
  1. $ python info.py

  2. Device Part:
  3.     ATECC508A

  4. Serial number:
  5.     01 23 6B 3F AC 10 2F 1B A5


  6. Configuration Zone:
  7.     01 23 6B 3F 00 00 50 00 AC 10 2F 1B A5 00 45 00
  8.     B0 00 55 00 8F 20 C4 44 87 20 87 20 8F 0F C4 36
  9.     9F 0F 82 20 0F 0F C4 44 0F 0F 0F 0F 0F 0F 0F 0F
  10.     0F 0F 0F 0F FF FF FF FF 00 00 00 00 FF FF FF FF
  11.     00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF
  12.     FF FF FF FF 00 00 00 00 FF FF 00 00 00 00 00 00
  13.     33 00 1C 00 13 00 13 00 7C 00 1C 00 3C 00 33 00
  14.     3C 00 3C 00 3C 00 30 00 3C 00 3C 00 3C 00 30 00


  15. Check Device Locks
  16.     Config Zone is locked
  17.     Data Zone is locked

  18. Loading Public key

  19. -----BEGIN PUBLIC KEY-----
  20. MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5O6vcWT7anlt+HFc6AAkF+rOBtly
  21. uOXuM78qcnXtIA+nxvPzSWWiF0yruZK/4ANK8q2C21dICxDwxo7YyYpc4w==
  22. -----END PUBLIC KEY-----

  23. Done
 楼主| 泡椒风爪 发表于 2020-12-31 15:17 | 显示全部楼层
Config例程
在使用加密身份验证设备之前,必须为器件设置好适当的配置。
配置可能非常复杂,需要仔细创建和分析配置交互可能带来的安全漏洞。
开发新配置时,请同时查阅数据表和联系FAE。

这个脚本将编写一个通用配置程序,允许对各种示例进行评估。
在生产设备使用之前,应该修改这个配置。
为了让实验人员更容易使用配置,下面列出了一些设置项。
 楼主| 泡椒风爪 发表于 2020-12-31 15:17 | 显示全部楼层
ATECC508A配置
Slot 4 & 6允许非加密写入,这意味着保护密钥可以在不需要很强安全性的前提下可以被改写。
  1. # Example configuration for ATECC508A minus the first 16 bytes which are fixed by the factory
  2. _atecc508_config = bytearray.fromhex(
  3.     'B0 00 55 00 8F 20 C4 44 87 20 87 20 8F 0F C4 36'
  4.     '9F 0F 82 20 0F 0F C4 44 0F 0F 0F 0F 0F 0F 0F 0F'
  5.     '0F 0F 0F 0F FF FF FF FF 00 00 00 00 FF FF FF FF'
  6.     '00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF'
  7.     'FF FF FF FF 00 00 55 55 FF FF 00 00 00 00 00 00'
  8.     '33 00 1C 00 13 00 13 00 7C 00 1C 00 3C 00 33 00'
  9.     '3C 00 3C 00 3C 00 30 00 3C 00 3C 00 3C 00 30 00')
 楼主| 泡椒风爪 发表于 2020-12-31 15:18 | 显示全部楼层
ATECC608A配置:
同ATECC508A
Slot 4是额外增加的,用作从tempkey中读取ECDH前导密钥和KDF因子的保护密钥
  1. # Example configuration for ATECC608A minus the first 16 bytes which are fixed by the factory
  2. _atecc608_config = bytearray.fromhex(
  3.     'B0 00 55 01 8F 20 C4 44  87 20 87 20 8F 0F C4 36'
  4.     '9F 0F 82 20 0F 0F C4 44  0F 0F 0F 0F 0F 0F 0F 0F'
  5.     '0F 0F 0F 0F FF FF FF FF  00 00 00 00 FF FF FF FF'
  6.     '00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00'
  7.     '00 00 00 00 00 00 55 55  FF FF 06 40 00 00 00 00'
  8.     '33 00 1C 00 13 00 13 00  7C 00 1C 00 3C 00 33 00'
  9.     '3C 00 3C 00 3C 00 30 00  3C 00 3C 00 3C 00 30 00')
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

307

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部