本发明涉及信息安全领域,尤其涉及一种交互式电子签名方法。
背景技术:
随着身份认证技术的发展与应用,电子签名载体(如智能密钥设备等)得到广泛应用,如在网上银行认证、网上证券交易认证等身份认证过程中,电子签名载体成为用户身份认证的工具。
现有技术中,数据在传入电子签名载体后,没有进行数据验证即进行签名,如果数据在主机端被篡改,电子签名载体就不能及时的识别错误数据,导致电子签名载体执行了错误的签名操作,而且现有的电子签名载体中只有一个签名证书,适用范围窄,安全性低。
技术实现要素:
本发明的目的是为了解决现有技术中存在的问题,提供了一种交互式电子签名方法。
本发明采用的技术方案是:一种交互式电子签名方法,包括:
步骤S1:电子签名载体上电初始化;
步骤S2:所述电子签名载体等待接收主机下发的指令;
步骤S3:当所述电子签名载体接收到签名指令时,获取并判断待签名数据和待签名密钥;
当所述待签名数据为交互式签名数据且所述待签名密钥为交互式签名密钥 时,执行步骤S4;
当所述待签名数据为非交互式签名数据且所述待签名密钥为非交互式签名密钥时,执行步骤S6;
步骤S4:所述电子签名载体从所述交互式待签名数据中获取交互信息,显示所述交互信息,并等待用户按键确认,判断在预设时间内是否接收到用户按键确认,如果是,则执行步骤S5,否则报错,返回步骤S2;
步骤S5:所述电子签名载体根据所述交互式签名数据、所述交互式签名密钥和内部保存的交互式证书,得到交互式签名结果,并发送至所述主机,返回步骤S2;
步骤S6:所述电子签名载体根据所述非交互式签名数据、所述非交互式签名密钥和内部保存的非交互式证书,得到非交互式签名结果,并发送至所述主机,返回步骤S2。
所述步骤S3,还包括:当所述待签名数据为交互式签名数据且所述待签名密钥为非交互式签名密钥时,对所述交互式签名数据进行预处理,得到非交互式签名数据,执行步骤S6。
所述步骤S3,还包括:当所述待签名数据为交互式签名数据且所述待签名密钥为非交互式签名密钥时,报错,返回步骤S2。
所述步骤S3,还包括:当所述待签名数据为非交互式签名数据且所述待签名密钥为交互式签名密钥时,报错,返回步骤S2。
所述步骤S3中,所述电子签名载体获取待签名数据和待签名密钥,具体为:所述电子签名载体从所述签名指令中获取待签名数据和待签名密钥ID,根据所述待签名密钥ID从电子签名载体中获取对应保存的待签名密钥。
所述步骤S3之前还包括:当所述电子签名载体接收到哈希指令时,从所述 哈希指令中获取待签名数据和待签名密钥ID,保存所述待签名数据,并判断所述待签名密钥ID,如果是交互式签名密钥ID,则根据所述待签名密钥ID获取交互式签名密钥,将其作为已选定的待签名密钥,如果是非交互式签名密钥ID,则根据所述待签名密钥ID获取非交互式签名密钥,将其作为已选定的待签名密钥;
所述步骤S3中,所述电子签名载体获取待签名数据和待签名密钥,具体为:所述电子签名载体获取保存的待签名数据和已选定的待签名密钥。
所述步骤S3之前还包括:
当所述电子签名载体接收到设置安全环境指令,则从所述设置安全环境指令中获取待签名密钥ID,判断所述待签名密钥ID,如果是交互式签名密钥ID,则根据所述待签名密钥ID获取交互式签名密钥,将其作为已选定的待签名密钥,如果是非交互式签名密钥ID,则根据所述待签名密钥ID获取非交互式签名密钥,将其作为已选定的待签名密钥;
当所述电子签名载体接收到哈希指令时,从所述哈希指令中获取待签名数据并保存;
所述步骤S3中,所述电子签名载体获取待签名数据和待签名密钥,具体为:所述电子签名载体获取保存的待签名数据和已选定的待签名密钥。
所述判断所述待签名密钥ID,具体为:判断所述待签名密钥ID的值,如果所述待签名密钥ID为第一预设值,则所述待签名密钥为交互式密钥ID,如果所述待签名密钥ID为第二预设值,则所述待签名密钥为非交互式密钥ID。
所述步骤S3中,所述电子签名载体判断待签名数据,具体为:判断所述待签名数据是否符合预设报文格式,如果是,则所述待签名数据为交互式签名数据,否则所述待签名数据为非交互式签名数据。
当判定所述待签名数据不符合预设报文格式时,还包括:判断所述待签名数据的长度是否为预设长度,如果是,则所述待签名数据为非交互式签名数据,否则对所述待签名数据进行预处理,将预处理结果作为非交互式签名数据。
所述步骤S5中,所述电子签名载体根据所述交互式签名数据、所述交互式签名密钥和内部保存的交互式证书,得到交互式签名结果,具体包括:
步骤b1:所述电子签名载体对所述交互式签名数据进行预处理,得到交互式预处理结果,并根据所述交互式签名密钥获取对应的交互式证书,从所述交互式证书中获取交互式证书ID;
步骤b2:所述电子签名载体应用第一预设签名算法,对所述交互式证书ID、所述交互式预处理结果和所述交互式签名密钥进行处理,得到交互式签名结果。
所述电子签名载体对所述交互式签名数据进行预处理,具体为:
步骤a1:所述电子签名载体根据预设哈希算法,对所述交互式签名数据进行哈希运算,得到哈希结果;
步骤a2:所述电子签名载体将所述预设哈希算法的算法标识与所述哈希结果进行拼接,得到拼接结果;
步骤a3:所述电子签名载体根据预设长度,对所述拼接结果进行补位。
所述步骤S6中,所述电子签名载体根据所述非交互式签名数据、所述非交互式签名密钥和内部保存的非交互式证书,得到非交互式签名结果,具体包括:所述电子签名载体根据所述非交互式签名密钥获取对应的非交互式证书,从所述非交互式证书中获取非交互式证书ID,应用第二预设签名算法,对所述非交互式签名数据、所述非交互式证书ID和所述非交互式签名密钥进行处理,得到非交互式签名结果。
所述步骤S4具体包括:所述电子签名载体从所述交互式待签名数据中获取 交互信息,显示所述交互信息,并等待用户按键确认,判断在预设时间内是否接收到用户按键确认,如果是接收到按键确认,则执行步骤S5;如果接收到按键取消,则将所述交互式待签名数据删除,并向所述主机返回签名失败响应,返回步骤S2;如果未接收到按键,则将所述交互式待签名数据删除,并向所述主机返回超时响应,返回步骤S2。
所述方法还包括:
步骤a1:所述主机接收到签名结果时,获取已保存的所述待签名数据和与所述待签名密钥对应的签名公钥,将所述待签名数据、所述签名结果和所述签名公钥发送至服务器;
步骤a2:所述服务器判断所述待签名数据和所述签名公钥,如果所述待签名数据和所述签名公钥均为交互式,则执行步骤a3,如果所述待签名数据和所述签名公钥均为非交互式时,则执行步骤a4,否则报错,结束;
步骤a3:所述服务器应用第一预设哈希算法对所述待签名数据进行哈希运算,得到第一结果,并根据第一预设解密算法,应用所述签名公钥对所述签名结果进行解密,得到第二结果,执行步骤a5;
步骤a4:所述服务器应用第二预设哈希算法对所述待签名数据进行哈希运算,得到第一结果,并根据第二预设解密算法,应用所述签名公钥对所述签名结果进行解密,得到第二结果,执行步骤a5;
步骤a5:所述服务器判断所述第一结果与所述第二结果是否相同,如果是,则执行步骤a6,否则结束;
步骤a6:所述服务器向所述主机返回验证成功响应,结束。
本发明取得的有益效果是:采用本发明的技术方案,能够实现一个电子签 名载体中具有两种签名方式,交互式签名和非交互式签名,而且每种签名对应各自的证书和密钥,保证了签名的安全性。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例1提供的一种交互式电子签名方法流程图;
图2是本发明实施例2提供的另一种交互式电子签名方法流程图;
图3是本发明实施例3提供的再一种交互式电子签名方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本发明实施例1提供了一种交互式电子签名方法,如图1所示,包括:
步骤101:电子签名载体上电初始化;
步骤102:电子签名载体等待接收主机下发的指令;
步骤103:当电子签名载体接收到签名指令时,获取并判断待签名数据和待签名密钥;
当待签名数据为交互式签名数据且待签名密钥为交互式签名密钥时,执行步骤104;
当待签名数据为非交互式签名数据且待签名密钥为非交互式签名密钥时,执行步骤106;
当待签名数据为交互式签名数据且待签名密钥为非交互式签名密钥时,对交互式签名数据进行预处理,得到非交互式签名数据,执行步骤106;
本实施例中,当待签名数据为交互式签名数据且待签名密钥为非交互式签名密钥时,还可以不进行操作,直接报错,返回步骤102;
当待签名数据为非交互式签名数据且待签名密钥为交互式签名密钥时,报错,返回步骤102;
本实施例中,获取待签名数据和待签名密钥,具体为:从接收到的签名指令中获取待签名数据和待签名密钥ID,根据待签名密钥ID获取对应的待签名密钥;
在步骤S3之前,还包括:电子签名载体接收到哈希指令时,从哈希指令中获取待签名数据和待签名密钥ID,保存待签名数据,根据待签名密钥ID获取对应的待签名密钥,并作为已选定的待签名密钥;则步骤S3中,获取待签名数据和待签名密钥,具体为:获取保存的待签名数据和已选定的待签名密钥;
在步骤S3之前,还包括:电子签名载体接收到设置安全环境指令时,从设置安全环境指令中获取待签名密钥ID,根据待签名密钥ID获取对应的待签名密钥,将其作为已选定的待签名密钥;在步骤S3之前,还包括:电子签名载体接收到哈希指令时,从哈希指令中获取待签名数据并保存,则步骤S3中,获取待签名数据和待签名密钥,具体为:获取保存的待签名数据和已选定的待签名密钥;
步骤104:电子签名载体从交互式待签名数据中获取交互信息,显示交互信息,并等待用户按键确认,判断在预设时间内是否接收到用户按键确认,如果是,则执行步骤105,否则报错,返回步骤102;
步骤105:电子签名载体根据交互式签名数据、交互式签名密钥和内部保存的交互式证书,得到交互式签名结果,并发送至主机,返回步骤102;
步骤106:电子签名载体根据非交互式签名数据、非交互式签名密钥和内部保存的非交互式证书,得到非交互式签名结果,并发送至主机,返回步骤102。
实施例2
本发明实施例2提供了一种交互式电子签名方法,如图2所示,包括:
步骤201:电子签名载体上电初始化;
本实施例中,电子签名载体与主机连接上电,进行初始化;
步骤202:电子签名载体等待接收主机发送的指令,当接收到指令时,判断指令类型,如果是签名指令,则执行步骤203,如果是其他指令,则执行相应操作,返回相应响应,返回步骤202;
本实施例中,优选的,电子签名载体判断接收到的指令的前两个字节,如果是第一预设值,则为签名指令,其中,优选第一预设值为0x80F0;
步骤203:电子签名载体从签名指令中获取待签名数据和待签名密钥ID;
步骤204:电子签名载体判断待签名数据是否符合预设报文格式,如果是,则执行步骤205,否则执行步骤215;
本实施例中,预先约定,如果待签名数据符合预设报文格式,则待签名数据为交互式签名数据;
优选的,预设报文格式为XML报文格式;
例如,得到的交互式签名数据为:
<?xml version="1.0"encoding="utf-8"?>
<SignData>
<Fields>
<PayerAccountNoName=:“收款账号”:>6221286897001736<PayerAccountNo>
<PayerAccountName name=“收款户名:”>李四<PayerAccountName>
<TrsAmount name=“交易金额:”>100</TrsAmount>
</Fields>
</SignData>
步骤205:电子签名载体判断待签名密钥ID的值,如果为第一预设值,则执行步骤206,如果为第二预设值,则执行步骤216;
本实施例中,预先约定,如果待签名密钥ID的值为第一预设值,则待签名密钥ID为交互式签名密钥ID,如果待签名密钥ID的值为第二预设值,则待签名密钥ID为非交互式签名密钥ID;
优选的,第一预设值为00,第二预设值为01。
步骤206:电子签名载体对待签名数据进行解析,从解析结果中获取交互信息;
例如,从待签名数据中获取到的交互信息为:
收款账号:6221286897001736
收款户名:李四
交易金额:200
步骤207:电子签名载体显示交互信息,并等待用户按键确认;
步骤208:电子签名载体判断在预设时间内是否接收到用户的按键信息,如果是按键确认,则执行步骤211,如果是按键取消,则执行步骤209,如果未接收到按键,则执行步骤210;
优选的,预设时间为10分钟;
步骤209:电子签名载体将待签名数据删除,向主机返回取消签名响应,返回步骤202;
步骤210:电子签名载体将待签名数据删除,向主机返回超时响应,返回步骤202;
步骤211:电子签名载体应用第一预设算法对待签名数据进行预处理,得到交互式预处理结果;
优选的,第一预设算法为SM3算法,除此之外还可以为MD5算法等;
本实施例中,应用预设算法对待签名数据进行预处理,具体为:
步骤211-1:电子签名载体根据预设哈希算法,对待签名数据进行哈希运算,得到哈希结果;
步骤211-2:电子签名载体将预设哈希算法的算法标识与哈希结果进行拼接,得到拼接结果;
步骤211-3:电子签名载体根据预设长度,对拼接结果进行补位,得到交互式预处理结果。
步骤212:电子签名载体根据待签名密钥ID获取对应的交互式签名密钥和交互式证书,从交互式证书中获取交互式证书ID;
优选的,电子签名载体在证书签发时,将交互式证书和交互式签名密钥保存至一号容器中,将非交互式证书和非交互式签名密钥保存至二号容器中;
本实施例中,还可以为:电子签名载体从签名指令中获取容器ID,根据容 器ID查找对应的容器,从容器中获取保存的签名密钥和证书;
其中,步骤211和步骤212无先后顺序,可同时执行。
步骤213:电子签名载体应用第一预设签名算法,对交互式证书ID、交互式预处理结果和交互式签名密钥进行签名计算,得到交互式签名结果;
本实施例中,优选的,第一预设签名算法为SM2算法,除此之外,还可以为RSA算法等;
步骤214:电子签名载体根据交互式签名结果生成交互式签名成功响应,并返回给主机,返回步骤202;
步骤215:电子签名载体判断待签名数据的长度是否为预设长度,如果是,则执行步骤217,否则执行步骤216;
本实施例中,如果待签名数据的长度为预设长度,则该待签名数据为经过预处理的数据,否则为未经过预处理的数据,执行步骤216;
优选的,预设长度为32字节;
步骤216:电子签名载体应用第二预设算法对待签名数据进行预处理,得到非交互式待签名数据,执行步骤217;
步骤217:电子签名载体根据待签名密钥ID,获取对应的非交互式密钥和非交互式证书,从非交互式证书中获取非交互式证书ID;
优选的,电子签名载体在证书签发时,将交互式证书和交互式签名密钥保存至一号容器中,将非交互式证书和非交互式签名密钥保存至二号容器中;
本实施例中,还可以为:电子签名载体从签名指令中获取容器ID,根据容器ID查找对应的容器,从容器中获取保存的签名密钥和证书。
步骤218:电子签名载体应用第二预设签名算法,对非交互式证书ID、待签名数据和非交互式签名密钥进行签名计算,得到非交互式签名结果;
本实施例中,优选的,预设签名算法为RSA算法,除此之外,还可以为SM2算法等;
步骤219:电子签名载体根据非交互式签名结果生成非交互式签名成功响应,并返回给主机,返回步骤202。
本实施例中,交互式签名采用的第一预设签名算法与非交互式签名采用的第二预设签名算法可以是同一种算法,也可以是两种不同的算法,具体组合方式如下:
1、非交互式签名方式中第一预设签名算法为第一预设算法(如SM2算法),交互式签名方式中第二预设签名算法也为第一预设算法(如SM2算法);
2、非交互式签名方式中第一预设签名算法为第二预设算法(如RSA算法),交互式签名方式中第二预设签名算法也为第二预设算法(如RSA算法);
3、非交互式签名方式中第一预设签名算法为第二预设算法(如RSA算法),交互式签名方式中第二预设签名算法为第一预设算法(如SM2算法);
4、非交互式签名方式中第一预设签名算法为第一预设算法(如SM2算法),交互式签名方式中第二预设签名算法为第二预设算法(如RSA算法)。
实施例3
本发明实施例3提供了一种交互式电子签名方法,如图3所示,包括:
步骤301:电子签名载体上电初始化;
步骤302:电子签名载体等待接收主机下发的指令;
步骤303:电子签名载体根据接收到的指令,判断指令类型,如果设置安全环境指令,则执行步骤304,如果哈希指令,则执行步骤309,如果是签名指令,则执行步骤310;
优选的,如果指令的前两个字节为0x80A0,则为设置安全环境指令,如果指令的前两个字节为0x80B0,则为哈希指令,如果指令的前两个字节为0x80F0,则为签名指令。
步骤304:电子签名载体从设置安全环境指令中获取待签名密钥ID;
步骤305:电子签名载体判断待签名密钥ID,如果为第一预设值,则执行步骤306,如果是第二预设值,则执行步骤307;
本实施例中,预先约定,如果待签名密钥ID的值为第一预设值,则待签名密钥ID为交互式签名密钥ID,如果待签名密钥ID的值为第二预设值,则待签名密钥ID为非交互式签名密钥ID;
优选的,第一预设值为00,第二预设值为01。
步骤306:电子签名载体根据待签名密钥ID获取对应保存的交互式签名密钥,将其作为已选定的待签名密钥,执行步骤308;
优选的,电子签名载体在证书签发时,将交互式证书和交互式签名密钥保存至一号容器中,将非交互式证书和非交互式签名密钥保存至二号容器中;
本实施例中,还可以为:电子签名载体从设置安全环境指令中获取容器ID,根据容器ID查找对应的容器,从容器中获取保存的签名密钥和证书;
步骤307:电子签名载体根据待签名密钥ID获取对应保存的非交互式签名密钥,将其作为已选定的待签名密钥,执行步骤308;
步骤308:电子签名载体向主机返回设置成功响应,返回步骤302;
步骤309:电子签名载体从哈希指令中获取待签名数据,将待签名数据保存,向主机返回成功响应,返回步骤302;
步骤310:电子签名载体获取保存的待签名数据和已选定的待签名密钥,判断待签名数据和待签名密钥,根据判断结果执行对应的签名操作,得到签名结 果,将签名结果返回至主机,返回步骤302;
本实施例中,根据判断结果执行对应的签名操作的具体操作与实施例2中步骤204至步骤219相同,在此不再赘述。
本实施例中,步骤303至步骤310还可以替换为:
步骤303-1:电子签名载体根据接收到的指令,判断指令类型,如果是哈希指令,则执行步骤304-1,如果是签名指令,则执行步骤305-1;
步骤304-1:电子签名载体从哈希指令中获取待签名数据和待签名密钥ID,将待签名数据保存,并根据待签名密钥ID获取对应的签名密钥,将其作为已选定的待签名密钥,向主机返回成功响应,返回步骤302;
步骤305-1:电子签名载体获取保存的待签名数据和已选定的待签名密钥,判断待签名数据和待签名密钥,根据判定结果执行相应的签名操作,得到签名结果,向主机返回签名结果,返回步骤302。
本发明中,电子签名载体签名完成向主机返回签名结果以后,还包括:
步骤a1:主机接收到签名结果时,获取已保存的待签名数据和与待签名密钥对应的签名公钥,将待签名数据、签名结果和签名公钥发送至服务器;
步骤a2:服务器判断待签名数据和签名公钥,如果待签名数据和签名公钥均为交互式,则执行步骤a3,如果待签名数据和签名公钥均为非交互式时,则执行步骤a4,否则报错,结束;
步骤a3:服务器应用第一预设哈希算法对待签名数据进行哈希运算,得到第一结果,并根据第一预设解密算法,应用签名公钥对所述签名结果进行解密,得到第二结果,执行步骤a5;
步骤a4:服务器应用第二预设哈希算法对待签名数据进行哈希运算,得到 第一结果,并根据第二预设解密算法,应用签名公钥对所述签名结果进行解密,得到第二结果,执行步骤a5;
步骤a5:服务器判断第一结果与第二结果是否相同,如果是,则执行步骤a6,否则结束;
步骤a6:服务器向所述主机返回验证成功响应,结束。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。