专利名称:一种智能卡安全防护电路和方法
技术领域:
本发明主要应用于以智能卡为代表的安全微控制器芯片设计领域,可有效提高对抗外部干扰攻击,增强芯片工作的稳定性和可靠性。
背景技术:
近年来以智能卡为代表的安全微控制器在社会生活中得到广泛应用。智能卡作为系统安全与关键数据的载体,常常用于身份认证,交通,电信,金融支付等领域。由于利益驱使,智能卡面临的各种攻击手段越来越多祥,其中干扰注入攻击为一种常见的攻击手段,如对智能卡进行电源干扰,光干扰,脉冲干扰等,通过干扰的引入使得智能卡中的中央处理单元(CPU)的运行发生异常,出现所谓的跑飞现象,导致CPU偏离正常的程序运行,例如,没有通过认证的应用流程,直接进行存储数据改写,卡片存储的记录发生错误改变。此外,智能卡的工作环境不稳定或操作不规范(带电插拔等)也会造成CPU 运行发生异常。对此类问题的防护,一般的做法是使用各种传感器对芯片的工作环境进行检测, 包括电压检測,温度检测,毛刺检测,光检测等,一旦发现异常,则使芯片处于复位状态,以防止芯片再进行误操作,但这些传感器的响应时间、检测精度和范围都存在问题,防护效果不是特別理想。尤其是这些传感器一般都是由模拟电路实现,占用芯片面积大,从物理版图上可以分辨出明显的电路结构,攻击者可通过FIB等手段旁路这些传感器,从而导致安全防护失效。本发明提出的安全防护方法采用数字技术实现,相比模拟传感器的方法,实现成本低,防护响应快,不受加工エ艺限制,检测信号与其它逻辑电路进行混合布线,攻击者很难通过FIB等手段进行旁路,可大大提高安全防护的有效性。本发明提出的对CPU运行次序进行监测的方法具备分吋,分布的特点,可以降低因干扰或工作环境不稳定产生的监测漏检,能较好地抵御干扰攻击。
发明内容
本发明提出ー种智能卡安全防护方法,其特征是取出本条指令的代码和程序指针 PC (简称PC指针)以及上条指令的代码和PC指针(1)(运行第一条指令时不取出上条指令的代码和PC指针);实时对CPU的运行是否符合运行次序规则进行检查O),对检查输出的信号进行监測,监测方法具备分吋,分布的特点,即由两个或两个以上监测电路((3), (4),…(5)))对CPU的运行是否符合运行次序规则进行监测,输出两个或两个以上包括高低两种逻辑电平的监测信号,一旦发生异常,这些监测信号在不同时刻触发智能卡芯片进入异常处理(6),防止程序跑飞,保证程序按正确次序执行,在智能卡芯片受到外部攻击时进行有效的安全防护。CPU运行次序符合下列三种情况之一,监测电路输出有效逻辑电平的指示信号表示CPU运行符合次序规则,运行次序正确,否则输出无效逻辑电平的指示信号表示运行次序错误a. PC指示的为CPU运行的首地址;b.上一条运行指令为跳转指令,当前PC寄存器中的内容为上条跳转指令的跳转目的地址;C.上一条运行指令为非跳转指令,当前PC寄存器中的内容为上条指令对应的PC 指针寄存器内容加η,η为上一条指令对应的字节数;在本发明中监测采用分吋,分布的方式进行,即由多个监测电路输出两个或两个以上指示信号,一旦发生运行次序异常,这些指示信号在不同时刻触发智能卡芯片进入异常处理,监测电路输出的指示信号需要包括高低两种逻辑电平,以防止在某ー时刻由于干扰诱发的指示信号错误。本发明还公开了上述方法的ー种实现电路,如图3所示,该电路包括当前指令码寄存器(20)、跳转目的地址寄存器(16)、PC寄存器(14)、PC_PR0寄存器(22)、加法器(24)、 比较器(15)、比较器(17)、比较器06)、比较器(21)、监测电路1(38)以及监测电路(39); 其特征为比较器(15)比较当前的PC寄存器(14)的内容是否为CPU运行的首地址,首地址比较器(15)的输出信号作为监测电路的输入;比较器06)比较PC寄存器(14)中的当前程序指针值是否等于PC_PR0寄存器 (22)中的值与上一条指令码的指令字节数之和;比较器01)比较当前指令码寄存器OO)中的指令码是否为跳转指令码;比较器(17)比较PC寄存器(14)中的当前程序指针与跳转目的地址寄存器中的跳转目的地址是否相等;比较器(1 的输出信号FIRST_ADDR,比较器Q6)的输出信号CHECK_ADDR,比较器01)的输出信号JUMP_CODE_INDCT及其反向输出信号SEQ_C0DE_INDCT,比较器(17)的输出信号ADDR_EQ,作为监测电路1(38)和监测电路2 (39)的输入信号;监控电路1 (38)的输出指示信号P0S_JUDGE ;监控电路2(39)的输出经过延时电路((36)(37))进行1个时钟的延时后输出 NEG_JUDGE_DLY作为指示信号;监测电路1(38)输出的信号为高电平,且监测电路2(39)输出的信号为低电平吋, 表示CPU的运行符合运行次序规则,未发生可产生错误的异常跳变;如果发生运行次序异常,指示信号P0S_JUDGE与NEG_JUDGE_DLY在不同时刻触发智能卡芯片进入异常处理;
图1本发明所公开的方法总体框2CPU运行次序规则检查说明框3本发明的ー种具体实现电路
具体实施例方式下面结合附图,详细说明该方法及其具体实施方案。
图1为本发明的总体框图,首先取出本条指令代码和程序指针PC(简称PC指针) 以及上条指令的代码和PC指针(1)(运行第一条指令时不取出上条指令的代码和PC指针);实时对CPU的运行是否符合运行次序规则进行检查O),对检查输出的信号进行监測, 监测方法具备分吋,分布的特点,即由两个或两个以上监测电路((3),(4),... (5)))对CPU 的运行是否符合运行次序规则进行监测,输出两个或两个以上包括高低两种逻辑电平的监测信号,一旦发生异常,这些监测信号在不同时刻触发智能卡芯片进入异常处理(6),防止程序跑飞,保证程序按正确次序执行,在智能卡芯片受到外部攻击时进行有效的安全防护。CPU运行次序规则检查如图2所示,当CPU的运行次序符合下面的三条规则中的一条,即说明CPU的运行次序正确,监测电路输出有效的指示信号a. PC指示的为CPU运行的首地址;b.上一条运行指令为跳转指令,当前PC寄存器中的内容为上条跳转指令的跳转目的地址;c.上一条运行指令为非跳转指令,当前PC寄存器中的内容为上条指令对应的PC 指针寄存器内容加η,η为上一条指令对应的字节数;该方法实施的具体步骤如下a.取CPU指令及当前程序指针;b.取上条指令指针以及对应指令;c.对CPU的运行是否符合运行次序进行监测;d.如果监测结果异常则进入异常处理程序;该防护方法具备分时与分布的特点;对CPU的运行是否符合运行次序进行监测的具体步骤如下a.判断当前CPU指令地址是否为首地址,如果当前CPU指令地址为首地址,则CPU 正常运行;否则转b;b.判断当前CPU指令是否为跳转指令,如果当前CPU指令不是跳转指令,转c ;如果当前CPU指令为跳转指令,并且当前程序指针与上条指令的跳转地址相等,则CPU正常运行;如果当前指令为跳转指令,并且当前CPU程序指针与上条指令的跳转地址不相等,则 CPU运行异常,转d;C.判断当前CPU程序指针是否等于上条指令指针值与上条指令长度之和,如果相等,则CPU正常运行,否则CPU运行异常,转d ;d.选择触发芯片进入异常处理程序,防止程序跑偏,保证程序按正确次序执行,在智能卡芯片受到外部攻击时进行有效的安全防护。监测电路的个数为两个或两个以上(至少为2个),主要用来对规则检查的产生的输出信号进行监測,电路分布在芯片的不同位置,且不同位置的监测电路输出的指示信号包含高低两种逻辑电平,即具备分布的特征。当出现监测电路输出的指示信号不符合预期吋,不同的监测电路输出的指示信号在不同的时刻触发智能卡芯片进入异常处理,停止对程序的错误执行,即具备分时的特征。图3为本发明提出智能卡安全防护方法的一个实现电路。如图3所示,PC寄存器(14)存储当前PC指针,PC_PR0寄存器じ2)存储上一条指令的 PC 指针。(19),(27),(32),(34),(35)为与门,(28), (33)为或门,(23), (29), (30), (31)为反向器。(15),(17),(21),(26)为比较器。监测电路1包括或门(28)、与门(27)、与门(19);监测电路2包括反向器(29)、(30)、(31),与门(32) (34) (35)和或门(33)。比较器(1 比较当前的程序指针是否为CPU运行的首地址,比较器(1 的输出信号作为或门08)的输入;比较器06)比较PC寄存器(14)中的当前程序指针值是否与PC_PR0寄存器じ2) 中的值与上一条指令码的指令字节数之和相等;比较器01)比较当前指令码寄存器OO)中的指令码是否为跳转指令码,比较器 (21)的输出信号经反向器03)后与比较器06)的输出信号经与门07)后作为或门08) 的输入;比较器(17)比较PC寄存器(14)中的当前程序指针与跳转目的地址寄存器(16) 中的跳转目的地址是否相等,比较器(17)的输出信号与比较器01)的输出信号经与门 (19)后作为或门(28)的输入。在比较器(15)、与门(19)、以及与门07)的输出中有一个为有效高电平时,则或门08)的输出为有效高电平,表示CPU的运行符合运行次序规则,未发生可产生错误的异常跳变;当监测电路1的输出为有效高电平时,检测电路2的输出为有效低电平,并通过延时电路D触发器(36)对检测电路2的输出信号进行延吋,延时后的检测电路2的输出信号如果为有效低电平,则CPU运行符合运行次序规则;反之,说明CPU发生了可产生错误的异常跳变,CPU将中断运行程序,进入异常处理状态。电路在工作吋,比较器01)比较当前指令码寄存器OO)中的指令码是否为跳转指令码,如果为跳转指令码则比较器01)的输出信号JUMP_CODE_INDCT为有效电平(假设高电平为有效电平),此时如果PC寄存器(14)中的当前指针与跳转目的地址寄存器(16) 中的跳转目的地址相等,比较器(17)的输出信号ADDR_EQ为有效电平(假设高电平为有效电平);如果比较指令码寄存器OO)中的指令码不是跳转指令码,此时如果PC寄存器(14) 中的当前PC指针等于PC_PR0寄存器02)中的值与上一条指令码的指令字节数η之和, 比较器06)的输出信号CHECK_ADDR为有效电平(假设高电平为有效电平);如果PC寄存器(14)中的内容为CPU上电复位后的首地址,则比较器(15)的输出信号FIRST_ADDR为有效电平(假设高电平为有效电平)。在比较器的(1 的输出、与门(19)的输出以及与门07)的输出中有ー个为高电平吋,则或门08)的输出P0S_JUDGE为高电平,表示CPU的运行符合运行次序规则,未发生可产生错误的异常跳变。监测电路1(38)输出的指示信号 P0S_JUDGE的有效电平为高电平。如果CPU运行符合运行次序规则,通过监测电路2 (39)输出的指示电平NEG_JUDGE 的有效电平为低电平。通过延时电路D触发器(36)对NEG_JUDGE延时1个时钟周期,在下 ー时钟周期判断NEG_JUDGE是否为低电平,如果是,则CPU运行符合运行次序规则;反之,说明CPU发生了可产生错误的异常跳变,CPU将中断运行程序,进入异常处理状态。最常见的异常处理为全芯片复位。分时的实现方式除这里所列举的D触发器延时ー个时钟周期的方式外,也可以采用其它延时电路(RS触发器,延时电路)进行延时,延时的时间可以是以时钟周期为单位的ー个或多个时钟,或者是固定时间。本领域的技术人员可以依据上面提供的方法设计相应电路方便实现。 除上述监测电路外,监测电路还可以对中间信号JUMP_CODE_INDCT,ADDR_EQ, CHECK_ADDR, FIRST_ADDR其它逻辑等效组合进行监測,判断其是否正确。本领域的技术人员可以依据上面提供的方法设计相应电路方便实现。
权利要求
1.一种智能卡安全防护方法,对CPU的运行是否符合运行次序进行监测,其特征在于步骤如下a.取CPU指令及当前程序指针;b.取上条指令指针以及对应指令;c.对CPU的运行是否符合运行次序进行监测;d.如果监测结果异常则进入异常处理程序;
2.如权利要求1所述的一种智能卡安全防护方法,其特征在于对CPU的运行是否符合运行次序进行监测的具体步骤如下a.判断当前CPU指令地址是否为首地址,如果当前CPU指令地址为首地址,则CPU正常运行;否则转b ;b.判断当前CPU指令是否为跳转指令,如果当前CPU指令不是跳转指令,转c;如果当前CPU指令为跳转指令,并且当前程序指针与上条指令的跳转地址相等,则CPU正常运行; 如果当前指令为跳转指令,并且当前CPU程序指针与上条指令的跳转地址不相等,则CPU运行异常,转d ;c.判断当前CPU程序指针是否等于上条指令指针值与上条指令字节数之和,如果相等,则CPU正常运行,否则CPU运行异常,转d ;d.芯片进入异常处理程序,防止程序跑偏,保证程序按正确次序执行,在智能卡芯片受到外部攻击时进行有效的安全防护。
3.如权利要求1所述的一种智能卡安全防护方法,其特征在于该方法具备分布的特点,即该方法使用的监测电路个数为两个或两个以上。
4.如权利要求1所述的一种智能卡安全防护方法,其特征在于该方法具备分时的特征,即如发生运行次序异常,多个监测电路输出的指示信号在不同时刻触发智能卡芯片进入异常处理。
5.如权利要求1所述的一种智能卡安全防护方法,其特征在于该方法使用的监测电路输出的指示信号包括高低两种逻辑电平,以抵抗在某一时刻由于干扰导致的指示信号错误。
6.一种智能卡安全防护电路,包括当前指令码寄存器(20)、跳转目的地址寄存器(16)、PC寄存器(14)、PC_PR0寄存器(22)、加法器(24)、比较器(15)、比较器(17)、比较器 (26)、比较器(21)、监测电路1(38)以及监测电路(39);其特征为比较器(15)比较当前的PC寄存器(14)的内容是否为CPU运行的首地址,首地址比较器(15)的输出信号作为监测电路的输入;比较器06)比较PC寄存器(14)中的当前程序指针值是否等于PC_PR0寄存器02) 中的值与上一条指令码的指令字节数之和;比较器比较当前指令码寄存器OO)中的指令码是否为跳转指令码; 比较器(17)比较PC寄存器(14)中的当前程序指针与跳转目的地址寄存器中(16)的跳转目的地址是否相等;比较器(15)的输出信号FIRST_ADDR,顺序地址比较器Q6)的输出信号CHECK_ADDR, 比较器的输出信号JUMP_CODE_INDCT及其反向输出信号SEQ_CODE_INDCT,比较器(17)的输出信号ADDR_EQ,作为监测电路1(38)和监测电路2(39)的输入信号;监控电路1 (38)的输出指示信号P0S_JUDGE ;监控电路2 (39)的输出经过延时电路(36)、延时电路(37))进行时钟延时后输出NEG_ JUDGE_DLY作为指示信号;监测电路1(38)输出的信号为高电平,且监测电路2(39)输出的信号为低电平时,表示 CPU的运行符合运行次序规则,未发生可产生错误的异常跳变;如果发生运行次序异常,指示信号P0S_JUDGE与NEG_JUDGE_DLY在不同时刻触发智能卡芯片进入异常处理。
7.如权利要求6所述的一种智能卡安全防护电路,其特征在于通过分布在芯片不同位置上的多个监测电路对CPU的运行是否符合运行次序进行监测。
8.如权利要求6所述的一种智能卡安全防护电路,其特征在于如发生运行次序异常, 指示信号P0S_JUDGE与NEG_JUDGE_DLY在不同时刻触发智能卡芯片进入异常处理。
9.如权利要求6所述的一种智能卡安全防护电路,其特征在于监测电路1(38)输出的指示信号为高电平,监测电路2 (39)输出的指示信号为低电平,即指示信号包括高低两种逻辑电平,以抵抗在某一时刻由于干扰导致的指示信号错误。
10.如权利要求6所述的一种智能卡安全防护电路,监测电路除上述电路外,还能对中间信号 JUMP_CODE_INDCT,ADDR_EQ, CHECK_ADDR, FIRST_ADDR 其它逻辑等效组合进行监测, 判断其是否正确。
全文摘要
本发明公开了一种智能卡安全防护方法,该方法采用分时、分布的方式对CPU进行实时运行次序规则监测,检测CPU的运行是否符合运行次序规则,一旦检测到程序运行次序有误,将终止错误程序运行,触发芯片进行异常处理,保证程序按照正确的运行顺序执行,防止程序跑飞,在智能卡芯片受到外部攻击或运行环境不稳定时提供有效的安全防护。本发明同时公开了实现上述方法的一种电路,包括当前指令码寄存器(20)、跳转目的地址寄存器(16)、PC寄存器(14)、PC_PRO寄存器(22)、加法器(24)、比较器(15)、比较器(17)、比较器(26)、比较器(21)、监测电路1(38)以及监测电路(39);该电路采用监测电路1和监测电路2对CPU运行次序的监测,如发生运行异常,将在不同时刻触发智能卡芯片进入异常处理,防止芯片发生异常。
文档编号G06F21/00GK102567774SQ20101062229
公开日2012年7月11日 申请日期2010年12月27日 优先权日2010年12月27日
发明者叶茵 申请人:北京中电华大电子设计有限责任公司