打印

菜农力邀香主与STM32众多香友探讨ISP+IAP以及加密方法

[复制链接]
楼主: hotpower
手机看帖
扫描二维码
随时随地手机跟帖
41
回38楼:ST能保证目前的FLASH序列号不可改写!

使用特权

评论回复
42
hotpower|  楼主 | 2010-8-6 10:52 | 只看该作者
只要有唯一ID,就可能保证接收方的HEX数据流唯一即机内代码的唯一。
但不采取混淆措施(有人认为是加密),则两次拦截数据流不同位置处就可能是不同UID绑定的位置。
这种“无知者无畏”的加密方法是无任何抵御能力的。

使用特权

评论回复
43
McuPlayer| | 2010-8-6 11:39 | 只看该作者
动态加密,即2个key先后对代码流加密,一个key是指定的,另一个是一个随机数
通讯过程中动态插入改Key的命令,也就是说整个IAP过程,使用了N个Key(N也是随机的,Key是固定Key复合上动态Key)

我也在用这类东西,只是协议支持这些东西,但是功能上只是测试OK,给客户的DFU的时候并未使用。
暂时还没有加密的迫切性,因为目前客户买我的东西比自己开发成本低

使用特权

评论回复
44
mohanwei| | 2010-8-6 12:01 | 只看该作者
底端没有独立的硬件加密模块,想做到纯软件加密是不可能的。

使用特权

评论回复
45
hotpower|  楼主 | 2010-8-6 12:31 | 只看该作者
楼上说的在理但非全对。
远程ISP IAP即使无硬件支持也难以**。
它的软肋在IAP环节

使用特权

评论回复
46
mohanwei| | 2010-8-6 16:03 | 只看该作者
说到“难以**”,其实只要把bootloader代码搞得复杂一些难以理解一些就行了(理论上反汇编之后可以弄清楚代码的所有细节——但是,现在这个世上有几个人有这个能力和耐心去做这种事?)

对于STM32,可以这样干:
1-把bootloader0做得很小,放到Flash的开头,启动后加载到SRAM;
2-bootloader0向服务器请求bootloader1,bootloader1就不是那么小巧了……
3-……
思路就是函数放在一个巨大的虚拟空间里,需要的时候服务器才会把相关片断下载到SRAM里,然后执行;
理论上总可以**,但是足够把**人弄的痛不欲生……

还有一些非技术手段也能让**人头痛不已,例如电脑的开机密码,错三次你就得重启;银**密码,错三次你就得去找齐证件那号排队申请……依此类推,当你的服务器监测到异常的时候,就可以中止该设备的升级,打电话找客户了……

使用特权

评论回复
47
dadodo| | 2010-8-6 20:59 | 只看该作者
说到“难以**”,其实只要把bootloader代码搞得复杂一些难以理解一些就行了(理论上反汇编之后可以弄清楚代码的所有细节——但是,现在这个世上有几个人有这个能力和耐心去做这种事?)

对于STM32,可以这样干:
1-把bootloader0做得很小,放到Flash的开头,启动后加载到SRAM;
2-bootloader0向服务器请求bootloader1,bootloader1就不是那么小巧了……
3-……mohanwei 发表于 2010-8-6 16:03


电脑上的很多木马就是这么干的

使用特权

评论回复
48
mcuisp| | 2010-8-6 23:42 | 只看该作者
46楼的想**是我所申请的一个专利的内容之一。
只是我的专利还考虑的更多一些、、、、

使用特权

评论回复
49
mcuisp| | 2010-8-6 23:46 | 只看该作者
就运行加密算法来说,硬件与软件并没有本质区别。

但是密码学系统的另几个关键部件,倒是有的必须是硬件才理想。

使用特权

评论回复
50
mcuisp| | 2010-8-6 23:55 | 只看该作者
回38楼:ST能保证目前的FLASH序列号不可改写!
香水城 发表于 2010-8-6 08:48

呵呵,太棒了!!!
Define STM32芯片的Team里面肯定有从Secure产品线来的人。
STM32的很多做法非常为加密IAP做考虑。

使用特权

评论回复
51
hotpower|  楼主 | 2010-8-7 04:05 | 只看该作者
可能大家都想歪了,没如此复杂,俺给匠人描述的很细微。而且讲了互联卫士在嵌入式的应用细节。

香主竟然动用了虚拟机,估计香主也搞过破坏活动~~~

使用特权

评论回复
52
无名刀客| | 2010-8-7 07:31 | 只看该作者
大家都没歪,是老顽童胃口吊足。

使用特权

评论回复
53
hotpower|  楼主 | 2010-8-7 08:19 | 只看该作者
我的语言表达能力不强,而且全部是手机输入太辛苦。

俺没吊足胃口,俺是认真讨论。

使用特权

评论回复
54
香水城| | 2010-8-7 10:21 | 只看该作者
可能大家都想歪了,没如此复杂,俺给匠人描述的很细微。而且讲了互联卫士在嵌入式的应用细节。

香主竟然动用了虚拟机,估计香主也搞过破坏活动~~~ ...
hotpower 发表于 2010-8-7 04:05


嘿嘿,1986年俺就在UNIX系统下搞过破坏活动,不过现在改邪归正了,:lol

使用特权

评论回复
55
hotpower|  楼主 | 2010-8-7 10:55 | 只看该作者
哈哈~~~原来是同道中人~~~

俺昨晚将互联卫士的嵌入式部分给匠人聊到快4点~~~

使用特权

评论回复
56
hotpower|  楼主 | 2010-8-7 13:31 | 只看该作者
57
hotpower|  楼主 | 2010-8-8 08:41 | 只看该作者
用手机太慢。

本文的加密方法(注意还未牵扯到加密算法)实际就2个部分:
1.ISP 它可以理解为光盘的制作,不过每次制作的光盘都可能不一样
2.IAP 它可以理解为网站注册序列码,它因为有唯一ID、操作时间和波特率误差等柔和而成。

由于每台都有唯一码,网站有时2次制作方(第1此是软件工程师),那么接收方(老板或公司)
得到的光盘的内容(数据,例如数组等)就不可能相同,而且各台机子都不同。

被逆向的重点在IAP,ISP可以证明无法**。
但是问题可能出在IAP数据下载部分。即使采取扰码,被虚拟机攻克的几率很大。

虚拟机实际就是代码扫描器,即经过之处的数据叫“指令”,未经过或未激活的代码都叫“数据”。
故“程序”实际由“代码+数据”构成实体。

由于flash数据是不能二次改写的,但空是可以改写的,故一般UID只能对数据加密。而不应该对代码加密。

不对代码加密就抵抗不了虚拟机。

但函数指针就可以迷惑虚拟机!!!
当函数指针必须经过解码后才能运行时,解码算法将暴露无遗。

但是如果解码算法不可逆即公开密码体系时,**将会是有很到难度。

至于香主提出的这段IAP必须事先装载,俺认为不太必要,因为将IAP只有一个入口且为公用时
因为参数都是可变的,所以必须拦截通讯协议。

由于flash二次写入是有限制的,故**时对虚拟机必须逐条跟踪,至少要在IAP函数内设置断点。

所以即使**也是代价惨重的。

使用特权

评论回复
58
hotpower|  楼主 | 2010-8-11 05:53 | 只看该作者
讨论偏离了航向,俺先撤,做出来大家试用好了。

使用特权

评论回复
59
pkat| | 2010-8-11 08:45 | 只看该作者
我们这些小虾只有听课的份了

使用特权

评论回复
60
秋天落叶| | 2010-8-11 09:12 | 只看该作者
大侠们讨论问题,小虾得来捧场,也是很好的学习机会

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则