打印

关于STM32F器件电子签名以及加密问题-请指点

[复制链接]
楼主: eydj2008
手机看帖
扫描二维码
随时随地手机跟帖
21
hotpower| | 2010-8-20 09:20 | 只看该作者 回帖奖励 |倒序浏览
菜农这次的计划就是将满足ISP IAP UID( CRC32)的NXP和STM32全面实现远程控制及加密下载。
其中未发布的电路里就有I2C的EEPROM芯片。
同时也包括远程加密方法和防止恶意改写代码这部分内容。
因为最近在做CortexM0菜鸟,这些有关加密的问题只能推后再议。

使用特权

评论回复
22
hotpower| | 2010-8-20 10:39 | 只看该作者
哈哈,即使用纸糊一个“盾”,也得动动脑筋才行啊,比如我在4楼糊的那个,被Hot大叔用NOP牌的矛就戳穿了  香水城 发表于 2010-8-20 08:47
必须采用2级至上的防止代码被改写保护,否则简单的NOP即可搞定。

使用特权

评论回复
23
hotpower| | 2010-8-20 22:01 | 只看该作者
哈哈~~~有机会俺再写些如何对付虚拟机和注册机是正版软件之墓地的水文~~~

使用特权

评论回复
24
videre| | 2010-8-20 22:07 | 只看该作者
要想不用自己挨个去读,就做个bootloader
用bootloader读这个ID,用加密算法算出来个数写到内存里一个位置,
应用程序启动后,同样用这个算法算出结果和bootloader的结果去比较,不符合就不运行
bootloader读保护+写保护
这个加密算法你自己掌握就行

使用特权

评论回复
25
eydj2008|  楼主 | 2010-8-22 09:11 | 只看该作者
真是仁者见仁,智者见智。
24楼的方法 很好,也是可行的哈,又给我们提供了一种加密方法,这种方法便于生产了。
不用每个IC去读ID,然后写入
不过还真没应用过bootloader。。。再学习一下
谢谢各位了

使用特权

评论回复
26
hotpower| | 2010-8-22 12:21 | 只看该作者
建议不要用24楼的将结果比较之言论…
解密菜鸟的第一课就是如何对付此类加密方法。

使用特权

评论回复
27
香水城| | 2010-8-22 13:22 | 只看该作者
要想不用自己挨个去读,就做个bootloader
用bootloader读这个ID,用加密算法算出来个数写到内存里一个位置,
应用程序启动后,同样用这个算法算出结果和bootloader的结果去比较,不符合就不运行
bootloader读保护+写 ...
videre 发表于 2010-8-20 22:07


不必自己写Bootloader,使用STM32内嵌的Bootloader就可以读出器件电子签名。

使用特权

评论回复
28
平凡| | 2010-8-24 13:43 | 只看该作者
看各位高手讨论,不免心动,借机询问:
以下是stm32 usb库中的一段程序:
/* Function Name  : Get_SerialNum.
* Description    : Create the serial number string descriptor.
* Input          : None.
* Output         : None.
* Return         : None.
*/
void Get_SerialNum(void)
{
  uint32_t Device_Serial0, Device_Serial1, Device_Serial2;

  Device_Serial0 = *(__IO uint32_t*)(0x1FFFF7E8);        //器件电子签名的首地址
  Device_Serial1 = *(__IO uint32_t*)(0x1FFFF7EC);
  Device_Serial2 = *(__IO uint32_t*)(0x1FFFF7F0);

  Device_Serial0 += Device_Serial2;

  if (Device_Serial0 != 0)
//这是否意味着电子签名还是有一定规律的?或都只是我乱猜?或都是写这个例子的人有点偷懒?

  {
    IntToUnicode (Device_Serial0, &Joystick_StringSerial[2] , 8);
    IntToUnicode (Device_Serial1, &Joystick_StringSerial[18], 4);
  }
}

使用特权

评论回复
29
香水城| | 2010-8-24 13:57 | 只看该作者
不明白,你凭什么说电子签名是有一定规律的?凭什么说写这个例子的人有点偷懒?

if (Device_Serial0 != 0)  这句话能说明什么?为什么?

使用特权

评论回复
30
平凡| | 2010-8-24 14:09 | 只看该作者
哦,我的理解是:
if (Device_Serial0 != 0)  条件成立则执行下面的行,否则不执行。
那么编程者必须要能肯定
Device_Serial0 += Device_Serial2;
运算以后的结果是Device_Serial0不等于0。

未知我的理解是否正确?

使用特权

评论回复
31
平凡| | 2010-8-24 14:10 | 只看该作者
另:谢香主这么快就回复 ^_^

使用特权

评论回复
32
香水城| | 2010-8-24 14:13 | 只看该作者
恐怕你不懂USB,所以也不知道这2行在做什么:
  IntToUnicode (Device_Serial0, &Joystick_StringSerial[2] , 8);
    IntToUnicode (Device_Serial1, &Joystick_StringSerial[18], 4);

这2行是要设置这个设备的USB序列号,而USB协议规定序列号不能是0,所以他要检查Device_Serial0是否为0;根本与电子签名是否有规律,或作者是否偷懒无关!

使用特权

评论回复
33
平凡| | 2010-8-24 16:57 | 只看该作者
谢谢指点,的确不懂...
:$

使用特权

评论回复
34
香水城| | 2010-8-24 17:29 | 只看该作者
谢谢指点,的确不懂...
:$
平凡 发表于 2010-8-24 16:57


哈哈,不懂就不要乱猜,这样容易走进死胡同,:lol

使用特权

评论回复
35
hotpower| | 2010-8-24 19:30 | 只看该作者
军事秘密,只有通过至少三个id才能找到校验算法。
很难…但并非不可能。

使用特权

评论回复
36
eydj2008|  楼主 | 2010-8-24 20:25 | 只看该作者
呵呵  HOT大叔  说得是 bootloader的做法 我也发现不 可行,因为这样很容易被破
要么每个bootloader 不一样! 还是麻烦的,我现在还是打算采用副ID的形式 来做 加密性可以达到我的要求了,试验程序 就塞BUG罢  没人能搞定 要是能搞定了 就相当于看懂代码,重写代码了,呵呵

使用特权

评论回复
37
hotpower| | 2010-8-24 20:38 | 只看该作者
用辅助id的方法已足够对付几个小毛贼的。

使用特权

评论回复
38
hotpower| | 2010-8-24 20:38 | 只看该作者
用辅助id的方法已足够对付几个小毛贼的。

使用特权

评论回复
39
lxyppc| | 2010-8-24 20:47 | 只看该作者
恐怕你不懂USB,所以也不知道这2行在做什么:
  IntToUnicode (Device_Serial0, &Joystick_StringSerial[2] , 8);
    IntToUnicode (Device_Serial1, &Joystick_StringSerial[18], 4);

这2行是要设置这个设备的USB ...
香水城 发表于 2010-8-24 14:13

呵呵,以前的库里可没这个判断,害得我电脑蓝屏好几次:D

使用特权

评论回复
40
YOYO_PAOPAO| | 2012-8-28 11:16 | 只看该作者
最近也在做STM32的加密设计,我来想一个盾,看看有哪个矛可以刺破。。。话说,加密芯片里面,首推的是智能卡芯片,也就是类似于凌科芯微,大唐微电子一类的SO8的加密芯片(这个前提是否正确,请板砖!),这些芯片如今发展成可以写入客户应用软件,而且价格相当便宜,4~5元*币左右。之所以先介绍智能卡加密芯片,原来还是对STM32本身的加密不太放心。这么着,用HOTPOWER大侠的方法,先对STM32软件用智能卡的唯一ID加密和解密,算法不公开。但是,会读懂STM32反汇编的人,会暗暗高兴,“我的矛正等着你的盾呢!”,我可以简单跳过你的算法,然后直接COPY。不过,要使盗片者不能得到可视加密解密代码,我的想法是,把这部分代码放到智能卡芯片里面,用的时候,加载到STM32的RAM中,掉电嘛,就没有了。而且用完之后也会消失。另外,我们当然还会做二级加密。就是在原有已经解密的代码里面的关键代码,还有二级加密,必须用智能卡的另外解密程序解密到RAM中,才能正常运行。自己想想,实在有点复杂了。这个前提条件,大家也很清楚,智能卡是无法被读取和COPY滴。。。。

使用特权

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

本版积分规则