可左右滑动选省市

一种基于微信小程序的数字签名协同生成方法及系统

更新时间:2024-06-14
一种基于微信小程序的数字签名协同生成方法及系统 专利申请类型:实用新型专利;
源自:北京高价值专利检索信息库;

专利名称:一种基于微信小程序的数字签名协同生成方法及系统

专利类型:实用新型专利

专利申请号:CN202211122468.9

专利申请(专利权)人:北京天威诚信电子商务服务有限公司
权利人地址:北京市海淀区上地八街7号院4号楼401A室

专利发明(设计)人:龙毅宏,许明,陈韶光

专利摘要:基于微信小程序的数字签名方法:秘密S1的密文S2以及S2的解密密钥K1的密文S3保存在用户移动终端;当需要使用用户的签名私钥对消息M数字签名时,应用客户端程序启动数字签名微信小程序,将应用服务系统签发的安全令牌传递给数字签名微信小程;数字签名微信小程序从用户移动终端获取S2、S3,将S3以及安全令牌提交到数字签名协同生成服务系统;数字签名协同生成服务系统验证安全令牌,解密S3,返回K1;数字签名微信小程序使用K1解密S2得到S1;数字签名微信小程序使用S1与数字签名协同生成服务系统协同生成针对消息M的数字签名;数字签名最终生成前,数字签名协同生成服务系统通过数字签名微信小程序对用户进行鉴别。

主权利要求:
1.一种基于微信小程序的数字签名协同生成方法,其特征是:
用户的用于数字签名生成的秘密S1经加密后成为密文数据S2;用于解密密文数据S2的密钥K1经加密后成为密文数据S3,数字签名协同生成服务系统有用于解密密文数据S3的密钥K2;密文数据S2和密文数据S3保存在用户移动终端中的数字签名微信小程序的数据存储区;所述数字签名微信小程序是在用户移动终端中运行的、使用用户秘密S1生成数字签名、并向应用客户端程序提供数字签名功能的微信小程序;所述应用客户端程序是一个网络应用系统的客户端程序;所述应用客户端程序对应有服务端的应用服务系统;所述数字签名协同生成服务系统是用于数字签名协同生成的服务端系统;所述数字签名协同生成服务系统向数字签名微信小程序提供数字签名协同生成或/和计算的功能;所述数字签名协同生成服务系统有服务端的用于协同生成数字签名的秘密;
当用户移动终端中的应用客户端程序需要使用用户的签名私钥针对消息M生成数字签名时,应用客户端程序切换或跳转到数字签名微信小程序,切换或跳转的同时,应用客户端程序将应用服务系统签发的安全令牌或应用服务系统签发的安全令牌的获取信息,以及消息M或消息M的获取信息传递给数字签名微信小程序;所述应用服务系统签发的安全令牌是请求数字签名协同生成系统进行数字签名协同生成或/和计算的授权凭证;所述安全令牌包含用户身份信息或/和公钥信息,或者包含用户身份信息或/和公钥信息的相关信息,所述用户身份信息或/和公钥信息的相关信息指与用户身份或/和公钥唯一关联绑定的信息;
所述应用服务系统签发的安全令牌的获取信息是指用于获取应用服务系统签发的安全令牌的信息,依据或利用此获取信息能够获得应用服务系统签发的安全令牌,所述消息M的获取信息是指用于获取消息M的信息,依据或利用此获取信息能够获得消息M;
或者,当用户计算机中的应用客户端程序需要使用用户的签名私钥针对消息M生成数字签名时,应用客户端程序显示一条码,用户使用移动终端中的微信客户端扫描条码,在用户移动终端的微信客户端中启动数字签名微信小程序;用户计算机中的应用客户端程序同时通过条码将应用服务系统签发的安全令牌或应用服务系统签发的安全令牌的获取信息,以及消息M或消息M的获取信息传递给数字签名微信小程序;
或者,当用户使用的应用客户端程序需要使用用户的签名私钥针对消息M生成数字签名时,应用客户端程序通过应用服务系统向用户手机移动终端发送短信,短信中有启动数字签名签名小程序的链接,且链接或短信中有应用服务系统签发的安全令牌和消息M的获取信息,用户通过点击短信中的链接,启动数字签名微信小程序;若链接中不包含有安全令牌和消息M的获取信息,则用户将短信中的安全令牌和消息M的获取信息复制输入到数字签名微信小程序;
数字签名微信小程序从用户移动终端中的微信小程序数据存储区读取或获取密文数据S2和密文数据S3,将密文数据S3以及应用服务系统签发的安全令牌或应用服务系统签发的安全令牌的获取信息提交到数字签名协同生成服务系统;
若数字签名微信小程序提交的是应用服务系统签发的安全令牌的获取信息,则数字签名协同生成服务系统先利用此获取信息获得应用服务系统签发的安全令牌;
数字签名协同生成服务系统验证安全令牌的有效性后,使用密钥K2解密密文数据S3,得到密钥K1,将密钥K1返回给用户端的数字签名微信小程序;
用户端的数字签名微信小程序利用密钥K1解密密文数据S2,得到用于数字签名生成的秘密S1;用户端的数字签名微信小程序使用秘密S1,并通过与数字签名协同生成服务系统交互,协同生成针对消息M的数字签名;
在数字签名生成或返回或提交之前,数字签名协同生成服务系统通过用户端的数字签名微信小程序对用户进行鉴别,确认用户是签名私钥或签名私钥对应的公钥的拥有者;
若应用客户端程序向数字签名微信小程序传递的不是消息M而是消息M的获取信息,则在数字签名生成过程中,数字签名微信小程序和/或数字签名协同生成服务系统利用此消息M的获取信息获得消息M;
最终生成的数字签名的提交方式包括:由数字签名微信小程序获得并提交给应用服务系统,或者由数字签名协同生成服务系统提交给应用服务系统,或者由应用服务系统或应用客户端程序从数字签名协同生成服务系统获取,或者最终生成的数字签名被存放在一个数据存储中介系统,由应用服务系统或应用客户端程序从数据存储中介系统获取;所述数据存储中介系统是一个用于数据存储交换的系统。
2.根据权利要求1所述的基于微信小程序的数字签名协同生成方法,其特征是:
所述用户的用于数字签名生成的秘密S1包括:用户端的用于数字签名协同生成的签名私钥的秘密份额,或者用户端的签名私钥的相关秘密的秘密份额,或者用户端的被加密并以密文形式参与数字签名生成运算和/或计算的签名私钥的密文,或者用户端的被加密并以密文形式参与数字签名生成运算和/或计算的签名私钥的相关秘密的密文,或者用户端的被加密并以密文形式参与数字签名生成运算和/或计算的秘密份额的密文。
3.根据权利要求2所述的基于微信小程序的数字签名协同生成方法,其特征是:
若用户端所使用的秘密S1原本就是被加密的秘密并以密文形式参与数字签名协同生成的计算,则:
此用户端的用于数字签名生成的秘密S1被再次加密,得到密文数据S2;对秘密S1进行加密从而得到密文数据S2所使用的加密密钥,与对签名私钥或签名私钥的相关秘密或秘密份额进行加密从而得到密文数据S1所使用的加密密钥不必相同,或者,秘密S1不再加密而是直接以密文秘密S1的方式保存在用户移动终端中,密文数据S2和S3不再存在,相应地,没有解密密文数据S3和S2得到秘密S1的操作处理;当针对消息M生成数字签名时,数字签名微信小程序直接从用户移动终端获取密文秘密S1用于数字签名生成的运算和/或计算。
4.根据权利要求1所述的基于微信小程序的数字签名协同生成方法,其特征是:
若用户的用于数字签名生成的秘密S0经加密后成为密文数据T0存放在网上,则所述秘密S1中包含有对网上存放的T0进行解密的密钥K0;当针对消息M进行数字签名时,数字签名微信小程序从网上下载密文数据T0,利用从数字签名服务系统返回的密钥K1解密密文数据S2得到秘密S1,然后使用秘密S1中的密钥K0,解密下载的密文数据T0,得到用于数字签名生成的秘密S0,之后数字签名微信小程序以秘密S0作为秘密S1,通过与数字签名协同生成服务系统交互,按使用秘密S1协同生成针对消息M的数字签名的方式,使用秘密S0协同生成针对消息M的数字签名。
5.根据权利要求1所述的基于微信小程序的数字签名协同生成方法,其特征是:
若密钥K1或密钥K1的密文数据S3或密钥K1的种子秘密存放在数字签名协同生成服务系统,则用户移动终端不保存密钥K1的密文数据S3;当数字签名微信小程序需要使用密钥K1解密密文数据S2时,由数字签名协同生成服务系统返回密钥K1;
若密钥K1由种子秘密与用户的一个随机数或随机字串生成,则随机数或随机字串保存于数字签名微信小程序在用户移动终端中的数据存储区,或保存在数字签名协同生成服务系统;
若生成密钥K1的随机数或随机字串保存在用户移动终端中,则当数字签名微信小程序需要使用密钥K1解密密文数据S2时,数字签名微信小程序将随机字串提交到数字签名协同生成服务系统,生成密钥K1;
若密钥K1是由种子秘密生成的,则不同用户的种子秘密不同或相同。
6.根据权利要求1所述的基于微信小程序的数字签名协同生成方法,其特征是:
数字签名协同生成服务系统通过数字签名微信小程序提交的请求中的referer验证请求来自数字签名微信微信小程序。
7.根据权利要求1所述的基于微信小程序的数字签名协同生成方法,其特征是:
数字签名协同生成服务系统除了通过自身实施的用户鉴别方式对用户进行鉴别外,还将微信公众平台提供的针对微信小程序使用者的用户信息与签名私钥或签名私钥对应的公钥的拥有者绑定;当通过数字签名微信小程序对用户进行鉴别时,数字签名协同生成服务系统利用微信公众平台提供的针对微信小程序使用者的用户信息确认数字签名微信小程序的在线使用者就是签名私钥或签名私钥对应的公钥的拥有者;所述微信公众平台提供的针对微信小程序使用者的用户信息包括用户openid。
8.根据权利要求1‑7中任一项所述的基于微信小程序的数字签名协同生成方法,其特征是:
针对所述数字签名协同生成方法的一种安全增强方案如下:
当需要使用用户签名私钥针对消息M生成数字签名时,应用服务系统或应用客户端程序在使用签名私钥计算得到的签名数据所在群中随机选择一个群元t,或者使用签名私钥计算得到的签名数据所在的群为阶为n的加法群,应用服务系统或应用客户端程序在[1,n‑
1]内随机选择一个存在模n乘法逆的整数t;t称为扰动参数;应用服务系统或应用客户端程序将选取的扰动参数t加密为只有数字签名协同生成服务系统能够解密的密文数据,而在应用服务系统签发的安全令牌中包含有扰动参数t的散列值;之后,在应用客户端程序通过切换或跳转启动数字签名微信小程序,或在用户通过扫码应用客户端程序显示的条码启动数字签名微信小程序,或者在应用服务系统通过短信启动数字签名微信小程序,应用客户端程序在将应用服务系统签发的安全令牌或其获取信息传递给数字签名微信小程序、以及将消息M或其获取信息传递给数字签名微信小程序的同时,将扰动参数t的密文或其获取信息传递给数字签名微信小程序;
若应用客户端程序传递给微信小程序的是扰动参数t的密文的获取信息,则数字签名协同生成服务利用此获取信息获取扰动参数t的密文;
数字签名协同生成服务系统在验证安全令牌的有效性的同时,解密扰动参数t的密文,获得扰动参数t,验证扰动参数t的散列值与安全令牌中的散列值是否相同,若相同则继续,否则报错;
数字签名微信小程序获得秘密S1,然后数字签名微信小程序和数字签名协同生成服务系统协同生成针对消息M的数字签名,且生成的数字签名由数字签名协同生成服务系统最终计算得到;
数字签名协同生成服务系统利用扰动参数t修改生成的数字签名,得到扰动后的数字签名;
应用服务系统得到扰动后的数字签名后,利用扰动参数t对扰动后的数字签名进行修改,还原出针对消息M的数字签名。
9.根据权利要求8所述的基于微信小程序的数字签名协同生成方法,其特征是:
对于所述安全增强方案,数字签名协同生成服务系统利用扰动参数t对数字签名的修改包括:
若使用签名私钥计算得到的签名数据所在群为加法群,则将扰动参数t与使用签名私钥计算得到的签名数据相加得到扰动后的数据;
若使用签名私钥计算得到的签名数据所在群为乘法群,则将扰动参数t与使用签名私钥计算得到的签名数据相乘得到扰动后的数据;
若使用签名私钥计算得到的签名数据所在的群为阶为n的加法群,扰动参数t为[1,n‑
1]内随机选择一个存在模n乘法逆的整数,则将扰动参数t与使用签名私钥计算得到的签名数据相乘得到扰动后的数据;
相应地,利用扰动参数t对扰动后的数字签名进行的修改包括:
若使用签名私钥计算得到的签名数据所在群为加法群,则将使用签名私钥计算得到的签名数据被扰动后的数据加上扰动参数t的加法逆元;
若使用签名私钥计算得到的签名数据所在群为乘法群,则将使用签名私钥计算得到的签名数据被扰动后的数据乘以扰动参数t的乘法逆元;
若使用签名私钥计算得到的签名数据所在的群为阶为n的加法群,扰动参数t为[1,n‑‑1
1]内随机选择一个存在模n乘法逆的整数,则将扰动参数t的模n乘法逆t 与使用签名私钥计算得到的签名数据被扰动后的数据相乘。
10.根据权利要求1‑7中任一项所述的基于微信小程序的数字签名协同生成方法,其特征是:
针对数字签名协同生成方法的一种安全增强方案如下:
当需要使用用户签名私钥针对消息M生成数字签名时,应用服务系统或应用客户端程序随机选择一个整数t,利用随机选择的整数t进行数字签名初始计算;应用服务系统或应用客户端程序随机选择的整数t称为扰动参数;在应用服务系统签发的安全令牌中包含有利用扰动参数t计算得到的初始计算结果的散列值;之后,在应用客户端程序通过切换或跳转启动数字签名微信小程序,或在用户通过扫码应用客户端程序显示的条码启动数字签名微信小程序,或者在应用服务系统通过短信启动数字签名微信小程序,应用客户端程序在将应用服务系统签发的安全令牌或其获取信息传递给数字签名微信小程序、以及将消息M或其获取信息传递给数字签名微信小程序的同时,将应用客户端程序利用扰动参数t计算得到的初始计算结果或其获取信息传递给数字签名微信小程序;
若数字签名微信小程序提交给数字签名协同生成服务系统的是利用扰动参数t计算得到的初始计算结果的获取信息,则数字签名协同生成服务系统利用此获取信息获得利用扰动参数t计算得到的初始计算结果;
数字签名协同生成服务系统计算收到的或获取的利用扰动参数t计算得到的初始计算结果的散列值;
数字签名协同生成服务系统在验证安全令牌的有效性的同时,验证计算得到的初始计算结果的散列值与安全令牌中的散列值是否相同,若相同则继续,否则报错;
数字签名微信小程序获得秘密S1,然后数字签名微信小程序和数字签名协同生成服务系统在利用扰动参数t计算得到的初始计算结果的基础上,协同生成针对消息M的数字签名的中间计算结果;
数字签名的中间计算结果被提交给应用服务系统;
应用服务系统利用扰动参数t和数字签名的中间计算结果计算得到最终的数字签名。
11.根据权利要求10所述的基于微信小程序的数字签名协同生成方法,其特征是:
对于所述安全增强方案,数字签名协同生成服务系统在进行数字签名的协同计算过程中使用应用服务系统或应用客户端程序利用扰动参数t计算得到的数字签名的初始计算结果进行数字签名生成的协同计算。
12.根据权利要求1‑7中任一项所述的基于微信小程序的数字签名协同生成方法的基于微信小程序的数字签名协同生成系统,其特征是:所述数字签名协同生成系统包括数字签名微信小程序和数字签名协同生成服务系统,当需要使用用户的签名私钥针对消息M进行数字签名时,所述系统按所述基于微信小程序的数字签名协同生成方法生成针对消息M的数字签名。
13.根据权利要求12所述的基于微信小程序的数字签名协同生成系统,其特征是:
若数字签名微信小程序的数字签名协同计算功能或/和用户鉴别功能通过微信小程序插件的方式实施,即实施实现数字签名协同计算功能的协同计算小程序插件或/和实施实现用户鉴别功能的鉴别授权小程序插件,然后由数字签名微信小程序加载调用,则:对于用户端的微信小程序通过调用协同计算小程序插件或/和鉴别授权小程序插件提交的功能/服务调用请求,数字签名协同生成服务系统或其组成系统在处理请求时确认请求是来自数字签名微信小程序及所调用的协同计算小程序插件或/和鉴别授权小程序插件;
协同计算小程序插件与数字签名协同生成系统或其组成系统交互时,需提供应用服务系统签发的安全令牌或者由数字签名协同生成服务系统或数字签名协同生成服务系统的组成系统签发的证明用户获得相应授权的安全令牌;鉴别授权小程序插件与数字签名协同生成服务系统或其组成系统交互时,需提供应用服务系统签发的安全令牌;
所述数字签名协同生成服务系统的组成系统包括与协同计算小程序插件或/和鉴别授权小程序插件对应的协同计算服务系统或/和鉴别授权服务系统。 说明书 : 一种基于微信小程序的数字签名协同生成方法及系统技术领域[0001] 本发明属于密码技术领域,特别是一种基于微信小程序的数字签名协同生成方法及系统。背景技术[0002] 对于用户端没有密码硬件存放签名私钥的用户端计算环境(如个人电脑、手机、平板电脑等移动终端),常常采用数字签名协同生成方案来保证数字签名的安全性,其中一类广泛采用的方案是基于秘密共享的数字签名协同生成方案:[0003] 用户用于数字签名的签名私钥或签名私钥的相关秘密在多个装置之间共享(分享),其中一个装置是用户计算装置,其他装置是安全可靠的服务端系统(装置),每个装置分享的秘密称为秘密份额(secretshare);当需要使用用户的签名私钥对消息进行数字签名时,用户计算装置与服务端系统各自使用用户的签名私钥的秘密份额或签名私钥的相关秘密的秘密份额,通过交互协同生成数字签名。这里对签名私钥的秘密共享(分享)指将签名私钥分解多个秘密的组合,比如,假设dA为用户的SM2签名私钥,将dA分解为m份d1,…,dm,并且有dA=(d1+…+dm)modn或dA=(d1d2…dm)modn,其中n为SM2椭圆曲线点群的阶,d1,…,dm为秘密份额。这里的签名私钥的相关秘密指本身不是签名私钥,但是获得到了它就能很‑1容易破解签名私钥的数(据),比如,(1+dA) 为SM2签名私钥dA的相关秘密,再比如,假如c=‑1(b(1+dA) )modn,b为[1,n‑1]内的整数秘密,c不为秘密,则b为SM2签名私钥dA的相关秘‑1密,因为知道b就能从c很容易地计算初dA。对(1+dA) 、b的共享(分享)即为对签名私钥相关秘密的共享(分享),分解后的相关秘密为秘密份额。这种基于秘密共享的方案在此称为第一类方案。[0004] 还有一类方案是,用户用于数字签名的签名私钥或签名私钥的相关秘密被加密后保存在用户计算装置(比如采用同态加密算法加密),而用户及用户端没有用于解密被加密的签名私钥或被加密的签名私钥的相关秘密的解密密钥,只有一个安全可信的服务端系统(装置)才有或才能得到用于解密加密的签名私钥或加密的签名私钥的相关秘密的解密密钥;这里的签名私钥的相关秘密同前所述;当需要使用用户签名私钥进行数字签名时,用户计算装置使用用户的被加密的签名私钥或被加密的签名私钥的相关秘密的密文,通过密文运算(比如同态加密的密文运算)生成“加密的”数字签名或“加密的”数字签名中间计算结果,之后由安全可信的服务端使用解密密钥,解密“加密的”数字签名,得到最后的数字签名,或者解密“加密的”数字签名中间计算结果,然后进一步计算得到最终的数字签名。这种基于用户端加密的签名私钥或加密的签名私钥的相关秘密的密文,通过密文运算协同生成数字签名的方案在此称为第二类方案。还有,对于用户端的签名私钥的秘密份额或签名私钥的相关秘密的秘密份额被加密(比如同态加密)并以密文形式参与数字签名协同生成运算、计算的方案,也归为第二类方案,即第二类方案为使用了用户端的秘密的密文进行数字签名运算、计算的数字签名协同生成方案。对于第二类方案,被加密的签名私钥或被加密的签名私钥的相关秘密或被加密的秘密份额仍然需要作为秘密在用户计算装置中受到严格的安全保护。[0005] 无论哪类数字签名协同生成方案,用于数字签名的秘密(份额)必须受到严格安全保护,在数字签名协同生成过程中要确保只有签名私钥的合法拥有者才能使用用户端、服务端的秘密(份额)进行数字签名的协同生成。数字签名协同生成是移动终端中环境中保护用户签名私钥安全的有效方案,但是,目前的数字签名协同生成方案在用户端比如用户移动终端中实施面临如下问题:[0006] 首先,用于协同生成数字签名的秘密通常是以文件形式保存在用户移动终端中,这就存放被窃取的风险,比如其他应用程序app、页面代码都可能打开存放有秘密的文件,读取(窃取)其中的秘密(当然,Web页面代码打开文件需要得到用户许可,但用户可能由于疏忽、不了解风险而允许);[0007] 其次,以应用程序app的形式实施数字签名协同生成虽然比较安全、简单,但这需要在用户移动终端中安装app程序,在app泛滥的年代,这种方式不一定被用户接受;[0008] 再其次,在应用客户端程序(包括应用客户端app程序、Web客户端程序、客户端微信应用小程序)中通过调用密码API/SDK实施数字签名,也是常用的实施方式,但攻击者可以通过反编译API/SDK,解剖API/SDK,修改API/SDK代码或模拟API/SDK进行操作,从而窃取用于数字签名协同生成的秘密;[0009] 最后,就是存在互操作性问题,以app形式实现的密码功能微信小程序无法直接调用(微信小程序做了限制),以API/SDK形式实施的密码功能,移动终端中的Web页面代码、微信小程序无法调用,以Web页面代码、微信小程序实施的密码功能,app程序无法调用,浏览器中Web页面代码实施的密码功能,微信客户端中的微信小程序无法调用,微信客户端中的微信小程序实施的密码功能,浏览器中的Web页面代码无法调用。发明内容[0010] 本发明的目的是针对现有数字签名协同生成方案在移动终端中实施存在的问题,提出一种基于微信小程序的技术方案,以克服现有技术的不足。[0011] 针对本发明的目的,本发明提出的技术方案包一种基于微信小程序的数字签名协同生成方法及相应系统系统。[0012] 本发明提出的基于微信小程序的数字签名协同生成方法如下。[0013] 用户的用于数字签名生成的秘密S1经(对称密钥或公钥)加密后成为密文数据S2(秘密S1本身可能包含多个秘密数据或保密参数,其中至少有与签名签名生成有关的秘密数据);用于解密密文数据S2的密钥K1(对称密钥或私钥)经(对称密钥或公钥)加密后成为密文数据S3,数字签名协同生成服务系统有用于解密密文数据S3的密钥K2(对称密钥或私钥);密文数据S2和密文数据S3保存在用户移动终端中的数字签名微信小程序的数据存储区(如微信客户端为每个微信小程序在移动终端中提供的专用Storage数据存储区或专用文件存储区或微信客户端为微信小程序提供的其他数据存储区);所述数字签名微信小程序是在用户移动终端中运行的、使用用户秘密S1生成数字签名、向应用客户端程序提供数字签名功能的微信小程序;所述应用客户端程序是一个网络应用系统的客户端程序;所述应用客户端程序对应有服务端的应用服务系统(即网络应用系统的服务端系统);所述数字签名协同生成服务系统是用于数字签名协同生成的服务端系统;所述数字签名协同生成服务系统向数字签名微信小程序提供数字签名协同生成或/和计算的功能;所述数字签名协同生成服务系统有服务端的用于(为用户或为用户端的数字签名微信小程序)协同生成数字签名的秘密;[0014] 当用户移动终端(如手机、平板电脑)中的应用客户端程序(包括客户端app程序、Web客户端程序、微信应用小程序等,其中Web客户端程序包括浏览器中运行的页面程序,而页面程序由静态页面代码和动态页面代码构成)需要使用用户的签名私钥针对消息M生成数字签名时,应用客户端程序切换或跳转到数字签名微信小程序,切换或跳转的同时,应用客户端程序将应用服务系统签发的安全令牌或应用服务系统签发的安全令牌的获取信息,以及消息M或消息M的获取信息传递给数字签名微信小程序;所述应用服务系统签发的安全令牌是请求数字签名协同生成系统进行数字签名协同生成或/和计算的授权凭证;所述安全令牌包含用户身份信息或/和公钥信息,或者包含用户身份信息或/和公钥信息的相关信息,所述用户身份信息或/和公钥信息的相关信息指与用户身份或/和公钥唯一关联绑定(即对应)的信息(安全令牌向数字签名协同生成服务系统表明此数字签名协同生成请求受到应用服务系统的授权、担保;安全令牌中不必包含用户的身份信息,但从安全角度,用户身份信息和公钥信息至少包含一个);[0015] 或者,当用户计算机(如台式PC机、笔记本电脑、平板电脑)中的应用客户端程序(包括专用应用客户端程序、客户端app程序、Web客户端程序、微信应用小程序等)需要使用用户的签名私钥针对消息M生成数字签名时,应用客户端程序显示一条码(如二维码或多维码等),用户使用移动终端中的微信客户端(即用户平时使用的微信即时通讯工具,它是多功能的程序)扫描条码,在用户移动终端的微信客户端中启动数字签名微信小程序;用户计算机中的应用客户端程序同时通过条码将应用服务系统签发的安全令牌或应用服务系统签发的安全令牌的获取信息,以及消息M或消息M的获取信息传递给数字签名微信小程序;[0016] 或者,当用户使用的(移动终端或计算机中的)应用客户端程序需要使用用户的签名私钥针对消息M生成数字签名时,应用客户端程序通过应用服务系统向用户手机移动终端发送短信,短信中有启动数字签名签名小程序的链接,且链接或短信中有应用服务系统签发的安全令牌和消息M的获取信息,用户通过点击短信中的链接,启动数字签名微信小程序;若链接中不包含有安全令牌和消息M的获取信息,则用户将短信中的安全令牌和消息M的获取信息复制输入到数字签名微信小程序(若通过短信启动数字签名微信小程序,则通常传递都是安全令牌和消息M的获取信息,且获取信息通常是同一个,即数据打包传递、获取);[0017] 数字签名微信小程序从用户移动终端中的(数字签名)微信小程序(专用的)数据存储区读取或获取密文数据S2、密文数据S3,将密文数据S3以及应用服务系统签发的安全令牌或应用服务系统签发的安全令牌的获取信息提交到数字签名协同生成服务系统;[0018] 若数字签名微信小程序提交的是应用服务系统签发的安全令牌的获取信息,则数字签名协同生成服务系统先利用此获取信息(从本地缓存或应用服务系统或数据存储中介系统)获得应用服务系统签发的安全令牌(若从本地缓存获取,则应用服务系统之前已将安全令牌提交给数字签名协同生成服务系统);[0019] 数字签名协同生成服务系统验证安全令牌的有效性后(比如验证安全令牌的非对称密钥或对称密钥数字签名的有效性,以及时间有效性,其中称密钥数字签名如HMAC),使用密钥K2解密密文数据S3,得到密钥K1,将密钥K1返回给用户端的数字签名微信小程序;[0020] 用户端的数字签名微信小程序利用密钥K1解密密文数据S2,得到用于数字签名生成的秘密S1;用户端的数字签名微信小程序使用秘密S1,并通过与数字签名协同生成服务系统交互,协同生成针对消息M的数字签名;[0021] 在数字签名生成或返回或提交之前,数字签名协同生成服务系统通过用户端的数字签名微信小程序对用户进行鉴别,确认用户是签名私钥或签名私钥对应的公钥的拥有者(否则不协同进行数字签名的生成、计算,或不返回、不提交生成的数字签名;这里只要确认用户是签名私钥或签名私钥对应的公钥的拥有者就行,因此,对用户进行实名身份鉴别不是必须的);[0022] 若应用客户端程序(通过切换或跳转,通过条码,或通过短信启动数字签名微信小程序时)向数字签名微信小程序传递的不是消息M而是消息M的获取信息(此时消息M存放在网上,比如应用服务系统、数字签名协同生成服务系统,或一个数据存储中介系统),则在数字签名生成过程中,数字签名微信小程序和/或数字签名协同生成服务系统利用此消息M的获取信息获得消息M(从应用服务系统或一个数据存储中介系统);[0023] 最终生成的数字签名的提交方式包括:由数字签名微信小程序获得并提交给应用服务系统,或者由数字签名协同生成服务系统提交给应用服务系统,或者由应用服务系统或应用客户端程序从数字签名协同生成服务系统获取,或者最终生成的数字签名被存放在一个数据存储中介系统,由应用服务系统或应用客户端程序从数据存储中介系统获取(比如,将消息M的数字签名与安全令牌的关联,应用服务系统或应用客户端程序利用安全令牌从据存储中介系统获取消息M的数字签名);所述数据存储中介系统是一个用于数据存储交换的系统(各种数据,比如安全令牌、消息M、中间计算结果的交换,都可以通过此数据存储中介系统)。[0024] 以上所述从应用客户端程序(比如,客户端app程序、Web客户端程序、微信应用小程序)切换或跳转到(用户移动终端中运行的)数字签名微信小程序,包括(由微信客户端)将数字签名微信小程序从微信公众平台(微信开放平台、微信公共平台)下载到用户移动终端中,并在微信客户端中运行,或者(由微信客户端)将已下载到本地的数字签名微信小程序加载到微信客户端中运行。[0025] 以上所述应用服务系统签发的安全令牌的获取信息是指用于获取应用服务系统签发的安全令牌的信息,它是一种具有唯一性的、与安全令牌关联的信息,据此可获得安全令牌(安全令牌的获取信息可以由应用服务系统生成,也可以由应用客户端程序生成,若是后者,则通常由应用客户端程序将应用服务系统签发的安全令牌存放到网上供获取);以上所述消息M的获取信息是指用于获取消息M的信息,同样地,它是一种具有唯一性的、与消息M关联的信息,据此可获得消息M。[0026] 以上所述用户的用于数字签名生成的秘密S1包括:(对于前面背景技术中所述第一类数字签名协同生成方案)用户端的用于数字签名协同生成的签名私钥的秘密份额,或者用户端的签名私钥的相关秘密的秘密份额,或者(对于前面背景技术中所述第二类数字签名协同生成方案)用户端的被加密并以密文形式参与数字签名生成运算、计算的签名私钥的密文,或者用户端的被加密并以密文形式参与数字签名生成运算、计算的签名私钥的相关秘密的密文,或者用户端的被加密并以密文形式参与数字签名生成运算、计算的(签名私钥或签名私钥的相关秘密的)秘密份额的密文。[0027] 当然,客户端还可以有其他形式的用于协同生成数字签名的秘密。[0028] 以上所述服务端的用于(为用户或用户端的数字签名微信小程序)协同生成数字签名的秘密包括:(对于前面背景技术中所述第一类数字签名协同生成方案)服务端的用于数字签名协同生成的签名私钥的秘密份额,或者服务端的签名私钥的相关秘密的秘密份额,或者(对于前面背景技术中所述第二类数字签名协同生成方案)解密被加密并以密文形式参与数字签名生成运算、计算的签名私钥的密文的解密密钥,或者解密被加密并以密文形式参与数字签名生成运算、计算的签名私钥的相关秘密的密文的解密密钥,或者解密被加密并以密文形式参与数字签名生成运算、计算的秘密份额的密文的解密密钥(或者解密“加密的”数字签名或“加密的”数字签名中间计算结果的密钥)。[0029] 当然,服务端还可以有其他形式的用于协同生成数字签名的秘密。[0030] 对于不同的用户,服务端的用于(为用户或用户端的数字签名微信小程序)协同生成数字签名的秘密通常是不同的,对于前面背景技术中所述的第一类数字签名协同生成方案,尤其如此(对第二类方案,密文秘密S1的解密密钥可能是同一个)。[0031] 对于以上所述数字签名协同生成方法,若用户端所使用的秘密S1原本就是被加密的秘密并以密文形式参与数字签名协同生成的计算(比如,被加密并以密文形式参与数字签名生成运算、计算的签名私钥或签名私钥的相关秘密,或被加密并以密文形式参与数字签名生成运算、计算的签名私钥或签名私钥的相关秘密的秘密份额,即背景技术中所说的第二类数字协同生成方案中的秘密),则:[0032] 此用户端的用于数字签名生成的秘密S1被再次加密,得到密文数据S2(即S2为双重加密);对秘密S1进行加密从而得到密文数据S2所使用的加密密钥,与对签名私钥或签名私钥的相关秘密或秘密份额进行加密从而得到密文数据S1所使用的加密密钥不必相同,[0033] 或者,秘密S1不再加密而是直接以密文秘密S1的方式保存在用户移动终端中,密文数据S2、S3不再存在,相应地,没有解密密文数据S3、S2得到秘密S1的操作处理;当针对消息M生成数字签名时,数字签名微信小程序直接从用户移动终端获取密文秘密S1用于数字签名生成的运算、计算。[0034] 本发明这里对秘密S1的加密是对用户端存储的用于数字签名生成的秘密即秘密S1所进行的安全保护,S1被加密成为密文数据S2后,即便密文数据S2被窃取了,窃取者仍然无法得到用于数字签名生成的秘密S1,只有使用数字签名微信小程序并获得应用服务系统签发的安全令牌,才能通过数字签名协同生成服务系统解密密文数据S2,得到秘密S1,然后使用秘密S1进行数字签名协同生成。必须使用数字签名微信小程序以及应用服务系统签名的安全令牌这点,限制了密文数据S2的窃取者随意解密密文数据S2得到秘密S1、使用秘密S1的能力。如前所述,通常用户在使用秘密S1针对消息M进行数字签名前,必须采用其他方式比如帐户名、口令或生物特征在应用服务系统进行身份鉴别,只有在应用服务系统身份鉴别通过后才能获得安全令牌,这进一步增强了对秘密S1及其使用的安全保护。[0035] 应用服务系统在为用户签发安全令牌之前通常会对用户进行身份鉴别,对本发明,但这不是必须的,比如,这个消息M本身就是对用户进行身份鉴别时需要数字签名的随机字串,那么,这个安全令牌就是在应用服务系统完成对用户的身份鉴别之前签发的;若在签发安全令牌之前,应用服务系统完成了对用户的身份鉴别,则此应用服务系统对用户的身份鉴别与数字签名协同生成服务系统通过数字签名微信小程序对用户的鉴别是两码事(即两个用户鉴别可能同时存在)。在实际应用中,用户往往是先用其他方式在系统登录,比如帐户名、口令,只有在需要使用签名私钥进行数字签名时,才使用签名私钥进行数字签名操作,比如网银就是如此,这既保证了系统的易用性,又保证了关键应用功能的安全性。[0036] 对于以上所述基于微信的数字签名协同生成方法,若用户的用于数字签名生成的秘密S0经加密后成为密文数据T0存放在网上,则所述秘密S1中包含有对网上存放的T0进行解密的密钥K0(对称密钥或私钥);当针对消息M进行数字签名时,数字签名微信小程序从网上下载密文数据T0,利用从数字签名服务系统返回的密钥K1解密密文数据S2得到秘密S1,然后使用秘密S1中的密钥K0,解密下载的密文数据T0,得到用于数字签名生成的秘密S0,之后数字签名微信小程序以秘密S0作为秘密S1,通过与数字签名协同生成服务系统交互,按使用秘密S1协同生成针对消息M的数字签名的方式,使用秘密S0协同生成针对消息M的数字签名(即秘密S1是怎样用于数字签名协同计算的,秘密S0就是怎样用于数字签名协同计算的)。[0037] 若密钥K1或密钥K1的密文数据S3或密钥K1的种子秘密(密钥生成秘密)存放在数字签名协同生成服务系统,则用户移动终端不保存密钥K1的密文数据S3;当数字签名微信小程序需要使用密钥K1解密密文数据S2时,由数字签名协同生成服务系统返回密钥K1(直接返回K1或解密密文数据S3返回或利用种子秘密生成K1返回);[0038] 若密钥K1由种子秘密与用户的一个随机数或随机字串生成,则随机数或随机字串保存在数字签名微信小程序在用户移动终端中的数据存储区,或保存在数字签名协同生成服务系统;[0039] 若生成密钥K1的随机数或随机字串保存在用户移动终端中,则当数字签名微信小程序需要使用密钥K1解密密文数据S2时,数字签名微信小程序将随机字串提交到数字签名协同生成服务系统,生成密钥K1;[0040] 若密钥K1是由种子秘密生成的,则不同用户的种子秘密不同或相同(相同,即使用同一个系统种子密钥)。[0041] 为了确保是数字微信小程序在调用数字签名协同生成服务系统的功能,数字签名协同生成服务系统通过数字签名微信小程序提交的请求中的referer(中的AppID)验证请求来自(授权许可的)数字签名微信微信小程序。[0042] 为了防止用户假冒,数字签名协同生成服务系统除了通过自身实施的用户鉴别方式(比如生物特征、短信)对用户进行鉴别外,还将微信公众平台(微信开放平台)提供的针对微信小程序使用者的用户信息与签名私钥或签名私钥对应的公钥的拥有者绑定;当通过数字签名微信小程序对用户进行鉴别时,数字签名协同生成服务系统利用微信公众平台提供的针对微信小程序使用者的用户信息确认数字签名微信小程序的在线使用者就是签名私钥或签名私钥对应的公钥的拥有者;所述微信公众平台提供的针对微信小程序使用者的用户信息包括用户openid。[0043] 为了防止安全令牌被盗用,在以上方案的基础上有如下两个安全增强方案。[0044] 安全增强方案一、[0045] 当需要使用用户签名私钥针对消息M生成数字签名时,应用服务系统或应用客户端程序在使用签名私钥计算得到的签名数据(比如,SM2数字签名(r,s)中的s,SM9数字签名(h,S)中的S)所在群中随机选择一个群元t(SM2签名私钥所在群为[0,n‑1]内的整数,其中n为基点的阶,SM9签名私钥在SM9双线性映射的第一个加法群G1中,其阶为素数n),或者使用签名私钥计算得到的签名数据所在的群为阶为n的加法群,应用服务系统或应用客户端程序在[1,n‑1]内随机选择一个存在模n乘法逆的整数t(对于SM2、SM9,任意非0的t都存在模n乘法逆,因为n为素数);t称为扰动参数;应用服务系统或应用客户端程序将选取的扰动参数t加密为只有数字签名协同生成服务系统能够解密的密文数据,而在应用服务系统签发的安全令牌中包含有扰动参数t的散列值(哈希值、杂凑值);之后,在应用客户端程序通过切换、跳转启动数字签名微信小程序,或在用户通过扫码应用客户端程序显示的条码启动数字签名微信小程序,或者在应用服务系统通过短信启动数字签名微信小程序,应用客户端程序在将应用服务系统签发的安全令牌或其获取信息、将消息M或其获取信息传递给数字签名微信小程序的同时,将扰动参数t的密文或其获取信息传递给数字签名微信小程序(若通过短信启动数字签名微信小程序,则通常传递的是获取信息,且获取信息是同一个,即数据打包传递、获取);[0046] 若应用客户端程序传递给微信小程序的是扰动参数t的密文的获取信息,则数字签名协同生成服务利用此获取信息获取扰动参数t的密文;[0047] 数字签名协同生成服务系统在验证安全令牌的有效性的同时,解密扰动参数t的密文,获得扰动参数t,验证扰动参数t的散列值(哈希值、杂凑值)与安全令牌中的散列值是否相同,若相同则继续,否则报错;[0048] 数字签名微信小程序按前面所述的方式获得秘密S1,然后数字签名微信小程序和数字签名协同生成服务系统协同生成针对消息M的数字签名,且生成的数字签名由数字签名协同生成服务系统最终计算得到(这是对实施的协同生成方案的一点限制);[0049] 数字签名协同生成服务系统利用扰动参数t修改生成的数字签名,得到扰动后的数字签名;[0050] 应用服务系统得到扰动后的数字签名后,利用扰动参数t对扰动后的数字签名进行修改,还原出针对消息M的数字签名。[0051] 数字签名协同生成服务系统利用扰动参数t对数字签名的修改包括:[0052] 若使用签名私钥计算得到的签名数据(比如,SM2中的s,SM9中的S)所在群为加法群,则将扰动参数t与使用签名私钥计算得到的签名数据(比如,SM2中的s,SM9中的S)相加(群中相加)得到扰动后的数据;[0053] 若使用签名私钥计算得到的签名数据所在群为乘法群,则将扰动参数t与使用签名私钥计算得到的签名数据相乘(群中相乘)得到扰动后的数据;[0054] 若使用签名私钥计算得到的签名数据所在的群为阶为n的加法群,扰动参数t为[1,n‑1]内随机选择一个存在模n乘法逆的整数,则将扰动参数t与使用签名私钥计算得到的签名数据相乘(群中数乘)得到扰动后的数据;[0055] 相应地,利用扰动参数t对扰动后的数字签名进行的修改包括:[0056] 若使用签名私钥计算得到的签名数据所在群为加法群,则将使用签名私钥计算得到的签名数据被扰动后的数据加上扰动参数t的加法逆元(群中相加);[0057] 若使用签名私钥计算得到的签名数据所在群为乘法群,则将使用签名私钥计算得到的签名数据被扰动后的数据乘以扰动参数t的乘法逆元(群中相乘);[0058] 若使用签名私钥计算得到的签名数据所在的群为阶为n的加法群,扰动参数t为‑1[1,n‑1]内随机选择一个存在模n乘法逆的整数,则将扰动参数t的模n乘法逆t 与使用签名私钥计算得到的签名数据被扰动后的数据相乘(群中数乘)。[0059] 为了保证签名私钥的安全,防止通过数字签名破解签名私钥,目前的数字签名通常需要在[1,n‑1]内随机选择一个整数进行某些初始计算,其中n为签名私钥所在群的阶,比如,对于SM2数字签名,需要在[1,n‑1]内随机选择一个整数k针对基点G进行的数乘计算Q=[k]G;再比如,对于SM9数字签名,需要在[1,n‑1]内随机选择一个整数r,计算w=g^r(^表示幂运算,g为底数,r为指数),其中g=e(P1,Ppub),P1为双线性映射第一个群G1的生成元,Ppub为双线性映射第二个群G2中的主公钥;这些初始计算都不涉及使用签名私钥;初始计算时随机选择的整数,比如SM2的参数k、SM9的参数r,以及初始计算所产生的数据,比如SM2的Q=[k]G、SM9的w=g^r,要用于后续数字签名的计算;而对于数字签名协同生成方案,为了防止签名私钥或秘密被破解,各参与方也要进行类似的初始计算,这些初始计算只涉及使用随机选择的整数进行计算,不涉及使用秘密进行计算,利用此点,可以构建如下安全增强方案二、[0060] 安全增强方案二、[0061] 当需要使用用户签名私钥针对消息M生成数字签名时,应用服务系统或应用客户端程序在数字签名算法规定的范围内随机选择一个整数t,利用随机选择的整数t进行数字签名初始计算;应用服务系统或应用客户端程序随机选择的整数t称为扰动参数;在应用服务系统签发的安全令牌中包含有利用扰动参数t计算得到的初始计算结果的散列值;之后,在应用客户端程序通过切换、跳转启动数字签名微信小程序,或在用户通过扫码应用客户端程序显示的条码启动数字签名微信小程序,或者在应用服务系统通过短信启动数字签名微信小程序,应用客户端程序在将应用服务系统签发的安全令牌或其获取信息、将消息M或其获取信息传递给数字签名微信小程序的同时,将应用客户端程序利用扰动参数t计算得到的初始计算结果或其获取信息传递给数字签名微信小程序(若通过短信启动数字签名微信小程序,则通常传递的都是获取信息,且获取信息是同一个,即数据打包传递、获取);[0062] 若数字签名微信小程序提交给数字签名协同生成服务系统的是利用扰动参数t计算得到的初始计算结果的获取信息,则数字签名协同生成服务系统利用此获取信息获得利用扰动参数t计算得到的初始计算结果;[0063] 数字签名协同生成服务系统计算收到的或获取的利用扰动参数t计算得到的初始计算结果的散列值;[0064] 数字签名协同生成服务系统在验证安全令牌的有效性的同时,验证计算得到的(利用扰动参数t计算得到的)初始计算结果的散列值与安全令牌中的散列值是否相同,若相同则继续,否则报错;[0065] 数字签名微信小程序按前面所述的方式获得秘密S1,然后数字签名微信小程序和数字签名协同生成服务系统在利用扰动参数t计算得到的初始计算结果的基础上,协同生成针对消息M的数字签名的中间计算结果;[0066] 数字签名的中间计算结果被提交给应用服务系统;[0067] 应用服务系统利用扰动参数t和数字签名的中间计算结果计算得到最终的数字签名。[0068] 这里应用服务系统或应用客户端程序是在数字签名算法规定的范围内随机选择一个整数t,这里的数字签名算法规定的范围是数字签名算法在进行数字签名的初始计算阶段随机选择整数的范围,不同的数字签名算法这个范围可能不同,但通常是[1,n‑1],其中n为签名私钥所在群的阶。[0069] 出于安全考虑,应尽可能地使得数字签名协同生成服务系统在进行数字签名的协同计算过程中使用应用服务系统或应用客户端程序利用扰动参数t计算得到的数字签名的初始计算结果进行数字签名生成的协同计算。[0070] 基于以上所述的基于微信小程序的数字签名协同生成方法可构建相应的基于微信小程序的数字签名协同生成系统,系统包括数字签名微信小程序和数字签名协同生成服务系统,当需要使用用户的签名私钥针对消息M进行数字签名时,所述系统按所述基于微信小程序的数字签名协同生成方法生成针对消息M的数字签名。[0071] 可以看到,基于本发明的方案,首先,用户的用于生成数字签名的秘密S1是加密后以密文数据S2的形式保存在用户移动终端,这使得秘密即便被窃取了,窃取者也无法获得秘密;其次,通过安全令牌、用户鉴别以及通过将用户在微信公众平台的身份绑定,使得窃取者即便窃取了用户的用于生产数字签名的秘密S1也很难盗用;利用微信小程序的注册、审核、发布机制,以及微信开放平台提供的针对微信小程序的标识信息(AppID),服务端的数字签名协同生成服务系统通过对用户端(客户端)的微信小程序的识别,仅授权得到许可的数字签名微信小程序及其加载调用的微信小程序插件与交互、调用其提供的服务功能,同时再结合安全令牌的使用,使得攻击者很难借助开发伪造的微信小程序与服务端的数字签名协同生成服务系统交互;通过让应用服务系统或/和应用客户端程序介入到数字签名的生成,防止攻击者通过盗取用户的秘密S1及应用服务系统签发的安全令牌来盗用用户秘密S1生成数字签名;通过专门的数字签名微信小程向应用客户端程序提供对数字签名功能的调用,避免了在应用客户端程序采用API/SDK方式使用秘密S1生成数字签名,避免了由此产生的秘密被窃取、盗用的风险;微信小程序由国家密码管理机构认可的专门密码机构开发,这些密码机构不会开发窃取、盗用用户秘密的微信小程序,而开发微信小程序的注册、审核、发布机制,使得参入数字签名微信小程序开发的个人也很难通过随意修改程序代码窃取用户秘密S1,且即便窃取了,由于本发明方案的严格用户鉴别、授权机制,也很难盗用窃取的用户秘密;其次,通过微信小程序提供数字签名功能,避免了在用户移动终端中安装app带了的麻烦;最后,基于本发明的方案,无论是移动终端中的各种应用程序,如应用app程序,Web客户端程序、微信小程序,还是用户其他计算机(计算装置)中的各种应用程序,都能调用、使用实施数字签名协同生成的数字签名微信小程序,解决了不同种类的应用程序使用密码功能的互操作问题。附图说明[0072] 图1为本发明的基本方案的整体系统结构及应用示意图。[0073] 图2为本发明的采用插件实施的系统的常见情形一。[0074] 图3为本发明的采用插件实施的系统的常见情形二。[0075] 图4为本发明的采用插件实施的系统的常见情形三。[0076] 图5为本发明的采用插件实施的系统的常见情形四。[0077] 其中,图1~图5中的应用客户端程序包括:应用客户端微信小程序、Web客户端程序、应用客户端app具体实施方式[0078] 下面对本发明的具体实施方式进行说明。以下内容仅是对本发明可能实施方式的说明,不作为对本发明保护范围的限制。[0079] 本发明的实施对所采用的数字签名算法没有限制,所有支持数字签名双方或多方协同生成的数字签名算法都是本发明能实施的对象,而目前常用的数字签名算法,比如SM2、SM9、ECDSA等,都支持数字签名双方或多方协同生成,因此,它们都是本发明适用的实施对象。[0080] 对于本发明的基本方案的实施,首先要选择一个抽象的数字签名双方或多方协同生成方案,这类所说的“抽象”是指这类方案对数字签名协同生成的参与方没有特定的实施技术限定,比如,对用户端参与方是app也好,还是API/SDK也好,还是微信小程序好,都没有特别的技术限定,都适应,对服务端也是如此;只要有这样一个抽象的数字签名双方或多方协同生成方案就可以依此实施本发明的基本方案,这类方案在公开的学术论文、学位论文、专利文献中有很多。[0081] 对于本发明的安全增强方案一,其选择的抽象的数字签名协同生成方案与基本方案的唯一差别在于,数字签名协同生成服务系统为最终计算得到数字签名的一方。下面以SM2、SM9算法举例说明安全增强方案一中扰动参数t的选择及使用。[0082] 对于SM2算法,使用签名私钥dA计算得到的签名数据所在群为Zn,即为[0,n‑1]内的整数;扰动参数t为[0,n‑1]随机选择的整数;在数字签名协同生成服务系统最终计算得到针对消息M的数字签名(r,s)后,将使用签名私钥计算得到的数据s与扰动参数t在群Zn中相加得到修改后的数字签名数据st,具体地st=(s+t)modn;应用服务系统在收到扰动后的签名数据(r,st)后,将st与(‑t)在群Zn中相加,具体地s=(st‑t)modn,还原得到s,即还原得到数字签名(r,s)。[0083] 或者,对于SM2算法,使用签名私钥dA计算得到的签名数据所在群Zn的阶为素数n,扰动参数t为[1,n‑1]内随机选择的整数;在数字签名协同生成服务系统最终计算得到针对消息M的数字签名(r,s)后,将使用签名私钥计算得到的数据s与扰动参数t在群Zn中进行数乘得到修改后的数字签名数据st,具体地st=(s*t)modn;应用服务系统在收到扰动后的签‑1 ‑1名数据(r,st)后,将st与扰动参数t的模n乘法逆t 在群Zn中进行数乘,具体地s=(st*t )modn,还原得到s,即还原得到数字签名(r,s)。[0084] 对于SM9算法,使用签名私钥dA计算得到的签名数据所在群为双线性映射的第一个群G1(通常是椭圆曲线点群),扰动参数t为G1随机选择的群元;在数字签名协同生成服务系统最终计算得到针对消息M的数字签名(h,S)后,将使用签名私钥计算得到的数据S与扰动参数t在群G1中相加得到修改后的数字签名数据St,即St=S+t;应用服务系统在收到扰动后的签名数据(h,St)后,将St与(‑t)在群G1中相加,即S=St+(‑t),还原得到S,即还原得到数字签名(h,S)。[0085] 或者,对于SM2算法,使用签名私钥dA计算得到的签名数据所在群G1的阶为素数n,扰动参数t为[1,n‑1]内随机选择的整数;在数字签名协同生成服务系统最终计算得到针对消息M的数字签名(h,S)后,将使用签名私钥计算得到的数据S与扰动参数t在群G1中进行数乘得到修改后的数字签名数据St,具体地St=[t]S;应用服务系统在收到扰动后的签名数据‑1 ‑1(h,St)后,将St与扰动参数t的模n乘法逆t 在群G1中进行数乘,即S=[t ]St,还原得到S,即还原得到数字签名(h,S)。[0086] 对于本发明的安全增强方案二,可按如下方式实施。[0087] 首先选择一个满足如下要求的三方数字签名协同生成方案:[0088] 第一方的秘密是与其他方的秘密相乘的整数(其他方的秘密不必是整数),或者是与其他方的秘密相加的群元(这里的群包括整数群或非整数群);[0089] 当针对消息M进行数字签名时,第一方在数字签名算法规定的范围内随机选择一个整数t进行数字签名的初始计算,然后将初始计算的结果交给其他两方,初始计算结果为非秘密;其他两方在第一方初始计算结果的基础上,利用它们各自的秘密协同计算得到数字签名的中间计算结果;[0090] 最后第一方在数字签名的中间计算结果的基础上,利用计算得到最终的数字签名,计算过程中使用的参数包括初始计算时随机选择的整数t(至于是否包含其他秘密或参数,取决于具体方案)。[0091] 这里第一方随机选择整数所在的数字签名算法规定的范围是数字签名算法在数字签名的初始计算阶段随机选择整数进行相关计算的范围,不同的数字签名算法这个范围可能不同,但通常是[1,n‑1],其中n为签名私钥所在群的阶。[0092] 对于满足如上所述要求的三方数字签名协同生成方案,将第一方设定为应用服务系统,其他两方分别作为用户端的数字签名微信小程序、服务端的数字签名协同生成服务系统;若第一方的秘密是与其他方的秘密相乘的整数,则取其秘密为整数1;若第一方的秘密的是与其他方的秘密相加的群元,则取其为零元(其中包括整数0)。[0093] 对于要实施的常见数字签名算法,比如SM2、SM9,满足以上要求的三方数字签名协同生成方案很多,选择其中一个实施即可,当然,通过选择满足以上要求的三方数字签名协同生成方案实施安全增强方案二不是必须的,直接设计一个适用于安全增强方案二的方案也是可以的。[0094] 如前所述,出于安全考虑,对于安全增强方案二的实施,应优先选择数字签名协同生成服务系统在进行数字签名的协同计算过程中要使用应用服务系统或应用客户端程序的初始计算结果进行协同计算方案,而要做到这点不难,比如对于一个SM2数字签名三方协同生成方案,假如参与的三方需要首先协同计算Q=[k1+k2+k3]Gb,然后再此基础上进行数字签名协同计算,其中k1、k2、k3分别是第一方、第二方、第三方在[1,n‑1]内随机选择的整数,n为SM2椭圆曲线点群的阶(也是基点G的阶,也签名私钥dA所在整数群的阶),Gb为SM2椭圆曲线群中的一个元;通常这个计算顺序是无关紧要的,则第一方即应用服务系统首先计算Q1=[k1]Gb,然后第二方即数字签名协同生成服务系统计算Q2=Q1+[k2]Gb,最后第三方即数字签名微信小程序计算Q=Q2+[k3]Gb,则符合此要求,或者,第一方即应用服务系统首先计算Q1=[k1]Gb,然后第三方即数字签名微信小程序计算Q3=[k3]Gb,最后第二方数字签名协同生成服务系统计算Q=Q1+Q3+[k2]Gb,则也符合此要求。[0095] 再比如,对于SM9数字签名三方协同生成方案,假如三方需要首先协同计算w=gc^(r1+r2+r3),其中r1、r2、r3分别是第一方、第二方、第三方在[1,n‑1]内随机选择的整数,n为‑1 ‑1SM9双线性映射群的阶(也是签名私钥dA所在群的阶),gc=g^(c ),c 为模n乘法逆,g=e(P1,Ppub),P1为第一个群的生成元,Ppub为第二个群的中的主公钥,则第一方即应用服务系统首先计算g1=gc^(r1),然后第二方即数字签名协同生成服务系统计算g2=g1*gc^(r2),*为乘运算,最后第三方即数字签名微信小程序计算w=g2*gc^(r3),则符合此要求,或者,第一方即应用服务系统首先计算g1=gc^(r1),然后第三方即数字签名微信小程序计算g3=gc^(r3),最后第二方即数字签名协同生成服务系统计算w=g1*g3*gc^(r2),则也符合此要求。[0096] 需要特别指出的是,对于安全增加方案二,数字签名最终生成后,最后将计算结果提交给应用服务系统的数字签名协同生成服务系统或数字签名微信小程序是存在通过最终的数字签名破解出t的,但这无关紧要,因为t的目的是防止安全令牌被盗用。[0097] 用户端的秘密S1,可以在用户端进行密码初始化时由数字签名微信小程序生成。对于协同生成的签名私钥或签名私钥的相关秘密,数字签名微信小程序通过与数字签名协同生成服务系统交互,生成秘密S1;生成的秘密S1经加密后以密文数据S2的形式保存在用户移动终端中,比如,保存在每个微信小程序的专用Storage数据存储区或专用文件存储区或微信提供的其他数据存储区。[0098] 应用服务系统签发的安全令牌为临时性的授权凭证,既可以采用标准的安全令牌(比如WS‑Security安全令牌、SAML断言、安全票据ticket、JsonWebToken即JWT等),也可以采用自定义格式的安全令牌;安全令牌采用非对称密钥(比如SM2、SM9、RSA、ECDSA)签名,或对称密钥签名(比如HMAC)。[0099] 在具体实施中,安全令牌中不必包含用户的身份信息,但从安全角度,安全令牌至少包含用户身份信息和公钥信息中的一个,或者包含用户身份信息或/和公钥信息的相关信息,这里的用户身份信息或/和公钥信息的相关信息指与用户身份或/和公钥唯一关联的信息。对于安全增强方案一,安全令牌需要有相应字段存储扰动参数t的散列值,对于安全增强方案二,需要有相应字段存储利用t计算得到的初始计算结果的散列值,这些散列值为安全令牌的数字签名覆盖的内容。[0100] 安全令牌的获取信息可以是随机性的并与安全令牌相关联的信息,也可以是安全令牌的哈希值或散列值,同样地,消息M的获取信息可以是随机性的并与安全令牌相关联的信息,也可以是消息M的哈希值或散列值,扰动参数t的密文或利用扰动参数t计算得到的初始计算结果的获取信息也是如此。由于安全令牌或安全令牌的获取信息通常是唯一性的信息,因此,在具体实施,安全令牌或安全令牌的获取信息可以作为消息M、扰动参数t的密文或利用扰动参数t计算得到的初始计算结果的获取信息(即二者可以是同一个数据)。[0101] 在具体实施中,若安全令牌采用公钥数字签名算法签名,则可选地,可以由数字签名微信小程序(获得安全令牌后)先验证安全令牌的有效性,验证通过后再提交,而数字签名生成服务系统接收或获取到安全令牌后,对安全令牌进行再次验证。当然,数字签名微信小程序对安全令牌的验证不是必须的。[0102] 本发明的方案,在具体实施中,对从应用客户端app、Web客户端程序切换或跳转到数字签名微信小程序,对扫码启动数字签名微信小程序,对从短信启动数字签名微信小程序的方式,是全部都支持,还是部分支持,取决于实施者。[0103] 从微信客户端中的一个微信应用小程序切换或跳转到数字签名微信小程序并传递参数,即从一个微信小程序切换或跳转到另一个微信小程序,以及在切换或跳转时在微信小程序之间、微信小程序页面代码之间传递数据,已属于成熟技术,比如通过页面切换、跳转,通过URL链接以及微信小程序特有的数据传递数据,在此不再赘述。[0104] 从本机的一个应用客户端app或Web客户端程序(比如浏览器中的页面程序)跳转到数字签名微信小程序并传递参数,即从本机的一个应用app或浏览器页面代码跳转到微信小程序并传递参数,是微信小程开发平台和微信公众平台目前新开放的技术功能,可参见有关的微信小程序开发技术文档、介绍。[0105] 通过微信扫码启动数字签名微信小程序并传递参数,即通过微信扫码在移动终端中启动微信小程序并通过条码向微信小程序传递参数已是非常成熟的技术,在此不再赘述。[0106] 通过短信启动数字签名微信小程序并传递参数,即通过短信启动微信小程序并向微信小程序传递参数,已是成熟技术,在此不再赘述。[0107] 在具体实施中,应用服务系统、数字签名协同生成服务系统、数字签名微信小程序之间可以直接交换数字签名数据和数字签名计算相关数据,也可以通过一个数据存储中介系统交互数据;若通过数据存储中介系统与其他系统交互数据,则安全令牌可以作为存储、获取数据的授权凭证(当然,这不是必须的)。[0108] 如何获得当前使用微信小程序的用户在微信公众平台(微信开放平台)的身份信息如openid,已是成熟技术,可以参考相关度技术文档。[0109] 基于本发明的基于微信小程序的数字签名协同生成方法可构建相应的基于微信小程序的数字签名协同生成系统,如图1所示,系统包括数字签名微信小程序和数字签名协同生成服务系统;当需要使用用户的签名私钥针对消息M进行数字签名时,数字签名协同生成系统按所述基于微信小程序的数字签名协同生成方法生成针对消息M的数字签名。[0110] 微信小程序插件提供了操作与数据的隔离,在具体实施中,为了进一步提高安全性,可以将数字签名微信小程序的数字签名协同计算功能或/和用户鉴别功能用微信小程序插件的形式实施,即实施实现数字签名协同计算功能的协同计算小程序插件或/和实施实现用户鉴别功能的鉴别授权小程序插件,然后由数字签名微信小程序加载调用,调用微信小程序插件提供的数字签名协同计算功能或/和用户鉴别功能;相应地,可以(非必须)在服务端实施专门的提供数字签名协同计算功能的协同计算服务系统或/和提供用户鉴别和授权功能的鉴别授权服务系统(一个专门功能的微信小程序插件对应一个实施专门功能的服务端系统不是必须的);协同计算小程序插件或/和鉴别授权小程序插件的发布者,(比如通过微信公众平台的管理平台,以及其他方式)仅授权许可可信的微信小程序使用协同计算小程序插件或/和鉴别授权小程序插件,所述可信的微信小程序包括数字签名微信小程序;对于用户端的微信小程序通过调用插件提交的功能/服务调用请求,服务端的系统,包括数字签名协同生成服务系统,或者协同计算服务系统或/和鉴别授权服务系统在处理请求时(如通过请求中的referer和HostSign)确认请求是来自得到授权许可的数字签名微信小程序及所调用的协同计算小程序插件或/和鉴别授权小程序插件(即确认请求来自协同计算小程序插件或/和鉴别授权小程序插件,且调用插件的微信小程序是得到授权许可的数字签名微信小程序);协同计算小程序插件与数字签名协同生成服务系统或协同计算服务系统交互时(通常是初始交互时),需提供应用服务系统签发的安全令牌或鉴别授权服务系统签发的证明用户获得相应授权的安全令牌,鉴别授权小程序插件与数字签名协同生成服务系统或鉴别授权服务系统交互时(通常是初始交互时),需提供应用服务系统签发的安全令牌。通过微信小程序插件实施本发明,有很多种实施方式,图2、3、4、5为几种常见可能的实施情形(不是全部)。[0111] 这里服务端的系统,比如数字签名协同生成服务系统、协同计算服务系统、鉴别授权服务系统,既可以实施为软件,也可以实施为软硬件结合的系统。[0112] 其他未说明的具体技术实施,对于相关领域的技术人员而言是众所周知,不言自明的。

专利地区:北京

专利申请日期:2022-09-15

专利公开日期:2024-06-18

专利公告号:CN115529140B

电话咨询
读内容
搜本页
回顶部