ConnectCore 8M Nano SOM集成了一个爱特梅尔公司ATECC508A提供以下功能的加密芯片:

  • 具有安全的基于硬件的密钥存储的密码加速器

  • 支持高速PKI (public key)算法

    • ECDSA: FIPS186-3椭圆曲线数字签名算法

    • FIPS SP800-56A椭圆曲线Diffie-Hellman算法

  • NIST标准P256椭圆曲线支撑

  • 带HMAC选项的SHA-256哈希算法

  • 内部高质量FIPS随机数生成器(RNG)

  • 用于密钥、证书和数据的10Kb EEPROM存储器

    • 存储多达16个键

    • 保证唯一的72位序列号

  • 两个高耐久单调计数器

  • 用于消费记录和一次性写入信息的多个选项

  • 入侵锁存外部篡改开关或上电芯片使能

加密芯片通过I2C1接口与i.MX8M Nano CPU相连。

这个硬件元素没有内核驱动程序,也没有设备树条目,因为它直接从用户空间进行管理。

用户空间的使用

你可以通过CryptoAuthLib,这是一个用C语言编写的软件库,支持ATSHA和ATECC系列的Atmel加密认证设备。

在你使用芯片的功能之前,你必须程序配置区域。配置区域是一组128字节的区域,用于为特定用例配置加密芯片。

Microchip提供NDA下配置区域的信息。

CryptoAuthLib库提供了一个名为cryptoauth_test.您可以使用此应用程序来编程并使用默认测试值锁定配置区域。

锁定配置区域为不可逆操作。如果你要用cryptoauth_test要对默认配置进行编程和锁定,您应该仅将加密芯片用于测试目的,而不是用于生产。

要使用默认测试值对配置区域进行编程和锁定,请运行cryptoauth_test应用程序,然后运行lockcfg命令:

#cryptoauth_test $ lockcfg与测试配置锁定,这只适用于单元测试…输入Y确认
联系Microchip获取有关根据您的用例写入配置区域的适当数据的信息。

示例应用程序

Digi Embedded Yocto包含了一个使用CryptoAuthLib库的例子:https://github.com/digi-embedded/dey-examples/tree/dey-3.2/maint/cryptochip-get-random.该应用程序从ATECC508A获得随机数,并将其输出到标准输出流:

#./cryptochip- gen_random | hexdump 0000000 6239 ddd4 b378 693f 14ed bfa1 447b cff1 0000010 275e fd14 e392 2ba c2ff ac93 0f5e cc0000020 16c1 e6b7 a458 c5ea c96f 59c977a 41c5 0000030 a656 ffa8 2076 6917 f18a e9ad 9e1c9fc 0000040 b677 aec3 a0a2 c7b6 c8f a8f d9fc 0000050 f75c 3b57 ee4 051b 3a5f 7bd9 523f 4544 0000060 cb1a 388c b655 e8ca d6eb e459 8a43 cd2f(…)

应用程序的输出与您从标准随机数生成器中读取的内容相匹配,例如/dev/random.例如,你也可以存储随机数据——检查它产生的速度——然后对它运行熵测试:

#./cryptochip-gen-random | pv -rate > data.bin [912 B/s]#ent data.bin熵= 7.998261比特每字节。最佳压缩将使这个291808字节文件的大小减少0%。291808个样本的卡方分布为706.41,随机超过该值的概率小于0.01%。数据字节的算术平均值为127.0582(127.5 =随机)。圆周率的蒙特卡罗值为3.149895135(误差0.26%)。序列相关系数为0.000944(完全不相关= 0.0)。
ent默认情况下,Digi Embedded Yocto不包含实用程序。你可以将随机数据文件传输到你的主机上并在那里进行分析。

构建应用程序

按照以下步骤编译使用加密芯片的应用程序:

  1. 包括cryptoauthlib标题:

    # include< cryptoauthlib.h >
  2. 使用I2C默认配置初始化库:

    atcab_init (&cfg_ateccx08a_i2c_default);
    cfg_ateccx08a_i2c_default变量由库提供,并且已经为ConnectCore 8M Nano配置。
  3. 将以下几行添加到Makefile中,以便应用程序与库链接:

    CFLAGS+ =$(Shell pkg-config——cflags cryptoauthlibLDLIBS+ =$(Shell pkg-config——libs cryptoauthlib

PKCS11接口

该库可以通过PKCS11 API与OpenSSL交互以交换加密令牌。例如,使用加密芯片的默认测试配置,您可以为上述配置中生成的私钥创建CSR。

#openssl req -engine pkcs11 -key "pkcs11:token=0123EE;object=device;type=private" -keyform engine -new -out new_device。csr -subj "/CN=新的csr示例"

创建CSR后,使用以下OpenSSL命令验证其签名是否正确:

#Openssl req -in new_device。csr验证语境-noout验证好的证书要求:数据:版本:1 (0 x0)主题:CN = NEW csr示例主题公钥信息:公钥算法:id-ecPublicKey公钥:(256位)酒吧:04:f7:0c: d4:阿瑟:51:14:02:83:6b: 1 b: 4 d: 6 b: 5 d: 88: cd: 77:7e: 66: c4:阿瑟:80:3a: 3 c: 3 f: 92:52:2b: 34:40: 5 c: 89:22: cb: 39:32: e3: b3: f8:2f: 15:2e: cd: f0:01: 57:0c:广告:7 c:是:9 c: 71: bb: ac: a4: cc: 5 d: 8 b: 45:德:d1:63: cc: 84:17 ASN1 OID: prime256v1 NIST曲线:p - 256属性:a0:00签名算法:ecdsa-with-SHA256 30:46:02:21:00: d4:3d: e2: df: 3 d: c3: b0: b5:9c: 58:24:36:17: 3 d: d9:76:52:1a: 51:79:59:费尔南多-阿隆索:90:广告:a5:28:20:97: e9:公元前:8 c: f1:02:21:00:87: ea: 7 e: 78:20: b5: c0: a2:5b: 6 d: 71:2c: 0 c:大卫·爱登堡:6 e:男朋友:00:e2:61: f2:7c: 82:10: d6:87: d8:06:0f: 10:3b: d8: d9

看到Github Cryptoauthlib wiki了解更多信息。Digi Embedded Yocto rootfs具有PKCS11特性,可以在加密芯片的默认测试配置中开箱即用。

有关此库使用的详细信息,请参阅Atmel应用说明8984 - Cryptoauthlib.该库已经集成了ConnectCore 8M Nano,因此您可以跳过Atmel应用程序说明的移植部分。