目前对硬件加密较深入的研究局限于少数的贵重电子产品上,这样的加密所用到的元器件、电路比较复杂,价格也比较昂贵;如何能对大众化的电子产品实施价格低廉而有效的加密成为一个迫切需要解决的问题。为此,我们今天给大家介绍一种适用于便携式电子产品的嵌入式硬件加密技术。

一、硬件加密的概念和原理

1、硬件加密的概念

本文所说的硬件加密,是指这样一种方法:使用待加密的电子产品之外的硬件电路与待加密的电子产品进行通讯,让产品内部程序通过通讯的数据来判断自己是否应该继续执行程序,从而达到加密产品的目的。

显然,要实现硬件加密,用来通讯的数据应该是随机数,否则,即使这个数据很复杂,也很容易使用另外一片很简单的单片机来模拟通讯数据从而破解产品。当然,这里所说的“随机数”不可能是真正的随机数而是伪随机数,众所周知,还没有仅靠MCU产生真正的随机数的算法,而伪随机数在很大的程度上接近真正的随机数,这对于加密已经足够。

基于以上的概念,待加密的电子产品内部的主控芯片应该具备以下几种功能:

①能够做到芯片外通讯,即要有输入/输出(I/O)口;

②能够产生随机数;

③有足够的程序和数据空间;

④如果要求实时性比较高,还要有较大的时钟频率。

2、硬件加密的原理

硬件加密的原理是:主控芯片产生一个随机数,把这个随机数(或其加密形式)发送到加密芯片,由加密芯片进行加密后把数据回送给主控芯片,由主控芯片判别该数据是不是期望得到的数据。如果是,主控芯片的程序继续执行,否则报错或停止运行。

二、嵌入式硬件加密技术的实现

1、加密过程概述

主控芯片和加密芯片之间使用两根线(即两个I/O口)进行通讯:一根时钟线(CLK),一根数据线(DAT)。加密过程可以分为以下几步:

(1)主控芯片产生随机数x后,发送到加密芯片;

(2)主控芯片使用加密算法ym=f(x)进行运算,得到加密后的数据ym;

(3)与此同时,加密芯片使用同样的加密算法ys=f(x)对接收到的x进行加密,得到ys;

(4)主控芯片要求加密芯片回传数据,得到ys;

(5)主控芯片比较ym和ys,如果一致可以继续执行程序,否则说明外部加密芯片不存在或者是“非法”的加密芯片,主控芯片报错或停止执行程序。

如果加密芯片只是用于加密而不处理其它事务,其相当一部分程序和数据空间会浪费。为了减少资源浪费,主控芯片可以发送数据请求加密芯片完成某些事务的处理,这样设计,加密芯片不但承担了加密的任务,而且相当于一个协处理器。

2、通讯协议设计

考虑到尽量减少资源占用、实现的难易程度和固件程序的易移植性,采用两线制串行通讯是比较合适的办法:主控芯片和加密芯片使用一根时钟线(CLK)和一根数据线(DAT)进行主从式通讯。主控芯片总是每次通讯的主动方,加密芯片总是被动方。

产品工作过程中,没有发送和接收请求时,主控芯片总是使CLK线和DAT线的电平为高电平;如果主控芯片有发送数据请求,要求加密芯片接收数据,则把CLK线上面的电平置为低电平作为起始信号;

简短延时后,主控芯片使CLK线上的电平每隔一段时间反相一下,这样在CLK线上将会出现一个“高、低、高、低…”的波形,作为主控芯片和加密芯片通讯的时钟;在CLK线为低电平期间改变DAT线上的电平为数据“1”或数据“0”,当CLK为高电平时允许加密芯片接收DAT线上面的数据。发送命令和数据完成以后,主控芯片把CLK线和DAT线上的电平置为高电平;

待到需要让加密芯片回送数据时,主控芯片再使CLK线上面电平为低,作为起始信号。类似于发送过程,简短延时后,每隔一段时间主控芯片使CLK线上电平跳变一下。CLK线电平为低时,加密芯片改变DAT线上的电平作为要传输的数据“1”或数据“0”,当为CLK线为高电平时主控芯片接收DAT线上面的数据。

全部数据接收完毕后,主控芯片再使CLK线和DAT线上面电平为高,一次完整的通讯过程结束。

3、硬件部分设计

主控芯片是随着产品的不同而不同的,为了便于说明及不失一般性,这里选用51内核的芯片,仍然把它叫做主控芯片。

加密芯片选用MicroChip公司生产的PIC10F202。该芯片是一种新型CMOS工艺结构的8位单片机,具有非易失性可编程内部程序空间,最多可以存放512条指令;具有8个特殊功能寄存器和24字节数据空间。采用这款芯片用于加密,有四个主要原因:

(1)其内部自带OTP(One-Time-Programable)型ROM,将内设的程序保密熔丝熔断后,存于内部ROM中的程序不会被外界读取,且不能重复编程。这样,即使主控芯片内的程序被读取,没有加密芯片及内部程序,产品也不会被破解;

(2)芯片有工作和休眠(Sleep)两种状态。在Sleep状态下功耗很低。例如采用3.3V电压供电,在Sleep状态下,电流只有2~3μA。如果芯片只是用于加密,绝大部分的时间都可以在Sleep状态,使产品几乎没有额外的功耗,尤其适用于使用电池的手持式电子产品;

(3)芯片内部有可编程设置的看门狗。有了看门狗定时复位,即使加密芯片程序跑飞,也会在看门狗的定时周期内自动复位,这样就进一步增强了可靠性。

(4)芯片体积很小,占用线路板空间很少,批量化生产时可以节省成本。

硬件电路连接见图1。

嵌入式硬件加密技术的实现

4、软件部分设计

(1)主控芯片的软件设计

主控芯片与加密相关的部分可以用以下几个函数来实现:

产生随机数的函数gen_rand();

延时函数delay_us();

发送数据的函数send_data();接收数据的函数get_data();

对随机数据进行加密的函数encrypt();

验证数据是否是预期值的函数identify();

主控芯片首先调用gen_rand()产生随机数x,而后使用send_data()函数发送命令和数据,再调用encrypt()函数对产生的随机数x加密,得到ym;调用delay_us()延时后,调用get_data()接收经过加密芯片加密的数据ys。最后,调用identify()函数验证接收到的数据和自身加密的数据是否一致。如果一致,程序继续执行;如果不一致,报错。

(2)加密芯片的软件设计

有三种情况会引起PIC10F202的复位并影响状态寄存器中断标志位,分别为:PIC10F202上电时、内部看门狗溢出时和Sleep状态下GPIO口有电平跳变时。加密芯片内部程序可根据这些标志位判断是哪种情况引起的复位,从而进行相应的操作:

如果是看门狗电路引起的复位,直接跳到程序的末尾,完成进入Sleep状态前的准备工作后进入Sleep状态;

如果是GPIO引脚电平跳变引起的复位,说明此前程序已经在Sleep状态,之所以被唤醒是因为主控芯片发送了起始信号(CLK电平为低),要求向加密芯片发送数据。这种情况下,程序跳到主程序中调用接收子程序前的地方,调用接收子程序进行接收并进行以后的操作;

如果是上电引起的复位,加密程序初始化各个状态后,循环等待或进入Sleep状态,直到主控芯片发出起始信号以进行接收。

在电子产品批量生产的今天,考虑到产品被破解所带来的损失,硬件加密所花费的代价是微不足道的,将在加密领域大展身手。

小知识之硬件加密

硬件加密是通过专用加密芯片或独立的处理芯片等实现密码运算。将加密芯片、专有电子钥匙、硬盘一一对应到一起时,加密芯片将把加密芯片信息、专有钥匙信息、硬盘信息进行对应并做加密运算,同时写入硬盘的主分区表。这时加密芯片、专有电子钥匙、硬盘就绑定在一起,缺少任何一个都将无法使用。经过加密后硬盘如果脱离相应的加密芯片和电子钥匙,在计算机上就无法识别分区,更无法得到任何数据。