搜索
bottom↓
回复: 54

刚看到阿莫说的关于芯片解密的问题,发表一下加密的看法。

[复制链接]

出100入0汤圆

发表于 2009-4-17 13:00:04 | 显示全部楼层 |阅读模式
本帖只是本人个人看法,也是本人使用过的一点经验的总结,希望对大家有所帮助 。但更重要的是,希望能起到抛砖引玉效果,也希望各位高手不吝赐教。




其实,大概2年前这里有过一个讨论加密的帖子,很多的人提出了不少想法,我印象最深的是有个朋友说了一句话,
只要让解密的成本高于产品的开发成本即可。
其实他说的不全对,成本有很多不确定的因数,如果在加上一句话“保证以上成本要求的同时,只要让他解密后测试的时间大于新
  产品的开发时间即可”似乎就比较完美了。
  
  当然,指望芯片本身的加密,解密市场上或迟或早都会弄出解密的方案。但是怎么样加密最合理呢?有人提出每个芯片有个唯一的
  标识,但是,你还是要通过算法去验证,也就是你的算法本身就在程序里了,他同样可以经过跟踪,分析你读取的数据,破解出
  你的算法,何况还有一个问题,在底层实现复杂的算法,容易吗!大家都不容易啊,为一个算法搞那么麻烦,甚至要添加不少的
  成本)?
  也有人说,最好的加密方法是不加密。这话说得好,最好的加密方法应该是看起来没有加密,随便你怎么调试,在短时间内,只要你  
不发现我加密了,等你把程序用了以后,产品出来了,那你就惨了,谁叫你偷东西呢?这个时候,他就不得不不打自招,不得不来找你解决问题了。但是这样具体怎么做到呢,我只以我做的一个产品为例,说一下我的加密过程,当然,直接参考电路去设计这种方法,是没法预防的。

其实,我所谈的加密其实不叫加密,只是布个陷阱而已。并且所需要的知识也很简单,关键是了解你自己产品应用的场合以及具备的设置哪些陷阱的条件。

先说一下所谓的加密原则:第一,不能浪费太多的资源;第二算法简单(注意源程序保密,呵呵)。第三:创造两到3个源程序里就很难看懂的语句(非必要)。第四:除非特别必要,不能因为加密销毁数据或给解密者造成太大直接的损失,因为这样害人不利己(要从利己的角度去考虑)。


首先:介绍一下作为例子的产品,比如多功能表。 电路主要就是交流采样部分,显示部分,主控部分。其余基本是软件问题了,当然少不了数据存储。

这里,交流采样部分就具备上述的一个条件,就是每一个表,它的校表数据都是唯一的,也就是具备了唯一的ID。这个加密条件具备了,关键是怎么处理呢?很简单,把校表的程序分开,产品出去的时候,就不具备校表程序了,他要用你的程序,必须用同样功能的校表程序,事实上,这个工作量基本上就有开发一个表的工作量了。因为他还要分析你数据的位置以及对应的哪个参数。并且,你可以把这些数据分散,或用其他方法增加他这方面的工作量。

其次,显示部分也具备一个陷阱的条件,一般可以保留个版权声明。当然,为了防止被跟踪,版权声明最好在发现被抄袭后比较长的时间内触发。比如一年,到时候他卖出的产品都只显示你的LOGO,给他个电话和你联系,他不得不找你去帮忙了。但是,这个方法同样也可以被跟踪,毕竟计时或计次数,数据存储区域要变化的。他可以跟踪到。
当然了,我所说的只是增加他的工作量而已,这样的跟踪的预防,其实也很简单。可以延长他的跟踪时间,比如数据每小时更新一次,他就必须跟踪到一小时才能发现。但是有人说一个小时可能还比较容易发现。怎么办呢?1天,也很容易,总不能用一个月为单位吧。其实也很方便,就是初始的数据不要去动,读出的如果是初始数据,就不管,连续运行2个月后,添加一个数据,第二次运行25天后添加1个数据,然后每天或小时为单位添加一个数据,这样,他第一次跟踪到数据时间就大大延长了。

其实,光以上提到的两点,完全可以预防直接抄袭的行为了。再想改变方法在这两点上做做文章,基本上就不会因直接抄袭导致什么损失了。当然,也会有其他的布陷阱的方法。关键是针对你做的产品,做相应的处理措施。比如 ,他要是跟你卯上了,跟踪你的版权LOGO都有可能 ,在此不多说了,因为别人不会 那么傻到跟踪这个东西,但是有的产品需要注意这些地方。

出0入0汤圆

发表于 2009-4-17 13:14:17 | 显示全部楼层
学习了

出0入0汤圆

发表于 2009-4-17 13:29:07 | 显示全部楼层
【楼主位】 wqsjob

〉只要让他解密后测试的时间大于新产品的开发时间
测试时间肯定是短的,只能说测试通过后,还会有陷阱,会有意想不到的事情

〉不能因为加密销毁数据或给解密者造成太大直接的损失
这是为什么呢?

〉每一个表,它的校表数据都是唯一的,也就是具备了唯一的ID
你的表不进行周期检定和校准么?

〉版权声明最好在发现被抄袭后比较长的时间内触发
那么,如何判别已经被抄袭?

出100入0汤圆

 楼主| 发表于 2009-4-17 13:40:13 | 显示全部楼层
掉了好几次线,呵呵。
你提的问题很好 ,特别是校表数据问题上一针见血,因为我原先没考虑到,等产品快出去的时候才考虑到,差点出了问题。但是有方法解决的,自己想想,呵呵,我不能说 。

如何判断被抄袭,唯一ID的方法就可以。当然我同时用了另一个方法,因为是带实时时钟的,可以用来做注册限制(直接用时钟也可以,只是不太方便,也比较容易被分析出来)。我就不说破了,再想想吧。

出0入0汤圆

发表于 2009-4-17 13:44:35 | 显示全部楼层
支持楼主!
也许 AVR防破解专题讨论就此开始了
楼主分享的经验很宝贵

出0入0汤圆

发表于 2009-4-17 15:03:56 | 显示全部楼层
〉不能因为加密销毁数据或给解密者造成太大直接的损失
这是为什么呢?

我认为, 这个做法应该, 加密销毁数据或给解密者造成太大直接的损失, 很可能就意味着程序本来存在着对自己也危险的情况, 如果有什么设计不妥,出现某个意向不到的BUG, 自己的产品也触发了陷阱, 那就!@@#@$!#@$#%!$#%!#了....



〉每一个表,它的校表数据都是唯一的,也就是具备了唯一的ID
你的表不进行周期检定和校准么?

这个简单:在周期校准之前, 先判断数据的有效性, 如数据表中加入某些供识别的数据就行, 而且校准之前, 还可以检测一下原数据的误差, 如果误差不超过某个值, 表示校准数据是有效的, 可以进行周期校准, 不然就.....



〉版权声明最好在发现被抄袭后比较长的时间内触发
那么,如何判别已经被抄袭?

根本就不需要管它是否被抄袭, 例如: 开始的时候, 没有开机画面, 当使用次数超过多少多少之后, 或者固定在1k次, 2k次的时候, 出现带有版权的开机画面, 也可以在使用1年后出现某个画面, 呵呵, 这样已经够过瘾的, 自己的产品出现自己的LOGO, 很正常.

出0入0汤圆

发表于 2009-4-17 15:12:48 | 显示全部楼层
看到楼主的校验表, 想到一个点子: 如果找一个误差比较大的电容, 或者随便一个电容, 然后单片机根据电容的充放电时间, 和一个数据表进行运算, 这个表就正如楼主说的校验表, 那么一个电容就可以实现加密!

然后在给电容加点掩饰, 就算知道这个电容的作用, 也痛苦.....

出0入22汤圆

发表于 2009-4-17 15:28:47 | 显示全部楼层
受教了。

出0入0汤圆

发表于 2009-4-17 15:39:32 | 显示全部楼层
嗯,6楼的建议很不错啊!如果这样可行,那还有一种方法:使用单片机电路的噪声来制造随机数——要知道电路的噪声是完全随机的——如果把随机数用在程序的保护上或许有很大的帮助。

出100入0汤圆

 楼主| 发表于 2009-4-17 16:49:23 | 显示全部楼层
TO:5楼的朋友,
我的意思是给别人留条路,也是给自己留条路。大家都不容易呀。至少它能抄袭你的,说明他有他的路子,如果能成为朋友,不是很好的合作伙伴吗?虽然我现在能力不够,我觉得现在做技术的很多朋友都有些偏激,经历些事情之后就会发现,再坏的人,说不定会对你有所帮助!
6楼和8楼的朋友说的不是很容易实现的,当然可以用这个加密,但是不能作为唯一ID加密。唯一ID的意思是这个id重复的可能性极小,但是一旦有了一个ID,这个ID就不会变化了。电容和随机数虽然重复可能性不大,但是是不唯一的。

刚才忘了说了,这两位朋友提到的方法,一般和现在使用的硬件加密狗类似(加密狗的原理我也只是猜测,不对请指出哦)。

出0入0汤圆

发表于 2009-4-17 16:57:49 | 显示全部楼层
To 9楼
这个ID重复性不大,但不唯一。这是最容易害人的

可能让别人解码,解出来的在这个板子上能用,那个板子上不能用。
呵呵
这是产品量产时最郁闷的事情

出0入0汤圆

发表于 2009-4-17 18:07:12 | 显示全部楼层
MARK

出0入162汤圆

发表于 2009-4-17 18:34:18 | 显示全部楼层
我也用了楼主的办法

每台产品出厂时需要校正显示,程序里有个校准子程序。

出厂时,校准完了,这个子程序就自毁了。
在市场上的每一台产品每一片芯片都是不一样的,破了也没法用。



所有的程序加了彩蛋程序,万一破解者发财了,我还能勒索一把:)
用液晶的,多处加了公司的logo,公司名称。

开机就显示公司logo

公司名称的汉字点阵不是存储的,是一些绕弯计算得到的。
破解的人要改logo基本不可能。
跟踪?他要能跟踪就不用破解了

出0入162汤圆

发表于 2009-4-17 18:40:08 | 显示全部楼层
有些人提出里面加一个地雷,不是正版的就破坏。

这个很容易伤到自己的,弄得不好自己产品死皎皎了。

出1070入962汤圆

发表于 2009-4-17 18:43:23 | 显示全部楼层
对!不赞成在产品里边放逻辑炸_弹,不光自己危险,还得给人留点后路,与人方便于己方便。虽然是冤家,毕竟是同行。

出0入0汤圆

发表于 2009-4-17 19:02:08 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2009-4-17 19:43:20 | 显示全部楼层
我想应该考虑的更远一些:别人在获得了你的代码之后是反汇编呢还是直接用在自己的产品中?如果要反汇编的话那就真的只能在硬件上做文章了;但只是简单的复制的话……上面各位说的都不错!是不是这样?

出1070入962汤圆

发表于 2009-4-17 19:46:16 | 显示全部楼层
把代码隐藏的深一点,多些无用的代码,如果这样人家都能反汇编出来一一绕过,那他们的实力再开发一套也完全可以了,貌似没必要解密了。

出0入0汤圆

发表于 2009-4-17 19:57:07 | 显示全部楼层
楼主的招够绝啊。若干年后抄袭的产品显示别人的LOGO..到时候直接勒索一笔

出0入0汤圆

发表于 2009-4-17 20:11:26 | 显示全部楼层
受教

出0入0汤圆

发表于 2009-4-17 20:22:47 | 显示全部楼层
好文章。MK。

出0入162汤圆

发表于 2009-4-17 21:15:01 | 显示全部楼层
跟踪、反汇编是没办法的。

人家要是这么能干,咱也没办法。

不过他们既然这么能干,估计就自己编了

出0入0汤圆

发表于 2009-4-18 08:24:25 | 显示全部楼层
问一个比较菜的问题:何为 彩蛋程序

出0入0汤圆

发表于 2009-4-18 09:10:26 | 显示全部楼层
是不是出厂后的每个芯片的程序不一样,破解者读出来也没用了呢?

出100入0汤圆

 楼主| 发表于 2009-4-18 09:31:53 | 显示全部楼层
是不是出厂后的每个芯片的程序不一样,破解者读出来也没用了呢?

可以这样认为,但是你要保证每个不一样的程序只能在一个产品上运行。如果不能保证,那和一个程序有什么区别?

出0入0汤圆

发表于 2009-4-18 10:10:55 | 显示全部楼层
不错的想法,MARK

出0入0汤圆

发表于 2009-4-18 10:33:01 | 显示全部楼层
【6楼】的方法:电容不稳定,环境一变或时间一长,电容值易发生变化,到时候自己就把自己判成盗版了。

出0入0汤圆

发表于 2009-4-18 10:47:39 | 显示全部楼层
很好!~学习了@!~

出0入0汤圆

发表于 2009-4-18 11:30:24 | 显示全部楼层
很好,Mark先~

出0入162汤圆

发表于 2009-4-18 12:25:49 | 显示全部楼层
to 22楼

彩蛋就是软件里做些隐含功能,通过特定的操作就能显示版权。
发生版权纠纷时,原作者就可以凭借这个证明对方盗版。

word就有彩蛋程序,好像出来是个游戏界面

出0入0汤圆

发表于 2009-4-18 12:51:20 | 显示全部楼层
mark

出0入296汤圆

发表于 2009-4-18 14:49:24 | 显示全部楼层
加入彩蛋是一个不错的主意……

出100入0汤圆

 楼主| 发表于 2009-4-18 16:53:01 | 显示全部楼层
31楼】 gamethink

你说的很对 ,但是前面有朋友提出了,呵呵。出厂前后,校表的范围是不同的,当然,他可能生产的产品90%都在可以校表的范围内,但是10%的报废或者做相应的处理,也不是件容易的事。

出0入0汤圆

发表于 2009-4-18 17:55:09 | 显示全部楼层
不是很理解。

出0入0汤圆

发表于 2009-4-19 15:23:40 | 显示全部楼层
mark

出100入0汤圆

 楼主| 发表于 2009-4-19 22:17:26 | 显示全部楼层
【34楼】 gamethink  

你说的普通通信产品究竟有多普通?另外用于哪些场合,有些加密也没有用的。比如市场上一个485转232的,加密了有什么用呢?在别人不费吹灰之力的情况下就可以生产出的产品,跟稳市场的脚步,做好服务才是正务。有些本身也不具备加密条件,除非另加电路。

另外,一般通信产品都是有地址的,这个地址虽然不唯一,但是可以作为注册条件使用。要注意的是,地址只是个条件,也就是修改地址需要具备的其他条件来进行处理,而不是利用地址来加密。
这种方法在量产时动下脑子很好解决,但是应用的客户可能会觉得麻烦,同时保密工作也比较难做(客户那里保密是不可能的,连修改地址的工作都自己做,那也太累了),而且本身保密的效力不是很好。

出0入0汤圆

发表于 2009-4-19 22:37:33 | 显示全部楼层
上楼的方案可行

在通信上的设备 都有唯一的ID码 不可重复.只要不重复了,就可以了,解密的程序都是一个模式的,ID码如果是一样的,就不可能工作。如果他能得以找到放ID码的地址,可以生成不同ID的设备,这样复制的设备可以正常工作了? 不是的,他们还是不知加密的算法。
因为他们得到的不是原程序,而只是代码。

这种方法在量产时动下脑子很好解决,但是应用的客户可能会觉得麻烦---的确是。但是如果自己就是客户(自己用) 就好说多了。

出0入0汤圆

发表于 2009-4-19 22:38:32 | 显示全部楼层
我做的是用实时时钟计时,跟楼主的思路一样,至少几个月内都让你正常运行。
到时间会报故障,有声音,会反复报,用户比较烦
我的系统有多个器件,有不同的存储作为自身ID,不匹配的话就触发

当然这会有风险就是程序如果误进入自己的陷阱

这是双刃剑,好像没办法吧。只能靠把自己的程序做强壮。

出0入0汤圆

发表于 2009-4-19 23:42:17 | 显示全部楼层
一般都是复制hex吧,对付反汇编一个有效手段就是延时发作,破解者不可能等3-5天来测试,上电试用没问题就付钱走人的。
反汇编很少人做,而且费用很贵。

出0入0汤圆

发表于 2009-4-19 23:57:49 | 显示全部楼层
加密只是相对的,解密只是时间和代价的问题。

问题的关键不在如何能“把密加得死死的”;等你的产品有足够被解密的价值,并且被别人破密将会让你蒙受重大损失再说吧。

出0入0汤圆

发表于 2009-4-20 09:40:52 | 显示全部楼层
用电容的方法可行。

出0入0汤圆

发表于 2009-4-20 16:38:50 | 显示全部楼层
mark

出0入162汤圆

发表于 2009-4-20 17:36:00 | 显示全部楼层
TO 39

有时候不是程序健壮就能避免的。

搞不好盗版没打_倒,自己先自宫了。


在程序里设炸_弹是非常不妥和危险的。

出0入0汤圆

发表于 2009-4-23 22:04:30 | 显示全部楼层
刚学AVR没多久就碰上这个难题,不过在没有稳妥办法之前还是不加密,到时真得自宫了就太不划算了。

出0入0汤圆

发表于 2009-4-23 23:42:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-22 10:59:44 | 显示全部楼层

出0入0汤圆

发表于 2009-6-22 11:14:00 | 显示全部楼层
受益匪浅

出0入0汤圆

发表于 2009-6-24 09:39:32 | 显示全部楼层
看到以上的方法都很不错.不过不知道是否可以这样呢?结合其他的硬件?如加一块不可解密的CPLD来加密?

出0入0汤圆

发表于 2009-7-25 23:03:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-25 23:15:54 | 显示全部楼层
最好的加密方法还是MCU厂家在IC内直接嵌入唯一序列号,当然编程者不会笨到直接把序列号放到程序里吧?!这种加密方法对盗版有致命打击。
可能是大部分的大厂对这种麻烦事不屑一顾,作为平时最有版权嫌疑的STC竟然有这种产品,呵呵,看来,这一点,STC已经跑到很多大厂的前面去了。

出0入0汤圆

发表于 2010-12-21 23:52:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-22 12:13:37 | 显示全部楼层
学习了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 06:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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