[原创] 单片机系统的几种硬件加密技术

qwertyuiop11111   2015-7-30 09:44 楼主
我们知道,研究一套可行实用的单片机系统肯定要花大量的人力和物力。为了使所研制的系统不被别人所剽窃,保护知识产权,通常在单片机系统设计时,都要进行加密设计。加密设计一般有硬件加密和软件加密。而硬件加密的方法很多,可以采用PALGAL等芯片将CPUROM之间的地址线或数据线按一定密钥规律进行交换,这样就把原程序页号打乱,起到加密作用。但这里想与读者共同探讨的是几种简单的硬件加密技术。
1.         硬件加密设计步骤
1.1  根据具体项目和任务,设计目标程序并在未加密情况下调试成功。
1.2  设计硬件加密电路.
1.3  对调试好的软件按硬件电路进行加密翻译,不同的硬件加密电路翻译出来的软件不同.
1.4  将加密翻译后的软件写进EPROM.
这样,剽窃者将得到的EPROM里的程序进行反汇编后,不在是原来的程序,甚至是逻辑关系混乱毫无价值的代码.从而保护了原设计者的利益.
2.         硬件加密电路的设计
  为方便说明硬件加密原理和软件加密翻译方法,先列举一例题,以下论述均以该例子为研究对象.
例1        比较两个无符号数的大小,设两个无符号数事先分别存在RAM里的30H31H单元,(30H)里的数大,则累加器的A.0~A.3为高电平;若(31H)里的数大,则累加器的A.4~A.7为高电平;若两数相等,则累加器的A.2~A.5为高电平。试设计汇编程序实现。
该例题所设计的原程序、机器代码和存储单元如下:
程序存储单元地址                       机器代码                   汇编语言
0100H                                          75 30 80                    QABMOV  30H#80H
0103H                                          75 31 06                               MOV   31H#06H
0106H                                          E5 30                                   MOV   A30H
0108H                                          B5 31 03                               CJNE   A31HQDC
010BH                                         74 3C                                   MOV   A#3CH
010DH                                         22                                        RET
010EH                                         40 03                         QDCJC   SMALL
0110H                                          74 F0                                     MOV   A#0F0H
0112H                                          22                                          RET
0113H                                          74 0F                         SMALLMOV   A#0FH

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
程序存储单元                                    机器代码                            反汇编结果
0100H                                                73                                       JMP   @A+DPTR
0101H                                                30 80 73                              JMB   30,73
0104H                                                31 06                                  ACALL   06H
0106H                                                E5 30                                  MOV   A,#30H   
0108H                                                B3                                      CPLC   C
0109H                                                31 05                                  ACALL   05H
010BH                                               72 3C                                  ORL   C,3CH
010DH                                               24 40                                  ADD   A,#40H
010FH                                               05 74                                  INC   74H
0111H                                                F0                                      MOVX   @DPTR,A
0112H                                                24 74                                  ADD   A,#74H
0114H                                                0FH                                    INC   R7
0115H                                                24**                                   **
从反汇编结果看,整个程序无法读懂,逻辑关系混乱.
2.2  硬件加密方法二:
CPUEPROM间的地址换位,如图2所示,将地址线A0A1换位交叉,这样单片机系统程序存在EPROM中的代码不变,但存储顺序完全打乱。若将例1的程序存入EPROM时,为保证单片机的正常工作,要将存储代码的顺序按硬件电路要求做相应的改变,即进行加密翻译,加密翻译后EPROM中存储的实际代码和反汇编的结果如下:
程序存储单元       机器代码       反汇编结果
0100H                                                75 80 30                              MOV   80H#30H
0103H                                                75 31 E5                             MOV   31H#0E5H
0106H                                                06                                       INC   @R0
0107H                                                30 35 B5                             JNB   B5,03H
010AH                                               31 74                                  ACALL   74H
010CH                                               3C                                      ADDC   A,R5
010DH                                               40 22                                  JC   22H
010FH                                               03 74 22                              LJMP   74H,22H
0112H                                                F0                                      MOVX   @DPTR,A
0113H                                                74 0F                                  MOV   A,#0FH
0115H                                                **                                       **
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
程序存储单元                                    机器代码                            反汇编结果
0100H                                                76 33                                  MOV   @R0,#33H
0102H                                                83                                       MOVC   A,@A+PC
0103H                                                76 32                                  MOV   @R0,#32H
0105H                                                05 E6                                  INC   0E6H
0107H                                                33                                       RLC   A
0108H                                                B6 32 00                             CJNE   @R0,32H,00H
010BH                                               77,3F                                  MOV   @R0,3FH
010DH                                               21 43                                  AJMP   43H
010FH                                               00                                       NOP
0110H                                                77 F3                                  MOV   @R0 ,F3H
0112H                                                21 77                                  AJMP   77H
0114H                                                0C                                      INC   R4
0115H                                                21**                                   **
可见经硬件加密后,存在EPROM里的代码与原来代码完全不同.
2.4  硬件加密方法四
CPUEPROM间的地址线的某些位求反。如图4所示,将地址线A0A1求反,这样存在EPROM里的代码内容不变,但代码的存储顺序要按硬件电路相应改变。若仍以例1为例,将该程序代码加密后,存在EPROM里的代码和反汇编后的结果如下:
A8~A12A2~A7A1A0OE  CE2764D2~D7D1D0
P2.0~P2.4P0.2~P0.7P0.1P0.0 ALEPSENCPU8031
74LS373

                            4
程序存储单元                             机器代码                            反汇编结果
0100H                                        75 80 30                              MOV   80H30H
0103H                                        75 35 E5                             MOV   30HE5H
0106H                                        06                                       INC   @R0
0107H                                        31 74                                  ACALL   74H
0109H                                        03                                       RR   A
010AH                                        31 B5                                  ACALL   B5H
010CH                                        03                                       RR   A
010DH                                        40 22                                  JC   22H
010FH                                        3C                                      ADDC   A,R4
0110H                                         74 22                                  MOV   A,22H
0112H                                         F0                                      MOVX   @DPTR,A
0113H                                         74 **                                  ****
0115H                                         **                                       **
可见将EPROM里的代码反汇编后,仍得不到原程序。
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
3      总结:从上述硬件加密技术方法来看,读者还可采用多种逻辑电路,或者选择其他的数据线和地址线进行硬件加密设计,甚至也可将上述加密电路加以复合,形成较复杂的硬件加密电路,这就使解密更加困难.

回复评论 (1)

不错,学习了。

加密与解密,一直都是此消彼长,没有办法做到完全不可能破解,看过一篇帖子,有效的办法就是给对方增加解密的成本。比如可以选择到原厂去找非常冷门的芯片,用的人很少,资料也是不多的那种,这样破解的成本也是很可观的。
坐而言不如起而行
点赞  2015-7-30 11:28
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复