一种安全数字签名方法

文档序号:7748362阅读:186来源:国知局
专利名称:一种安全数字签名方法
技术领域
本发明涉及信息安全领域,具体而言,涉及一种安全数字签名方法。
背景技术
网上银行的推广方便了人们的生活,但由于网上银行的交易需要通过网络进行,使得网上银行交易存在安全隐患,并且不法分子针对网上银行的攻击手段也变化多端,因 此,网络银行健康发展首要解决的是安全问题。为了保证用户的资金安全,银行采取了多种措施来提高用户身份认证的安全 性。目前网上银行使用最普遍的是基于智能卡的usbkey (智能密钥设备)安全数字证书。 usbkey结合了智能卡技术与PKI (Public Key Infrastructure,公开密钥体系)技术,使 用内置操作系统的智能卡芯片来保护用户的私钥,可以实现可靠的数字身份认证和数字签名。为了进一步保证交易的安全性,新一代的usbkey通常具有显示功能,即将本次 交易中的一些比较敏感的交易信息以文字的形式通过显示屏显示给用户,由用户确认后 usbkey执行数字签名操作。但是,现在这种usbkey至少存在如下问题目前的具有显示功 能的usbkey通常都内置有庞大的字库,以保证能够完整、正确地输出交易信息;同时可能 还要求usbkey具有部分文字处理功能,如英文字符大小不一、单词换行等。这些问题都限 制了 usbkey的适用范围。Crypto API是微软提供的一套公共接口,包含了一系列的函数,为应用程序提供 加解密、数字签名、hash (哈希)等安全服务,而应用程序不必关心其具体实现。不同的供 应商可以开发独立的加密模块,这些模块称为加密服务提供程序(Cryptographic Service Provider, CSP),完成密钥生成/交换、数据的加/解密、数字签名、认证等服务。一个系统 中可以加载多个CSP模块,它们相互独立。应用程序可以使用任意一个CSP模块,而不必关 心它的具体实现,每个CSP都对Crypto API进行不同的实现。

发明内容
本发明提供了一种安全数字签名方法。所述技术方案如下一种安全数字签名方法,所述方法包括客户端主机向交易服务器发送交易信息;所述交易服务器根据所述交易信息生成图像和/或音频形式的待签名数据,并将 所述待签名数据发送给所述客户端主机;所述客户端主机向usbkey下发签名指令和所述待签名数据;所述usbkey输出所述待签名数据,等待确认信号;如果所述usbkey接收到所述确认信号,对所述待签名数据进行数字签名操作;将所述数字签名的结果通过所述客户端主机返回给所述交易服务器,所述交易服 务器验证所述数字签名的结果正确后执行交易操作,结束。
所述客户端主机向所述交易服务器发送的交易信息具体包括但不限于交易帐号、 交易金额、交易类型。所述交易服务器根据所述交易信息生成图像和/或音频形式的待签名数据,所述 方法还包括所述待签名数据中使用的语言为所述交易信息中指定的语言;或所述交易服务器判断所述客户端主机所在地域,使用所述客户端主机所在地域的 语言作为所述待签名数据中使用的语言。所述交易服务器根据所述交易信息生成图像和/或音频形式的待签名数据,所述 方法还包括所述交易服务器根据所述交易信息中指定的待签名数据类型生成所述图像和/ 或音频形式的待签名数据;或者
所述交易服务器根据预先认定的默认的待签名数据类型生成所述图像和/或音 频形式的待签名数据。所述交易服务器根据所述交易信息生成图像和/或音频形式的待签名数据,所述 图像包括静态图片和动态视频;所述静态图片的格式包括但不限于位图格式;所述动态视频和/或音频的格式包括但不限于流媒体格式。所述usbkey输出所述待签名数据,所述方法具体包括所述usbkey通过自身带有的屏幕和/或音频播放装置输出所述图像和/或音频 形式的待签名数据。所述usbkey输出所述待签名数据,所述方法还包括所述usbkey判断所述待签名数据的类型,并根据判断结果选择适当的方式输出 所述待签名数据;或者所述usbkey根据接收到的客户端主机下发的对所述待签名数据的类型的说明, 选择相应的方式输出所述待签名数据。在所述usbkey接收到所述签名指令之后,所述方法还包括所述usbkey接收到所述签名指令后开始计时;如果所述usbkey没有接收到所述确认信号,判断计时得到的时间是否超过预定 时间;如果计时得到的时间超过了预定时间,则取消对接收到的签名指令的执行。在所述usbkey接收到所述签名指令之后、对所述待签名数据进行数字签名操作 之前,所述方法还包括所述usbkey对用户进行身份认证。所述usbkey对用户进行身份认证的方法具体包括所述usbkey接收用户输入的PIN码或生物特征信息;若所述usbkey验证所述PIN码或生物特征信息正确,则所述用户身份合法。所述usbkey接收用户输入的PIN码或生物特征信息的方法包括所述usbkey通过自身的键盘或生物特征接收装置接收所述用户输入的PIN码或 生物特征信息;
或所述客户端主机接收所述用户输入的PIN码或生物特征信息,并将所述用户输入 的PIN码或生物特征信息发送给所述usbkey。在所述usbkey对所述待签名数据进行数字签名之前,所述方法还包括
所述usbkey接收客户端主机发送的所述待签名数据,对所述待签名数据进行 hash运算,为hash运算得到的hash值添加算法标识串、对添加算法标识串后的hash值按 照公钥密码学标准进行补位;或者所述usbkey接收客户端主机发送的对所述待签名数据进行hash运算后的hash 值,为该hash值添加算法标识串、对添加算法标识串后的hash值按照公钥密码学标准进行 补位;或者所述usbkey接收客户端主机发送的对所述待签名数据进行hash运算并添加算法 标识串后的hash值,对添加算法标识串后的hash值按照公钥密码学标准进行补位;或者所述usbkey接收客户端主机发送的由所述待签名数据依次经过hash运算、添加 算法标识串、按照公钥密码学标准进行补位得到的hash值。所述将所述数字签名的结果通过所述客户端主机返回给所述交易服务器,所述方 法还包括如果所述交易服务器验证所述数字签名的结果错误,则所述交易服务器向客户端 主机返回错误信息,中止交易操作。本发明提供的技术方案带来的有益效果是在交易服务器端采用了图像、声音等多媒体数据的形式封装交易信息,usbkey只 需要按照既定的格式输出图片或声音形式的交易信息,而不需要对数据进行其它处理,提 高了交易系统的安全性和可维护性。


图1为本发明实施1提供的一种安全数字签名方法流程图;图2为本发明实施1提供的另一种安全数字签名方法流程图;图3为本发明实施1提供的一种安全数字签名方法中待签名数据显示图;图4为本发明实施1提供的一种安全数字签名方法中待签名数据显示图;图5为本发明实施1提供的一种安全数字签名方法中待签名数据显示图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方 式作进一步地详细描述。实施例1本实施例中的usbkey内置了 SHAl (Secure Hash Algorithm安全哈希算法)和 RSA算法。usbkey从客户端主机中接收指令,接收到的指令一般为APDU (应用协议数据单 元)格式的指令,usbkey根据指令完成各种操作。客户端主机中安装有配合usbkey使用 的中间件,它向上层应用程序(如IE浏览器)提供微软定义的Crypto API接口。当上层 应用程序调用接口时,中间件生成相应的APDU指令并发给usbkey,通知usbkey进行操作。参见图1,本发明实施例1提供了一种安全数字签名方法,该方法包括步骤101.客户端主机向交易服务器发送交易请求和交易信息;在本发明实施例中,客户端主机作为交易客户端将用户的交易请求和交易信息提交给交易服务器;具体地,交易信息包括但不限于交易类型、交易金额、交易账号、指定语言信息、待 签名数据类型等;其中,指定语言信息用于指定本次交易过程中使用的语言,包括交易服务器中生 成的待签名数据使用的语言;待签名数据类型包括图片、流媒体格式的视频和/或音频等多媒体数据;其中,指定语言信息和待签名数据类型也可以为缺省。在本实施例中,交易类型为转账交易,客户端主机提交的交易信息包括交易类型 (转账)、转账目的账号、交易金额。步骤102.交易服务器根据接收到的交易信息生成待签名数据,将待签名数据下 发给客户端主机;在本步骤中,交易服务器根据接收到的客户端主机提交的交易信息生成包含有部 分或全部交易信息的待签名数据,方法具体为交易服务器按照预定的格式对交易信息中所包含的数据进行处理生成待签名数 据;交易服务器生成的待签名数据是包含全部或部分的交易信息的一个或多个图片, 图片可以采用位图的格式;另外,交易服务器生成的待签名数据还可以是一段流媒体格式 的视频和/或音频的多媒体数据。当客户端主机提交的交易信息中的待签名数据类型为缺省时,交易服务器则按照 预先约定的格式生成待签名数据;在本实施例中,待签名数据类型为缺省时交易服务器生成的待签名数据的格式为 位图。交易服务器生成的待签名数据中使用的语言为客户端主机提交的交易信息中指 定语言信息中指定的语言;当客户端主机提交的交易信息中的指定语言信息为缺省时,交易服务器根据客户 端主机的IP地址判断出客户的地域,在生成的待签名数据中使用该地域的母语;或者使用 交易服务器中的默认语言生成待签名数据,如英语、中文(简体、普通话)等,例如可以使用 英语生成一条待签名数据后下发,也可以同时使用英语、中文、日本语分别生成三条意义相 同的待签名数据后下发。步骤103.客户端主机接收到待签名数据后,上层应用程序调用Crypto API接口 创建上下文;具体地,客户端主机中的上层应用程序调用Crypto API接口中的函数 CryptAcquireContext (&hProv, szContainerName, sζCSPName, dwKeySpec, 0)创建上下文, 即进行数字签名的初始化操作;当上层应用程序调用CryptAcquireContext函数获取一个CSP操作句柄时,可以 指定CSP的类型和名字。如果指定了类型和名字,则只有这两个属性匹配的CSP模块会被调用。调用成功后,函数返回CSP的操作句柄,之后上层应用程序就可以通过句柄访问CSP 和CSP中的密钥容器了。步骤104.上层应用程序向usbkey发送待签名数据及hash(哈希)命令;具体地,上层应用程序调用CryptCreateHash (hProv, ALG_ID,0,0,&hHash)函数 创建hash对象;其中,CryptCreateHash函数的ALG_ID参数是hash算法标识符。常用的hash算 法标识符包括 CALG_MD5、CALG_SHA1、CALG_SSL3_SHAMD5 等。CALG_MD5 和 CALG_SHA1 分别 对应MD5和SHAl算法,而CALG_SSL3_SHAMD5对应的是对同一段数据分别用MD5和SHAl进 行hash运算,再将两段hash结果拼接在一起。在本发明实施例中,上层应用程序设置算法标识符为CALG_SHA1,中间件向 usbkey下发的APDU指令大致如下//hash指令,在此指令中传入待签名的数据00 2a 90 80......在本步骤中,客户端主机接收到交易服务器下发的待签名数据后可以不做任何处 理直接发送给usbkey ;另外,客户端主机还可以对接收到的待签名数据进行分析,分析出该待签名数据 的类型为图片、声音或其它类型,并将分析得到的结果发送给usbkey,使usbkey可以根据 该结果直接选择正确的方式输出该待签名数据。步骤105. usbkey使用hash命令中指定的SHAl算法对待签名数据进行hash运算, 并将运算结果和待签名数据缓存在usbkey内部;另外,hash运算后usbkey向客户端主机返回操作成功的状态码0x9000,此时也可 以把hash运算结果返回给客户端主机。步骤106.客户端主机向 usbkey 下发 MSE (Make Security Environment 创建安全 环境)指令;客户端主机下发的MSE指令为APDU指令序列,该MSE指令指示usbkey采用 SHAl-RSA作为签名算法,并且指示了 RSA密钥ID,则该APDU指令序列的所包含的内容依次 为MSE指令标识、签名算法为SHAl-RSA的算法标识、RSA的密钥ID,具体指令序列大致如 下//MSE指令,设置算法标识及RSA密钥ID00 22 41 B6 07 80 01 12 81 02 00 01...其中,MSE指令中所指定的RSA的密钥ID为步骤103中上层应用程序调用Crypto API接口的CryptAcquireContext函数创建上下文时指定的。步骤107. usbkey接收到MSE指令后,根据上述指令中的的密钥ID设置当前使用 的RSA密钥;usbkey设置完成后,向客户端主机返回预先约定的表示操作成功的状态码 0x9000。步骤108.客户端主机向usbkey下发签名指令;客户端主机向usbkey下发以APDU格式表示的签名指令,该客户端主机下发的 APDU 指令序列为00 2a 9E 00 00 00。
步骤109. usbkey输出待签名数据,等待确认签名数据的信号;usbkey接收到签名指令后,需要输出待签名数据同时等待用户输入确认信号,本 过程中usbkey向客户端主机返回事先约定的表示“需要等待按键的”状态码0x6666,同时 usbkey开始计时;usbkey可以在液晶屏上输出图片、视频或通过usbkey的语音播放 器输出音频的 待签名数据,等待用户输入确认信号;若usbkey接收到的待签名数据是位图格式的,usbkey根据像素大小整屏或分屏 显示待签名数据,也可以通过图片压缩技术缩屏显示待签名数据。同时,客户端主机还可以根据usbkey返回的状态码,通过图像、文字、声音等方式 提示用户确认待签名数据正确后输入确认信号。位图格式的待签名数据在usbkey中显示的效果如图3、4、5所示。步骤110. usbkey判断是否接收到用户通过usbkey输入的确认信号;如果接收到 用户输入的确认信号,则执行113 ;如果没有接收到用户输入的确认信号,则执行步骤111 ;用户根据usbkey输出的待签名数据判断交易信息是否正确无误,判断正确后向 usbkey输入确认信号;具体地,输入确认信号的方法包括用户通过usbkey上的键盘输入确认信号,usbkey接收到确认信号后执行步骤 113。为了保证用户具有操作权限,还可以在用户输入确认信号之前由usbkey对用户 进行身份认证,具体认证方式包括但不限于PIN(Personal IdentificationNumberfAS 识码)码验证方式、生物特征验证方式等,PIN码或生物特征可以由usbkey通过自身的键盘 或生物特征接收装置获取,也可以通过客户端主机获取,然后传入到usbkey中进行验证。 例如用户通过usbkey上的键盘输入usbkey的PIN码,usbkey验证该PIN码正确后执 行步骤113 ;或者,用户通过客户端主机输入usbkey的PIN码,并发送给usbkey验证该PIN码是否 正确,usbkey验证该PIN码正确后执行步骤113。步骤111. usbkey判断计时得到的当前时间是否超过预定时间,如果计时得到的 当前时间没有超过了预定时间,则执行112 ;如果计时得到的当前时间超过了预定时间,则 执行步骤117 ;步骤112. usbkey接收客户端主机下发的获取签名结果的指令;由于客户端主机收到状态码0x6666后,客户端主机可以向usbkey反复发送获取 签名结果的指令;获取签名结果的指令对应的APDU指令序列为80 E3 00 00 00 00usbkey接收到客户端主机发送的获取签名结果的指令,则返回执行111。另外,客户端主机收到状态码0x6666后,还可以向usbkey发送取消签名的指令, 故而usbkey需要判断是否接收到客户端主机发送的获取签名结果的指令或取消签名的指 令;如果接收到客户端主机发送的获取签名结果的指令,则执行111 ;如果接收到客户端主机发送的取消签名的指令,则usbkey停止进行数字签名的操作;上述的取消签名指令对应APDU指令序列为80 E5 00 00 00 00。步骤113. usbkey对待签名数据进行签名,将签名结果发送给客户端主机;usbkey根据MSE指令所指定的算法标识,在步骤105中计算得到的hash值前面加 上X. 509规范所定义的算法标识串,再按照公钥密码学标准(PKCS#1)进行补位;
例如SHAl算法标识串是 30 20 30 Oc 06 08 2a 86 48 86 f7 Od 02 05 0500 04 10。对补位后的数据进行RSA运算得到签名结果,并同时需要向客户端机发送该签名 结果,并返回操作成功的状态码0x9000。步骤114客户端主机将数字签名的结果发送给交易服务器,交易服务器验证接收 到的签名结果是否正确,若验证签名结果正确,则执行步骤115 ;否则执行步骤116 ;交易服务器接到签名结果后,使用该用户的公钥对接收到的签名结果解密、并去 掉补位,交易服务器再对在步骤102中生成的待签名数据进行与usbkey中相同的hash运 算,交易服务器将签名结果解密后去掉补位后得到的数据与交易服务器中经过hash运算 得到的hash值进行比对,若二者相同,则交易服务器接收到的签名结果是正确的。步骤115.执行后续的交易操作,结束交易流程。步骤116.交易服务器将错误信息返回给客户端主机,中止本次交易操作,结束交 易流程。客户端主机接收到交易服务器返回的错误信息后输出该错误信息。步骤117. usbkey向客户端主机发送取消交易的信号。usbkey向客户端主机返回事先约定的表示取消交易的状态码0x7777,客户端主 机向交易服务器发送取消交易信息,结束交易流程。在本发明实施例1中,对待签名数据进行hash运算的过程是在usbkey中完成的, 除此以外,还可以由客户端主机根据事先约定的hash算法对待签名数据进行hash运算, 并在hash值前面加上X. 509规范所定义的算法标识串、按照公钥密码学标准(PKCS#1)进 行补位;相应地,进行数字签名时客户端主机将待签名数据和补位后的待签名数据的hash 运算结果发送给usbkey,usbkey输出待签名数据,在接收到确认信号后对接收到的补位 后的待签名数据的hash运算结果进行数字签名;或者也可以由客户端主机根据事先约定 的hash算法对待签名数据进行hash运算,客户端主机将该hash运算结果发送给usbkey, 由usbkey在hash值前面加上X. 509规范所定义的算法标识串、按照公钥密码学标准 (PKCS#1)进行补位,然后进行数字签名。实施例2本实施例中的usbkey从客户端主机中接收指令,接收到的指令一般为APDU(应 用协议数据单元)格式的指令,usbkey根据指令完成各种操作。客户端主机中安装有配合 usbkey使用的中间件,它向上层应用程序(如FireFox)提供PKCS#11接口。当上层应用程 序调用接口时,中间件生成相应的APDU指令并发给usbkey,通知usbkey进行操作。参见图 1,本发明实施例2提供了一种安全数字签名方法,该方法包括步骤201.客户端主机中的上层应用程序向交易服务器发送交易请求和交易信 息;
在本发明实施例中,客户端主机作为交易客户端将用户的交易请求和交易信息提 交给交易服务器;具体地,交易信息包括但不限于交易类型、交易金额、交易账号、指定语言信息、待 签名数据类型等;其中,指定语言信息和待签名数据类型也可以为缺省。在本实施例中,交易类型为转账交易,客户端主机提交的交易信息包括交易类型 (转账)、转账目的账号、交易金额。步骤202.交易服务器根据接收到的交易信息生成待签名数据,并将待签名数据 下发给客户端主机;在本步骤中,交易服务器根据接收到的客户端主机提交的交易信息生成包含有部 分或全部交易信息的待签名数据,方法具体为交易服务器按照预定的格式对交易信息中所包含的数据进行处理生成待签名数 据;待签名数据中包含全部或部分的交易信息。
交易服务器生成的待签名数据可以是包含文字信息的一个或多个图片,图片可以 采用位图的格式;另外,交易服务器生成的待签名数据还可以是一段多媒体数据,例如可以 采用流媒体格式的音频多媒体文件。当交易信息中的待签名数据类型为缺省时,交易服务器则按照预先约定的格式生 成待签名数据;在本实施例中,待签名数据类型为缺省时交易服务器生成的待签名数据的格式为 图片。交易服务器生成的待签名数据中使用的语言为客户端主机提交的交易信息中指 定语言信息中指定的语言;或者,交易服务器根据客户端的IP地址判断出客户的地域,在待签名数据中使用 该地域的母语;或者使用交易服务器中的默认语言生成一条或多条待签名数据,如英语、中 文(简体、普通话)等,例如可以使用英语生成一条待签名数据后下发,也可以同时使用英 语、中文、日本语分别生成三条意义相同的待签名数据后下发。步骤203.客户端主机接收到待签名数据后,上层应用程序调用PKCS#11接口进行 签名前的初始化操作,与usbkey建立会话;上层应用程序调用以下的PKCS#11接口函数,进行签名前的初始化操作,与 usbkey建立会话//接口初始化C_Initialize(NULL_PTR);//获取插槽列表C_GetSlotList(TRUE, pSlotList, &ulCount);//建立会话C_0penSession(m_pSlotList
,CKF_Rff_SESSION|CKF_SERIAL_SESSION,NULL_PTR, NULL_PTR, &hSession);步骤204.客户端主机根据约定的hash算法对待签名数据进行hash运算;客户端主机调用PKCS#11接口,将hash算法设置为预先约定的算法,然后对待签名数据进行hash运算;调用的PKCS#11接口函数如下//设置hash算法CK_MECHANISM ckMechanismHash = {CKM_SHA_1, NULL_PTR,0};C_DigestInit(hSession, &ckMechanismHash);//进行hash运算C_Digest(hSession, pbMsg, ulMsgLen, pDigest, &ulDigestLen);C_DigestFinal(hSession, pDigest, &ulDigestLen);客户端主机还要将hash运算后得到的hash值前面加上X. 509规范所定义的算法标识串,再按照公钥密码学标准(PKCS#1)进行补位;例如SHAl算法标识串是 30 20 30 Oc 06 08 2a 86 48 86 f7 Od 02 05 0500 04 10。在本发明实施例2中,预先约定的hash算法为SHAl算法,对应的算法标识符为 CKM_SHA_1ο步骤205.客户端主机向usbkey下发MSE指令,设置签名算法和签名使用的密钥;客户端主机在向usbkey下发MSE指令之前,调用PKCS#11接口的C_Login函数, 登录usbkey获取密钥的使用权限,然后调用CIUffiCHANISMckMechanismSign函数设置数字 签名使用的算法、调用C_SignInit函数设置签名使用的密钥;客户端主机所调用的PKCS#11接口函数具体如下//登录,获取密钥使用权限C_Login(hSession, CKU_USER, ucPin,lstrlen (ucPin));H设置签名算法和签名密钥CK_MECHANISM ckMechanismSign = {CKM_RSA_PKCS,NULL_PTR,0};C_SignInit(hSession, &ckMechanismSign, hPriKey);客户端主机调用PKCS#11接口完成以上操作后,向usbkey下发MSE指令,设置签 名算法和签名使用的密钥;//MSE指令,设置签名算法和密钥00 22 41 B6 80 01 12 84 02 00 23步骤206. usbkey根据接收到的MSE指令设置签名算法和密钥;usbkey设置完成后,向客户端主机返回预先约定的表示操作成功的状态码 0x9000。步骤207.客户端主机向usbkey下发待签名数据的hash值和签名指令;在客户端主机向usbkey下发待签名数据的hash值和签名指令之前,还将待签名 数据发送给usbkey。客户端主机的调用了 PKCS#11接口的C_Sign函数,通过该函数传入待签名数据的 hash值并获取签名结果,具体为//签名,获取签名结果C_Sign (hSession, pDigest, ulDigestLen, bSignatureBuffer, &ulSignatureLen);
其中的参数“pDigest”表示需要进行数字签名的数据,即待签名数据的hash值;“bSignatureBuffer”为数字签名的结果。客户端主机向usbkey下发以APDU格式表示的签名指令,该客户端主机下发的 APDU 指令序列为00 2a 9E 00 00 00。步骤208. usbkey输出待签名数据,等待确认签名数据的信号;usbkey接收到签名指令后,需要输出待签名数据同时等待用户输入确认信号,本 过程中usbkey向客户端主机返回事先约定的表示“需要等待按键的”状态码0x6666,同时 usbkey开始计时;usbkey可以在液晶屏上输出图片、视频或通过usbkey的语音播放器输出音频的 待签名数据,等待用户输入确认信号;若usbkey接收到的待签名数据是位图格式的,usbkey根据像素大小整屏或分屏 显示,也可以通过图片压缩技术缩屏显示待签名数据。同时,客户端主机还可以根据usbkey返回的状态码,通过图像、文字、声音等方式 提示用户确认待签名数据正确后输入确认信号。位图格式的待签名数据在usbkey中显示的效果如图3、4、5所示。步骤209. usbkey判断是否接收到用户通过usbkey输入的确认信号;如果接收到 用户输入的确认信号,则执行212 ;如果没有接收到用户输入的确认信号,则执行步骤210 ;用户根据usbkey输出的待签名数据判断交易信息是否正确无误,判断正确后向 usbkey输入确认信号;具体地,输入确认信号的方法包括用户通过usbkey上的键盘输入确认信号,usbkey接收到确认信号后执行步骤 212。为了保证用户具有操作权限,还可以在用户输入确认信号之前由usbkey对用户 进行身份认证,具体认证方式包括但不限于PIN(Personal IdentificationNumberfAS 识码)码验证方式、生物特征验证方式等,PIN码或生物特征可以由usbkey通过自身的键盘 或生物特征接收装置获取,也可以通过客户端主机获取,然后传入到usbkey中进行验证。例如用户通过usbkey上的键盘输入usbkey的PIN码,usbkey验证该PIN码正确后执 行步骤212 ;或者,用户通过客户端主机输入usbkey的PIN码,并发送给usbkey验证该PIN码是否 正确,usbkey验证该PIN码正确后执行步骤212。步骤210. usbkey判断计时得到的当前时间是否超过预定时间,如果计时得到的 当前时间没有超过了预定时间,则执行211 ;如果计时得到的当前时间超过了预定时间,则 执行步骤216 ;步骤211. usbkey接收客户端主机下发的获取签名结果的指令;由于客户端主机收到状态码0x6666后,客户端主机可以向usbkey反复发送获取 签名结果的指令;获取签名结果的指令对应的APDU指令序列为80 E3 00 00 00 00
usbkey接收到客户端主机发送的获取签名结果的指令,则返回执行210。另外,客户端主机收到状态码0x6666后,还可以向usbkey发送取消签名的指令, 故而usbkey需要判断是否接收到客户端主机发送的获取签名结果的指令或取消签名的指 令;如果接收到客户端主机发送的获取签名结果的指令,则返回执行210 ;如果接收到客户 端主机发送的取消签名的指令,则usbkey停止进行数字签名的操作;上述的取消签名指令对应APDU指令序列为80 E5 00 00 00 00。步骤212. usbkey执行数字签名操作,将签名结果发送给客户端主机;usbkey使用步骤206中设置的(即步骤205中客户端主机指定的)算法和密钥对 接收到的待签名数据的hash值进行RSA运算,RSA运算的结果就是数字签名的结果;usbkey将该数字签名的结果发送给客户端主机,并返回操作成功的状态码 0x9000。步骤213.客户端主机将数字签名的结果发送给交易服务器,交易服务器验证接 收到的签名结果是否正确,若验证签名结果正确,则执行步骤214 ;否则执行步骤215 ;交易服务器接到签名结果后,使用该用户的公钥对接收到的签名结果解密、并去 掉补位,交易服务器再对在步骤202中生成的待签名数据进行与客户端主机中相同的hash 运算,交易服务器将签名结果解密后去掉补位得到的数据与交易服务器中经过hash运算 得到的hash值进行比对,若二者相同,则交易服务器接收到的签名结果是正确的。步骤214.执行后续的交易操作,结束交易流程。步骤215.交易服务器将错误信息返回给客户端主机,中止本次交易操作,结束交 易流程。客户端主机接收到交易服务器返回的错误信息后输出该错误信息。步骤216. usbkey向客户端主机发送取消交易的信号。usbkey向客户端主机返回事先约定的表示取消交易的状态码0x7777,客户端主 机向交易服务器发送取消交易信息,结束交易流程。在本发明实施例2中,对待签名数据进行hash运算的过程是在客户端主机中完成 的,除此以外,还可以由usbkey对待签名的数据进行hash运算及补位,相应的签名过程及 调用的PKCS#11接口有所变化,大致如下相应地,在上述步骤201至步骤216的基础之上,可以分别对以下各步骤进行替 换步骤204和步骤205可替换为步骤204 \步骤207替换为步骤207 \步骤212替换 为步骤212 \步骤204 \客户端主机向usbkey下发MSE指令,设置hash算法、签名算法和签名使用的密钥;调用的PKCS#11接口函数为Il登录,获取密钥使用权限C_Login (hSession, CKU_USER,ucPin, lstrlen (ucPin));H设置签名算法和签名密钥CK_MECHANISM ckMechanismSign = {CKM_SHA1_RSA_PKCS, NULL_PTR,0};C_SignInit(hSession, &ckMechanismSign, hPriKey);常用的签名算法标识符包括CKM_SHA1_RSA_PKCS、CKM_MD5_RSA_PKCS、CKM_MD2_RSA_PKCS 等;在本发明实施例2中,客户端主机的上层应用程序设置算法标识符为CKM_SHA1_ RSA_PKCS,表示hash运算使用SHAl算法、数字签名使用RSA算法,中间件向智能密钥设备 下发的APDU指令大致如下//MSE指令,设置hash算法以及RSA密钥ID00 22 41 B6 80 01 32 83 02 00 23步骤207、.客户端主机向usbkey下发待签名数据和签名指令;客户端主机的调用PKCS#11接口的C_Sign函数,通过该函数传递待签名数据并获 取签名结果,具体为//签名,获取签名结果C_Sign (hSession, pDigest, ulDigestLen, bSignatureBuffer, &ulSignatureLen);其中的参数“pDigest”表示需要进行数字签名的数据,即待签名数据; “bSignatureBuffer”为数字签名的结果。客户端主机向usbkey下发以APDU格式表示的签名指令,该客户端主机下发的 APDU 指令序列为00 2a 9E 00 00 00。步骤212、. usbkey执行数字签名操作,将签名结果发送给客户端主机;在usbkey执行数字签名操作之前,usbkey使用步骤206中设置的(即在步骤 204、中客户端主机指定的)hash算法、签名算法和密钥对接收到的待签名数据进行hash 运算;在本发明实施例2中,usbkey接收到的算法标识符为CKM_SHA1_RSA_PKCS,表示 hash运算使用SHAl算法、数字签名使用RSA算法;然后,在hash运算得到的hash值前面加上X. 509规范所定义的算法标识串,再按 照公钥密码学标准(PKCS#1)进行补位;例如SHA1算法标识串是 30 20 30 Oc 06 08 2a 86 48 86 f7 Od 02 05 0500 04 10。最后,usbkey对补位后的数据进行RSA运算以得到签名结果,向客户端机发送该 签名结果,并返回操作成功的状态码0x9000。在上述的技术方案中,对待签名数据的hash运算由usbkey执行,但在具体的实现 过程中usbkey对待签名数据进行hash运算可以根据需要对技术方案进行调整,既可以在 接收到签名指令以后进行hash运算,也可以在usbkey接收到MSE指令并设置了 hash算法、 签名算法和密钥之后进行hash运算。在现有技术中,采用的方案是在usbkey中内植字库的方法,但是这种方法的实现过程中要求usbkey里需要较大的存储空间用于存储字库,以保证可以正确输出所有的交 易信息,同时这种usbkey中对文字的处理也存在很多问题,消耗了大量的硬件资源;在本发明中,在交易服务器端采用了图片或声音等多媒体数据的形式封装交易信 息,usbkey只需要按照既定的格式输出图片或声音形式的交易信息,而不需要对数据进行 其它处理;另一方面,本发明之所以没有采用客户端主机封装交易信息的方法,是由于是实 际的应用中交易服务器随时可能因服务扩展的需要而进行升级,交易服务器升级后难以保证客户端主机完全支持新的交易处理,升级维护的难度很大,因此不予采用。 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和
原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内 。
权利要求
一种安全数字签名方法,所述方法包括客户端主机向交易服务器发送交易信息;所述交易服务器根据所述交易信息生成图像和/或音频形式的待签名数据,并将所述待签名数据发送给所述客户端主机;所述客户端主机向usbkey下发签名指令和所述待签名数据;所述usbkey输出所述待签名数据,等待确认信号;如果所述usbkey接收到所述确认信号,对所述待签名数据进行数字签名操作;将所述数字签名的结果通过所述客户端主机返回给所述交易服务器,所述交易服务器验证所述数字签名的结果正确后执行交易操作,结束。
2.如权利要求1中所述的安全数字签名方法,其特征在于,所述客户端主机向所述交 易服务器发送的交易信息具体包括但不限于交易帐号、交易金额、交易类型。
3.如权利要求1中所述的安全数字签名方法,其特征在于,所述交易服务器根据所述 交易信息生成图像和/或音频形式的待签名数据,所述方法还包括所述待签名数据中使用的语言为所述交易信息中指定的语言;或 所述交易服务器判断所述客户端主机所在地域,使用所述客户端主机所在地域的语言 作为所述待签名数据中使用的语言。
4.如权利要求1中所述的安全数字签名方法,其特征在于,所述交易服务器根据所述 交易信息生成图像和/或音频形式的待签名数据,所述方法还包括所述交易服务器根据所述交易信息中指定的待签名数据类型生成所述图像和/或音 频形式的待签名数据;或者所述交易服务器根据预先认定的默认的待签名数据类型生成所述图像和/或音频形 式的待签名数据。
5.如权利要求1中所述的安全数字签名方法,其特征在于,所述交易服务器根据所述 交易信息生成图像和/或音频形式的待签名数据,所述图像包括静态图片和动态视频。
6.如权利要求5中所述的安全数字签名方法,其特征在于, 所述静态图片的格式包括但不限于位图格式;所述动态视频和/或音频的格式包括但不限于流媒体格式。
7.如权利要求1中所述的安全数字签名方法,其特征在于,所述usbkey输出所述待签 名数据,所述方法具体包括所述usbkey通过自身带有的屏幕和/或音频播放装置输出所述图像和/或音频形式 的待签名数据。
8.如权利要求1中所述的安全数字签名方法,其特征在于,所述usbkey输出所述待签 名数据,所述方法还包括所述usbkey判断所述待签名数据的类型,并根据判断结果选择适当的方式输出所述 待签名数据;或者所述usbkey根据接收到的客户端主机下发的对所述待签名数据的类型的说明,选择 相应的方式输出所述待签名数据。
9.如权利要求1中所述的安全数字签名方法,其特征在于,在所述usbkey接收到所述 签名指令之后,所述方法还包括所述usbkey接收到所述签名指令后开始计时;如果所述usbkey没有接收到所述确认信号,判断计时得到的时间是否超过预定时间;如果计时得到的时间超过了预定时间,则取消对接收到的签名指令的执行。
10.如权利要求1中所述的安全数字签名方法,其特征在于,在所述usbkey接收到所述 签名指令之后、对所述待签名数据进行数字签名操作之前,所述方法还包括所述usbkey对用户进行身份认证。
11.如权利要求10中所述的安全数字签名方法,其特征在于,所述usbkey对用户进行 身份认证的方法具体包括所述usbkey接收用户输入的PIN码或生物特征信息;若所述usbkey验证所述PIN码或生物特征信息正确,则所述用户身份合法。
12.如权利要求11中所述的安全数字签名方法,其特征在于,所述usbkey接收用户输 入的PIN码或生物特征信息的方法包括所述usbkey通过自身的键盘或生物特征接收装置接收所述用户输入的PIN码或生物 特征信息;或所述客户端主机接收所述用户输入的PIN码或生物特征信息,并将所述用户输入的 PIN码或生物特征信息发送给所述usbkey。
13.如权利要求1中所述的安全数字签名方法,其特征在于,在所述usbkey对所述待签 名数据进行数字签名之前,所述方法还包括所述usbkey接收客户端主机发送的所述待签名数据,对所述待签名数据进行hash运 算,为hash运算得到的hash值添加算法标识串、对添加算法标识串后的hash值按照公钥 密码学标准进行补位;或者所述usbkey接收客户端主机发送的对所述待签名数据进行hash运算后的hash值,为 该hash值添加算法标识串、对添加算法标识串后的hash值按照公钥密码学标准进行补位; 或者所述usbkey接收客户端主机发送的对所述待签名数据进行hash运算并添加算法标识 串后的hash值,对添加算法标识串后的hash值按照公钥密码学标准进行补位;或者所述usbkey接收客户端主机发送的由所述待签名数据依次经过hash运算、添加算法 标识串、按照公钥密码学标准进行补位得到的hash值。
14.如权利要求1中所述的安全数字签名方法,其特征在于,所述将所述数字签名的结 果通过所述客户端主机返回给所述交易服务器,所述方法还包括如果所述交易服务器验证所述数字签名的结果错误,则所述交易服务器向客户端主机 返回错误信息,中止交易操作。
全文摘要
本发明公开了一种安全数字签名方法,属于信息安全领域。该方法包括客户端主机向交易服务器发送交易信息;所述交易服务器根据所述交易信息生成图像和/或音频形式的交易确认数据;所述客户端主机向usbkey下发签名指令和交易确认数据;所述usbkey输出所述交易确认数据,等待确认信号;如果所述usbkey接收到所述确认信号,对所述交易确认数据进行数字签名操作;将所述数字签名的结果通过所述客户端主机返回给所述交易服务器,所述交易服务器验证所述数字签名的结果正确后执行交易操作。
文档编号H04L29/06GK101820346SQ20101016820
公开日2010年9月1日 申请日期2010年5月4日 优先权日2010年5月4日
发明者于华章, 陆舟 申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1