[应用方案] 单片机系统的几种硬件加密技术

[复制链接]
1345|8
 楼主| 跟屁虫 发表于 2015-12-17 20:36 | 显示全部楼层 |阅读模式
我们知道,研究一套可行实用的单片机系统肯定要花大量的人力和物力。为了使所研制的系统不被别人所剽窃,保护知识产权,通常在单片机系统设计时,都要进行加密设计。加密设计一般有硬件加密和软件加密。而硬件加密的方法很多,可以采用PALGAL等芯片将CPUROM之间的地址线或数据线按一定密钥规律进行交换,这样就把原程序页号打乱,起到加密作用。但这里想与读者共同探讨的是几种简单的硬件加密技术。
1.         硬件加密设计步骤
1.1  根据具体项目和任务,设计目标程序并在未加密情况下调试成功。
1.2  设计硬件加密电路.
1.3  对调试好的软件按硬件电路进行加密翻译,不同的硬件加密电路翻译出来的软件不同.
1.4  将加密翻译后的软件写进EPROM.
这样,剽窃者将得到的EPROM里的程序进行反汇编后,不在是原来的程序,甚至是逻辑关系混乱毫无价值的代码.从而保护了原设计者的利益.

 楼主| 跟屁虫 发表于 2015-12-17 20:36 | 显示全部楼层
2.         硬件加密电路的设计
  为方便说明硬件加密原理和软件加密翻译方法,先列举一例题,以下论述均以该例子为研究对象.
例1        比较两个无符号数的大小,设两个无符号数事先分别存在RAM里的30H和31H单元,若(30H)里的数大,则累加器的A.0~A.3为高电平;若(31H)里的数大,则累加器的A.4~A.7为高电平;若两数相等,则累加器的A.2~A.5为高电平。试设计汇编程序实现。
该例题所设计的原程序、机器代码和存储单元如下:
  1. 程序存储单元地址                       机器代码                   汇编语言
  2. 0100H                                          75 30 80                    QAB:MOV  30H,#80H
  3. 0103H                                          75 31 06                               MOV   31H,#06H
  4. 0106H                                          E5 30                                   MOV   A,30H
  5. 0108H                                          B5 31 03                               CJNE   A,31H,QDC
  6. 010BH                                         74 3C                                   MOV   A,#3CH
  7. 010DH                                         22                                        RET
  8. 010EH                                         40 03                         QDC:JC   SMALL
  9. 0110H                                          74 F0                                     MOV   A,#0F0H
  10. 0112H                                          22                                          RET
  11. 0113H                                          74 0F                         SMALL:MOV   A,#0FH
 楼主| 跟屁虫 发表于 2015-12-17 20:37 | 显示全部楼层
2.1  硬件加密方法一
  将数据线中某几根线换位,如图1所示。将图中数据线D1D2交叉,这样单片机系统执行的实际代码就与EPROM中存储的代码完全不同了。若将例1的程序存入EPROM ,那么存入的实际代码就要做相应的加密翻译,以使单片机从EPROM中所取的代码正确。加密翻译后在EPROM中实际存的代码和反汇编的结果如下:
P2.0~P2.4P0.3~P0.7P0.2P0.1P0.0ALEPSENCPU8031

74LS373

A8~A12A3~A7A2A1A0  2764OE  CED3~D7D2D1


                                                                                          
                                   1
  1. 程序存储单元                                    机器代码                            反汇编结果
  2. 0100H                                                73                                       JMP   @A+DPTR
  3. 0101H                                                30 80 73                              JMB   30,73
  4. 0104H                                                31 06                                  ACALL   06H
  5. 0106H                                                E5 30                                  MOV   A,#30H   
  6. 0108H                                                B3                                      CPLC   C
  7. 0109H                                                31 05                                  ACALL   05H
  8. 010BH                                               72 3C                                  ORL   C,3CH
  9. 010DH                                               24 40                                  ADD   A,#40H
  10. 010FH                                               05 74                                  INC   74H
  11. 0111H                                                F0                                      MOVX   @DPTR,A
  12. 0112H                                                24 74                                  ADD   A,#74H
  13. 0114H                                                0FH                                    INC   R7
  14. 0115H                                                24**                                   **
  15. 从反汇编结果看,整个程序无法读懂,逻辑关系混乱.



 楼主| 跟屁虫 发表于 2015-12-17 20:37 | 显示全部楼层
2.2  硬件加密方法二:
将CPU和EPROM间的地址换位,如图2所示,将地址线A0、A1换位交叉,这样单片机系统程序存在EPROM中的代码不变,但存储顺序完全打乱。若将例1的程序存入EPROM时,为保证单片机的正常工作,要将存储代码的顺序按硬件电路要求做相应的改变,即进行加密翻译,加密翻译后EPROM中存储的实际代码和反汇编的结果如下:
  1. 程序存储单元       机器代码       反汇编结果
  2. 0100H                                                75 80 30                              MOV   80H,#30H
  3. 0103H                                                75 31 E5                             MOV   31H,#0E5H
  4. 0106H                                                06                                       INC   @R0
  5. 0107H                                                30 35 B5                             JNB   B5,03H
  6. 010AH                                               31 74                                  ACALL   74H
  7. 010CH                                               3C                                      ADDC   A,R5
  8. 010DH                                               40 22                                  JC   22H
  9. 010FH                                               03 74 22                              LJMP   74H,22H
  10. 0112H                                                F0                                      MOVX   @DPTR,A
  11. 0113H                                                74 0F                                  MOV   A,#0FH
  12. 0115H                                                **                                       **
 楼主| 跟屁虫 发表于 2015-12-17 20:38 | 显示全部楼层
P2.0~P2.4P0.2~P0.7P0.1P0.0 ALEPSENCPU8031

74LS373

A8~A12A2~A7A1A0  2764OE  CE D2~D7D1D0

      
                                           2
从反汇编的结果看,既是剽窃者取出EPROM里的程序代码,反汇编后也得不到原来的程序了,
2.3  硬件加密方法三
CPUEPROM间的数据线某些位经过三态反相器求反。如图3所示,将数据线D0D1分别求反后送CPU,这样存在EPROM里的程序和原来的程序就不同了。若将例1的程序按硬件加密电路进行软件加密翻译后,存在EPROM里的实际代码和反汇编后结果如下:
P2.0~P2.4P0.2~P0.7P0.1P0.0 ALEPSENCPU8031

74LS373

A8~A12A2~A7A1A0  2764OE  CE D2~D7D1D0


                                                            
                                   3

 楼主| 跟屁虫 发表于 2015-12-17 20:39 | 显示全部楼层
  1. 程序存储单元                                    机器代码                            反汇编结果
  2. 0100H                                                76 33                                  MOV   @R0,#33H
  3. 0102H                                                83                                       MOVC   A,@A+PC
  4. 0103H                                                76 32                                  MOV   @R0,#32H
  5. 0105H                                                05 E6                                  INC   0E6H
  6. 0107H                                                33                                       RLC   A
  7. 0108H                                                B6 32 00                             CJNE   @R0,32H,00H
  8. 010BH                                               77,3F                                  MOV   @R0,3FH
  9. 010DH                                               21 43                                  AJMP   43H
  10. 010FH                                               00                                       NOP
  11. 0110H                                                77 F3                                  MOV   @R0 ,F3H
  12. 0112H                                                21 77                                  AJMP   77H
  13. 0114H                                                0C                                      INC   R4
  14. 0115H                                                21**                                   **

可见经硬件加密后,存在EPROM里的代码与原来代码完全不同.
2.4  硬件加密方法四
将CPU和EPROM间的地址线的某些位求反。如图4所示,将地址线A0、A1求反,这样存在EPROM里的代码内容不变,但代码的存储顺序要按硬件电路相应改变。若仍以例1为例,将该程序代码加密后,存在EPROM里的代码和反汇编后的结果如下:
 楼主| 跟屁虫 发表于 2015-12-17 20:40 | 显示全部楼层
A8~A12A2~A7A1A0OE  CE2764D2~D7D1D0

P2.0~P2.4P0.2~P0.7P0.1P0.0 ALEPSENCPU8031

74LS373


                            4
  1. 程序存储单元                             机器代码                            反汇编结果
  2. 0100H                                        75 80 30                              MOV   80H,30H
  3. 0103H                                        75 35 E5                             MOV   30H,E5H
  4. 0106H                                        06                                       INC   @R0
  5. 0107H                                        31 74                                  ACALL   74H
  6. 0109H                                        03                                       RR   A
  7. 010AH                                        31 B5                                  ACALL   B5H
  8. 010CH                                        03                                       RR   A
  9. 010DH                                        40 22                                  JC   22H
  10. 010FH                                        3C                                      ADDC   A,R4
  11. 0110H                                         74 22                                  MOV   A,22H
  12. 0112H                                         F0                                      MOVX   @DPTR,A
  13. 0113H                                         74 **                                  ****
  14. 0115H                                         **                                       **
可见将EPROM里的代码反汇编后,仍得不到原程序。

 楼主| 跟屁虫 发表于 2015-12-17 20:41 | 显示全部楼层
2.5  硬件加密方法五
EPROM输出的某些数据线经过三态异或门后送入CPU。如图5所示,将D1D0通过三态异或门后再送入CPUP0.1,而D0直接送入P0.0,根据逻辑关系有
         P0.1=D0(+)D1
于是实际存入EPROM的代码也要作相应变化,限于篇幅请读者自行加密翻译。
2.6  硬件加密方法六
CPUEPROM间的地址线通过与门后送入单片机。如图6所示,将CPUP2.0P2.1通过与门后送入EPROMA9,P2.0直接送入A8,根据逻辑关系有 A9=P2.0* P2.1
P2.0~P2.4P0.2~P0.7P0.1P0.0 ALEPSENCPU8031

74LS373

A8~A12A2~A7A1A0 2764OE  CED2~D7D1D0

这样,实际送入EPROM的代码内容不变,但代码存储顺序要变,这也留作读者自行翻译.
                     5
P2.2~P2.4P2.1P2,0 P0.0~p0.7ALEPSENCPU8031

74LS373

A10~A12A9A8 2764 A0~A7OE  CE D0~D7


                    6

 楼主| 跟屁虫 发表于 2015-12-17 20:43 | 显示全部楼层
3      总结:从上述硬件加密技术方法来看,读者还可采用多种逻辑电路,或者选择其他的数据线和地址线进行硬件加密设计,甚至也可将上述加密电路加以复合,形成较复杂的硬件加密电路,这就使解密更加困难.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

245

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部