您尚未登录。

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

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

在全志芯片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
已发帖子: 404
积分: 278

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
已发帖子: 404
积分: 278

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

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

离线

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

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

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
已发帖子: 404
积分: 278

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
已发帖子: 290
积分: 178.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
已发帖子: 404
积分: 278

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

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

离线

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

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

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

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

离线

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

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

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

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

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

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

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

离线

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

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

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

jiangchun9981 说:

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

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

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

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

抓包回放攻击怎么处理?

离线

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

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

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

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

离线

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

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

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

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

离线

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

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

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

VAN-D 说:

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

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

离线

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

jiangchun9981
会员
注册时间: 2019-07-31
已发帖子: 148
积分: 133.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
已发帖子: 148
积分: 133.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,037
积分: 1004.5

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

jiangchun9981 说:

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


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

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

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

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

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

离线

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

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

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

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

离线

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

grantho
会员
注册时间: 2020-03-21
已发帖子: 50
积分: 15.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
已发帖子: 47
积分: 6

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

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

离线

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

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

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

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

离线

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

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

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

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

离线

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

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

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

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

离线

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

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

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
已发帖子: 5
积分: 3

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

xboot yyds!

离线

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

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

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

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

离线

页脚

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

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