专利名称:智能密钥设备的自检方法
技术领域:
本发明属于信息安全领域,具体涉及一种智能密钥设备的自检方法。
背景技术:
智能密钥设备是一种带有处理器和存储器的小型硬件装置,使用简单、成本较 低。它内置单片机或智能卡芯片,可以存储用户的密钥或数字证书,利用智能密钥设备 内置的密码算法实现对用户身份的认证。智能密钥设备具有电子邮件加密、数字签名、 安全证书、安全网络登录和访问SSL (Security Socket Layer,安全套接层)安全网络等功 能,并且具有保证用户的私钥永远不离开硬件的特征,还具有物理上防攻击的特性,安 全性极高,在现有技术中,智能密钥设备内部通常采用COS来管理。COS是英文全称Chip Operating System (卡片操作系统)的缩写。从本质上说它 是智能卡芯片内的一个监控软件,用于接收和处理外界发给智能卡的各种信息,管理卡 内的存储器,并给出相应的应答信息。在现有技术中,cos—般为软件开发商编写的可 被智能密钥设备所识别并执行的程序。智能密钥设备通常使用加密或基于公钥体制的数字签名来验证用户身份,公钥 体制的数字签名既保证了信息的机密性,又保证了信息具有不可抵赖性。即便是这样还 不能完全保证数字签名及加密数据的安全性,因为固件COS本身也存在安全风险,体现 在两个方面,一是对cos芯片和存储内容的破坏,另一方面是利用COS自身设计隐患, 或利用COS芯片的剩余空间嵌入非法程序等,严重影响了智能密钥设备的安全性,使智 能密钥设备丧失了其存在的价值,同时,也必然会给用户带来不必要的损失。
发明内容
针对上述问题,本发明提供了一种智能密钥设备的自检方法,具体用来保证智 能密钥设备的固件安全,技术方案如下一种智能密钥设备的自检方法,所述方法包括智能密钥设备上电;所述智能密钥设备进行初始化;所述智能密钥设备执行如下操作,包括与主机建立第一通信、生成随机数并 检测所述随机数的安全性、检测关键函数的安全性、计算存储区存储内容的差错检测码 并根据所述计算得到的差错检测码来检测所述存储区存储内容的完整性、对第一检测数 据进行散列运算并根据所述散列运算结果来检测散列算法的安全性和对第二检测数据进 行加解密操作并根据所述加解密操作结果来检测加解密算法的安全性;所述智能密钥设备与所述主机建立第二通信,并等待接收所述主机下发的指 令。所述随机数包括真随机数和伪随机数。当所述随机数为真随机数时,检测所述随机数的安全性具体为
所述智能密钥设备获取随机种子,所述随机种子包括环境噪音、系统时钟、 中断信号、CPU温度、电压;所述智能密钥设备根据所述随机种子按照预设计算方法连续生成两个真随机 数;所述智能密钥设备判断所述生成的两个真随机数是否相同,如果不相同,则真 随机数的生成是安全的,否则,真随机数的生成是不安全的。当所述随机数为伪随机数时,检测所述随机数的安全性具体为所述智能密钥设备生成伪随机数,并判断所述生成的伪随机数是否与预先存储 的伪随机数相同,如果相同,则伪随机数的生成是安全的,否则,伪随机数的生成是不 安全的。所述方法还包括,对所述智能密钥设备生成伪随机数过程中的第一初始化模块 进行安全性检测,具体为调用所述第一初始化模块,所述第一初始化模块用于将代码区中的密钥Key、 初始向量V、变量reseed、自检标识清零;判断所述代码区中的密钥Key、初始向量V、变量reseed及自检标识是否为零, 如果是零,则所述第一初始化模块是安全的,否则,所述第一初始化模块是不安全的。所述方法还包括,对所述智能密钥设备生成伪随机数过程中的第二初始化模块 进行安全性检测,具体为调用所述第二初始化模块,所述第二初始化模块用于将代码区中的密钥Key、
初始向量V、熵清零;判断所述代码区中的密钥Key、初始向量V、熵是否为零,如果是零,则所述第 二初始化模块是安全的,否则,所述第二初始化模块是不安全的。所述方法还包括,对所述智能密钥设备生成伪随机数过程中的密钥生成模块进 行安全性检测,具体为调用所述密钥生成模块,所述密钥生成模块用于生成密钥key、初始向量V;判断生成的密钥key、初始向量V是否与预先存储的密钥Key、初始向量V相 同,如果相同,则说明所述密钥生成模块是安全的,否则,所述密钥生成模块是不安全 的。所述方法还包括,对所述智能密钥设备生成伪随机数过程中的重置模块进行安 全性检测,具体为判断生成的密钥Key、初始向量V是否与预先存储的密钥Key、初始向量V相 同,如果相同,则说明所述重置模块是安全的,否则,所述重置模块是不安全的。所述方法还包括,对所述智能密钥设备生成伪随机数过程中的伪随机数生成模 块进行安全性检测,具体为调用所述伪随机数生成模块,所述伪随机数生成模块用于生成伪随机数;判断生成的伪随机数是否与预先存储的伪随机相同,如果相同,则所述伪随机 数生成模块是安全的,否则,所述伪随机数生成模块是不安全的。所述关键函数是自定义的。所述存储区包括数据区和代码区;
其中,所述数据区包括用户数据和用户数据差错检测码,所述代码区包括用户 代码和用户代码差错检测码。检测所述存储区中数据区内容的完整性具体为所述智能密钥设备计算所述数据区中用户数据差错检测码,并判断所述计算得 到的差错检测码是否与所述数据区中存储的用户数据差错检测码相同,如果相同,则所 述数据区内容是完整的,否则,所述数据区内容是不完整的。检测所述存储区中代码区内容的完整性具体为所述智能密钥设备计算所述代码区中用户代码的差错检测码,并判断所述计算 得到的差错检测码是否与所述代码区中存储的用户代码差错检测码相同,如果相同,则 所述代码区内容是完整的,否则,所述代码区内容是不完整的。所述差错检测码具体为循环冗余校验码CRC。对第一检测数据进行散列运算,并根据所述散列运算结果来检测散列算法的安 全性具体为所述智能密钥设备根据所述散列算法对所述第一检测数据进行散列运算,并判 断所述运算得到的散列值是否与预先存储的散列值相同,如果相同,则所述散列算法是 安全的,否则,所述散列算法是不安全的;其中,所述散列算法包括SHA1算法和SHA256算法。所述预先存储的散列值是预先根据所述散列算法对第一检测数据进行计算得到 的,并存储在所述智能密钥设备中。对第二检测数据进行加解密操作,并根据所述加解密操作结果来检测加解密算 法的安全性具体为所述智能密钥设备根据对称加密算法对所述第二检测数据进行加解密操作,并 判断所述加解密操作结果是否与预先存储的密文相同,如果相同,则所述加解密算法是 安全的,否则,所述加解密算法是不安全的。所述加解密算法包括对称加解密算法和非对称加解密算法;其中,所述对称加密算法包括AES算法和DES算法;所述非对称加解密算法包 括RSA算法和椭圆曲线算法ECC。所述预先存储的密文是预先根据所述加解密算法对所述第二检测数据进行计算 得到的,并存储在所述智能密钥设备中。所述方法还包括设置自检标识,当所述智能密钥设备进行自检,所述自检结 果错误时,将所述自检标识置为预定值。所述方法还包括当所述智能密钥设备接收到的指令为RSA密钥生成指令时,所述智能密钥设备 生成RSA算法公私密钥对,并判断所述公私密钥对是否匹配,如果匹配,则所述智能密 钥设备生成的RSA公私密钥对是安全的,如果不匹配,则所述智能密钥设备生成的RSA 公私密钥对是不安全的。所述判断所述公私密钥对是否匹配具体为根据所述生成的私钥对第三检测数据进行签名操作,得到签名值;根据所述生成的公钥对所述签名值进行解密操作,得到第一数据
比较所述第一数据是否与第三检测数据相同,若相同,则生成的公私密钥对是 匹配的,否则,生成的公私密钥对是不匹配的。有益效果本发明中智能密钥设备通过对随机数生成安全性、关键函数的安全 性、算法的安全性、存储区的完整性进行自检,保证了智能密钥设备固件本身的安全, 使得数字签名、加解密数据等操作能够运行在一个安全、可靠的环境中,从而大大提高 了智能密钥设备的安全性。
图1为本发明实施图2为本发明实施图3为本发明实施图4为本发明实施图5为本发明实施图6为本发明实施图7为本发明实施
1提供的一种智能密钥设备自检的方法流程图; 1提供的一种检测真随机数生成安全性的方法流程图; 1提供的一种检测伪随机数生成安全性的方法流程图; 1提供的一种检测SHA1算法安全性的方法流程图; 1提供的一种检测关键函数的安全性的方法流程图; 1提供的一种检测数据区完整性的方法流程图; 1提供的一种检测RSA公私密钥对匹配性的方法流程图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施 方式做进一步的描述。实施例1本实施例提供了一种智能密钥设备的自检方法,具体地,智能密钥设备在响应 主机下发的指令之前进行自检操作,其中,自检的内容包括检测智能密钥设备中随机 数(包括真随机数和伪随机数)的生成安全性、检测RSA算法的安全性、检测关键函数 的安全性、检测数据区及代码区的内容完整性,自检的内容还包括根据known answer 的检测方法来检测AES、DES、SHA1、SHA256等算法的安全性;上述自检行为保障了 智能密钥设备的硬件环境的安全性,从而保障了签名、加解密数据等操作是运行在一个 安全的环境中。本实施例以USB Key这种较为典型的智能密钥设备作为该方法的执行主体进行 说明,但并不用以限制该方法的执行主体,本领域技术人员所熟知的智能密钥设备均在 本发明的保护范围之内。参见图1,一种智能密钥设备自检的方法,具体技术方案如下101、USBKey 上电;102、USBKey 进行初始化;具体地,USBKey进行初始化包括设置系统时钟、设置端口状态(如将端口 状态设为输出状态)、及初始化MF (Master File,主文件)等;103、USBKey开始进行自检;USB Key自检的内容如104至113所述,具体如下104、USBKey生成真随机数,并对所生成的真随机数的安全性进行检测;参见图2,USBKey生成真随机数,并对所生成的真随机数的安全性进行检测的具体过程如下104-1、硬件电路获取环境噪音,并将获取的噪音作为随机种子来生成真随机 数,按照该方法连续生成两个真随机数;具体地,USB Key将获取的随机种子采用预定的计算方法来计算得到真随机 数,例如,预定的计算方法为Xn= (Xn_^a+b)mod c,其中,参数a、b、c为整型数 据,mod指求余运算,获取的随机种子是Xn的初始值,通过这样的迭代运算可以得到一 个随机数列。其中,硬件电路为USB Key内真随机数的生成模块,该模块由生产厂家设计完 成;其中,随机种子的获取,即噪音的取样可以采用两种策略1)按一定的基准时 间间隔(如1分钟)连续取噪音样点来生成随机数;2)即时采样,即在需要的时候一次 取若干样点来生成一个随机数;需要说明的是,本实例中也可以将USB Key内的系统时钟、中断信号、电压、 CPU温度等作为生成真随机数时的随机种子;其中,真随机数的大小为32字节。本实施例将环境噪音作为随机种子主要是由于环境噪音属于随机振动,且是 瞬态随机振动,随机性较好,而在随机种子随机性良好的情况下,硬件电路所生成的真 随机数的随机性良好。104-2、对比步骤104-1中先后生成的两个真随机数是否相同,如两者相同,则 说明USB Key内生成的真随机数是不安全的,如两者不同,说明USB Key生成的真随机 数是安全的。本步骤还具体包括如果先后生成的真随机数一样,USB Key向主机报错;若 先后生成的真随机数不一样,USB Key将前一生成的真随机数导出硬件电路,以供后续 操作来使用。105、USB Key生成伪随机数,并对生成的伪随机数的安全性进行检测;具体地,USB Key通过调用第一初始化函数、第二初始化函数、密钥生成函 数、重置函数及伪随机数生成函数来完成伪随机数的生成。具体地,第一初始化函数、第二初始化函数、密钥生成函数、重置函数及伪随 机数生成函数为函数 uninitO、init()、updataO、resead0 及 generate 0。具体地,USB Key中生成伪随机数的过程如下105-A1、调用函数uninitO将代码区中存储的密钥Key、初始向量V、reseed、
自检标识等清零;其中,reseed是一个变量,用于标识updataO函数被调用的次数;其中,自检标识用于表示自检是否出错,该标识的初始状态为0,当自检出错 时,该自检标识将被置为1;需要说明的是,USB Key在接收到power off命令后,调用函数uninitO。105-A2、调用函数initO将代码区中存储的密钥Key、初始向量V、熵(seed)等
清零;具体地,本步骤还包括将变量reseed置为1,开始对updataO函数的调用次数进行计数;105-A3、调用函数updataO,生成密钥Key和初始向量V ;具体地,函数updataO被调用时,传入的参数包括初始化后的密钥Key、初始向 量V、熵及参数reseed;具体地,函数updataO被调用时,操作包括根据3DES算法周密钥Key对初始 向量V进行加密操作,并在加密操作过后,将初始向量V加1,一轮加密操作完成;在进 行下一轮加密操作时,密钥Key对加1后的初始向量V进行加密操作,如此,4轮加密操 作后得到4组8字节的密文(这是由于初始向量V是8字节长的数据),该4组8字节的 密文顺序组成32个字节的数据,该32个字节的数据与熵进行异或操作后得到新的32个 字节的数据,将该新得到的32个字节的数据的前24个字节作为新的密钥Key,而后8个 字节作为新的初始向量V,并将所生成的新的密钥Key、初始向量V存储到代码区;具体地,4轮加密操作结束后,将参数reseed加1。其中,3DES (即Triple DES)是DES向AES过渡的加密算法,使用3条56位的
密钥对数据进行三次加密;数据加密标准(DES)为密码体制中的对称密码体制,又被称 为美国数据加密标准。105-A4、调用函数generate 0生成伪随机数;具体地,函数generate0被调用时,传入的参数包括updataO函数中生成的密钥 Key、初始向量V;具体地,generate 0函数被调用时,用密钥Key对初始向量V进行3DES加密操
作,计算得到伪随机。具体地,本步骤中还包括,判断变量reseed是否小于预定值,如果小于,不做 任何处理,否则,则调用reseedO函数,对熵进行重置,并将参数reseed清零;其中,预定值是自定义的,本实例中为10万。参见图3,对生成的伪随机的安全性进行检测的过程具体如下105-B1、对uninitO函数进行检测;具体地,判断密钥Key、初始向量V、reseed是否为零,如果是,执行105-B2, 否则,uninitO函数出错,向主机返回错误报告;105-B2、对initO函数进行检测;具体地,判断密钥Key、初始向量V是否为零,是,则执行步骤105-B3,否 则,initO函数出错,向主机返回错误报告;105-B3、对updataO函数进行检测;具体地,判断updataO函数生成的Key及V与已知的Key和V是否一致,若一 致,则说明updataO函数是安全的,否则,updataO函数出错,向主机返回错误报告;105-B4、对reseedO函数进行检测;具体地,判断密钥Key、初始向量V、reseed是否为零,如果是,执行105-B5, 否则,reseedO函数出错,向主机返回错误报告;105-B5、对 generate 0 函数进行检测;具体地,判断生成的伪随机数是否与已知的预先存储的伪随机数相一致,若一 致,则说明generateO函数是安全的,否则,generate()函数出错,向主机返回错误报告;需要说明的是,USB Key中生成的随机数作为RSA算法模块在生成公私密钥对 时用到的大素数的选取对象;另外,生成的随机数还可以作为测试数据。106、USB Key对散列算法的安全性进行检测;其中,散列算法具体包括SHA1、SHA5、MD5等,本实例中以SHA1算法的检
测为例来进行说明;现有一组检测数据,如0x00101110001110010101110011,采用 SHA1 算法 对该组数据进行计算后得到的摘要值为0xD8E22807,USBKey存储有该组检测数据 0x00101110001110010101110011,及其经过 SHA1 算法计算得到的摘要值 0xD8E22807 ;参见图4,对SHA1算法的安全性进行检测的过程如下106-1、采用SHA1算法对存储的检测数据进行计算,得到摘要值;具体地,对检测数据0x00101110001110010101110011进行SHA1计算,得到摘 要值 0xD8E22807 ;106-2、判断106-1中计算摘要值与存储的摘要值是否一致,若一致,则SHA1 算法是安全的,若不一致,则SHA1算法是不安全的,向主机报告错误信息。本实施例中,106-1中计算得到的摘要值为0xD8E22807,与存储的摘要值 0xD8E22807相同,则USB Key内的SHA1算法是安全的;需要说明的是,其他散列算法的检测与SHA1算法的检测是一样的,此处就不 再赘述。107、USB Key对DES算法模块的安全性进行检测;具体地,USBKey对DES算法的检测方法与散列算法的相同,此处就不再赘述。108、USB Key对AES算法的安全性进行检测;其中,AES(Advanced Encryption Standard)为高级加密标准,又称 Rijndael 加密法。具体地,对AES算法的检测与散列算法的检测方法一样,此处就不再赘述。109、USBKey对设置的关键函数的安全性进行检测;其中,关键函数可以是自定义的,本实例以自定义的关键函数EEPROM_Write() 为例来说明检测的过程;在对关键函数EEPROM_Write()的检测进行说明之前,需要知道的是闪存 (Flash Memory)是一种长寿命的非易失性(在断电情况下仍能保持所存储的数据信息) 的存储器,数据的存储、删除不是以单个字节为单位而是以固定长度的区块为单位的, 如NAND型闪存的基本存储单元为页(Page),类似硬盘的扇区;关键函数EEPROM_ writeO就是用于将用户数据按页写入到Flash中,其中,分页大小是64字节。还需要知道的是函数EEPROM_read(),该函数用于将flash中的数据按页读出 来;需要说明的是,EEPROM_write0、EEPROM_read0函数中的参数包括数 据写入flash的偏移量off、写入数据的长度len、写入数据data,在对函数EEPROM_ write()> EEPROM_read()函数进行测试时,上述参数是由用户指定的;
参见图5,对关键函数EEPROM_write()的安全性的检测的具体过程如下109-1、生成一组检测数据;本实施例中,生成的检测数据的大小不超过64字节;具体地,USB Key可以将生成的伪随机数作为该检测数据;109-2、将检测数据按页写入flash芯片;具体地,EEPROM_Write()函数将检测数据写入到flash芯片中的第一偏移地址 处;其中,第一偏移地址是预先约定的;109-3、调用函数EEPROM_read(),从第二偏移地址开始从flash芯片中读出指
定长度的数据;其中,第二偏移地址与第一偏移地址相同;其中,读出数据的长度与检测数据的长度相同;109-4、判断读出的数据是否与检测数据相同,如果不相同,则报错,如果相 同,则关键函数EEPROM_write()是安全的;110、USB Key对数据区的完整性进行检测;其中,USB Key数据区的数据由两部分组成用户数据和EDC(error detection code)码;其中,EDC码具体可以是循环冗余校验码CRC ;其中,EDC码的最小长度为18位。本实例中,数据区的数据具体为0x01ab22344564ce4100024d485788976伪994643 13cbd00f, CRC 码部分为 0x579CF6B0。参见图6,USB Key对数据区的完整性进行检测的过程如下110-1、USB Key根据数据区的数据计算CRC码;具体地,计算数据0x01ab22344564ce4100024d485788976ffi99464313cbd 00f 的 CRC 码,得到 0x579CF6B0 ;110-2、判断计算得到的CRC码与数据区中的CRC码是否一致,一致,则说明 数据区的内容完整,没有经过修改或伪造,否则,报错;本实例中,计算得到的CRC码为0x579CF6B0与数据区中的CRC码字段是一样 的,因此所述数据区是完整的。111、USB Key对代码区的完整性进行检测;具体地,代码区的内容也包括两部分用户代码和CRC码,相应地,对代码区 的完整性检测的方法与数据区的完整性检测方法一样,此处就不再赘述。需要说明的是,当USB Key代码段中有补丁程序添加进来的时候,对补丁程序 的完整性也采用检测数据区完整性的方法进行检测,此处就不再赘述。112、USB Key与主机建立第一通信;具体地,与主机建立第一通信为USB Key与主机建立物理的基础连接;例如 USBKey复位,接收到主机下发的枚举USB设备的指令,USB Key告知主机自身的情况 (如设备类型、协议类型等)等。具体地,USBKey枚举操作结束后,向主机返回设备描述符、配置描述、接口描述符、端点描述符等描述符信息,主机在获知这些描述符信息后,会向USBKey设备 发送power on命令;在具体实现时,还可以将上述真随机数的生成安全性检测、伪随机数的生成安 全性检测、散列算法的安全性检测、AES或DES算法的安全性检测、关键函数的安全性 检测、数据区及代码区的完整性检测放在USB Key与主机建立第一通信的过程中进行, 或放在USB Key与主机建立第一通信之后进行,或放在USB Key与主机建立第一通信的 过程中及与主机建立第一通信之后进行,或放在USB Key与主机建立第一通信之间及与 主机建立第一通信的过程中进行,或放在USB Key与主机建立第一通信之前、与主机建 立第一通信的过程中及于主机建立第一通信之后进行。在具体实现时,上述真随机数的生成安全性检测、伪随机数的生成安全性检 测、散列算法的安全性检测、AES或DES算法的安全性检测、关键函数的安全性检测、 数据区及代码区的完整性检测的检测顺序是任意的。USB Key在接收到主机下发的power on命令后,执行如下的操作113、USB Key对RSA算法模块的安全性进行检测;其中,对RSA算法模块的安全性检测具体是对RSA算法签名操作的安全性进行 检测;需要知道的是,在对RSA算法的安全性进行检测时,已知数据由检测数据、检 测数据的签名值、密钥Key等,上述数据是预先存放在数据区中的;其中,密钥Key是由RSA算法模块生成的;具体地,对RSA算法签名操作的安全性的检测如下113-1、根据密钥Key对检测数据进行签名操作,得到签名值;113-2、比较计算得到的签名值是否与预先存储的签名值相一致,若不一致,则 报错,若一致,则RSA算法的签名操作是安全的。这里需要说明的是,当USBKey中存在椭圆曲线算法ECC时,还要对ECC算法 的安全性进行检测,具体检测方式与RSA算法类似,此处就不再赘述。114、USBKey响应主机发送的power on命令,与主机建立第二通信;USB Key与主机建立第二通信具体是指,USB Key与主机之间建立逻辑上的通 信,即UBS Key枚举操作结束,主机知道USB Key的具体类型(如USB Key是CCID设 备还是HID设备等)后,为USBKey加载相应的驱动,至此,USB Key与主机之间建立 了第二通信,之后,USBKey等待接收主机下发的指令(如APDU指令);其中APDU指令是英文Application Protocol Data Unit的缩写,意思为应用协议数 据单元。115、USB Key接收到主机下发的生成RSA算法密钥的指令;116、检查自检标识是否为1,如果为1,则报错,否则,执行117;具体地,当USBKey接收到主机下发的APDU(应用协议数据单元)格式的指令 时,都会查询自检标识,若自检标识为1,不对接收到的APDU指令进行任何的处理,向 主机返回0x6F00 ;117、USB Key生成RSA算法公私密钥对;以下简单的介绍一下RSA算法公私密钥对的生成原理1)、寻找两个素数p、q,其中数据p、q由大素数分解而来,而USB Key中大素数是从生成的随机数中选取 的;2)、取 n = p*q; 3)、t = (p-1) * (q_l) ; 4)、找到 e,要求满足 e < t 且 e 与 t 互素; 5)、计算d*e%t=l;经过上述计算得到n、d、e,n、d即为RSA算法公钥,n、e即 为RSA算法私钥。需要说明的是,USB Key中的RSA算法模块中固件程序可以自动生成基于上述 原理的RSA公私密钥对。118、USB Key对生成的公私密钥对的匹配性进行检测;参见图7,对生成的公私密钥对的匹配性进行检测的过程如下118-1、用生成的私钥对USB Key中生成的随机数进行签名操作,得到签名 值;118-2、用生成的公钥对118-1中计算得到的签名值进行解密操作,得到明文;118-3、比较118-1中计算得到的明文是否与118-2中用于签名的随机数相一 致,如果一致,则说明公私密钥对是匹配的,否则,报错;还需要说明的是,USB Key在与主机建立第二通信后,除了会对RSA算法公私 密钥对的匹配性进行测试外,还会进行一些其他的条件测试,如随机数的连续性检测、 手工密钥项测试、软/固组件的加载测试等,具体的检测方式就不再一一陈述了;需要说明的是,上述检测方法同样适用于智能卡芯片安全性的检测,智能卡芯 片与主机之间是通过IS07816通信协议或IS014443通信协议来进行信息的交互的;需要说明的是,在对智能卡芯片的安全行进行检测时,上述检测内容可以在智 能卡芯片进行ATR(Answer To Reset,复位应答),即与主机建立第一通信之前进行检 测,也可以在智能卡芯片进行复位应答之后进行检测,还可以穿插在复位应答的过程中 进行检测,如将上述检测内容的一部分放在返回ATR时序的第一个字符之前进行检测, 而剩余部分在返回ATR时序的第一个字符之后进行等,当然,还可以将上述检测内容穿 插在ATR之前、ATR过程中、ATR之后进行;智能密钥设备通过进行上述一系列的检测后,确保了智能密钥设备中的算法是 安全的,生成的随机数是安全的,数据区及代码区的内容的完整无误的,即保证智能密 钥设备在进行数据加密或数字签名操作时是运行在安全可靠的环境内的,从而进一步的 提高了智能密钥设备的安全性。以上所述仅是本发明的较佳实施例,并不用于限制本发明,凡在本发明的精神 和原则之内,所做的任何修改、等同替换、改进等,均应在本发明的保护范围之内。
权利要求
1.一种智能密钥设备的自检方法,其特征在于,所述方法包括智能密钥设备上电;所述智能密钥设备进行初始化;所述智能密钥设备执行如下操作,包括与主机建立第一通信、生成随机数并检测 所述随机数的安全性、检测关键函数的安全性、计算存储区存储内容的差错检测码并根 据所述计算得到的差错检测码来检测所述存储区存储内容的完整性、对第一检测数据进 行散列运算并根据所述散列运算结果来检测散列算法的安全性和对第二检测数据进行加 解密操作并根据所述加解密操作结果来检测加解密算法的安全性;所述智能密钥设备与所述主机建立第二通信,并等待接收所述主机下发的指令。
2.根据权利要求1所述的方法,其特征在于,所述随机数包括真随机数和伪随机数。
3.根据权利要求2所述的方法,其特征在于,当所述随机数为真随机数时,检测所述 随机数的安全性具体为所述智能密钥设备获取随机种子,所述随机种子包括环境噪音、系统时钟、中断 信号、CPU温度、电压;所述智能密钥设备根据所述随机种子按照预设计算方法连续生成两个真随机数;所述智能密钥设备判断所述生成的两个真随机数是否相同,如果不相同,则真随机 数的生成是安全的,否则,真随机数的生成是不安全的。
4.根据权利要求2所述的方法,其特征在于,当所述随机数为伪随机数时,检测所述 随机数的安全性具体为所述智能密钥设备生成伪随机数,并判断所述生成的伪随机数是否与预先存储的伪 随机数相同,如果相同,则伪随机数的生成是安全的,否则,伪随机数的生成是不安全 的。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括,对所述智能密钥设备 生成伪随机数过程中的第一初始化模块进行安全性检测,具体为调用所述第一初始化模块,所述第一初始化模块用于将代码区中的密钥Key、初始 向量V、变量reseed、自检标识清零;判断所述代码区中的密钥Key、初始向量V、变量reseed及自检标识是否为零,如果 是零,则所述第一初始化模块是安全的,否则,所述第一初始化模块是不安全的。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括,对所述智能密钥设备 生成伪随机数过程中的第二初始化模块进行安全性检测,具体为调用所述第二初始化模块,所述第二初始化模块用于将代码区中的密钥Key、初始 向量V、熵清零;判断所述代码区中的密钥Key、初始向量V、熵是否为零,如果是零,则所述第二初 始化模块是安全的,否则,所述第二初始化模块是不安全的。
7.根据权利要求4所述的方法,其特征在于,所述方法还包括,对所述智能密钥设备 生成伪随机数过程中的密钥生成模块进行安全性检测,具体为调用所述密钥生成模块,所述密钥生成模块用于生成密钥key、初始向量V;判断生成的密钥key、初始向量V是否与预先存储的密钥Key、初始向量V相同,如 果相同,则说明所述密钥生成模块是安全的,否则,所述密钥生成模块是不安全的。
8.根据权利要求4所述的方法,其特征在于,所述方法还包括,对所述智能密钥设备 生成伪随机数过程中的重置模块进行安全性检测,具体为判断生成的密钥Key、初始向量V是否与预先存储的密钥Key、初始向量V相同,如 果相同,则说明所述重置模块是安全的,否则,所述重置模块是不安全的。
9.根据权利要求4所述的方法,其特征在于,所述方法还包括,对所述智能密钥设备 生成伪随机数过程中的伪随机数生成模块进行安全性检测,具体为调用所述伪随机数生成模块,所述伪随机数生成模块用于生成伪随机数;判断生成的伪随机数是否与预先存储的伪随机相同,如果相同,则所述伪随机数生 成模块是安全的,否则,所述伪随机数生成模块是不安全的。
10.根据权利要求1所述的方法,其特征在于,所述关键函数是自定义的。
11.根据权利要求1所述的方法,其特征在于,所述存储区包括数据区和代码区;其中,所述数据区包括用户数据和用户数据差错检测码,所述代码区包括用户代码和用户代码差错检测码。
12.根据权利要求11所述的方法,其特征在于,检测所述存储区中数据区内容的完整 性,具体为所述智能密钥设备计算所述数据区中用户数据差错检测码,并判断所述计算得到的 差错检测码是否与所述数据区中存储的用户数据差错检测码相同,如果相同,则所述数 据区内容是完整的,否则,所述数据区内容是不完整的。
13.根据权利要求11所述的方法,其特征在于,检测所述存储区中代码区内容的完整 性,具体为所述智能密钥设备计算所述代码区中用户代码的差错检测码,并判断所述计算得到 的差错检测码是否与所述代码区中存储的用户代码差错检测码相同,如果相同,则所述 代码区内容是完整的,否则,所述代码区内容是不完整的。
14.根据权利要求1所述的方法,其特征在于,所述差错检测码具体为循环冗余校验 码 CRC。
15.根据权利要求1所述的方法,其特征在于,对第一检测数据进行散列运算,并根 据所述散列运算结果来检测散列算法的安全性具体为所述智能密钥设备根据所述散列算法对所述第一检测数据进行散列运算,并判断所 述运算得到的散列值是否与预先存储的散列值相同,如果相同,则所述散列算法是安全 的,否则,所述散列算法是不安全的;其中,所述散列算法包括SHAl算法和SHA256算法。
16.根据权利要求15所述的方法,其特征在于,所述预先存储的散列值是预先根据所 述散列算法对第一检测数据进行计算得到的,并存储在所述智能密钥设备中。
17.根据权利要求1所述的方法,其特征在于,对第二检测数据进行加解密操作,并 根据所述加解密操作结果来检测加解密算法的安全性具体为所述智能密钥设备根据对称加密算法对所述第二检测数据进行加解密操作,并判断 所述加解密操作结果是否与预先存储的密文相同,如果相同,则所述加解密算法是安全 的,否则,所述加解密算法是不安全的。
18.根据权利要求17所述的方法,其特征在于,所述加解密算法包括对称加解密算法和非对称加解密算法;其中,所述对称加密算法包括AES算法和DES算法;所述非对称加解密算法包括 RSA算法和椭圆曲线算法ECC。
19.根据权利要求17所述的方法,其特征在于,所述预先存储的密文是预先根据所述 加解密算法对所述第二检测数据进行计算得到的,并存储在所述智能密钥设备中。
20.根据权利要求1所述的方法,其特征在于,所述方法还包括设置自检标识,当 所述智能密钥设备进行自检,所述自检结果错误时,将所述自检标识置为预定值。
21.根据权利要求1所述的方法,其特征在于,所述方法还包括当所述智能密钥设备接收到的指令为RSA密钥生成指令时,所述智能密钥设备生成 RSA算法公私密钥对,并判断所述公私密钥对是否匹配,如果匹配,则所述智能密钥设 备生成的RSA公私密钥对是安全的,如果不匹配,则所述智能密钥设备生成的RSA公私 密钥对是不安全的。
22.根据权利要求21所述的方法,其特征在于,所述判断所述公私密钥对是否匹配具 体为根据所述生成的私钥对第三检测数据进行签名操作,得到签名值;根据所述生成的公钥对所述签名值进行解密操作,得到第一数据比较所述第一数据是否与第三检测数据相同,若相同,则生成的公私密钥对是匹配 的,否则,生成的公私密钥对是不匹配的。
全文摘要
本发明提供了一种智能密钥设备的自检方法,属于信息安全领域。方法包括智能密钥设备上电;所述智能密钥设备进行初始化;所述智能密钥设备执行如下操作,包括与主机建立第一通信、生成随机数并检测所述随机数的安全性、检测关键函数的安全性、计算存储区存储内容的差错检测码并根据所述计算得到的差错检测码来检测所述存储区存储内容的完整性、对第一检测数据进行散列运算并根据所述散列运算结果来检测散列算法的安全性和对第二检测数据进行加解密操作并根据所述加解密操作结果来检测加解密算法的安全性;所述智能密钥设备与所述主机建立第二通信,并等待接收所述主机下发的指令。
文档编号H04L9/14GK102014015SQ20101021415
公开日2011年4月13日 申请日期2010年6月29日 优先权日2010年6月29日
发明者于华章, 陆舟 申请人:北京飞天诚信科技有限公司