|
发表于 2022-8-26 23:21:02
|
显示全部楼层
eric 大大您好,我按照您给的建议购买了ATECC608a 并接入RP2040,使用arduino IDE搜索,找到了SparkFun_ATECCX08a_Arduino_Library,决定采用他写的库进行加密。
有一个疑惑想请教:
sparkfun给出了 一系列的example,我根据他的提示,首先对608a进行configue, 配置成功后,产生了一个公钥,打印出的信息如下:
Successful wakeUp(). I2C connections are good.
Serial Number: 01233654FB343E41EE
Rev Number: 00006002
Config Zone: NOT Locked
Data/OTP Zone: NOT Locked
Data Slot 0: NOT Locked
Configuration beginning.
Write Config: Success!
Lock Config: Success!
Key Creation: Success!
Lock Data-OTP: Success!
Lock Slot 0: Success!
Configuration done.
Serial Number: 01233654FB343E41EE
Rev Number: 00006002
Config Zone: Locked
Data/OTP Zone: Locked
Data Slot 0: Locked
This device's Public Key:
uint8_t publicKey[64] = {xxxxxx};(这里我给注释掉了,是608a产生的)
然后使用他的第二个example,自行填入一个32字节message,并对其进行产生64字节的signature,打印信息如下:
Successful wakeUp(). I2C connections are good.
Serial Number: 01233654FB343E41EE
Rev Number: 00006002
Config Zone: Locked
Data/OTP Zone: Locked
Data Slot 0: Locked
This device's Public Key:
uint8_t publicKey[64] = {xxxx};
uint8_t message[32] = {xxxx};
uint8_t signature[64] = {xxxx};
最后执行第三个example,是verify,该程序中要求将上一步(第二步)产生的 publicKey message signature三个数据 填写在该程序中(声明数组),在程序执行时,调用了校验方法:
// Let's verirfy!
if (atecc.verifySignature(message, signature, publicKey )) Serial1.println("Success! Signature Verified.");
else Serial1.println("Verification failure.");
打印结果为 verified,成功。 我也尝试了修改上述三个数组中的任意一个字节的一个比特,校验就会失败。
我的疑惑是:
比如我要生产5个板子,有5个608a和5个rp2040,按照上述步骤,每一个板子上电后,都要一次执行上述步骤,分别获取5组不同的publicKey message signature, 然后,在程序中也要定义5组publicKey message signature,在程序某处执行verify时,还要循环5次检验(因为有5组不同的秘钥信息)?
好像不是这么做吧?感觉很笨的方法啊?
此外,将publicKey message signature 三个数组在程序顶部直接定义为静态数组,是不是人家反编译时能找到呢?
|
|