22939|84

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

菜农友情为STM32设计一种通用加密方法之原理 [复制链接]



今天连续看了两篇关于加密方面的帖子,感觉自己应该友情奉献一回了~~~
设想一种加密办法,大家看看可行吗?
关于STM32F器件电子签名以及加密问题-请指点

今日方知STM32的UID为96位即12个字节,以前知道STM32内嵌CRC32.
网上在线CRC演算工具http://www.hotpower.org/HotAjax/HotPower_HotAjax.html
hotajax_crc32.gif
HotAjax(曾用名HotWC3)早已支持STM32的CRC32,点击crc32_stm32可选择之。
其权值=0x04C11DB7,初值=0xFFFFFFFF,出值=0x00000000

1.STM32F器件电子签名 发现没有规则 不是我们想像的 96位 从0 一直加到96位的
那么这个STM32F器件电子签名 不规则我觉得是不可能的,一个批次应该有规则的。
还请懂ST的指点。
2.有规则就没第二个问题了,没规则 如何加密呢? 比如我只想要某些ID能用这套程序。或是其它加密算法,如何应用?
道理很简单,它一定是ST内部连续的序列码(肯定小于96位)经过一定校验算法得到(固定)96位的不连续的唯一ID.此ID通过逆运算可证实为ST合法产品。
这个校验算法肯定不是单向散列函数,这和数字签名有很大区别。

本友情算法是利用96位ID和CRC32对芯片加密,这就要求有相应的ISP软件的支持或每个ID对应一个HEX文件。

1.利用96位ID和辅助ID 32位共128位经过CRC32运算后得到校验和为32位数0。
2.将此0“满世界”的相异或、或、加、减等不变的运算实现“无缝隙加密”。

要实现这两个基本原理,首先STM32应该具备IAP函数能够在ISP和IAP过程中都能读出此唯一ID.(这个需要版主解释)
ISP软件在读出ID后再向某4个字节即32位写入辅助ID,程序运行后即可实现2个基本原理。

例如UID=0x0123456789ABCDEF12345678
经过CRC32运算后,得到校验和=0x30F4B6E6
将此校验和作为辅助ID写入HEX文件的某个位置(每个Hex文件的不同处,即4个字节不同,若想更深层次的可多层次CRC即多组辅助ID)。
crc32_1.gif

运行时将动态读入的UID()函数+辅助ID共128位进行CRC32的运算,结果必为0
即CRC32(0x0123456789ABCDEF1234567830F4B6E6)=0x00000000
crc32_2.gif

假使UID和辅助ID不配对,即非法拷贝,那么CRC32的结果几乎不可能为0(CRC32有碰撞的威胁)

试想用一个非零的数到处异或等运算将会发生什么???天才知道其后果。
假若将其对GPIO的输出异或会发生些什么???切记加密绝不能用分支比较判断,应该用其运算结果到处乱搞。
而多层次的CRC加密就是要防止解密者恶意修改源程序中的关键CRC运算,防止将其结果强行设置为0。

这就是菜农友情奉献的加密原理。

同理可进行多层次的加密,试想有26层的CRC32运算的嵌套又会发生些什么???
这是俺92年成功破解美国福禄克加密狗后为美国人留下的感慨~~~

如果你能让反汇编止步在这26层CRC32嵌套之间,那麽他就别想把此UID对应的HEX克隆到其他机子上玩~~~

菜农通讯工具:

新浪网页版:http://t.sina.com.cn/hotpower
新浪手机版:http://t.sina.cn/hotpower

网 易微 博:http://t.163.com/hotpower
腾讯QQ:    1270688699

菜农邮箱:     HotPower@163.com
菜农导航: http://www.hotpage.net.cn/



此帖出自stm32/stm8论坛

最新回复

                                 到现在我都还没琢磨明白  详情 回复 发表于 2010-10-25 18:30
点赞 关注
 

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
再简单不过,发布这套软件之前,把这100个IC的ID保存在软件中,运行软件时检查一下即可,
这是有缝隙的~~~苍蝇不叮无缝的蛋~~~版主这招对付不了虚拟机的~~~
简单地将其变成直接跳转或全部搞成nop指令就拜拜了~~~
此帖出自stm32/stm8论坛
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
Hot大叔的脑细胞跑得太快,俺得慢慢追。。。。。。。。

先做个记号,
此帖出自stm32/stm8论坛
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 哈哈,版主应该算是一位合格的“密道中人”了…
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 MARK...
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 老兄这招不错,用运算结果乱搞,呵呵
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 热电早时给出一个用运算结果来指挥散转的例子,真让人头疼。
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

8
 
老兄这招不错,用运算结果乱搞,呵呵mcuisp 发表于 2010-8-20 09:46
晕!这是俺《天下无贼论》之根基,俺在21IC不知传播了多少次,就是没人理解…十分之郁闷…
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
热电早时给出一个用运算结果来指挥散转的例子,真让人头疼。john_light 发表于 2010-8-20 09:55
俺记得好像是51键盘函数指针的例程。
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 
晕!这是俺《天下无贼论》之根基,俺在21IC不知传播了多少次,就是没人理解…十分之郁闷…
俺看过,向大叔敬礼~~~
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

11
 
有加密必有解密,有矛必有盾也!
设计加密方法而不考虑解密方法则此方法休矣!
由于此方法的核心是结果为0,即全局变量X=0。
假使有函数X=UidCRC();
那么解密者只需将其改为:X=0;
即可破解此方法!
那么你乱搞的GPIO=X ^ GPIOVAL;就会灭亡!
故必须用另外程序保护X=GidCRC():和辅助ID的代码区和数据区的内容不被改写。
解说很难,实际编程是很容易的。
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

12
 


编写保护函数,对特定代码和数据段进行校验,根据运算结果修改调用该函数时入栈的返回地址。函数在未遭修改时RET不会返回调用处的下一条指令,被修改后更是不知所终了。

层层加壳的话会让自动反汇编器吐血。
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 
哈哈,终于有人理解了。
郁闷减轻之中…
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

14
 
呵呵 魔高一丈 道高一里 啊   
基本上是看懂了,思路相当不错,这个ID与副ID配合的想法很好
层层加壳的办法,有点像病毒码加壳原理一样,躲杀毒软件的扫描,用在这个上面了,新颖哈。

其实你的副ID 就和我的那个 注册码 是相同的 我是将注册码保存在EEPROM里面
你是将副ID一直写入FLASH 与正ID一起对应
是啊最终结果“应该用其运算结果到处乱搞。
而多层次的CRC加密就是要防止解密者恶意修改源程序中的关键CRC运算,防止将其结果强行设置为0”
后面我又想了一下,其实这样做 已经把解密程序放在Flash里面了,不然这块MCU 怎么会知道你的正ID与副ID是对应的呢。
不过做出变种加密算法来,在一定程度上,为破解者增加了不少难度。已经可以了。
又在反思真有必要做得这么复杂吗?---产品不同加密算法难易不同吧
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

15
 
呵呵,不管怎么弄,还是需要在烧录时由编程器根据芯片ID来修改hex。
加密的算法是放在编程器里面的。
所以具有斗智斗勇精神,需要搞这个加密的,找我来吧、、、
以下为广告内容:
EP868手持在线编程器,全力支持STM32 CM3处理器,支持SWD脱机编程、UART ISP脱机编程。
可提供增值服务,反拷贝、特殊序列化、、、、

当然,有的同志说,我把加密也整在代码里面,运行一下,来执行加密,行不?
当然可以,不过你可以运行,破解者也可以运行了,实在是为破解者留了个大大的方便之门。
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

16
 
写程序不模块化,模块间力争多出用CRC结构进行耦合,先让破解的人脑袋先给他涨起来
让他或者破解成功,或者被逼疯,哈哈哈
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

17
 
“新颖”一词对于俺已近20年了。
辅助ID(注册码)是根据唯一ID经过CRC32计算而来,它将最终存放在FLASH或EEPROM的某个地方。
假若解密者知道了此算法,那么它将做出注册机来,一切都会消亡…
有矛必有盾,有盾矛更强!
只要解密者能拿到HEX文件,就可认为他知道了加密和解密算法。
那么任何强大的算法都将抵挡不了解密者的攻击。

总之,解密和解密者的“技术水平”有很大的关系。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

18
 
呵呵,hot老兄是千年老妖了。
楼上帖子要顶,是总纲性的。极其精辟。
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

19
 
今天很忙,下班前才有时间来瞄一眼,现在还在消化中。。。。。。


关于这个问题:“首先STM32应该具备IAP函数能够在ISP和IAP过程中都能读出此唯一ID.(这个需要版主解释)”

答:STM32的唯一ID,可以在一个存储器区域读出,起始地址为0x1FFF F7E8,连续12个字节,任何程序都可以读取。
此帖出自stm32/stm8论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

20
 
                                 有个问题,STM32串口ISP有没有被破解的
此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【TI有奖直播报名中】
直播主题:MSPM0 系列 MCU 再添新成员:高性能与高性价比的优秀组合 MSPM0G351x / MSPM0L111x
直播时间:4月24日(周四)上午10:00
直播奖励:好礼等您拿!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved