您尚未登录。

楼主 #1 2021-05-17 19:07:41

xboot
会员
注册时间: 2019-10-15
已发帖子: 577
积分: 357

在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

当你辛辛苦苦开发了一个方案,正准备享受你的劳动果实时,突然一个晴天霹雳,发现被盗版了。。。 财富毫不留情的离你而去。只剩你在风中瑟瑟发抖。

未避免让您冻感冒了,我这里提供一个防盗版思路,抛转引玉,探讨探讨。

一般我们通常所说的加密,防盗版,主要是指两件事:
1,防复制,你的镜像一般都是烧录在flash里,如果flash对拷就实现盗版,那么就相当于你直接在大街上裸奔。
2,防逆向,虽然源码见不着,但二进制跟源码也没太大区别,仅仅可读性差了点,但真要去读,还是可以读懂的。别人读懂了,就什么事都可能发生,爆破,仿制,扣出核心算法,等等。

为解决这两件事,我们先来一件一件分析。
第一件事,防复制,避免flash对拷盗版,这个可以通过绑定机器唯一序列号,唯一序列号的来源,CPUID最优,其次时候FLASH ID或其他芯片的ID。具体怎么绑定,就是引入SHA256算法,下面讨论。
第二件事,防逆向,我们就需要对镜像进行加密了,在运行时解密,这里引入AES256对称加密算法。

光引入这两个算法,还是不够的,还有一个完整性检验,用于防爆破,这里引入ECSDA256签名校验算法。

先总结下,防盗版,就是需要,在保护镜像的完整性的同时,一机一加密镜像,只要能做到防逆向,防修改,硬件绑定,这三个特性,你的财富就不会离你而去的。

先说个前提,如果需要做到这三个特性,唯一可靠的实现是要求芯片支持加密引导,如果不支持,这三点是不可能完全做到的。

虽然完全做不到,但实现大部分保护,还是有可能的。

下面的实现,认为芯片是支持加密引导的,且芯片没办法复制,里面的key也是安全的。这是前提。

离线

楼主 #2 2021-05-17 19:08:48

xboot
会员
注册时间: 2019-10-15
已发帖子: 577
积分: 357

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

现在祭出方案,来一个核心头信息

struct zdesc_t {			/* Total 256 bytes */
	uint8_t magic[4];		/* ZB??, I for bind id, E for encrypt image */
	uint8_t key[32];		/* Aes256 encrypt key (hardcode or efuse suggested) */
	uint8_t sha256[32];		/* Sha256 hash */
	uint8_t signature[64];	/* Ecdsa256 signature of sha256 */
	uint8_t csize[4];		/* Compress size of image */
	uint8_t dsize[4];		/* Decompress size of image */
	uint8_t public[33];		/* Ecdsa256 public key (hardcode suggested) */
	uint8_t majoy;			/* Majoy version */
	uint8_t minior;			/* Minior version */
	uint8_t patch;			/* Patch version */
	uint8_t message[80];	/* Message additionally */
};

离线

楼主 #3 2021-05-17 19:09:26

xboot
会员
注册时间: 2019-10-15
已发帖子: 577
积分: 357

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

先说下,采用到的相关技术,LZ4压缩,SHA256算法,AES256算法,ECSDA256算法。

离线

楼主 #4 2021-05-17 19:18:39

xboot
会员
注册时间: 2019-10-15
已发帖子: 577
积分: 357

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

制作镜像简略流程:
LZ4压缩二进制镜像 ->AES256加密LZ4压缩镜像 -> SHA256计算摘要含头信息 -> ECSDA256对SHA256摘要进行签名 -> 更新头信息 -> AES256加密头信息

运行镜像流程
读取头信息 -> AES256解密头信息 -> 验证SHA256签名 -> 校验SHA256运算结果 -> AES256解密镜像 -> LZ4解压镜像

离线

楼主 #5 2021-05-17 19:37:44

xboot
会员
注册时间: 2019-10-15
已发帖子: 577
积分: 357

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

struct zdesc_t {			/* Total 256 bytes */
	uint8_t magic[4];		/* ZB??, I for bind id, E for encrypt image */
	uint8_t key[32];		/* Aes256 encrypt key (hardcode or efuse suggested) */
	uint8_t sha256[32];		/* Sha256 hash */
	uint8_t signature[64];	/* Ecdsa256 signature of sha256 */
	uint8_t csize[4];		/* Compress size of image */
	uint8_t dsize[4];		/* Decompress size of image */
	uint8_t public[33];		/* Ecdsa256 public key (hardcode suggested) */
	uint8_t majoy;			/* Majoy version */
	uint8_t minior;			/* Minior version */
	uint8_t patch;			/* Patch version */
	uint8_t message[80];	/* Message additionally */
};

这个里面有两个东西涉及到安全性:

最关键的是AES256的密钥,这个需要防泄漏,最好是芯片只带AES256硬件压缩,KEY是只写的,这种安全性最高,基本很难获取key,这里技巧,根密钥是只写的,然后镜像采用的密钥不是根密钥,而是由根密钥经过运算生成的次级密钥,避免根密钥直接暴露。如果没有硬件AES256,那么这个key就只能硬编码到代码里,当然硬编码到代码里,还是有可能被找出来的,可以适当的用其他算法保护下这个key,比如RC4这种算法来保护key,安全性最差的,就是key直接放在头里,这个一般不建议,知道文件结构后,很容易获取。

其次是ECDSA256签名的公钥,其实这个公开是没有任何问题的,关键的是如果AES KEY被破了后,怎么防止伪造签名的问题,破解者伪造签名,唯一的思路就是自己生成一对ECDSA256密钥对,替换默认的,要应对这个,就是公钥不能直接采用文件头里的公钥,而是直接硬编码到代码里,当然硬编码到代码里,也是有可能被修改的,毕竟最关键的AES KEY 已经被破了。伪造签名,仅仅难度增加而已不能测地杜绝。


总结,这里最关键的是AES256 KEY,如果这个KEY被泄漏了,整套系统就失效了,如果KEY没有泄漏,那么整套系统就完全安全的。

如何将AES key泄漏的风险降到最低呢。就是一台机器,一个次级AES KEY,当然每个芯片的根密钥都是一样的,仅仅次级密钥是由根密钥和硬件ID通过某种算法生成的。及时破解了这台机器的AES key,也是没有太大价值的。

一句话,根密钥要好好保护,这个被破了,就彻底被破了,其他破解,都是无法动到根基。

切记,千万不要在任何场合直接使用根密钥,降低泄漏的风险!!!!

离线

#6 2021-05-17 20:01:27

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 380
积分: 247.5
个人网站

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

最终还是都在解压到DRAM中运行,不管怎么启动,等启动完了,直接去DRAM中读。

这样好像无解,虽然可以在运行中做些运行环境检查,但这些检查指令是可以篡改的。
所以还是希望芯片本身能支持安全启动,且运行时,DRAM中的数据也是加密的。

离线

#7 2021-05-17 20:20:38

奔跑的孩子
会员
注册时间: 2021-01-28
已发帖子: 51
积分: 31.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

aozima 说:

最终还是都在解压到DRAM中运行,不管怎么启动,等启动完了,直接去DRAM中读。

这样好像无解,虽然可以在运行中做些运行环境检查,但这些检查指令是可以篡改的。
所以还是希望芯片本身能支持安全启动,且运行时,DRAM中的数据也是加密的。

好像是那么回事,新唐的NUC972带只写熔丝保护,但是只能保护flash里面的文件,最终还是解密到DRAM运行,如果有心着去读DRAM那相当于白干了。我想这也就是NUC972开机后那种IO默认不是JTAG的原因吧。

离线

楼主 #8 2021-05-17 20:42:48

xboot
会员
注册时间: 2019-10-15
已发帖子: 577
积分: 357

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

读取dram中数据可没那么容易,需要上大杀器

离线

楼主 #9 2021-05-17 20:51:39

xboot
会员
注册时间: 2019-10-15
已发帖子: 577
积分: 357

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

或者软件本身存在缓冲区溢出漏洞被攻击了,然后ram被dump了,即使ram被搞了,你也只能做到非完美破解,你无法固化rom,一没key,二没签名,复制无从谈起

离线

#10 2021-05-17 21:32:50

jiangchun9981
会员
注册时间: 2019-07-31
已发帖子: 157
积分: 142.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

外接一个4块钱的安全芯片,关键核心算法放里面, 

安全芯片是银行卡的等级,破解基本费用巨大,开盖什么的会自爆!

别说你的产品连几块钱的成本都不能承受,那就没有什么加密的价值了

还有最省钱的办法,用台系几毛钱的单片机跑关键算法,一般人不认识,破解的费用也不少

离线

#11 2021-05-17 21:39:53

拉轰的脚踏车
会员
注册时间: 2020-03-20
已发帖子: 283
积分: 217

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

jiangchun9981 说:

外接一个4块钱的安全芯片,关键核心算法放里面, 

安全芯片是银行卡的等级,破解基本费用巨大,开盖什么的会自爆!

别说你的产品连几块钱的成本都不能承受,那就没有什么加密的价值了

还有最省钱的办法,用台系几毛钱的单片机跑关键算法,一般人不认识,破解的费用也不少

抓包回放攻击怎么处理?

离线

#12 2021-05-18 08:28:24

VAN-D
会员
注册时间: 2020-02-22
已发帖子: 8
积分: 1

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

关注下,其实只要按照ARM的SecureBoot流程去处理和实现,安全也可以得到保障了。

离线

#13 2021-05-18 08:30:55

VAN-D
会员
注册时间: 2020-02-22
已发帖子: 8
积分: 1

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

Hi3516EV200╱Hi3516EV300╱Hi3518EV300╱Hi3516DV200  安全启动使用指南.pdf
里的内容写的挺详细的

离线

#14 2021-05-18 08:49:48

拉轰的脚踏车
会员
注册时间: 2020-03-20
已发帖子: 283
积分: 217

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

VAN-D 说:

Hi3516EV200╱Hi3516EV300╱Hi3518EV300╱Hi3516DV200  安全启动使用指南.pdf
里的内容写的挺详细的

大佬, 方便传一下这个文件吗?网上没搜到。

离线

#15 2021-05-18 08:54:49

jiangchun9981
会员
注册时间: 2019-07-31
已发帖子: 157
积分: 142.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

拉轰的脚踏车 说:
jiangchun9981 说:

外接一个4块钱的安全芯片,关键核心算法放里面, 

安全芯片是银行卡的等级,破解基本费用巨大,开盖什么的会自爆!

别说你的产品连几块钱的成本都不能承受,那就没有什么加密的价值了

还有最省钱的办法,用台系几毛钱的单片机跑关键算法,一般人不认识,破解的费用也不少

抓包回放攻击怎么处理?


关键算法放里面

不是那种 if (认证)  then 通过 这种啊

要是你的关键算法都能pass掉?  你这程序还有意思吗


还有安全芯片核心就是个51或者arm单片机,但是人家用了银行卡等级的加密技术,就算用芯片开盖这种都会"自爆"

最近编辑记录 jiangchun9981 (2021-05-18 08:58:24)

离线

#16 2021-05-18 09:00:19

jiangchun9981
会员
注册时间: 2019-07-31
已发帖子: 157
积分: 142.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

只要有KEY在里面,  没有人能逃脱芯片开盖,人家直接用电子显微镜扫描里面,这种技术现在在IC逆向里面已经很普通了


只要RAM里面有正确的代码,人家用冷却断电的方法,能有30分钟的时间去读取你里面的代码!

别再用软件的思维去思考人家专业的IC逆向的能力  !!!

软件只是防止直接COPY你的可能

最近编辑记录 jiangchun9981 (2021-05-18 09:04:33)

离线

#17 2021-05-18 10:53:26

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,085
积分: 1047.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

jiangchun9981 说:

只要有KEY在里面,  没有人能逃脱芯片开盖,人家直接用电子显微镜扫描里面,这种技术现在在IC逆向里面已经很普通了


只要RAM里面有正确的代码,人家用冷却断电的方法,能有30分钟的时间去读取你里面的代码!

别再用软件的思维去思考人家专业的IC逆向的能力  !!!

软件只是防止直接COPY你的可能

不需要100%无法破解,只需让破解成本提高到超过破解价值就可以了。防止那种无脑小白都能抄的情况就行。

谁家的防盗门能扛得住大型工具,挖掘机之类的?不需要,只要能挡住小偷让他觉得风险太大不划算即可

离线

#18 2021-05-18 11:33:20

hox
会员
注册时间: 2020-02-17
已发帖子: 38
积分: 26.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

确实,不可能完全避免破解,一般也只是想提高破解的成本,加大破解难度;起码让自己先把肉吃了

离线

#19 2021-06-30 00:57:56

grantho
会员
注册时间: 2020-03-21
已发帖子: 62
积分: 33.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

做技术真难,做得不好被人说,做得好了被人抄

离线

#20 2021-06-30 10:27:12

854619267
会员
注册时间: 2019-06-05
已发帖子: 16
积分: 15.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

该评论内容与本帖子无关,鼓励各位坑友积极发言讨论与帖子有关的内容!

离线

  • 不通过:与技术无关

#21 2021-07-04 10:52:40

995pc
会员
注册时间: 2020-05-30
已发帖子: 54
积分: 3

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

防盗版有必要,否则幸苦多月很可能成就了别人,产品还会被人搞烂。
虽然加密不能完全防止盗版,但能增加别人破解难度,增加破解的人力时间成本,就达成目的了。
感觉采用专用加密芯片的效果,还没有软硬件结合效果好。

离线

#22 2021-07-05 14:45:49

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 200
积分: 104

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

我们的产品加密是通过内部的flash实现的,(STM32).

离线

#23 2021-07-14 18:33:38

真的是很烦
会员
注册时间: 2018-10-08
已发帖子: 139
积分: 131.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

如果不是硬件支持secure boot, 终究是空中楼阁

离线

#24 2021-07-16 09:00:34

Manuel
会员
注册时间: 2020-07-28
已发帖子: 8
积分: 1.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

加密会不会对读写速度造成影响

离线

楼主 #25 2021-07-16 09:05:46

xboot
会员
注册时间: 2019-10-15
已发帖子: 577
积分: 357

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

对启动速度有影响,解密,验签,校验完整性,都是有代价的

离线

#26 2021-07-17 13:48:35

wonrowl
会员
注册时间: 2020-05-08
已发帖子: 80
积分: 76

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

拉轰的脚踏车 说:
VAN-D 说:

Hi3516EV200╱Hi3516EV300╱Hi3518EV300╱Hi3516DV200  安全启动使用指南.pdf
里的内容写的挺详细的

大佬, 方便传一下这个文件吗?网上没搜到。

我来给你吧,我这边刚好有 Hi3516EV200╱Hi3516EV300╱Hi3518EV300  安全启动使用指南.pdf

离线

#27 2021-09-08 23:32:02

e3r4y6p0
会员
注册时间: 2020-01-20
已发帖子: 7
积分: 10

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

xboot yyds!

离线

#28 2021-09-18 09:56:25

luciferseva
会员
注册时间: 2020-05-20
已发帖子: 48
积分: 16.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

读取dram中数据可没那么容易,需要上大杀器

离线

#29 2021-11-20 19:49:18

mengxp
会员
注册时间: 2021-10-07
已发帖子: 59
积分: 143

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

F1C100S 支持secureboot吗

离线

#30 2022-04-18 13:01:42

三哥
会员
注册时间: 2018-08-03
已发帖子: 63
积分: 95.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

其实我个人觉得还有个问题需要解决,就是每个芯片id不一样,我们不可能为每个芯片定制一个镜像。为解决这个问题我的思路是:
1、所有的板子下载同一个镜像,该镜像初次运行时,会根据芯片id改变镜像本身的某字段(该字段是ID号暗文,是一个加密过程)。
2、读取ID号,同时读取暗文并转换成明文ID号(解码过程),两者如果不相等表示盗版,如果相等会继续向下执行。
3、如果第二步是相等的,则抹掉镜像中,实现第一步加密的代码段。

第1和3步仅初次运行时执行一次


这样就实现了同一份原始镜像适应所有不同的芯片

离线

#31 2022-04-19 08:56:58

sjshe3326
会员
注册时间: 2020-10-19
已发帖子: 57
积分: 54.5

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

trust zone 的目的就是这样。

离线

#32 2022-04-19 10:23:13

mengxp
会员
注册时间: 2021-10-07
已发帖子: 59
积分: 143

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

我自己做了一份,用了全志的 secureboot,crypto engine
首先需要secureboot,来禁止未授权的secure world代码执行
flash上存储的 kernel initramfs 是用aesctr128加密的
bootloader执行过程会读取并使用efuse中的ssk对 kernel initramfs 镜像进行解密
这样就保证了 kernel initramfs 的保密性,这两个镜像是加密的,没有密钥无法解密

密钥是烧录在efuse上的,设置了readprotect writeprotect,无法被读出,只有crypto engine能够调用解密
而crypto engine只有secure world的代码有权限访问
而secure world代码是被代码签名的,没有签名不能在cpu上执行
不能在cpu上执行,就无法解密镜像。

最终实现的性能参考
QSPI nor flash
kernel+initramfs 10M
bootloader读取、解密、哈希 整个流程只需要 380毫秒。

离线

#33 2022-05-21 17:20:42

unturned3
会员
注册时间: 2020-07-01
已发帖子: 203
积分: 144

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

貌似只有全志 A、H系列的芯片有efuse

v3s这种好像没有

最近编辑记录 unturned3 (2022-05-21 17:20:57)

离线

#34 2022-06-03 21:50:05

nice
会员
注册时间: 2021-01-02
已发帖子: 14
积分: 23

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

@mengxp
感觉很利害,有没有详细的分享内容?

离线

#35 2022-06-21 16:16:00

zniot
会员
注册时间: 2019-12-30
已发帖子: 6
积分: 106

Re: 在全志芯片F1C100S/V3S/V831上实现裸机加密方案,防盗版进行时(不采用专用加密芯片)。

FIC200S 是怎么读取CPUID

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn