CN103138937A - 一种签名方法及装置 - Google Patents

一种签名方法及装置 Download PDF

Info

Publication number
CN103138937A
CN103138937A CN2013100629521A CN201310062952A CN103138937A CN 103138937 A CN103138937 A CN 103138937A CN 2013100629521 A CN2013100629521 A CN 2013100629521A CN 201310062952 A CN201310062952 A CN 201310062952A CN 103138937 A CN103138937 A CN 103138937A
Authority
CN
China
Prior art keywords
signature
result
module
algorithm
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2013100629521A
Other languages
English (en)
Other versions
CN103138937B (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Feitian Technologies Co Ltd filed Critical Feitian Technologies Co Ltd
Priority to CN201310062952.1A priority Critical patent/CN103138937B/zh
Publication of CN103138937A publication Critical patent/CN103138937A/zh
Application granted granted Critical
Publication of CN103138937B publication Critical patent/CN103138937B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)
  • Computer And Data Communications (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开一种签名方法及装置,该方法包括:对计算签名指令中的报文信息进行解析;如解析结果中有按键标识,则根据第一预设用户ID和用户公钥生成第一计算结果,对第一计算结果和报文信息进行计算得到哈希结果,从报文信息解析结果中提取关键数据;当按键标识的值为第一预设字符时用用户私钥对哈希结果进行签名;当按键标识的值为第二预设字符时输出关键数据,在用户确认后再进行签名;如解析结果中无按键标识,则根据第二预设用户ID和用户公钥生成第一计算结果,对第一计算结果和报文信息进行计算得到哈希结果,用用户私钥对哈希结果进行签名。本发明中不同的签名需求根据不同的用户ID来计算第一计算结果,从而达到防止骗签的目的。

Description

一种签名方法及装置
技术领域
本发明涉及信息安全领域,尤其涉及一种签名方法及装置。
背景技术
随着互联网的发展,电子商务越来越发达,网上支付成为了人们生活中不可缺少的一部分,为了方便用户消费,各大金融机构纷纷发行USB Key。
USB Key是一种USB接口的数字签名设备,在进行网上交易时,USBKey接收到交易数据后从中提取关键数据等待用户确认,当用户确认之后,USB Key首先对交易数据进行哈希运算,然后对得到的哈希值进行数字签名,再将签名结果返回。对方接收到签名结果后,使用用户证书和交易数据验证签名结果,当验证通过表示用户确认了该交易。数字签名是当前最安全的网络身份确认手段,具有不可抵赖性。
目前USB Key产品RSA解决方案中大多是采用的摘要算法的不同区分普通签名和交易签名,已达到防止骗签的可能性。但是在SM2解决方案中由于SM2签名的摘要算法只能为SM3算法,因此无法通过摘要算法的不同来进行区别,无法实现防止骗签的目的。
发明内容
本发明的目的是为了克服现有技术的不足,提供一种签名方法及装置。
本发明提供的技术方案如下:
一种签名方法,包括:
步骤A1:设备上电,进行初始化;
步骤A2:当接收到上位机下发的指令时判断其是否为计算签名指令,是则执行步骤A3,否则根据接收到的指令进行相应操作;
步骤A3:对所述计算签名指令进行解析得到报文信息,对所述报文信息解析得到报文信息解析结果;
步骤A4:判断所述报文信息解析结果中是否有按键标识,是则执行步骤A5,否则执行步骤A10;
步骤A5:根据所述计算签名指令的格式获取对应的第一预设用户ID,根据所述第一预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息进行计算得到哈希结果,从所述报文信息解析结果中提取关键数据;
步骤A6:检测所述按键标识的值,如为第二预设字符则执行步骤A7,如为第一预设字符则执行步骤A9;
步骤A7:输出所述关键数据,并等待用户确认;
步骤A8:当接收到按键信息时,检测所述按键信息的类型,如为确认键则根据第二预设算法使用用户私钥对所述哈希结果进行签名,并将签名结果和成功响应返回给所述上位机,返回步骤A2,如为取消键则输出取消信息,返回步骤A2,如为翻页键则返回步骤A7;
步骤A9:使用用户私钥对所述哈希结果进行签名,并将签名结果和成功响应返回给所述上位机,返回步骤A2;
步骤A10:根据所述计算签名指令的格式获取对应的第二预设用户ID,根据所述第二预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息进行计算得到哈希结果,根据第二预设算法使用用户私钥对所述哈希结果进行签名,并将签名结果和成功响应返回给所述上位机,返回步骤A2。
其中,所述步骤A2中如接收到上位机下发的设置算法指令,则根据接收到的指令进行相应操作包括:
步骤C1:对接收到的所述设置算法指令进行解析,并判断解析结果是否符合预设要求,是则设置当前有效签名算法为第二预设算法,设置当前有效哈希算法为第一预设算法,执行步骤C2,否则报错,返回步骤A2;
步骤C2:保存解析得到的密钥信息,给所述上位机返回成功响应,返回步骤A2。
其中,所述用户公钥和用户私钥是根据所述密钥信息获取得到的。
其中,所述判断解析结果是否符合预设要求包括:判断参数是否正确。
其中,所述根据第二预设算法使用用户私钥对所述哈希结果进行签名之前包括:
判断参数是否正确,是则继续,否则报错,返回步骤A2;
判断当前有效签名算法是否为所述第二预设算法,是则继续,否则报错,返回步骤A2。
其中,所述根据第二预设算法使用用户私钥对所述哈希结果进行签名之前还包括:
判断所述用户私钥是否有效,是则继续,否则报错,返回步骤A2。
其中,所述判断参数是否正确具体为:
判断卡内文件系统是否创建,是则继续,否则报错,结束;
判断解析得到的算法信息是否合法,是则继续,否则报错,返回步骤S2。
其中,所述生成第一计算结果之前包括:判断所述用户公钥是否有效,是则继续,否则报错,返回步骤A2;判断执行权限是否满足,是则继续,否则报错,返回步骤A2;
所述根据第一预设算法对所述第一计算结果和所述报文信息进行计算得到哈希结果之前包括:判断当前有效哈希算法是否为第一预设算法,是则继续,否则报错,返回步骤A2。
其中,在所述步骤A7和步骤A8之间,包括:判断在预设时间内是否接收到按键信息,是则执行步骤A8,否则报错,返回步骤A2。
其中,所述根据第二预设算法使用用户私钥对所述哈希结果进行签名与所述将签名结果和成功响应返回给所述上位机之间包括:判断签名是否成功,是则继续,否则报错,返回步骤A2。
一种签名方法,包括:
步骤S1:设备上电,进行初始化;
步骤S2:等待接收信息,当接收到上位机下发的指令信息时执行步骤S3,当接收到按键信息时执行步骤S11;
步骤S3:检测接收到的所述指令的类型,如为报文解析指令则执行步骤S4;如为计算签名指令则执行步骤S7,如为获取签名结果指令则执行步骤S12,如为其他指令则进行相应操作;
步骤S4:根据所述报文解析指令的格式检测签名需求,如为交易签名及登录签名指令需求则执行步骤S5,如为证书下载签名指令需求则执行步骤S6;
步骤S5:对所述交易签名及登录签名指令的报文信息进行解析得到报文信息解析结果,并判断所述报文信息解析结果中是否有按键标识,是则保存所述按键标识的值,从所述报文信息解析结果中提取关键数据并保存,根据所述交易签名及登录签名指令的格式获取对应的第一预设用户ID,根据所述第一预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息解析结果进行计算得到哈希结果并保存,给所述上位机返回成功响应,返回步骤S2;否则报错,返回步骤S2;
步骤S6:根据所述证书下载签名指令的格式获取对应的第二预设用户ID,根据所述第二预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述证书下载签名指令中的报文信息进行计算得到哈希结果并保存,将所述按键标识的值置为第一预设字符,并给所述上位机返回成功响应,返回步骤S2;
步骤S7:对所述计算签名指令进行解析,并判断解析结果是否符合计算条件,是则执行步骤S8,否则报错,返回步骤S2;
步骤S8:判断所述按键标识的值是否为第一预设字符,是则执行步骤S10,否则执行步骤S9;
步骤S9:将所述保存的关键数据输出并等待用户确认,给上位机返回成功响应,返回步骤S2;
步骤S10:根据第二预设算法使用用户私钥对所述保存的哈希结果进行签名,并将签名结果和成功响应返回给所述上位机,返回步骤S2;
步骤S11:检测所述按键信息的类型,如为取消键则输出取消信息,返回步骤S2;如为翻页键则输出所述关键数据,返回步骤S2;如为确认键,则根据第二预设算法使用所述用户私钥对所述保存的哈希结果进行签名并保存签名结果,返回步骤S2;
步骤S12:判断是否存在所述签名结果,是则将所述签名结果返回给上位机,返回步骤S2,否则报错,返回步骤S2。
其中,在所述步骤S3中如检测接收到的指令的类型为设置算法指令则执行步骤S13;
步骤S13:对所述设置算法指令进行解析,并判断解析结果是否符合预设要求,是则设置当前有效签名算法为第二预设算法,设置当前有效哈希算法为第一预设算法,执行步骤S14,否则报错,返回步骤S2;
步骤S14:保存解析得到的密钥信息,给所述上位机返回成功响应,返回步骤S2。
其中,所述用户公钥和所述用户私钥是根据所述密钥信息获取得到的。
其中,所述判断解析结果是否符合预设要求包括:判断参数是否正确。
其中,所述进行初始化包括:将状态机的状态设为第一预设值;
所述步骤S13之前包括:判断所述状态机的状态是否为第一预设值,是则执行步骤S13,否则报错,返回步骤S2;
所述步骤S14还包括:将所述状态机的状态设为第二预设值;
所述步骤S4之前还包括:判断所述状态机的状态是否为所述第二预设值,是则执行步骤S4,否则报错,返回步骤S2;
所述步骤S5判断为是时还包括将所述状态机的状态设为第三预设值,判断为否时还包括将所述状态机的状态设为第一预设值;
所述步骤S6还包括将所述状态机的状态设为第三预设值;
所述步骤S7之前包括:判断所述状态机的状态是否为所述第三预设值,是则执行步骤S7,否则报错,返回步骤S2;
所述步骤S9还包括将所述状态机的状态设为第四预设值;
所述步骤S10还包括将所述状态机的状态设为所述第一预设值;
所述步骤S11之前还包括:判断所述状态机的状态是否为所述第四预设值,是则执行步骤S11,否则报错,返回步骤S2;
所述步骤S11中检测按键信息的类型为确认键后还包括将所述状态机的状态设为第五预设值;检测按键信息的类型为取消键后还包括将所述状态机的状态设为所述第一预设值;
所述步骤S12具体包括:
步骤S12-1:判断所述状态机的状态是否为所述第五预设值,是则执行步骤S12-2,否则报错,返回步骤S2;
步骤S12-2:判断所述获取签名结果指令是否合法,是则将所述状态机的状态设为所述第一预设值,将所述签名结果返回给上位机,返回步骤S2,否则报错,返回步骤S2;
所述报错包括:输出错误信息,将所述状态机的状态设为所述第一预设值。
其中,所述步骤S7中判断解析结果是否符合计算条件,具体包括:
判断参数是否正确,是则继续,否则报错,返回步骤S2;
判断当前有效签名算法是否为所述第二预设算法,是则继续,否则报错,返回步骤S2。
其中,所述判断参数是否正确具体为:
判断卡内文件系统是否创建,是则继续,否则报错,结束;
判断解析得到的算法信息是否合法,是则继续,否则报错,返回步骤S2。
其中,在所述步骤S5和步骤S6中给所述上位机返回成功响应的同时将所述哈希结果一起返回给所述上位机。
其中,在所述步骤S5和所述步骤S6之前还包括:判断解析条件是否合法,是则继续,否则报错,返回步骤S2。
其中,所述判断解析条件是否合法具体包括:
判断当前有效哈希算法是否为第一预设算法,是则继续,否则报错,返回步骤S2;
判断执行权限是否满足,是则继续,否则报错,返回步骤S2;
判断所述用户公钥是否有效,是则继续,否则报错,返回步骤S2。
其中,所述根据第二预设算法使用所述用户私钥对所述哈希结果进行签名之后包括:判断签名是否成功,是则继续,否则报错,返回步骤S2。
一种签名装置,包括:
接收模块,用于接收上位机下发的指令和用户的按键信息;
第一判断模块,用于判断所述接收模块接收到的指令是否为计算签名指令;
第一解析模块,用于当所述第一判断模块判断为是时对所述计算签名指令进行解析得到报文信息,对所述报文信息进行解析得到报文信息解析结果;
第二判断模块,用于判断所述报文信息解析结果中是否有按键标识;
第一获取计算模块,用于当所述第二判断模块判断为是时根据所述计算签名指令的格式获取对应的第一预设用户ID,根据所述第一预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息进行计算得到哈希结果;
提取模块,用于从所述报文信息解析结果中提取关键数据;
第一检测模块,用于检测所述按键标识的值;
输出模块,用于输出所述关键数据,还用于输出提示信息;
第二检测模块,用于当接收模块接收到按键信息时,检测所述按键信息的类型;
签名模块,用于当所述第一检测模块检测为第一预设字符或所述第二检测模块检测为确认键时根据第二预设算法使用用户私钥对所述哈希结果进行签名;
第二获取计算模块,用于当所述第二判断模块判断为否时根据所述计算签名指令的格式获取对应的第二预设用户ID,根据所述第二预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息进行计算得到哈希结果,根据第二预设算法使用用户私钥对所述哈希结果进行签名;
发送模块,用于向所述上位机返回响应和签名得到的签名结果。
其中,该装置还包括:
第二解析模块,用于对所述接收模块接收到的设置算法指令进行解析;
第三判断模块,用于判断所述第二解析模块的解析结果是否符合预设要求;
设置模块,用于当所述第三判断模块判断为是时设置当前有效签名算法为第二预设算法,设置当前有效哈希算法为第一预设算法;
保存模块,用于保存所述第二解析模块解析得到的密钥信息。
其中,该装置还包括获取模块,用于根据所述密钥信息获取得到所述用户公钥和用户私钥。
其中,所述第三判断模块具体用于判断参数是否正确。
其中,该装置还包括:
第四判断模块,用于判断参数是否正确;
第五判断模块,用于判断当前有效签名算法是否为所述第二预设算法。
其中,该装置还包括第六判断模块,用于判断所述用户私钥是否有效。
其中,该装置还包括:
第七判断模块,用于判断所述用户公钥是否有效;用于判断执行权限是否满足;
第八判断模块,用于判断当前有效哈希算法是否为第一预设算法。
其中,所述第二检测模块还用于判断在预设时间内是否接收到按键信息。
其中,该装置还包括第九判断模块,用于判断签名是否成功。
一种签名装置,包括:
接收模块,用于接收上位机下发的指令和用户的按键信息;
第一检测模块,用于当所述接收模块接收到上位机下发的指令信息时检测接收到的所述指令的类型,如为报文解析指令则触发第二检测模块工作;如为计算签名指令则触发解析判断模块工作,如为获取签名结果指令则触发第三判断模块工作;
所述第二检测模块,根据所述报文解析指令的格式检测签名需求,如为交易签名及登录签名指令需求则第一解析模块工作,如为证书下载签名指令需求则第二获取计算模块工作;
所述第一解析模块,用于对所述交易签名及登录签名指令的报文信息进行解析得到报文信息解析结果;
第一判断模块,用于判断所述报文信息解析结果中是否有按键标识,是则保存提取模块工作;
所述保存提取模块,用于保存所述按键标识的值,从所述报文信息解析结果中提取关键数据并保存;
第一获取计算模块,用于根据所述交易签名及登录签名指令的格式获取对应的第一预设用户ID,根据所述第一预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息解析结果进行计算得到哈希结果并保存;
所述第二获取计算模块,用于根据所述证书下载签名指令的格式获取对应的第二预设用户ID,根据所述第二预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述证书下载签名指令中的报文信息进行计算得到哈希结果并保存,将所述按键标识的值置为第一预设字符;
所述解析判断模块,用于对所述计算签名指令进行解析,并判断解析结果是否符合计算条件,是则第二判断模块工作;
所述第二判断模块,用于判断所述按键标识的值是否为第一预设字符,是则签名模块工作,否则输出模块工作;
所述输出模块,用于输出所述保存的关键数据,还用于输出提示信息;
所述签名模块,用于根据第二预设算法使用用户私钥对所述保存的哈希结果进行签名;
第二检测模块,用于当所述接收模块接收到按键信息时检测所述按键信息的类型,如为确认键,则签名保存模块工作;
所述签名保存模块,用于根据第二预设算法使用所述用户私钥对所述保存的哈希结果进行签名并保存签名结果;
所述第三判断模块,用于判断是否存在所述签名结果,是则发送模块将所述保存的签名结果返回给所述上位机;
所述发送模块,用于向所述上位机返回响应和所述签名结果。
其中,该装置还包括:
第二解析模块,用于当所述第一检测模块检测为设置算法指令时对所述设置算法指令进行解析;
第四判断模块,用于判断所述第二解析模块的解析结果是否符合预设要求,是则设置模块工作;
所述设置模块,用于设置当前有效签名算法为第二预设算法,设置当前有效哈希算法为第一预设算法;
保存模块,用于保存所述第二解析模块解析得到的所述密钥信息。
其中,该装置还包括获取模块,用于根据所述密钥信息获取得到所述用户公钥和所述用户私钥。
其中,所述第四判断模块具体用于判断参数是否正确。
其中,该装置还包括:
设置状态模块:用于将状态机的状态设为第一预设值或第二预设值或第三预设值或第四预设值或第五预设值;
第五判断模块,用于判断所述状态机的状态是否为第一预设值、判断所述状态机的状态是否为所述第二预设值、判断所述状态机的状态是否为所述第三预设值、判断所述状态机的状态是否为所述第四预设值、判断所述状态机的状态是否为所述第五预设值;
所述第三判断模块还用于判断所述获取签名结果指令是否合法。
其中,所述解析判断模块包括:
解析单元,用于对所述计算签名指令进行解析;
第一判断单元,用于判断参数是否正确;
第二判断单元,用于判断当前有效签名算法是否为所述第二预设算法。
其中,所述发送模块还用于将所述哈希结果返回给所述上位机。
其中,该装置还包括第六判断模块,用于判断解析条件是否合法,是则所述第一解析模块工作。
其中,所述第六判断模块包括:
第五判断单元,用于判断当前有效哈希算法是否为第一预设算法;
第六判断单元,用于判断执行权限是否满足;
第七判断单元,用于判断所述用户公钥是否有效。
其中,该装置还包括第七判断模块,用于判断签名是否成功。
本发明与现有技术相比,具有以下优点:
本发明的技术方案中根据报文格式的不同区分签名需求,不同的签名需求根据不同的用户ID来计算第一计算结果值,从而达到防止骗签的目的。
附图说明
图1为本发明实施例一提供的一种签名方法流程图;
图2为本发明实施例二提供的一种签名方法流程图;
图3-图7为本发明实施例三提供的一种签名方法流程图;
图8为本发明实施例四提供的一种签名装置方框图;
图9为本发明实施例五提供的一种签名装置方框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明实施例一提供了一种签名方法,智能密钥设备已与上位机建立了连接,其中设置算法、解析报文和计算签名的过程可以通过一条指令实现,也可以通过两条指令实现,或者通过三条指令实现,本实施例方法以通过一条指令实现为例来说明,如图1所示,包括:
步骤A1:设备上电,进行初始化;
步骤A2:当接收到上位机下发的指令时判断其是否为计算签名指令,是则执行步骤A3,否则根据接收到的指令进行相应操作;
步骤A3:对计算签名指令进行解析得到报文信息,对报文信息解析得到报文信息解析结果;
步骤A4:判断报文信息解析结果中是否有按键标识,是则执行步骤A5,否则执行步骤A12;
步骤A5:根据计算签名指令的格式获取对应的第一预设用户ID,根据第一预设用户ID和用户公钥生成第一计算结果;
本实施例中,步骤A5中根据第一预设用户ID和用户公钥生成第一计算结果具体包括:根据第一预设用户ID和用户公钥进行计算,并判断是否计算成功,是则生成第一计算结果,执行步骤A6,否则报错,返回步骤A2;
在步骤A5之前还包括:
步骤A5-1:判断用户公钥是否有效,是则执行步骤A5-2,否则报错,返回步骤A2;
步骤A5-2:判断执行权限是否满足,是则步骤A5,否则报错,返回步骤A2;
本实施例中的步骤A5-1和步骤A5-2的执行过程没有先后顺序;
其中,判断执行权限是否满足具体为:判断PIN码校验操作是否成功执行;
具体的,本实施例中的用户公钥是SM2公钥;
步骤A6:根据第一预设算法对第一计算结果和报文信息解析结果进行计算得到哈希结果;
本实施例中的第一预设算法为SM3算法;
本实施例中在步骤A6之前包括:判断当前有效哈希算法是否为第一预设算法,是则继续,否则报错,返回步骤A2;
步骤A7:从报文信息解析结果中提取关键数据;
步骤A8:检测按键标识的值,如为Y则执行步骤A9,如为N则执行步骤A11;
步骤A9:输出关键数据,并等待用户确认;
步骤A10:当接收到按键信息时,检测按键信息的类型,如为确认键则执行步骤A11,如为取消键则输出取消信息,返回步骤A2,如为翻页键则返回步骤A9;
在本实施例中,如关键数据的长度大于显示屏的显示区域,则会分页显示,当接收到翻页键的按键信息时会显示下一屏数据;
优选的,在本实施例中的步骤A9和步骤A10之间还包括:判断在预设时间内是否接收到按键信息,是则执行步骤A10,否则报错,返回步骤A2;
步骤A11:使用用户私钥对哈希结果进行签名,将签名结果和成功响应返回给上位机,返回步骤A2;
本实施例中,在步骤A11之前还包括:判断用户私钥是否有效,是则执行步骤A11,否则报错,返回步骤A2;
具体的,本实施例中的用户私钥为SM2私钥;
在步骤A11之前还包括:判断参数是否正确,是则继续,否则报错,返回步骤A2;判断当前有效签名算法是否为第二预设算法,是则继续,否则报错,返回步骤A2;
其中,判断参数是否正确具体为:
判断卡内文件系统是否创建,是则继续,否则报错,结束;
判断解析得到的算法信息是否合法,是则继续,否则报错,返回步骤A2;
在将签名结果和成功响应返回给上位机之前还包括:判断签名是否成功,是则将签名结果和成功响应返回给上位机,返回步骤A2,否则报错,返回步骤A2;
步骤A12:根据所述计算签名指令的格式获取对应的第二预设用户ID,根据第二预设用户ID和用户公钥生成第一计算结果;
具体的,该步骤中的根据第二预设用户ID和用户公钥生成第一计算结果包括:根据第二预设用户ID和用户公钥进行计算,并判断是否计算成功,是则生成第一计算结果,执行步骤A13,否则报错,返回步骤A2;
在步骤A12之前还包括:
步骤A12-1:判断用户公钥是否有效,是则执行步骤A12-2,否则报错,返回步骤A2;
步骤A12-2:判断执行权限是否满足,是则执行步骤A12,否则报错,返回步骤A2;
本实施例中的步骤A12-1和步骤A12-2的执行过程没有先后顺序;
其中,判断执行权限是否满足具体为:判断PIN码校验操作是否成功执行;
步骤A13:根据第一预设算法对第一计算结果和计算签名指令中的报文信息进行计算得到哈希结果;
本实施例中的第一预设算法为SM3算法;
本实施例中在步骤A13之前包括:判断当前有效哈希算法是否为第一预设算法,是则继续,否则报错,返回步骤A2;
步骤A14:根据第二预设算法使用用户私钥对哈希结果进行签名,并将签名结果和成功响应返回给上位机,返回步骤A2;
本实施例中,在步骤A14之前还包括:判断用户私钥是否有效,是则执行步骤A14,否则报错,返回步骤A2;
在步骤A14之前还包括:判断参数是否正确,是则继续,否则报错,返回步骤A2;判断当前有效签名算法是否为第二预设算法,是则继续,否则报错,返回步骤A2;
其中,判断参数是否正确具体为:
判断卡内文件系统是否创建,是则继续,否则报错,结束;
判断解析得到的算法信息是否合法,是则继续,否则报错,返回步骤S2;
本实施例中,步骤A14中将签名结果和成功响应返回给上位机之前还包括:判断签名是否成功,是则将签名结果和成功响应返回给上位机,返回步骤A2,否则报错,返回步骤A2。
在本实施例中,在步骤A2中如接收到上位机下发的设置算法指令,则根据接收到的指令进行相应操作包括:
步骤C1:对接收到的设置算法指令进行解析,并判断解析结果是否符合预设要求,是则设置当前有效签名算法为第二预设算法,设置当前有效哈希算法为第一预设算法,执行步骤C2,否则报错,返回步骤A2;
在本实施例中,设置当前有效签名算法为第二预设算法,当前有效哈希算法为第一预设算法,具体为:设置第二预设算法标识和第一预设算法标识;
本实施例中的判断解析结果是否符合预设要求包括:判断参数是否正确;还包括:
判断解析得到的哈希算法标识是否与第一预设算法匹配,是则设置第一预设算法标识,继续,否则报错,返回步骤A2;
判断解析得到的签名算法标识是否与第二预设算法匹配,是则设置第二预设算法标识,继续,否则报错,返回步骤A2。
判断参数是否正确的具体实现方法可参照步骤A11和步骤A14,在此不再赘述;
步骤C2:保存解析得到的密钥信息,给上位机返回成功响应,返回步骤A2;
本实施例中的密钥信息包括密钥ID和密钥用途,用户公钥和用户私钥是根据密钥ID和密钥用途获取到的。
实施例二
本发明实施例二提供了一种签名方法,智能密钥设备已与上位机建立了连接,如图2所示,包括:
步骤S1:设备上电,进行初始化;
步骤S2:等待接收信息,当接收到上位机下发的指令信息时执行步骤S3,当接收到按键信息时执行步骤S11;
步骤S3:检测接收到的指令的类型,如为报文解析指令则执行步骤S4;如为计算签名指令则执行步骤S7,如为获取签名结果指令则执行步骤S12;
如果接收到的指令是上述三种指令之外的其他指令则进行相应操作;
步骤S4:根据报文解析指令的格式检测签名需求,如为交易签名及登录签名指令需求则执行步骤S5,如为证书下载签名指令需求则执行步骤S6;
步骤S5:对交易签名及登录签名指令的报文信息进行解析得到报文信息解析结果,并判断报文信息解析结果中是否有按键标识,是则保存按键标识的值,从报文信息解析结果中提取关键数据并保存,根据交易签名及登录签名指令的格式获取对应的第一预设用户ID,根据第一预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和报文信息解析结果进行计算得到哈希结果并保存,给上位机返回成功响应,返回步骤S2;否则报错,返回步骤S2;
本实施例中的按键标识的值为Y或N;在给上位机返回成功响应的同时也可将哈希结果一起返回;
本实施例中的第一预设算法为SM3算法;
在步骤S5之前还包括:判断解析条件是否合法,是则执行步骤S5,否则报错,返回步骤S2;
本实施例中的判断解析条件是否合法具体包括:
判断当前有效哈希算法是否为第一预设算法,是则继续,否则报错,返回步骤S2;
判断执行权限是否满足,是则继续,否则报错,返回步骤S2;
判断用户公钥是否有效,是则继续,否则报错,返回步骤S2;
其中,判断执行权限是否满足具体为:判断PIN码校验操作是否成功执行;
步骤S6:根据证书下载签名指令的格式获取对应的第二预设用户ID,根据第二预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对第一计算结果和报文信息进行计算得到哈希结果并保存,将按键标识置为第一预设字符,并给上位机返回成功响应,返回步骤S2;
本实施例中的第一预设字符为N;在给上位机返回成功响应的同时也可将哈希结果一起返回;
在步骤S6之前还包括:判断解析条件是否合法,是则执行步骤S6,否则报错,返回步骤S2;
本实施例中的判断解析条件是否合法的实现方式与步骤S5中的相同,在此不再赘述;
步骤S7:对接收到的计算签名指令进行解析,并判断解析结果是否符合计算条件,是则执行步骤S8,否则报错,返回步骤S2;
判断解析结果是否符合计算条件,具体包括:
判断参数是否正确,是则继续,否则报错,返回步骤S2;
判断当前有效签名算法是否为第二预设算法,是则继续,否则报错,返回步骤S2;
其中,判断参数是否正确的实现方法为:
判断卡内文件系统是否创建,是则继续,否则报错,结束;
判断解析得到的算法信息是否合法,是则继续,否则报错,返回步骤S2;
步骤S8:判断按键标识的值是否为第一预设字符,是则执行步骤S10,否则执行步骤S9;
步骤S9:将保存的关键数据输出并等待用户确认,给上位机返回成功响应,返回步骤S2;
步骤S10:根据第二预设算法使用用户私钥对保存的哈希结果进行签名,并将签名结果和成功响应返回给上位机,返回步骤S2;
本实施例中将签名结果和成功响应返回给上位机之前还包括:判断签名是否成功,是则继续,否则报错,返回步骤S2;
在步骤S10之前还包括:判断用户私钥是否有效,是则继续,否则报错,返回步骤S2;
步骤S11:检测按键信息的类型,如为取消键则输出取消信息,返回步骤S2;如为翻页键则输出关键数据,返回步骤S2;如为确认键,则根据第二预设算法使用用户私钥对保存的哈希结果进行签名并保存签名结果,返回步骤S2;
本实施例中的第二预设算法为SM2算法;
根据第二预设算法使用用户私钥对保存的哈希结果进行签名并保存签名结果,具体包括:根据第二预设算法使用用户私钥对保存的哈希结果进行签名,判断签名是否成功,是则保存签名结果,返回步骤S2,否则报错,返回步骤S2;
本实施例中在签名完成后,还可以在动态令牌上输出签名操作完成信息;
步骤S12:判断是否存在签名结果,是则将签名结果返回给上位机,返回步骤S2,否则报错,返回步骤S2;
本实施例提供的方法中如果在接收到按键信息之后紧接着接收到获取签名结果指令则直接将保存的签名结果返回给上位机,如果在接收到按键信息之后接收到其他指令则会报错。
本实施例提供的方法在步骤S3中如检测接收到的指令的类型为设置算法指令则执行步骤S13;
步骤S13:对设置算法指令进行解析,并判断解析结果是否符合预设要求,是则设置当前有效签名算法为第二预设算法,当前有效哈希算法为第一预设算法,执行步骤S14,否则报错,返回步骤S2;
具体的,本实施例中判断解析结果是否符合预设要求包括:判断参数是否正确;还可以包括:
判断解析得到的哈希算法标识是否与第一预设算法匹配,是则设置当前有效哈希算法为第一预设算法,继续,否则报错,返回步骤S2;
判断解析得到的签名算法标识是否与第二预设算法匹配,是则设置当前有效签名算法为第二预设算法,继续,否则报错,返回步骤S2;
其中,判断参数是否正确的实现方法可参照步骤S7,在此不再赘述;
步骤S14:保存解析得到的密钥信息,给上位机返回成功响应,返回步骤S2;
本实施例中的密钥信息包括密钥ID和密钥用途;
本实施例中的第二预设算法标识具体为SM2签名算法标识,第一预设算法标识为SM3哈希算法标识;
本实施例中的用户公钥和用户私钥具体为SM2的公钥和SM2私钥,均是根据密钥ID和密钥用途获取得到的。
本实施例的方法还可以通过状态机的状态来实现,其实现方案除了本实施例方法,还包括以下操作:
进行初始化包括:将状态机的状态设为第一预设值;
步骤S13之前包括:判断状态机的状态是否为第一预设值,是则执行步骤S13,否则报错,返回步骤S2;
步骤S14还包括:将状态机的状态设为第二预设值;
步骤S4之前还包括:判断状态机的状态是否为第二预设值,是则执行步骤S4,否则报错,返回步骤S2;
步骤S5判断为是时还包括将状态机的状态设为第三预设值,判断为否时还包括将状态机的状态设为第一预设值;
步骤S6还包括将状态机的状态设为第三预设值;
步骤S7之前包括:判断状态机的状态是否为第三预设值,是则执行步骤S7,否则报错,返回步骤S2;
步骤S9还包括将状态机的状态设为第四预设值;
步骤S10还包括将状态机的状态改为第一预设值;
步骤S11之前还包括:判断状态机的状态是否为第四预设值,是则执行步骤S11,否则报错,返回步骤S2;
步骤S11中检测按键信息的类型为确认键后还包括将状态机的状态设为第五预设值;检测按键信息的类型为取消键后还包括将状态机的状态改为第一预设值;
步骤S12具体包括:
步骤S12-1:判断状态机的状态是否为第五预设值,是则将执行步骤S12-2,否则报错,返回步骤S2;
步骤S12-2:判断获取签名结果指令是否合法,是则给上位机返回保存的签名结果和成功响应,将状态机的状态设为第一预设值,返回步骤S2,否则报错,返回步骤S2;
所述报错包括:输出错误信息,将所述状态机的状态设为所述第一预设值。本实施例中第一预设值、第二预设值、第三预设值、第四预设值、第五预设值分别为0、1、2、3、4, 0表示当前操作为设置算法操作、1表示当前操作为报文解析操作、2表示当前操作为计算签名操作、3表示当前计算签名操作需要用户确认才能进行、4表示当前操作为获取签名结果操作。
实施例三
本发明实施例三提供了一种签名方法,智能密钥设备已与上位机建立了连接,其中设置算法、解析报文、计算签名和获取签名都通过各自不同的指令来实现的,如图3-图7所示,本实施例方法包括:
步骤301:设备上电,进行初始化;
具体的,在本实施例中,设备在进行初始化时将数据包标识设置为1,将状态机的状态设置为0;
步骤302:等待接收信息,当接收到上位机下发的信息时执行步骤303,当接收到按键信息时执行步骤345;
在本实施例中,如在预设时间内接收到按键信息,则从步骤302跳转到步骤345;
步骤303:检测接收到的指令类型,如为设置算法指令则执行步骤304,如为报文解析指令则执行步骤310;如为计算签名指令则执行步骤337,如为获取签名结果指令则执行步骤353;
具体的,本实施例中根据APDU指令的指令头不同区别接收到的指令类型,如接收到00 22 41 B6则为设置算法指令;如接收到00 2A90 80/81/82则为报文解析指令;如接收到00 2A 9E 00则为计算签名指令;如接收到80 38 00 00则为获取签名结果指令;
步骤304:判断状态机的状态是否为0,是则执行步骤305,否则报错,将状态机的状态设为0,返回步骤302;
步骤305:对设置算法指令进行解析,并判断参数是否正确,是则执行步骤306,否则报错,返回步骤302;
本实施例中,判断参数是否正确包括:
判断卡内文件系统是否创建,是则继续,否则报错,结束;
判断算法模版长度是否为0,是则报错,返回步骤302,否则继续;
在本实施例中如卡内文件系统创建了则表示当前key已被生产过;
步骤306:判断解析得到的哈希算法标识是否与SM3算法匹配,是则设置当前有效哈希算法为SM3算法,执行步骤307,否则报错,返回步骤302;
步骤307:判断解析得到的签名算法标识是否与SM2算法匹配,是则设置当前有效签名算法为SM2算法,执行步骤308,否则报错,返回步骤302;
步骤308:根据解析得到的密钥ID和密钥用途读取密钥信息,保存密钥ID和密钥用途;
具体的,本实施例中的密钥信息为密钥描述信息,包括密钥地址、密钥用途、密钥使用更新权限;
步骤309:设置状态机的状态为1,给上位机返回成功响应,返回步骤302;
步骤310:判断状态机的状态是否为1,是则执行步骤311,否则报错,将状态机的状态设为0,返回步骤302;
步骤311:根据报文指令格式检测签名需求,如为交易签名及登录签名指令需求则执行步骤312,如为证书下载签名指令需求则执行步骤325;
具体的,本实施例中的证书下载签名需求和交易签名及登录签名的区别是通过cos指令中第四字节上的参数不同来区别的,如参数为80则为交易签名及登录签名指令,如参数为82则为证书下载签名指令,如参数为81则为RSA普通签名;RSA普通签名不在本专利保护范围之内,故不再进行详述;
例如,本实施例中的交易签名指令中数据域的报文信息具体为:
<?xml version="1.0" encoding="utf8"?>
<Trade>
<Body><AuthRequest1234567890><AuthRequestHead><AuthVersion>1002</AuthVersion></AuthRequestHead><AuthRequestBody><AuthName>CBANK_CREDITCARD</AuthName><DefaultCardNo></DefaultCardNo><AuthRequestData></AuthRequestData></AuthRequestBody></AuthRequest1234567890></Body>
<SignTime>11111111</SignTime>
<Padding>********</Padding>
<Flag>Y</Flag>
<Show>帐号:9558820200009280365\r\n金额:1.00 RMB\r\n姓名:张三</Show>
</Trade>
例如,本实施例中的登录签名指令中数据域的报文信息具体为:
<?xml version="1.0" encoding="utf8"?>
<Trade>
<Body><AuthRequest1234567890><AuthRequestHead><AuthVersion>1002</AuthVersion></AuthRequestHead><AuthRequestBody><AuthName>CBANK_CREDITCARD</AuthName><DefaultCardNo></DefaultCardNo><AuthRequestData></AuthRequestData></AuthRequestBody></AuthRequest1234567890></Body>
<SignTime>11111111</SignTime>
<Padding>********</Padding>
<Flag>N</Flag>
<Show>帐号:9558820200009280365\r\n金额:1.00 RMB\r\n姓名:张三</Show>
</Trade>
步骤312:判断当前有效哈希算法是否为SM3算法,是则执行步骤313,否则报错,将状态机的状态设为0,返回步骤302;
步骤313:判断接收到的指令数据包是否为第一包数据,是则执行步骤314,否则执行步骤320;
在本实施例中,步骤313具体为:判断预先设置的数据包标识是否为1,是则接收到的指令数据包为第一包数据,需将数据包标识修改为其他数据,具体的本实施例中修改为2;
步骤314:判断执行权限是否满足,是则执行步骤315,否则报错,将状态机的状态设为0,返回步骤302;
本实施例中步骤314具体为:判断PIN码校验操作是否成功执行,是则执行权限满足,否则执行权限不满足;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤315:根据交易签名及登录签名指令的格式获取对应的登录/交易用户ID,根据密钥信息中的密钥地址读取用户公钥;
具体的,在本实施例中,在本实施例的指令之前上位机通过发送的APDU指令进行设置登录/交易用户ID,登录/交易用户ID为16字节长的数据;用户公钥用xA、yA表示;
在本实施例中,登录/交易用户ID具体为1234567812345678;
步骤316:判断用户公钥是否有效,是则执行步骤317,否则报错,将状态机的状态设为0,返回步骤302;
具体的,在该步骤中,判断SM2公钥的前三个字节数据是否均为0,是则无效,否则有效;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤317:将登录/交易用户ID和用户公钥传送给第一底层函数进行计算,接收并检测第一底层函数的返回值,如返回值为正确,则获取第一底层函数计算得到的第一计算结果,执行步骤318,如返回值为错误则报错,将状态机的状态设为0,返回步骤302;
本实施例中第一底层函数是根据登录/交易用户ID和用户公钥计算Z值的函数;第一计算结果即为Z值;第一底层函数计算得到第一计算结果的过程具体为:
步骤317-1:获取系统曲线的第一参数、第二参数和基点坐标;
具体的,本实施例中第一参数记为a、第二参数记为b、基点坐标记为xG、yG
步骤317-2:计算用户ID的比特长度;
本实施例中的比特长度为2个字节的数据,记为ENTL;
步骤317-3:将比特长度、用户ID、第一参数、第二参数、基点横坐标、基点纵坐标、用户公钥横坐标、用户公钥纵坐标顺序组合,进行运算,得到Z值;
具体的,本实施例中的得到的Z = SM3(ENTL||ID||a||b||xG||yG||xA||yA);
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤318:将第一计算结果传送给第二底层函数进行SM3运算,接收并检测第二底层函数的返回值,如返回值为正确,则获取第二底层函数得到的中间结果并保存,执行步骤319,如返回值为错误则报错,将状态机的状态设为0,返回步骤302;
本实施例中,第二底层函数是调用SM3算法进行计算的函数;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤319:对交易签名及登录签名指令中的报文信息进行解析,从解析结果中提取关键数据并保存,将保存的中间结果和解析结果传送给第二底层函数进行SM3运算,接收并检测第二底层函数的返回值,如返回值为正确则获取第二底层函数得到结果并用其更新保存的中间结果,给上位机返回成功响应,返回步骤302,如返回值为错误则报错,将状态机的状态设为0,返回步骤302;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤320:判断接收到的指令数据包是否为最后一包数据,是则执行步骤321,否则执行步骤324;
本实施例中,通过指令的头部判断是否为最后一包数据,如接收到的指令的头部为00 2a则为最后一包数据,如接收到的指令的头部为102a则不是最后一包数据;
步骤321:判断解析结果中是否有按键标识,是则保存按键标识的值,执行步骤322,否则报错,将状态机的状态设为0,返回步骤302;
具体的,按键标识是在最后一个数据包中解析得到的,也可以是在前几个数据包中解析得到的;当按键标识的值为Y时,则在接收到计算签名指令后需先将关键数据输出,只有用户确认后才进行签名操作,当按键标识的值为N时,在接收到计算签名指令后直接进行签名操作;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤322:对交易签名及登录签名指令中的报文信息进行解析,从解析结果中提取关键数据并保存,将保存的中间结果和解析结果传送给第二底层函数进行SM3运算,接收并检测第二底层函数的返回值,如返回值为正确则执行步骤323,如返回值为错误则报错,将状态机的状态设为0,返回步骤302;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤323:获取第二底层函数得到的哈希结果并保存,设置状态机的状态为2,并给上位机返回成功响应,返回步骤302;
步骤324:对交易签名及登录签名指令中的报文信息进行解析并从解析结果中提取关键数据,将保存的中间结果和解析结果传送给第二底层函数进行SM3运算,接收并检测第二底层函数的返回值,如返回值为正确则获取第二底层函数得到结果并用其更新保存的中间结果,给上位机返回成功响应,返回步骤302,如返回值为错误则报错,将状态机的状态设为0,返回步骤302;
本实施例中,对报文信息解析得到的关键数据进行保存用于在步骤340中输出;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
如本实施例中为交易签名指令则解析得到的报文信息为:
3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 2231 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 2275 74 66 38 22 3f 3e 0d 0a 3c 54 72 61 64 653e 0d 0a 3c 42 6f 64 79 3e 3c 41 75 74 68 5265 71 75 65 73 74 31 32 33 34 35 36 37 38 3930 3e 3c 41 75 74 68 52 65 71 75 65 73 74 4865 61 64 3e 3c 41 75 74 68 56 65 72 73 69 6f6e 3e 31 30 30 32 3c 2f 41 75 74 68 56 65 7273 69 6f 6e 3e 3c 2f 41 75 74 68 52 65 71 7565 73 74 48 65 61 64 3e 3c 41 75 74 68 52 6571 75 65 73 74 42 6f 64 79 3e 3c 41 75 74 684e 61 6d 65 3e 43 42 41 4e 4b 5f 43 52 45 4449 54 43 41 52 44 3c 2f 41 75 74 68 4e 61 6d65 3e 3c 44 65 66 61 75 6c 74 43 61 72 64 4e6f 3e 3c 2f 44 65 66 61 75 6c 74 43 61 72 644e 6f 3e 3c 41 75 74 68 52 65 71 75 65 73 7444 61 74 61 3e 3c 2f 41 75 74 68 52 65 71 7565 73 74 44 61 74 61 3e 3c 2f 41 75 74 68 5265 71 75 65 73 74 42 6f 64 79 3e 3c 2f 41 7574 68 52 65 71 75 65 73 74 31 32 33 34 35 3637 38 39 30 3e 3c 2f 42 6f 64 79 3e 0d 0a 3c53 69 67 6e 54 69 6d 65 3e 31 31 31 31 31 3131 31 3c 2f 53 69 67 6e 54 69 6d 65 3e 0d 0a3c 50 61 64 64 69 6e 67 3e 2a 2a 2a 2a 2a 2a2a 2a 3c 2f 50 61 64 64 69 6e 67 3e 0d 0a 3c46 6c 61 67 3e 59 3c 2f 46 6c 61 67 3e 0d 0a3c 53 68 6f 77 3e e5 b8 90 e5 8f b7 ef bc 9a39 35 35 38 38 32 30 32 30 30 30 30 39 32 3830 33 36 35 5c 72 5c 6e e9 87 91 e9 a2 9d efbc 9a 31 2e 30 30 20 52 4d 42 5c 72 5c 6e e5a7 93 e5 90 8d ef bc 9a e5 bc a0 e4 b8 89 3c2f 53 68 6f 77 3e 0d 0a 3c 2f 54 72 61 64 653e;
从交易签名指令中报文信息的解析结果中提取出来的关键数据为:帐号:9558820200009280365
金额:1.00 RMB
姓名:张三;
在步骤323中保存的哈希结果为1D11F667F21612416793C77D0B232B5B3C
AE426D79E5A47A342196F8B82C61ED;
如本实施例中为登录签名指令则解析得到的报文信息为:
3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 2231 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 2275 74 66 38 22 3f 3e 0d 0a 3c 54 72 61 64 653e 0d 0a 3c 42 6f 64 79 3e 3c 41 75 74 68 5265 71 75 65 73 74 31 32 33 34 35 36 37 38 3930 3e 3c 41 75 74 68 52 65 71 75 65 73 74 4865 61 64 3e 3c 41 75 74 68 56 65 72 73 69 6f6e 3e 31 30 30 32 3c 2f 41 75 74 68 56 65 7273 69 6f 6e 3e 3c 2f 41 75 74 68 52 65 71 7565 73 74 48 65 61 64 3e 3c 41 75 74 68 52 6571 75 65 73 74 42 6f 64 79 3e 3c 41 75 74 684e 61 6d 65 3e 43 42 41 4e 4b 5f 43 52 45 4449 54 43 41 52 44 3c 2f 41 75 74 68 4e 61 6d65 3e 3c 44 65 66 61 75 6c 74 43 61 72 64 4e6f 3e 3c 2f 44 65 66 61 75 6c 74 43 61 72 644e 6f 3e 3c 41 75 74 68 52 65 71 75 65 73 7444 61 74 61 3e 3c 2f 41 75 74 68 52 65 71 7565 73 74 44 61 74 61 3e 3c 2f 41 75 74 68 5265 71 75 65 73 74 42 6f 64 79 3e 3c 2f 41 7574 68 52 65 71 75 65 73 74 31 32 33 34 35 3637 38 39 30 3e 3c 2f 42 6f 64 79 3e 0d 0a 3c53 69 67 6e 54 69 6d 65 3e 31 31 31 31 31 3131 31 3c 2f 53 69 67 6e 54 69 6d 65 3e 0d 0a3c 50 61 64 64 69 6e 67 3e 2a 2a 2a 2a 2a 2a2a 2a 3c 2f 50 61 64 64 69 6e 67 3e 0d 0a 3c46 6c 61 67 3e 4e 3c 2f 46 6c 61 67 3e 0d 0a3c 53 68 6f 77 3e e5 b8 90 e5 8f b7 ef bc 9a39 35 35 38 38 32 30 32 30 30 30 30 39 32 3830 33 36 35 5c 72 5c 6e e9 87 91 e9 a2 9d efbc 9a 31 2e 30 30 20 52 4d 42 5c 72 5c 6e e5a7 93 e5 90 8d ef bc 9a e5 bc a0 e4 b8 89 3c2f 53 68 6f 77 3e 0d 0a 3c 2f 54 72 61 64 653e;
在步骤323中保存的哈希结果为EAD7ADFC92F646E5474AF55E5E20F458
E310AB4D1679CDB4BF6777BA1BF53D9B;
步骤325:判断当前有效哈希算法是否为SM3算法,是则执行步骤326,否则报错,将状态机的状态设为0,返回步骤302;
步骤326:判断接收到的指令数据包是否为第一包数据,是则执行步骤327,否则执行步骤333;
在本实施例中,步骤326具体为:判断预先设置的数据包标识是否为1,是则接收到的指令数据包为第一包数据,将数据包标识修改为其他数据,具体的本实施例中修改为2;
步骤327:判断执行权限是否满足,是则执行步骤328,否则报错,将状态机的状态设为0,返回步骤302;
本实施例中步骤327具体为:判断PIN码校验操作是否成功执行,是则执行权限满足,否则执行权限不满足;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤328:根据证书下载签名指令的格式获取对应的证书用户ID,根据密钥信息中的密钥地址读取用户公钥,判断用户公钥是否有效,是则执行步骤329,否则报错,将状态机的状态设为0,返回步骤302;
具体的,在该步骤中获取的用户ID为证书下载用户ID,具体为1234567890123456;在本实施例的指令之前上位机通过发送的APDU指令进行设置证书下载用户ID,证书下载用户ID为16字节长的数据;用户公钥用xA、yA表示;
本实施例中,该步骤的判断用户公钥是否有效实现过程与步骤316相同,在此不再赘述;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤329:将证书用户ID和用户公钥传送给第一底层函数进行计算,接收并检测第一底层函数的返回值,如返回值为正确则执行步骤330,如返回值为错误则报错,将状态机的状态设为0,返回步骤302;
本实施例中的计算过程与步骤317中相同,在此不再赘述;
具体的,在该步骤中报错,将状态机的状态设为0的同时将数据包标识设为1;
步骤330:获取第一底层函数计算得到的第一计算结果;
步骤331:将第一计算结果传送给第二底层函数进行SM3运算,接收并检测第二底层函数的返回值,如返回值为正确则获取第二底层函数得到的中间结果并保存,执行步骤332,如返回值为错误则报错,将状态机的状态设为0,返回步骤302;
本实施例中,第二底层函数是调用SM3算法进行计算的函数;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤332:将证书下载签名指令中的报文信息和保存的中间结果传送给第二底层函数进行SM3运算,接收并检测第二底层函数的返回值,如返回值为正确则获取第二底层函数得到结果并用其更新保存的中间结果,给上位机返回成功响应,返回步骤302,如返回值为错误则报错,将状态机的状态设为0,返回步骤302;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
例如本实施例中,证书下载签名指令中的报文信息为:01 02 0304 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 3C 543E 3C 44 3E 3C 4D 09 0A 3C 54 3E 3C 44 3E;
步骤333:判断接收到的指令数据包是否为最后一包数据,是则执行步骤334,否则执行步骤336;
本实施例中,该步骤的判断过程与步骤320的判断过程相同;
步骤334:将证书下载签名指令中的报文信息和保存的中间结果传送给第二底层函数进行SM3运算,接收并检测第二底层函数的返回值,如返回值为正确则执行步骤335,如返回值为错误则报错,将状态机的状态设为0,返回步骤302;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤335:获取第二底层函数得到的哈希结果并保存,设置按键标识的值为N,并设置状态机的状态为2,给上位机返回成功响应,返回步骤302;
在本实施例中,下载证书签名指令处理过程中的哈希结果为:22771593DCE
A1401C33B0DD3B5624DA6300456D60CA6B2337004A46805084013;
步骤336:将证书下载签名指令中的报文信息和保存的中间结果传送给第二底层函数进行SM3运算,接收并检测第二底层函数的返回值,如返回值为正确则获取第二底层函数得到结果并用其更新保存的中间结果,给上位机返回成功响应,返回步骤302;如返回值为错误则报错,将状态机的状态设为0,返回步骤302;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤337:判断状态机的状态是否为2,是则执行步骤338,否则报错,将状态机的状态设为0,返回步骤302;
步骤338:对计算签名指令进行解析,并判断参数是否正确,是则执行步骤339,否则报错,将状态机的状态设为0,返回步骤302;
本实施例中,该步骤的判断参数是否正确的方法可参考步骤305的实现方法;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤339:判断当前有效签名算法是否为SM2算法,是则执行步骤340,否则报错,将状态机的状态设为0,返回步骤302;
本实施例中的签名算法标识是在步骤305中解析得到保存下来的;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤340:检测按键标识的值,如为Y则执行步骤341,如为N则执行步骤343;
本实施例中的按键标识的值是在步骤321中解析保存下来的或者是在步骤335中设置的;
步骤341:将保存的关键数据通过显示屏输出等待用户确认;
本实施例中的关键数据是在步骤313-步骤324中解析得到保存下来的;
具体的,本是实施例中显示屏输出的关键数据为:
帐号:9558820200009280365
金额:1.00 RMB
姓名:张三;
步骤342:将签名标识置位,并设置状态机的状态为3,打开超时定时器,给上位机返回预设响应数据,返回步骤302;
本实施例中预设响应数据为9001;
步骤343:根据保存的密钥ID和密钥用途打开保存密钥的文件,并从中读取用户私钥,并判断用户私钥是否有效,是则执行步骤344,否则报错,将状态机的状态设为0,返回步骤302;
本实施例中,判断用户私钥前三个字节数据是否均为0,是则无效,否则有效;
本实施例中的密钥ID和密钥用途是在步骤305中解析得到的,与步骤308中的一致;
具体的,将状态机的状态设为0的同时将数据包标识设为1;
步骤344:将保存的哈希结果传送给第三底层函数进行签名,接收并检测返回的返回值,如返回值为正确则获取第三底层函数得到的签名结果,并将签名结果和成功响应返回给上位机,设置状态机的状态为0,返回步骤302,如返回值为错误则报错,将状态机的状态设为0,返回步骤302;
本实施例中第三底层函数为使用用户私钥进行签名的函数;
本实施例中,如状态机的状态为0说明本次签名完成;
本实施例中,如返回值为正确则表示签名成功,将数据包标识置为1;如返回值为错误则表示签名失败,将数据包标识置为1;
例如,在本实施例中对登录签名指令处理过程中保存的哈希结果(EAD7ADFC92F646E5474AF55E5E20F458E310AB4D1679CDB4BF6777BA1BF53D9B)进行签名得到的签名结果为A8034EA77A0E7045E7DF3D9FBCEC928F2FB7030267867369CFFAAC183F9205FB3359361F81D6FB5343D1A603CB4BC6ADC436D626E65A202FBEC6A0AAA720EB21;
例如,在本实施例中对证书下载签名指令处理过程中保存的哈希结果(22771593DCEA1401C33B0DD3B5624DA6300456D60CA6B2337004A46805084013)进行签名得到的签名结果为70284EF196140D6EAFD7EC7BBA0087BC284F73C3C66A87848E9697D51954B389CE91589EC6050E89D6DE76D508EB74C248C3D3C423537202BE9694E7D754DC48;
步骤345:判断状态机的状态是否为3,是则执行步骤346,否则报错,将状态机的状态设为0,返回步骤302;
步骤346:根据关联引脚电平变化监测按键类型,如为翻页键则通过显示屏输出关键数据,返回步骤302;如为取消键则执行步骤347,如为确认键则执行步骤348;
步骤347:通过显示屏输出交易取消信息,设置状态机的状态为0,清除本次签名的相关变量,返回步骤302;
本实施例中的相关变量包括:数据包标识,液晶显示屏的显示控制变量;
步骤348:判断签名标识是否置位,是则执行步骤349,否则报错,将状态机状态改为0,返回步骤302;
步骤349:设置状态机的状态为4,并判断是否设置成功,是则执行步骤350,否则报错,将状态机状态改为0,返回步骤302;
本实施例中,状态机的状态为4时,表示下次接收到获取签名结果的指令时,将步骤352中保存的签名结果返回给上位机;
步骤350:根据保存的密钥ID和密钥用途打开保存密钥的文件,并从中读取用户私钥,并判断用户私钥是否有效,是则执行步骤351,否则报错,将状态机状态改为0,返回步骤302;
具体的,本实施例中的用户公钥和用户私钥分别为SM2公钥和SM2私钥;
本实施例中的判断过程与步骤343相同;
步骤351:将保存的哈希结果传送给第三底层函数进行签名,接收并检测返回的返回值,如返回值为正确则执行步骤352,如返回值为错误则报错,将状态机状态改为0,返回步骤302;
具体的,本实施例中,该步骤中对交易签名指令处理过程中保存的哈希结果(1D11F667F21612416793C77D0B232B5B3CAE426D79E5A47A342196F8B82C61ED)进行签名得到的签名结果为:CF6CE03F72A0CD704DDCEA7AC987A53882C1B9D5214ADFB052174F07CDD5D0383655A8D94E412380A5A5025DCD70EF63C58B2BB6D43166CE737AA68F4EF65C0A;
步骤352:获取签名结果并保存,通过显示屏输出签名操作完成信息,返回步骤302;
本实施例中步骤347还可以在步骤346之后的任意时刻执行;如在步骤348与步骤349之间,或步骤349与步骤350之间,或步骤350之后执行。
步骤353:判断状态机的状态是否为4,是则执行步骤354,否则报错,将状态机的状态设为0,返回步骤302;
步骤354:判断接收到的获取签名结果指令是否合法,是则执行步骤355,否则报错,将状态机的状态设为0,返回步骤302;
具体的,在本实施例中,如接收到的获取签名结果指令为80 38 0000 00 02 00,则表示该指令合法;
步骤355:将保存的签名结果和成功响应返回给上位机,将状态机的状态设为0,返回步骤302。
本实施例中的方法的实现过程中,将设置算法、解析报文和进行签名通过三条指令来实现,在设置算法过程中将相应的SM2密钥信息获取到。在报文解析过程中,通过cos指令第四字节上的数据区分证书下载签名指令需求和交易签名及登录签名指令需求,如第四字节数据为80则表示进行交易签名及登录签名需求,对报文进行解析并对解析结果进行SM3运算;如第四字节数据为82则表示进行证书下载签名需求,对接收到的报文直接进行SM3运算;而在交易签名及登录签名的报文解析过程,根据报文的格式将交易签名和登录签名区别开来,如果报文中存在<Flag>Y</Flag>,则表示是交易签名,后续签名过程需要按键确认,如果报文中存在<Flag>N</Flag>,则表示是登录签名,后续签名过程无需按键确认,并设置一个标识如flag来表示是否需要按键。不管是哪种签名需求,只要cos解析到是第一包数据(数据包标识为1),则首先会计算Z值(用户ID是提前用另外一条cos指令设置的),并对Z值进行SM3运算,然后再对传入的数据继续进行SM3运算,直到最后一包数据(前两个字节为002a),将最后得到的SM3哈希结果保存并返回(证书下载签名需将flag设置为无需按键)。在签名过程中,根据是否需要按键标识来区分是否需要按键,如果无需按键,则将保存的SM3哈希结果进行SM2签名运算,并直接返回签名结果。如果需要按键,则显示屏显示交易内容,并等待按键,在接收到按键确认后,才真正进行签名操作,有效防止骗签。
实施例四
本发明实施例四提供了一种签名装置,如图8所示,包括:
接收模块401,用于接收上位机下发的指令和用户的按键信息;
第一判断模块402,用于判断接收模块401接收到的指令是否为计算签名指令;
第一解析模块403,用于当第一判断模块402判断为是时对计算签名指令进行解析得到报文信息,对报文信息解析得到报文信息解析结果;
第二判断模块404,用于判断报文信息解析结果中是否有按键标识;
第一获取计算模块405,用于当第二判断模块404判断为是时根据计算签名指令的格式获取对应的第一预设用户ID,根据第一预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对第一计算结果和报文信息进行计算得到哈希结果;
提取模块406,用于从报文信息解析结果中提取关键数据;
第一检测模块407,用于检测按键标识的值;
输出模块408,用于输出关键数据,还用于输出提示信息;
本实施例中的提示信息包括取消信息、错误信息等;
第二检测模块409,用于当接收模块401接收到按键信息时,检测按键信息的类型;
本实施例中的第二检测模块还用于判断在预设时间内是否接收到按键信息;
签名模块410,用于当第一检测模块407检测为第一预设字符或第二检测模块409检测为确认键时根据第二预设算法使用用户私钥对哈希结果进行签名;
第二获取计算模块411,用于当第二判断模块404判断为否时根据计算签名指令的格式获取对应的第二预设用户ID,根据第二预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对第一计算结果和报文信息进行计算得到哈希结果,根据第二预设算法使用用户私钥对哈希结果进行签名;
发送模块412,用于向上位机返回响应和签名得到的签名结果;
本实施例中的响应包括成功响应、取消响应、错误响应等。
本发明实施例中的接收模块401还可以接收到设置算法指令,则该装置还包括:
第二解析模块,用于对接收模块401接收到的设置算法指令进行解析;
第三判断模块,用于判断第二解析模块的解析结果是否符合预设要求;
本实施例中的第三判断模块具体用于判断参数是否正确,具体为:判断卡内文件系统是否创建;判断解析得到的算法信息是否合法。
设置模块,用于当第三判断模块判断为是时设置当前有效签名算法为第二预设算法,设置当前有效哈希算法为第一预设算法;
保存模块,用于保存第二解析模块解析得到的密钥信息。
本实施例中的装置还包括获取模块,用于根据密钥信息获取用户私钥和用户公钥。
本实施例中的装置还包括:
第四判断模块,用于判断参数是否正确;
本实施例中的第四判断模块与第三判断模块的功能的具体实现过程相同;
第五判断模块,用于判断当前有效签名算法是否为第二预设算法。
还包括:第六判断模块,用于判断用户私钥是否有效;
本实施例中的装置还可以包括:第七判断模块,用于判断用户公钥是否有效;用于判断执行权限是否满足;第八判断模块,用于判断当前有效哈希算法是否为第一预设算法。
还包括第九判断模块,用于判断签名是否成功,如成功则该装置通过发送模块412将签名结果返回给上位机。
本实施例的装置根据报文中是否有按键标识和按键标识的不同值区分签名需求,不同的签名需求根据不同的用户ID来计算第一计算结果值,从而达到防止骗签的目的。
实施例五
本发明实施例五提供了一种签名装置,如图9所示,包括:
接收模块501,用于接收上位机下发的指令和用户的按键信息;
第一检测模块502,用于当接收模块501接收到上位机下发的指令信息时检测接收到的指令的类型,如为报文解析指令则触发第二检测模块503工作;如为计算签名指令则触发解析判断模块509工作,如为获取签名结果指令则触发第三判断模块515工作;
第二检测模块503,根据报文解析指令的格式检测签名需求,如为交易签名及登录签名指令需求则第一解析模块504工作,如为证书下载签名指令需求则第二获取计算模块508工作;
第一解析模块504,用于对交易签名及登录签名指令的报文信息进行解析得到报文信息解析结果;
第一判断模块505,用于判断报文信息解析结果中是否有按键标识,是则保存提取模块506工作;
保存提取模块506,用于保存按键标识的值,从报文信息解析结果中提取关键数据并保存;
第一获取计算模块507,用于根据交易签名及登录签名指令的格式获取对应的第一预设用户ID,根据第一预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对第一计算结果和报文信息解析结果进行计算得到哈希结果并保存;
第二获取计算模块508,用于根据证书下载签名指令的格式获取对应的第二预设用户ID,根据第二预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对第一计算结果和证书下载签名指令中的报文信息进行计算得到哈希结果并保存,将按键标识的值置为第一预设字符;
解析判断模块509,用于对计算签名指令进行解析,并判断解析结果是否符合计算条件,是则第二判断模块510工作;
具体的,本实施例中的解析判断模块509包括:
解析单元,用于对计算签名指令进行解析;
第一判断单元,用于判断参数是否正确;
第二判断单元,用于判断当前有效签名算法是否为第二预设算法;
第二判断模块510,用于判断按键标识的值是否为第一预设字符,是则签名模块512工作,否则输出模块511工作;
输出模块511,用于输出保存的关键数据,还用于输出提示信息;
签名模块512,用于根据第二预设算法使用用户私钥对保存的哈希结果进行签名;
第二检测模块513,用于当接收模块501接收到按键信息时检测按键信息的类型,如为确认键则签名保存模块514工作;
签名保存模块514,用于根据第二预设算法使用私钥对保存的哈希结果进行签名并保存签名结果;
第三判断模块515,用于判断是否存在签名结果,是则发送模块516将保存的签名结果返回给上位机;
发送模块516,用于向上位机返回响应和签名结果;
本实施例中的发送模块516还用于将哈希结果返回给上位机。
本实施例中的装置还包括:
第二解析模块,用于当第一检测模块502检测为设置算法指令时对设置算法指令进行解析;
第四判断模块,用于判断第二解析模块的解析结果是否符合预设要求,是则设置模块工作;
具体的,本实施例中,第四判断模块具体用于判断参数是否正确,具体包括:判断卡内文件系统是否创建;判断解析得到的算法信息是否合法;
设置模块,用于设置当前有效签名算法为第二预设算法,设置当前有效哈希算法为第一预设算法;
保存模块,用于保存第二解析模块解析得到的密钥信息。
该装置还可以包括获取模块,用于根据密钥信息获取得到用户公钥和用户私钥。
如本装置签名是通过状态机的方案来实现,则该装置还包括:设置状态模块:用于将状态机的状态设为第一预设值或第二预设值或第三预设值或第四预设值或第五预设值;第五判断模块,用于判断状态机的状态是否为第一预设值、判断状态机的状态是否为第二预设值、判断状态机的状态是否为第三预设值、判断状态机的状态是否为第四预设值、判断状态机的状态是否为第五预设值;第三判断模块还用于判断获取签名结果指令是否合法。
还包括第六判断模块,用于判断解析条件是否合法,是则第一解析模块504工作,第六判断模块具体包括:
第五判断单元,用于判断当前有效哈希算法是否为第一预设算法;
第六判断单元,用于判断执行权限是否满足;
第七判断单元,用于判断用户公钥是否有效。
本实施例中的装置还可以包括第七判断模块,用于在进行签名后判断签名是否成功。
本实施例的装置根据报文格式的不同区分签名需求,不同的签名需求根据不同的用户ID来计算第一计算结果值,从而达到防止骗签的目的。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

Claims (40)

1.一种签名方法,其特征在于,包括:
步骤A1:设备上电,进行初始化;
步骤A2:当接收到上位机下发的指令时判断其是否为计算签名指令,是则执行步骤A3,否则根据接收到的指令进行相应操作;
步骤A3:对所述计算签名指令进行解析得到报文信息,对所述报文信息解析得到报文信息解析结果;
步骤A4:判断所述报文信息解析结果中是否有按键标识,是则执行步骤A5,否则执行步骤A10;
步骤A5:根据所述计算签名指令的格式获取对应的第一预设用户ID,根据所述第一预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息进行计算得到哈希结果,从所述报文信息解析结果中提取关键数据;
步骤A6:检测所述按键标识的值,如为第二预设字符则执行步骤A7,如为第一预设字符则执行步骤A9;
步骤A7:输出所述关键数据,并等待用户确认;
步骤A8:当接收到按键信息时,检测所述按键信息的类型,如为确认键则根据第二预设算法使用用户私钥对所述哈希结果进行签名,并将签名结果和成功响应返回给所述上位机,返回步骤A2,如为取消键则输出取消信息,返回步骤A2,如为翻页键则返回步骤A7;
步骤A9:使用用户私钥对所述哈希结果进行签名,并将签名结果和成功响应返回给所述上位机,返回步骤A2;
步骤A10:根据所述计算签名指令的格式获取对应的第二预设用户ID,根据所述第二预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息进行计算得到哈希结果,根据第二预设算法使用用户私钥对所述哈希结果进行签名,并将签名结果和成功响应返回给所述上位机,返回步骤A2。
2.如权利要求1所述的方法,其特征在于,所述步骤A2中如接收到上位机下发的设置算法指令,则根据接收到的指令进行相应操作包括:
步骤C1:对接收到的所述设置算法指令进行解析,并判断解析结果是否符合预设要求,是则设置当前有效签名算法为第二预设算法,设置当前有效哈希算法为第一预设算法,执行步骤C2,否则报错,返回步骤A2;
步骤C2:保存解析得到的密钥信息,给所述上位机返回成功响应,返回步骤A2。
3.如权利要求2所述的方法,其特征在于,所述用户公钥和用户私钥是根据所述密钥信息获取得到的。
4.如权利要求3所述的方法,其特征在于,所述判断解析结果是否符合预设要求包括:判断参数是否正确。
5.如权利要求1所述的方法,其特征在于,所述根据第二预设算法使用用户私钥对所述哈希结果进行签名之前包括:
判断参数是否正确,是则继续,否则报错,返回步骤A2;
判断当前有效签名算法是否为所述第二预设算法,是则继续,否则报错,返回步骤A2。
6.如权利要求5所述的方法,其特征在于,所述根据第二预设算法使用用户私钥对所述哈希结果进行签名之前还包括:
判断所述用户私钥是否有效,是则继续,否则报错,返回步骤A2。
7.如权利要求4或5所述的方法,其特征在于,所述判断参数是否正确具体为:
判断卡内文件系统是否创建,是则继续,否则报错,结束;
判断解析得到的算法信息是否合法,是则继续,否则报错,返回步骤S2。
8.如权利要求1所述的方法,其特征在于,所述生成第一计算结果之前包括:判断所述用户公钥是否有效,是则继续,否则报错,返回步骤A2;判断执行权限是否满足,是则继续,否则报错,返回步骤A2;
所述根据第一预设算法对所述第一计算结果和所述报文信息进行计算得到哈希结果之前包括:判断当前有效哈希算法是否为第一预设算法,是则继续,否则报错,返回步骤A2。
9.如权利要求1所述的方法,其特征在于,在所述步骤A7和步骤A8之间,包括:判断在预设时间内是否接收到按键信息,是则执行步骤A8,否则报错,返回步骤A2。
10.如权利要求1所述的方法,其特征在于,所述根据第二预设算法使用用户私钥对所述哈希结果进行签名与所述将签名结果和成功响应返回给所述上位机之间包括:判断签名是否成功,是则继续,否则报错,返回步骤A2。
11.一种签名方法,其特征在于,包括:
步骤S1:设备上电,进行初始化;
步骤S2:等待接收信息,当接收到上位机下发的指令信息时执行步骤S3,当接收到按键信息时执行步骤S11;
步骤S3:检测接收到的所述指令的类型,如为报文解析指令则执行步骤S4;如为计算签名指令则执行步骤S7,如为获取签名结果指令则执行步骤S12,如为其他指令则进行相应操作;
步骤S4:根据所述报文解析指令的格式检测签名需求,如为交易签名及登录签名指令需求则执行步骤S5,如为证书下载签名指令需求则执行步骤S6;
步骤S5:对所述交易签名及登录签名指令的报文信息进行解析得到报文信息解析结果,并判断所述报文信息解析结果中是否有按键标识,是则保存所述按键标识的值,从所述报文信息解析结果中提取关键数据并保存,根据所述交易签名及登录签名指令的格式获取对应的第一预设用户ID,根据所述第一预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息解析结果进行计算得到哈希结果并保存,给所述上位机返回成功响应,返回步骤S2;否则报错,返回步骤S2;
步骤S6:根据所述证书下载签名指令的格式获取对应的第二预设用户ID,根据所述第二预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述证书下载签名指令中的报文信息进行计算得到哈希结果并保存,将所述按键标识的值置为第一预设字符,并给所述上位机返回成功响应,返回步骤S2;
步骤S7:对所述计算签名指令进行解析,并判断解析结果是否符合计算条件,是则执行步骤S8,否则报错,返回步骤S2;
步骤S8:判断所述按键标识的值是否为第一预设字符,是则执行步骤S10,否则执行步骤S9;
步骤S9:将所述保存的关键数据输出并等待用户确认,给上位机返回成功响应,返回步骤S2;
步骤S10:根据第二预设算法使用用户私钥对所述保存的哈希结果进行签名,并将签名结果和成功响应返回给所述上位机,返回步骤S2;
步骤S11:检测所述按键信息的类型,如为取消键则输出取消信息,返回步骤S2;如为翻页键则输出所述关键数据,返回步骤S2;如为确认键,则根据第二预设算法使用所述用户私钥对所述保存的哈希结果进行签名并保存签名结果,返回步骤S2;
步骤S12:判断是否存在所述签名结果,是则将所述签名结果返回给上位机,返回步骤S2,否则报错,返回步骤S2。
12.如权利要求11所述的方法,其特征在于,在所述步骤S3中如检测接收到的指令的类型为设置算法指令则执行步骤S13;
步骤S13:对所述设置算法指令进行解析,并判断解析结果是否符合预设要求,是则设置当前有效签名算法为第二预设算法,设置当前有效哈希算法为第一预设算法,执行步骤S14,否则报错,返回步骤S2;
步骤S14:保存解析得到的密钥信息,给所述上位机返回成功响应,返回步骤S2。
13.如权利要求12所述的方法,其特征在于,所述用户公钥和所述用户私钥是根据所述密钥信息获取得到的。
14.如权利要求13所述的方法,其特征在于,所述判断解析结果是否符合预设要求包括:判断参数是否正确。
15.如权利要求12所述的方法,其特征在于,所述进行初始化包括:将状态机的状态设为第一预设值;
所述步骤S13之前包括:判断所述状态机的状态是否为第一预设值,是则执行步骤S13,否则报错,返回步骤S2;
所述步骤S14还包括:将所述状态机的状态设为第二预设值;
所述步骤S4之前还包括:判断所述状态机的状态是否为所述第二预设值,是则执行步骤S4,否则报错,返回步骤S2;
所述步骤S5判断为是时还包括将所述状态机的状态设为第三预设值,判断为否时还包括将所述状态机的状态设为第一预设值;
所述步骤S6还包括将所述状态机的状态设为第三预设值;
所述步骤S7之前包括:判断所述状态机的状态是否为所述第三预设值,是则执行步骤S7,否则报错,返回步骤S2;
所述步骤S9还包括将所述状态机的状态设为第四预设值;
所述步骤S10还包括将所述状态机的状态设为所述第一预设值;
所述步骤S11之前还包括:判断所述状态机的状态是否为所述第四预设值,是则执行步骤S11,否则报错,返回步骤S2;
所述步骤S11中检测按键信息的类型为确认键后还包括将所述状态机的状态设为第五预设值;检测按键信息的类型为取消键后还包括将所述状态机的状态设为所述第一预设值;
所述步骤S12具体包括:
步骤S12-1:判断所述状态机的状态是否为所述第五预设值,是则执行步骤S12-2,否则报错,返回步骤S2;
步骤S12-2:判断所述获取签名结果指令是否合法,是则将所述状态机的状态设为所述第一预设值,将所述签名结果返回给上位机,返回步骤S2,否则报错,返回步骤S2;
所述报错包括:输出错误信息,将所述状态机的状态设为所述第一预设值。
16.如权利要求11所述的方法,其特征在于,所述步骤S7中判断解析结果是否符合计算条件,具体包括:
判断参数是否正确,是则继续,否则报错,返回步骤S2;
判断当前有效签名算法是否为所述第二预设算法,是则继续,否则报错,返回步骤S2。
17.如权利要求14或16所述的方法,其特征在于,所述判断参数是否正确具体为:
判断卡内文件系统是否创建,是则继续,否则报错,结束;
判断解析得到的算法信息是否合法,是则继续,否则报错,返回步骤S2。
18.如权利要求11所述的方法,其特征在于,在所述步骤S5和步骤S6中给所述上位机返回成功响应的同时将所述哈希结果一起返回给所述上位机。
19.如权利要求14所述的方法,其特征在于,在所述步骤S5和所述步骤S6之前还包括:判断解析条件是否合法,是则继续,否则报错,返回步骤S2。
20.如权利要求19所述的方法,其特征在于,所述判断解析条件是否合法具体包括:
判断当前有效哈希算法是否为第一预设算法,是则继续,否则报错,返回步骤S2;
判断执行权限是否满足,是则继续,否则报错,返回步骤S2;
判断所述用户公钥是否有效,是则继续,否则报错,返回步骤S2。
21.如权利要求11所述的方法,其特征在于,所述根据第二预设算法使用所述用户私钥对所述哈希结果进行签名之后包括:判断签名是否成功,是则继续,否则报错,返回步骤S2。
22.一种签名装置,其特征在于,包括:
接收模块,用于接收上位机下发的指令和用户的按键信息;
第一判断模块,用于判断所述接收模块接收到的指令是否为计算签名指令;
第一解析模块,用于当所述第一判断模块判断为是时对所述计算签名指令进行解析得到报文信息,对所述报文信息进行解析得到报文信息解析结果;
第二判断模块,用于判断所述报文信息解析结果中是否有按键标识;
第一获取计算模块,用于当所述第二判断模块判断为是时根据所述计算签名指令的格式获取对应的第一预设用户ID,根据所述第一预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息进行计算得到哈希结果;
提取模块,用于从所述报文信息解析结果中提取关键数据;
第一检测模块,用于检测所述按键标识的值;
输出模块,用于输出所述关键数据,还用于输出提示信息;
第二检测模块,用于当接收模块接收到按键信息时,检测所述按键信息的类型;
签名模块,用于当所述第一检测模块检测为第一预设字符或所述第二检测模块检测为确认键时根据第二预设算法使用用户私钥对所述哈希结果进行签名;
第二获取计算模块,用于当所述第二判断模块判断为否时根据所述计算签名指令的格式获取对应的第二预设用户ID,根据所述第二预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息进行计算得到哈希结果,根据第二预设算法使用用户私钥对所述哈希结果进行签名;
发送模块,用于向所述上位机返回响应和签名得到的签名结果。
23.如权利要求22所述的装置,其特征在于,还包括:
第二解析模块,用于对所述接收模块接收到的设置算法指令进行解析;
第三判断模块,用于判断所述第二解析模块的解析结果是否符合预设要求;
设置模块,用于当所述第三判断模块判断为是时设置当前有效签名算法为第二预设算法,设置当前有效哈希算法为第一预设算法;
保存模块,用于保存所述第二解析模块解析得到的密钥信息。
24.如权利要求23所述的装置,其特征在于,还包括获取模块,用于根据所述密钥信息获取得到所述用户公钥和用户私钥。
25.如权利要求24所述的装置,其特征在于,所述第三判断模块具体用于判断参数是否正确。
26.如权利要求22所述的装置,其特征在于,还包括:
第四判断模块,用于判断参数是否正确;
第五判断模块,用于判断当前有效签名算法是否为所述第二预设算法。
27.如权利要求26所述的装置,其特征在于,还包括第六判断模块,用于判断所述用户私钥是否有效。
28.如权利要求22所述的装置,其特征在于,还包括:
第七判断模块,用于判断所述用户公钥是否有效;用于判断执行权限是否满足;
第八判断模块,用于判断当前有效哈希算法是否为第一预设算法。
29.如权利要求22所述的装置,其特征在于,所述第二检测模块还用于判断在预设时间内是否接收到按键信息。
30.如权利要求22所述的装置,其特征在于,还包括第九判断模块,用于判断签名是否成功。
31.一种签名装置,其特征在于,包括:
接收模块,用于接收上位机下发的指令和用户的按键信息;
第一检测模块,用于当所述接收模块接收到上位机下发的指令信息时检测接收到的所述指令的类型,如为报文解析指令则触发第二检测模块工作;如为计算签名指令则触发解析判断模块工作,如为获取签名结果指令则触发第三判断模块工作;
所述第二检测模块,根据所述报文解析指令的格式检测签名需求,如为交易签名及登录签名指令需求则第一解析模块工作,如为证书下载签名指令需求则第二获取计算模块工作;
所述第一解析模块,用于对所述交易签名及登录签名指令的报文信息进行解析得到报文信息解析结果;
第一判断模块,用于判断所述报文信息解析结果中是否有按键标识,是则保存提取模块工作;
所述保存提取模块,用于保存所述按键标识的值,从所述报文信息解析结果中提取关键数据并保存;
第一获取计算模块,用于根据所述交易签名及登录签名指令的格式获取对应的第一预设用户ID,根据所述第一预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述报文信息解析结果进行计算得到哈希结果并保存;
所述第二获取计算模块,用于根据所述证书下载签名指令的格式获取对应的第二预设用户ID,根据所述第二预设用户ID和用户公钥生成第一计算结果,根据第一预设算法对所述第一计算结果和所述证书下载签名指令中的报文信息进行计算得到哈希结果并保存,将所述按键标识的值置为第一预设字符;
所述解析判断模块,用于对所述计算签名指令进行解析,并判断解析结果是否符合计算条件,是则第二判断模块工作;
所述第二判断模块,用于判断所述按键标识的值是否为第一预设字符,是则签名模块工作,否则输出模块工作;
所述输出模块,用于输出所述保存的关键数据,还用于输出提示信息;
所述签名模块,用于根据第二预设算法使用用户私钥对所述保存的哈希结果进行签名;
第二检测模块,用于当所述接收模块接收到按键信息时检测所述按键信息的类型,如为确认键,则签名保存模块工作;
所述签名保存模块,用于根据第二预设算法使用所述用户私钥对所述保存的哈希结果进行签名并保存签名结果;
所述第三判断模块,用于判断是否存在所述签名结果,是则发送模块将所述保存的签名结果返回给所述上位机;
所述发送模块,用于向所述上位机返回响应和所述签名结果。
32.如权利要求31所述的装置,其特征在于,还包括:
第二解析模块,用于当所述第一检测模块检测为设置算法指令时对所述设置算法指令进行解析;
第四判断模块,用于判断所述第二解析模块的解析结果是否符合预设要求,是则设置模块工作;
所述设置模块,用于设置当前有效签名算法为第二预设算法,设置当前有效哈希算法为第一预设算法;
保存模块,用于保存所述第二解析模块解析得到的所述密钥信息。
33.如权利要求32所述的装置,其特征在于,还包括获取模块,用于根据所述密钥信息获取得到所述用户公钥和所述用户私钥。
34.如权利要求33所述的装置,其特征在于,所述第四判断模块具体用于判断参数是否正确。
35.如权利要求32所述的装置,其特征在于,还包括:
设置状态模块:用于将状态机的状态设为第一预设值或第二预设值或第三预设值或第四预设值或第五预设值;
第五判断模块,用于判断所述状态机的状态是否为第一预设值、判断所述状态机的状态是否为所述第二预设值、判断所述状态机的状态是否为所述第三预设值、判断所述状态机的状态是否为所述第四预设值、判断所述状态机的状态是否为所述第五预设值;
所述第三判断模块还用于判断所述获取签名结果指令是否合法。
36.如权利要求34所述的装置,其特征在于,所述解析判断模块包括:
解析单元,用于对所述计算签名指令进行解析;
第一判断单元,用于判断参数是否正确;
第二判断单元,用于判断当前有效签名算法是否为所述第二预设算法。
37.如权利要求31所述的装置,其特征在于,所述发送模块还用于将所述哈希结果返回给所述上位机。
38.如权利要求34所述的装置,其特征在于,还包括第六判断模块,用于判断解析条件是否合法,是则所述第一解析模块工作。
39.如权利要求38所述的装置,其特征在于,所述第六判断模块包括:
第五判断单元,用于判断当前有效哈希算法是否为第一预设算法;
第六判断单元,用于判断执行权限是否满足;
第七判断单元,用于判断所述用户公钥是否有效。
40.如权利要求31所述的装置,其特征在于,还包括第七判断模块,用于判断签名是否成功。
CN201310062952.1A 2013-02-28 2013-02-28 一种签名方法及装置 Expired - Fee Related CN103138937B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310062952.1A CN103138937B (zh) 2013-02-28 2013-02-28 一种签名方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310062952.1A CN103138937B (zh) 2013-02-28 2013-02-28 一种签名方法及装置

Publications (2)

Publication Number Publication Date
CN103138937A true CN103138937A (zh) 2013-06-05
CN103138937B CN103138937B (zh) 2015-05-27

Family

ID=48498293

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310062952.1A Expired - Fee Related CN103138937B (zh) 2013-02-28 2013-02-28 一种签名方法及装置

Country Status (1)

Country Link
CN (1) CN103138937B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103532721A (zh) * 2013-10-23 2014-01-22 北京旋极信息技术股份有限公司 数字签名、验签方法和区分交易签名和普通签名的方法
CN103544037A (zh) * 2013-10-29 2014-01-29 飞天诚信科技股份有限公司 一种支持OpenSC的软硬件驱动的实现方法
CN104091259A (zh) * 2014-07-04 2014-10-08 飞天诚信科技股份有限公司 一种可解析流程代码的支付终端及其工作方法
CN104301119A (zh) * 2014-11-05 2015-01-21 中国建设银行股份有限公司 数据签名方法、签名验证方法、数据签名设备及验证服务器
CN107645382A (zh) * 2017-10-10 2018-01-30 飞天诚信科技股份有限公司 一种身份标识设备及其工作方法
CN108764918A (zh) * 2018-05-08 2018-11-06 北京华大智宝电子系统有限公司 一种签名信息显示方法及装置
CN109598126A (zh) * 2018-12-03 2019-04-09 贵州华芯通半导体技术有限公司 一种基于国密算法的系统安全启动方法、装置和系统
CN110061841A (zh) * 2018-01-18 2019-07-26 北京国盾量子信息技术有限公司 一种签名方法、验签方法及装置
CN111091365A (zh) * 2018-10-24 2020-05-01 东芝泰格有限公司 签名输入装置及方法、终端、处理方法、存储介质、设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004057796A1 (en) * 2002-12-21 2004-07-08 International Business Machines Corporation Methods, apparatus and computer programs for generating and/or using conditional electronic signatures for reporting status changes
CN101599835A (zh) * 2009-07-14 2009-12-09 北京坚石诚信科技有限公司 签名设备及其操作指令执行方法
CN101599836A (zh) * 2009-07-14 2009-12-09 北京坚石诚信科技有限公司 一种签名方法、签名设备和系统
CN102655451A (zh) * 2011-03-04 2012-09-05 董建飞 数字签名设备播放交易数据关键信息的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004057796A1 (en) * 2002-12-21 2004-07-08 International Business Machines Corporation Methods, apparatus and computer programs for generating and/or using conditional electronic signatures for reporting status changes
CN101599835A (zh) * 2009-07-14 2009-12-09 北京坚石诚信科技有限公司 签名设备及其操作指令执行方法
CN101599836A (zh) * 2009-07-14 2009-12-09 北京坚石诚信科技有限公司 一种签名方法、签名设备和系统
CN102655451A (zh) * 2011-03-04 2012-09-05 董建飞 数字签名设备播放交易数据关键信息的方法

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103532721A (zh) * 2013-10-23 2014-01-22 北京旋极信息技术股份有限公司 数字签名、验签方法和区分交易签名和普通签名的方法
US10133882B2 (en) 2013-10-29 2018-11-20 Feitian Technologies Co., Ltd. Implementation method for driving of software and hardware supporting OpenSC
CN103544037A (zh) * 2013-10-29 2014-01-29 飞天诚信科技股份有限公司 一种支持OpenSC的软硬件驱动的实现方法
CN103544037B (zh) * 2013-10-29 2016-08-17 飞天诚信科技股份有限公司 一种支持OpenSC的软硬件驱动的实现方法
CN104091259A (zh) * 2014-07-04 2014-10-08 飞天诚信科技股份有限公司 一种可解析流程代码的支付终端及其工作方法
CN104091259B (zh) * 2014-07-04 2017-12-19 飞天诚信科技股份有限公司 一种可解析流程代码的支付终端及其工作方法
CN104301119A (zh) * 2014-11-05 2015-01-21 中国建设银行股份有限公司 数据签名方法、签名验证方法、数据签名设备及验证服务器
CN104301119B (zh) * 2014-11-05 2018-10-19 中国建设银行股份有限公司 数据签名方法、签名验证方法、数据签名设备及验证服务器
CN107645382A (zh) * 2017-10-10 2018-01-30 飞天诚信科技股份有限公司 一种身份标识设备及其工作方法
CN110061841A (zh) * 2018-01-18 2019-07-26 北京国盾量子信息技术有限公司 一种签名方法、验签方法及装置
CN110061841B (zh) * 2018-01-18 2022-02-11 北京国盾量子信息技术有限公司 一种签名方法、验签方法及装置
CN108764918A (zh) * 2018-05-08 2018-11-06 北京华大智宝电子系统有限公司 一种签名信息显示方法及装置
CN111091365A (zh) * 2018-10-24 2020-05-01 东芝泰格有限公司 签名输入装置及方法、终端、处理方法、存储介质、设备
CN111091365B (zh) * 2018-10-24 2024-03-19 东芝泰格有限公司 签名输入装置及方法、终端、处理方法、存储介质、设备
CN109598126A (zh) * 2018-12-03 2019-04-09 贵州华芯通半导体技术有限公司 一种基于国密算法的系统安全启动方法、装置和系统

Also Published As

Publication number Publication date
CN103138937B (zh) 2015-05-27

Similar Documents

Publication Publication Date Title
CN103138937B (zh) 一种签名方法及装置
US10637654B2 (en) Smart key device and working method thereof
CN104751337B (zh) 产品防伪方法、装置和系统
CN103729341B (zh) 定位电子印章的方法和装置以及实现电子印章的装置
CN103295046B (zh) 生成和使用安全二维码的方法和设备
CN103873440B (zh) 一种应用程序的升级方法和系统
CN100566254C (zh) 提高智能密钥设备安全性的方法和系统
CN108764848B (zh) 一种电子合同的签署方法及系统
CN102622549B (zh) 一种电子印章实现系统和方法
CN102752115B (zh) 挑战码生成方法及装置、动态口令认证方法及系统
CN107395614A (zh) 单点登录方法及系统
KR102277060B1 (ko) 암호화 시스템 및 방법
CN104796257A (zh) 灵活的数据认证
CN102098315A (zh) 一种客户端安全登录方法、装置及系统
CN103310150A (zh) 一种检测pdf漏洞的方法和装置
KR101608184B1 (ko) 인증서버, 인증시스템, 인증방법 및 기록매체
CN104008351A (zh) Windows应用程序完整性校验系统、方法及装置
CN102238193A (zh) 数据认证方法及使用该方法的系统
CN108075888B (zh) 动态url生成方法及装置、存储介质、电子设备
CN108038388A (zh) Web页面印章的实现方法和客户端、服务器
CN101216915A (zh) 安全移动支付方法
CN106650325A (zh) 一种基于加密狗的软件平台管理方法
CN101763477B (zh) 一种智能密钥装置的签名方法
CN102685121B (zh) 一种数字签名方法和装置
TWI384405B (zh) 驗證方法及識別系統

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150527