安全认证在安全模块(ESAM)中的应用分析
2018-10-17许爱东杨祎巍陈华军
◆洪 超 许爱东 杨祎巍 陈华军 明 哲 卓 越
安全认证在安全模块(ESAM)中的应用分析
◆洪 超 许爱东 杨祎巍 陈华军 明 哲 卓 越
(南方电网科学研究院有限责任公司 广东 510663)
安全模块广泛应用于各种嵌入式终端,其中一个关键任务就是提供安全认证功能。本文对安全模块中常用的几种安全认证方法工作原理进行了详细描述,同时也详细描述了认证过程中使用到的密钥分散的工作原理,最后对认证对象之间的关系、安全认证的应用场景及安全性进行了对比分析。
ESAM;安全认证;密钥分散
0 引言
嵌入式安全控制模块(Embedded Secure Access Module),简称安全模块(ESAM),是一块采用DIP或SOP封装具有操作系统的安全芯片。目前被广泛应用于各种嵌入式终端,如电能表、配网终端、充电桩等,提供数据安全存储、数据加解密、安全认证等功能。
安全认证是交互双方互相确认对方身份的过程,以便“被操作方”确认“操作方”是否具有对某种资源的访问或使用权限,防止非授权访问或操作。参与认证的对象涉及安全模块、终端、主站和卡片。
本文将先对安全模块常用的几种安全认证方式[1-3]的工作原理进行详细描述,再对安全认证中使用到的密钥分散的原理进行描述,最后对安全认证方式进行对比讨论。
1 外部认证
外部认证用于安全模块验证终端或主站的合法性,以便获得对安全模块的操作权限。详细步骤如下:
(1)主站或终端首先请求安全模块生成随机数R。
(2)主站或终端使用约定好的密钥key对随机数R进行加密,得到密文ER,并将密钥的kid及密文ER发送给安全模块。
(3)安全模块收到后,根据kid读取密钥并对随机数R进行加密,得到密文ER’。
(4)安全模块比较ER'和ER,如果相等,则认证成功,否则认证失败。
(5)如果认证成功,安全模块则根据密钥key对应的安全级别设置访问权限。
外部认证的详细流程如图1所示。
图1 外部认证的详细流程
2 内部认证
内部认证用于终端或主站验证安全模块的合法性。详细步骤如下:
(1)终端或主站生成随机数R,并连同密钥的kid一同发给安全模块。
(2)安全模块收到后,根据kid获取密钥key,对随机数R进行加密,得到密文ER',并返回给终端或主站。
(3)终端或主站收到后,根据kid获取密钥key,对随机数R进行加密,得到ER。
(4)终端或主站比较ER'和ER,如果相等,则认证成功,否则认证失败。
(5)如果认证成功,终端或主站则设置访问权限或将安全模块置为可信。
内部认证的详细流程如图2所示。
图2 内部认证的详细流程
3 远程认证
安全模块安装于终端中,通常终端本身不具有密码功能,无法自行进行加解密,密码功能由安全模块提供。因此,当终端需要验证主站的合法性时,需要借助安全模块实现远程认证。远程认证的详细步骤如下:
(1)主站使用分散因子D对约定好的密钥key进行分散,得到临时密钥key'。分散因子通常为终端的序号,如终端为电能表,则为表号。
(2)主站生成随机数R,并使用分散后的密钥key'进行加密,得到密文ER。
(3)主站将随机数R,密文ER及分散因子D一同发送给终端。
(4)终端把约定好的密钥kid和分散因子D发送给安全模块,要求进行密钥分散。
(5)安全模块收到后,根据kid读取密钥key,并使用分散因子D进行分散得到临时密钥key',并返回密钥分散成功确认。
(6)终端收到确认后,将随机数R发送给安全模块。
(7)安全模块使用分散后的密钥key'加密随机数R,得到密文ER',返回给终端。
(8)终端比较ER'和ER,如果相等,则认证成功,设置访问权限;否则认证失败。最后将认证结果返回给主站。
远程认证的详细流程如图3所示。
图3 远程认证的详细流程
4 双向认证
某些终端因网络覆盖或其他原因,不直接与主站进行交互,而是通过智能卡进行交互,这时卡片和终端均要验证需对方的合法性。同样通常终端本身不具有密码功能,因此终端借助安全模块实现与卡片之间的双向认证。双向认证的详细步骤如下:
(1)卡片复位后,终端首先请求卡片生成随机数R1。
(2)终端将卡片序号作为分散因子D,连同随机数R1及事先设置好的密钥kid1和kid2发送给安全模块。分散因子通常为卡片的序号。
(3)安全模块根据密钥kid1和kid2读取密钥key1和key2。
(4)安全模块使用分散因子D对密钥key1和key2进行分散,得到key1'和key2'。
(5)安全模块使用key1'对随机数R1进行加密得到密文ER1。
(6)安全模块生成随机数R2,并使用key2'进行加密得到密文ER2。
(7)安全模块将ER1,R2和ER2发送给终端。
(8)终端将ER1、R2及密钥kid1和kid2发送给卡片。
(9)卡片根据密钥kid1和kid2读取密钥key1和key2。
(10)卡片使用卡片序号作为分散因子,对密钥key1和key2进行分散,得到key1'和key2'。
(11)卡片使用key1'对随机数R1进行加密得到密文ER1'。
(12)卡片比较ER1'和ER1,如果不相等,则认证失败,否则认证成功,这时卡片认为终端是合法的,设置终端的访问权限。
(13)卡片使用key2'对随机数R2进行加密得到密文ER2',并返回给终端。
(14)终端比较ER2'和ER2,如果不相等,则认证失败,否则认证成功,这时终端也认为卡片是合法的,设置卡片的访问权限,完成双向认证。
双向认证的详细流程如图4所示。
图4 双向认证的详细流程
5 密钥分散
在认证过程中,密钥使用时,有时并不是直接使用,而是将初始密钥经过分散产生子密钥。密钥分散增加了密钥的多样性,减少了重复使用同一密钥导致密钥泄露的风险。
密钥分散其实是将初始密钥作为加密密钥,对分散因子进行加密运算,得到加密结果即为子密钥。当进行多级分散时,上一级分散产生的子密钥就作为加密密钥,对本级的分散因子进行加密,产生本级的子密钥。最后一级分散得到的子密钥即为多级分散最终的子密钥。密钥分散流程如图5所示。
图5 密钥分散流程
6 对比分析
参与认证的几个对象之间的关系如表1所示,在远程认证和双向认证中,安全模块起到辅助的作用,协助终端进行密钥管理、密钥分散和数据加密,并将加密结果返回给终端进行判断。
表1 认证对象之间的关系
外部认证多用于安全模块出厂发行时,用于模块初始化、文件创建/删除、密钥更新等重要操作前的身份认证,防止误操作或恶意操作。
内部认证通常用于终端或主站验证安全模块的合法性,防止安全模块被恶意替换。由于终端和安全模块作为一个整体,因此也可以用于主站验证终端的合法性。
远程认证用于终端验证主站的合法性,防止恶意分子伪造主站下发恶意指令。
双向认证则用于卡片与终端之间的相互认证,既防止伪终端;也防止了卡片伪造。
在认证过程中,都引入了随机数,目的就是防止重放攻击。在远程认证和双向认证,以卡片或终端的序列号作为分散因子进行密钥分散,是为了增加密钥的多样性,减低泄露风险。但安全模块作为终端的辅助旁挂于终端MCU,在远程认证和双向认证过程中,认证结果是由终端MCU进行判断,一旦MCU被恶意代码控制,安全模块就会被旁路。
7 结束语
本文研究了外部认证、内部认证、远程认证及双向认证四种常用的安全认证方式的工作流程及原理,并对认证对象之间的关系、认证的应用场景及安全性进行了对比分析。
[1]GB/T 16649.4-2010/ISO/IEC 7616-4:2005.识别卡、集成电路卡第4部分:用于交换的结构、安全和命令.
[2]GB/T 15843.2-2008.信息技术、安全技术、实体鉴别第2部分: 采用对称加密算法的机制.
[3]Q/CSG 1209005-2015.中国南方电网有限责任公司费控电能表信息交换安全认证技术要求.