硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3194|回复: 10
收起左侧

树莓派RP2040代码能够加密吗?

[复制链接]

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2022-7-28 23:58:36 | 显示全部楼层 |阅读模式
rp2040 代码可以加密吗?程序直接放在外部Flash里面,是不是可以直接拷走?最近想用rp2040做个项目,正在评估中。


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106649
QQ
发表于 2022-7-29 09:50:56 | 显示全部楼层
可以啊,这就跟H750,iMX RT系列一样,他们怎么加密,树莓派就怎么加密。

简单点,程序的关键代码做个AES加密即可,上电后加载到RAM刷。

好点,省事点,参考树莓派的2040板子,整个外置硬件加密芯片,这个我们国产也有很多。
https://store.arduino.cc/products/arduino-nano-rp2040-connect
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2022-8-9 19:00:51 来自手机 | 显示全部楼层
eric2013 发表于 2022-7-29 09:50
可以啊,这就跟H750,iMX RT系列一样,他们怎么加密,树莓派就怎么加密。

简单点,程序的关键代码做个AE ...

750是有一块小的片内flash的,因此可以用那段做一些加密,而rp2040整个程序都在片外flash,别人是可以随时从片内flash拷贝的呀,这怎么加密呢?即使spiflash有唯一id之类可用,那么可以加密,但架不住别人拿你的代码反汇编,然后剔除代码中跟唯一id绑定的那部分呀。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106649
QQ
发表于 2022-8-10 11:12:43 | 显示全部楼层
liandao 发表于 2022-8-9 19:00
750是有一块小的片内flash的,因此可以用那段做一些加密,而rp2040整个程序都在片外flash,别人是可以随 ...

没有内部Flash,但是有内部RAM啊,可以加密关键代码,运行时加载到RAM刷的。
回复

使用道具 举报

9

主题

46

回帖

73

积分

初级会员

积分
73
发表于 2022-8-21 11:49:53 | 显示全部楼层
本帖最后由 orta1986 于 2022-8-21 12:56 编辑

eric大大你好,我最近也有RP2040加密需求,看到你说的用AES芯片,想问可否有推荐?另外具体的加密过程可以简单说一下吗?谢谢!!!!!
目前没辙,只只能是RP2040+FPGA的方式,一部分功能由FPGA实现。 起始一片2040就够了,为了加密,这样做系统有点啰嗦
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106649
QQ
发表于 2022-8-22 01:18:00 | 显示全部楼层
orta1986 发表于 2022-8-21 11:49
eric大大你好,我最近也有RP2040加密需求,看到你说的用AES芯片,想问可否有推荐?另外具体的加密过程可以 ...

ATECC608A
回复

使用道具 举报

9

主题

46

回帖

73

积分

初级会员

积分
73
发表于 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 三个数组在程序顶部直接定义为静态数组,是不是人家反编译时能找到呢?


回复

使用道具 举报

9

主题

46

回帖

73

积分

初级会员

积分
73
发表于 2022-8-27 02:04:54 | 显示全部楼层
eric大大,后来我大概明白了,核心的数据应该是publickey,这个publickey是与608A芯片捆绑的,是固定的。
在程序运行过程中,随机某个时刻,产生一个随机数组成的message,通过pubkey和message计算得到signature。
然后将 publickey  message signature 带入芯片,芯片计算反馈是否是正确的。
而在下一个某时刻,再更改message内容,重复上述流程再验证,达到一直用不同message来验证是否合法。

但是这样的话,比如生产5套板子,那RP2040程序中就要存放 5组 publickey,是固定的(全局声明数组存放),想问这样存放publickey是否有风险?
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2022-8-27 06:48:18 | 显示全部楼层
我认为即使用加密芯片,别人也能将你在spiflash里烧写文件拿出来反汇编,单步调试,找出加密对比部分,将你的加密部分跳过去。

除非你的代码足够复杂难于定位(比如加密对比部分出现很多处),否则安全问题仍是没有解决,所有做的工作都只是加强而已。而加强的复杂度,也仅仅是带给破解者一些复杂度,延缓破解时间而已。

这跟h750有本质的不同,h750至少有一小块片内flash,那么加密算法可以安全的放在那里,其余代码可以经由这段加密代码解密到sram里运行。

当然最理想的形态应该是:芯片支持对spiflash边解密边运行,貌似NXP的RT系列是这么干的,ST在H750之后出的类似片子也是这么改进的。
回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2022-9-15 22:43:27 | 显示全部楼层
orta1986 发表于 2022-8-27 02:04
eric大大,后来我大概明白了,核心的数据应该是publickey,这个publickey是与608A芯片捆绑的,是固定的。
...

这种情况,一般是借助烧录器来烧录不同的publickey。
回复

使用道具 举报

9

主题

19

回帖

46

积分

新手上路

积分
46
发表于 2023-6-15 15:45:48 | 显示全部楼层
请问楼主解决了吗。最近也有rp2040加密需求
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 23:20 , Processed in 0.193107 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表