买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种基于用户标识的数字签名、验签方法及装置_飞天诚信科技股份有限公司_201810037962.2 

申请/专利权人:飞天诚信科技股份有限公司

申请日:2018-01-16

公开(公告)日:2021-06-08

公开(公告)号:CN108259184B

主分类号:H04L9/32(20060101)

分类号:H04L9/32(20060101);H04L9/30(20060101);H04L9/08(20060101)

优先权:

专利状态码:有效-授权

法律状态:2021.06.08#授权;2018.07.31#实质审查的生效;2018.07.06#公开

摘要:本发明涉及信息安全领域,特别涉及一种基于用户标识的数字签名及验签的方法及装置,当签名时,CPU使用与用户标识相关联的签名私钥对待签名数据进行运算产生数据签名;当验签时,CPU使用用户标识验证签名的可靠性,本发明通过基于用户标识确定的签名公钥来验证数据单元的数据完整性和数据单元发送者的身份,使用户无需通过第三方验证单元验证签名公钥的真实性,简化了密钥管理流程。

主权项:1.一种基于用户标识的数字签名方法,其特征在于,包括:步骤S1、当接收到待签名数据时,CPU保存所述待签名数据;步骤S2、所述CPU通过随机数生成器生成随机数,将所述随机数写入第二寄存器;步骤S3、所述CPU读取预存的第一参数和签名主公钥,将所述第一参数和所述签名主公钥的数据类型均转换为预设预设椭圆曲线上的点,根据转换后的第一参数和签名主公钥进行双线性对运算,再与所述第二寄存器的数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;步骤S4、所述CPU获取所述待签名数据和预存的第二参数,并根据所述待签名数据、所述第一寄存器的数据和所述第二参数进行第一杂凑运算,将运算结果写入所述第一寄存器;步骤S5、所述CPU读取第二参数、并根据所述第一寄存器的数据、所述第二寄存器的数据和所述第二参数进行第一预设运算,将运算结果写入所述第二寄存器;步骤S6、所述CPU读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设预设椭圆曲线上的点,并根据所述第二寄存器的数据和转换后的签名私钥进行第二预设运算,再将运算结果的数据类型转换为字节串,将转换后的运算结果写入所述第二寄存器;步骤S7、所述CPU将所述第一寄存器的数据和所述第二寄存器的数据作为数字签名输出。

全文数据:—种基于用户标识的数字签名、验签方法及装置技术领域[0001]本发明涉及信息安全领域,特别涉及一种基于用户标识的数字签名、验签方法及装置。背景技术[0002]数字签名技术即身份认证的技术,数字签名就是在数据单元上附加一些数据,或是对数据单元进行加密变换。这种附加数据或变换使得数据单元的接收者能够确认数据单元的来源,确保数据单元的完整性、合法性和真实性,防止数据被他人伪造或者篡改;数字签名是基于公钥密码体制实现的,即需要通过公钥对签名结果进行验证,但是验证过程之前往往需要第三方检查公钥的真实性,公钥管理复杂且繁琐。发明内容[0003]本发明提供了一种基于用户标识的数字签名、验签方法及装置;[0004]本发明提供了一种基于用户标识的数字签名方法,包括:[0005]步骤S1、当接收到待签名数据时,CPU保存待签名数据;[0006]步骤S2、CPU通过随机数生成器生成随机数,将随机数写入第二寄存器;[0007]步骤S3、CPU读取预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,根据转换后的第一参数和签名主公钥进行双线性对运算,再与第二寄存器的数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果与入第一寄存器;[0008]步骤S4、CPU获取待签名数据和预存的第二参数,并根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;[0009]步骤S5、CPU读取第二参数、并根据第一寄存器的数据、第二寄存器的数据和第二参数进行第一预设运算,将运算结果写入所述第二寄存器;[0010]步骤S6、CPU读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设椭圆曲线上的点,并根据第二寄存器的数据和转换后的签名私钥进行第二预设运算,再将运算结果的数据类型转换为字节串,将转换后的运算结果写入所述第二寄存器;[0011]步骤S7、CRJ将第一寄存器的数据和第二寄存器的数据作为数字签名输出。[0012]本发明提供了一种基于用户标识的验签方法,包括:[0013]步骤R1、当接收到待签名数据、数字签名和用户标识时,CPU根据预设规则将数字签名截取得到第一数据和第二数据,并保存第一数据、第二数据、待签名数据和用户标识;[00M]步骤R2、CHJ读取第一数据和预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型转换为预设椭圆曲线上的点,根据转换后的数据进行双线性对运算,再与第一数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;[0015]步骤R3、PU读取用户标识、预存的函数识别符和第二参数,根据用户标识、函数识别符和第二参数进行第二杂凑运算,将运算结果写入第二寄存器;[0016]步骤R4、CPU读取第二数据和预存的第三参数和签名主公钥,将第一寄存器的数据、第二数据、第三参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,并根据第二寄存器的数据、转换后的第三参数和签名主公钥进行第六预设运算,再与转换后的第二数据进行双线性对运算,再与第一寄存器的数据进行点乘运算,将运算结果的数据类型转换成字节串,并将转换后的运算结果写入第一寄存器;[0017]步骤R5、CPU读取待签名数据和第二参数,根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;[0018]步骤R6、CPU获取第一数据,并判断第一数据和第一寄存器的数据是否相等,是则验证成功,否则验证失败。[0019]本发明提供了一种基于用户标识的数字签名装置,包括:[0020]接收模块,用于接收待签名数据;并保存待签名数据;[0021]随机数生成模块,用于生成随机数;并将随机数写入第二寄存器;[0022]第一数据类型转换模块,用于读取预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型转换为预设椭圆曲线上的点;[0023]第一运算模块,用于将第一数据类型转换模块转换后的第一参数和签名主公钥进行双线性对运算,再与随机数生成模块写入第二寄存器的数据进行幂运算;[0024]第二数据类型转换模块,用于将第一运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;[0025]杂凑运算模块,用于获取所述接收模块保存的待签名数据和预存的第二参数,并根据待签名数据、第二数据类型转换模块写入第一寄存器的数据和第二参数进行第一杂凑运算,并将运算结果写入第一寄存器;[0026]第二运算模块,用于读取第二参数、并根据杂凑运算模块写入第一寄存器的数据、随机数生成模块写入第二寄存器的数据和第二参数进行第一预设运算,将运算结果写入第二寄存器;[0027]第三数据类型转换模块,用于读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设椭圆曲线上的点;[0028]第三运算模块,用于根据第二运算模块写入第二寄存器的数据和第三数据类型转换模块转换后的签名私钥进行第二预设运算;[0029]第二数据类型转换模块,还用于将第三运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第二寄存器;[0030]输出模块,用于将杂凑运算模块写入第一寄存器的数据和第二数据类型转换模块写入第二寄存器的数据作为数字签名输出。[0031]本发明提供了一种基于用户标识的验证装置,包括:[0032]接收模块,用于接收待签名数据、数字签名和用户标识,并根据预设规则将所述数字签名截取得到第一数据和第二数据,保存第一数据、第二数据、待签名数据和用户标识;[0033]第一数据类型转换模块,用于读取第一数据和预存的第一参数和签名主公钥,将第一参数和所述签名主公钥的数据类型转换为预设椭圆曲线上的点;[0034]第一运算模块,用于根据第一数据类型转换模块转换后的数据进行双线性对运算,再与第一数据进行幂运算;[0035]第二数据类型转换模块,用于将第一运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;[0036]第二杂凑运算模块,用于读取所述用户标识、预存的函数识别符和第二参数,根据用户标识、函数识别符和第二参数进行第二杂凑运算,将运算结果写入第二寄存器;[0037]第三数据类型转换模块,用于读取第二数据和预存的第三参数和签名主公钥,将第二数据类型转换后的第一寄存器的数据、所述第二数据、所述第三参数和所述签名主公钥的数据类型均转换为预设椭圆曲线上的点;[0038]第二运算模块,用于根据第二寄存器的数据、第三数据类型模块转换后的第三参数和签名主公钥进行第六预设运算,再与第三数据类型转换模块转换后的第二数据进行双线性对运算,再与第三数据类型转换模块转换后的第一寄存器的数据进行点乘运算;[0039]第四数据类型转换模块,用于第二运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入所述第一寄存器;[0040]第一杂凑运算模块,用于读取待签名数据和第二参数,根据待签名数据、第四数据类型转换模块转换后的第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入所述第一寄存器;[0041]验证模块,用于获取第一数据,并判断第一数据和第一杂凑运算模块写入第一寄存器的数据是否相等,当第一数据和第一杂凑运算模块写入第一寄存器的数据相等时验证成功,当第一数据和第一杂凑运算模块写入第一寄存器的数据不相等时验证失败。[0042]本发明取得的有益效果是:签名公钥由用户的唯一标识所确定,通过基于用户标识确定的签名公钥来验证数据单元的数据完整性和数据单元发送者的身份,使用户无需通过第三方验证单元验证签名公钥的真实性,简化了密钥管理流程。附图说明[0043]为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0044]图1为本发明实施例1提供的一种基于用户标识的数字签名方法流程图;[0045]图2位本发明实施例2提供的一种基于用户标识的验签方法流程图;[0046]图3为本发明实施例3提供的一种基于用户标识的数字签名装置的方框图;[0047]图4为本发明实施例4提供的一种基于用户标识的验签装置的方框图。具体实施方式[0048]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0049]实施例1[0050]本实施例提供一种基于用户标识的数字签名方法,需要说明的是,CPU中预存有第一参数、第二参数、签名主公钥和签名私钥;如图1所示,包括:[0051]本实施例中,预存的第一参数具体为:(93DE〇5lD62BFH8FF5ED〇7〇4487D01D6E1E4086909DC3280E8C4E4817C66DDDD,21FE8DDA4F21E607631065125C395BBC1C1C00CBFA6024350C464CD70A3EA616;[0052]第二参数具体为:B640000002A3A6F1D603AB4FF58EC74449F2934B18EA8BEEE56EE19CD69ECF25;[0053]签名主公钥具体为:(9F64080B3〇84F733E48AFF4B41B565〇lICEOmC5E392CFB0AB1B6791B94C40829DBA116152D1F786CE843ED24A3B573414D2177386A92DD8F14D65696EA5E32,69850938ABEA0112B57329F447E3A0CBAD3E2FDB1A77F335E89E1408D0EF1C2541E00A53DDA532DA1A7CE027B7A46F741006E85F5CDFF0730E75C05FB4E3216D;[0054]签名私钥具体为:(A5702F05CF1315305E2D6EB64B0DEB923DB1A0BCF0CAFF90523AC8754AA69820,78559A844411F9825C109F5EE3F52D720DD01785392A727BB1556952B2B013D3;[0055]可选的,CRJ获取预存的用户标识,并通过向密钥生成系统上传用户标识获取第一参数、第二参数、签名主公钥和签名私钥,并保存获取到的签名主公钥、签名私钥、第一参数和第二参数。[0056]步骤S1、当接收到待签名数据时,CPU保存待签名数据;[0057]本实施例中,CPU接收到的待签名数据具体为:4368696E65736520494253207374616E64617264;[0058]步骤S2、PU读取预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,根据转换后的第一参数和签名主公钥进行双线性对运算,再与第二寄存器的数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;[0059]具体的,将第一参数的数据类型转换为预设椭圆曲线上的点具体包括:[0060]步骤101、PU将第一参数平均拆分为两个字节串;[0061]步骤102、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0062]步骤l〇3、CHJ判断第一参数中是否还有未被获取过的字节串,是则返回步骤102,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一参数;[0063]将签名主公钥的数据类型转换为预设椭圆曲线上的点具体包括:[0064]步骤201、CPU将签名主公钥平均拆分为两个字节串;[0065]步骤2〇2、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0066]步骤2〇3、CPU判断签名主公钥中是否还有未被获取过的字节串,是则返回步骤2〇2,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的签名主公钥;[0067]具体的,根据转换后的第一参数和签名主公钥进行双线性对运算,运算结果为:[0068]4E378FB5561CD0668F906B731AC58FEE25738EDF09CADC7A29C0ABC0177AEA6D,28B3404A61908F5D6198815C99AF1990C8AF38655930058C28C21BB539CE0000,38BFFE40A22D529A0C66124B2C308DAC9229912656F62B4FACFCED408E02380F,A01F2C8BEE81769609462C69C96AA923FD863E209D3CE26DD889B55E2E3873DB,67E0E0C2EED7A6993DCE28FE9AA2EF56834307860839677F96685F2B44D091IF,5A1AE172102EFD95DF7338DBC577C66D8D6C15E0A0158C7507228EFB078F42A6,1604A3FCFA9783E667CE9FCB1062C2A5C6685C316DDA62DE0548BAA6BA30038B,93634F44FA13AF76169F3CC8FBEA880ADAFF8475D5FD28A75DEB83C44362B439,B3129A75D31D17194675A1BC56947920898FBF390A5BF5D931CE6CBB3340F66D,4C744E69C4A2E1C8ED72F796D151A17CE2325B943260FC460B9F73CB57C9014B,84B87422330D7936EABA1109FA5A7A7181EE16F2438B0AEB2F38FD5F7554E57A,AAB9F06A4EEBA4323A7833DB202E4E35639D93FA3305AF73F0F071D7D284FCFB[0069]CPU以双线性对运算的运算结果为底,第二寄存器的数据为指数进行运算;运算结果具体为:(81377B8FDBC2839B4FA2D0E0F8AA6853BBBE9E9C4099608F8612C6078ACD7563,[0070]815AEBA217AD502DA0F48704CC73CABB3C06209BD87142E14CBD99E8BCA1680F,[0071]30DADC5CD9E207AEE32209F6C3CA3EC0D800A1A42D33C73153DED47C70A39D2E,[0072]8EAF5D179A1836B359A9D1D9BFC19F2EFCDB829328620962BD3FDF15F2567F58,[0073]A543D25609AE943920679194ED30328BB33FD15660BDE485C6B79A7B32B01398,[0074]3F012DB04BA59FE88DB889321CC2373D4C0C35E84F7AB1FF33679BCA575D6765,[0075]4F8624EB435B838CCA77B2D0347E65D5E46964412A096F4150D8C5EDE5440DDF,[0076]0656FCB663D24731E80292188A2471B8B68AA993899268499D23C89755A1A897,[0077]44643CEAD40F0965F28E1CD2895C3D118E4F65C9A0E3E741B6DD52C0EE2D25F5,[0078]898D60848026B7EFB8FCC1B2442ECF0795F8A81CEE99A6248F294C82C90D26BD,[0079]6A814AAF475F128AEF43A128E37F80154AE6CB92CAD7D1501BAE30F750B3A9BD,[0080]1F96B08E97997363911314705BFB9A9DBB97F75553EC90FBB2DDAE53C8F68E42[0081]具体的,将运算结果的数据类型转换为字节串包括:[0082]步骤Al、CPU获取第二参数,根据运算结果的长度和第二参数计算得到第三数据;[0083]步骤A2、CPU从运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;[0084]步骤A3、CHJ判断运算结果中是否还有未被获取到的分量,是则返回步骤A2,否则执行步骤A4;[0085]步骤A4、CPU从运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;[0086]步骤A5、PU判断运算结果中是否还有未被获取到的分量,是则返回步骤A4,否则结束;[0087]步骤S3、CPU通过随机数生成器生成随机数,并将随机数写入第二寄存器;[0088]本实施例中CPU调用随机数生成器生成随机数具体为:〇X033C8616B06704813203DFD00965022ED15975C662337AED648835DC4B1CBE;[0089]步骤S4、CPU获取待签名数据和预存的第二参数,并根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;[0090]具体的,根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,运算结果具体为:823C4B21E4BD2DFE1ED92C606653E996668563152FC33F55D7BFBB9BD9705ADB;[0091]更为具体的,CHJ获取待签名数据和预存的第二参数,并将待签名数据和第一寄存器的数据顺序拼接,将拼接结果和所述第二参数作为输入参数调用第一密码函数,将第一密码函数的输出数据写入第一寄存器;[0092]或者,步骤S4具体包括:[0093]步骤B1、CPU初始化计数器,并获取待签名数据和第二参数,并将待签名数据和第一寄存器的数据顺序拼接,将拼接接结果写入第一寄存器;[0094]步骤B2、CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将顶函数的输出数据写入第五寄存器;[0095]更为详细的,CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器具体为:CPU计算以2为底第二参数的对数,将计算结果与5相乘,再与32相除,将相除后的结果作为输入参数调用顶函数,将顶函数的输出数据与8相乘,将相乘的结果写入第二寄存器;将第三寄存器的数据与预设的密码杂凑函数的输出数据的长度相除,将相除的结果写入第四寄存器,将第四寄存器的数据作为输入参数调用顶函数,将顶函数的输出数据写入第五寄存器;[0096]步骤B3、CPU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果赋值给第六寄存器;[0097]可选的,密码杂凑函数具体为:MD5或者SHA256或者SM3;[0098]例如,预设的密码杂凑函数为SM3密码杂凑函数,则密码杂凑函数的输出数据的长度为32字节;[0099]步骤B4、CPU更新计数器,判断计数器的值是否等于第五寄存器的数据,是则执行步骤B5,否则返回步骤B3;[0100]具体的,CPU将计算器的值加1作为更新后的计数器的值;[0101]步骤Bf5、CPU判断第四寄存器的数据是否为整数,是则执行B6,否则执行B7;[0102]步骤Be、CPU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果为第六寄存器赋值,执行步骤B8;[0103]本实施例中,第一预设值具体为〇x〇2;[0104]步骤B7、CPU根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并根据第七寄存器的数据截取杂凑值,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;[0105]CPU根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器具体为:CPU将第四寄存器的数据作为输入参数调用底函数,将底函数的输出数据与密码杂凑函数的输出数据的长度相乘,将第三寄存器的数据与相乘结果进行减法运算,将运算结果写入第七寄存器;[0106]步骤B8、CmJ获取第二参数,根据第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。[0107]步骤s5、cinj读取第二参数、并根据第一寄存器的数据、第二寄存器的数据和第二参数进行第一预设运算,将运算结果写入第二寄存器;[0108]具体的,CPU读取第二参数,将第二寄存器的数据和第一寄存器的数据进行减法运算,将差值与第二参数进行模运算,将运算结果赋值给第二寄存器。[0109]更为详细的,CHJ读取第二参数、并根据第一寄存器的数据、第二寄存器的数据和第二参数进行第一预设运算,运算结果具体为:[0110]3406F1643496DFF8385C82CF5F4442B0123E89ABAF898013FB13AE36D9799108[0111]步骤S6、CinJ判断第二寄存器的数据是否等于预设值,是则返回步骤S3,否则继续执行步骤S7;[0112]本实施例中,预设值为〇;[0113]步骤s7、cinj读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设椭圆曲线上的点,并根据第二寄存器的数据和转换后的签名私钥进行第二预设运算,再将运算结果的数据类型转换为字节串,将转换后的运算结果写入第二寄存器;[0114]具体的,PU将签名私钥的数据类型转换为预设椭圆曲线上的点包括:[0115]步骤301、PU将签名私钥平均拆分为预设数量的字节串;[0116]步骤3〇2、CTU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0117]步骤3〇3、CPU判断第二数据中是否还有未被获取过的字节串,是则返回步骤302,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的签名私钥。[0118]根据第二寄存器的数据和转换后的签名私钥进行第二预设运算具体为:将第二寄存器的数据与签名私钥进行倍点运算。[0119]更为详细的,cro读取预存的签名私钥,将第二寄存器的数据与签名私钥进行倍点运算,运算结果具体为:(73BF96923CE58B6AD0E13E%43A4〇6D8EB98417C50EF1B29CEF9ADB48B6D598C,856712F1C2E0968AB7769F42A99586AED139D5B8B3E15891827CC2ACED9BAA05;[0120]具体的,将第二预设运算的运算结果的数据类型转换为字节串与步骤S2中将幂运算的运算结果的数据类型转换成字节串的过程类似,在此不再赘述。[0121]步骤S8、所述CHJ将第一寄存器的数据和第二寄存器的数据作为数字签名输出。[0122]优选的,CHJ将第一寄存器的数据、预设分隔符和第二寄存器的数据顺序拼接得到数字签名,输出数字签名。[0123]本实施例中,预设识别符为04,则数字签名具体为:(823C4B21E4BD2DFE1ED92C606653E996668563152FC33F55D7BFBB9BD9705ADB,0473BF96923CE58B6AD0E13E9643A406D8EB98417C50EF1B29CEF9ADB48B6D598C856712F1C2E0968AB7769F42A99586AED139D5B8B3E15891827CC2ACED9BAA05。[0124]需要说明的是,密钥生成系统根据用户标识生成签名私钥的方法具体包括:[0125]步骤XI、密钥生成系统生成随机数作为签名主私钥;并根据签名主私钥生成签名主公钥;[0126]本实施例中的随机数具体为:0130E78459D78545CB54C587E02CF480CE0B66340F319F348A1D5B1F2DC5F4;[0127]密钥生成系统计算第三参数的随机数倍点作为签名主公钥,本实施例中得到的签名主公钥具体为:[0128]9F64080B3084F733E48AFF4B41B565011CE0711C5E392CFB0AB1B6791B94C40829DBA116152D1F786CE843ED24A3B573414D2177386A92DD8F14D65696EA5E32,69850938ABEA0112B57329F447E3A0CBAD3E2FDB1A77F335E89E1408D0EF1C2541E00A53DDA532DA1A7CE027B7A46F741006E85F5CDFF0730E75C05FB4E3216D;[0129]步骤X2、密钥生成系统根据用户标识和签名主私钥生成签名私钥;[0130]步骤X2具体包括:[0131]步骤X2-1、密钥生成系统根据签名主私钥选择函数识别符,根据用户标识、函数识别符和循环群的阶通过第二密码函数生成第一数据;并根据第一数据和签名主私钥生成第一数据。[0132]更进一步的,密钥生成系统将用户标识416C696365和函数识别符01顺序拼接,根据拼接结果416C69636501和第二参数通过第二密码函数生成第一数据2ACC468C3926B0BDB2767E99FF26E084DE9CED8DBC7D5FBF418027B667862FAB,并将第一数据和签名主私钥相加得到第二数据2ACD7773BD808842F841D35F87070D795F6AF8F3F08C915E760A451186B3F59F;[0133]步骤X2-2、密钥生成系统判断第二数据是否等于预设值,是则返回步骤否则执行步骤X2-3;[0134]本实施例中,预设值为0;[0135]步骤X2-3、密钥生成系统根据签名主私钥、第二数据和第一参数生成签名私钥;[0136]具体的,密钥生成系统将签名主私钥和第二数据相除得到第三数据291FE3CAC8F58AD2DC462C8D4D578AMDAFD5624DDC28E328D2936688A86CF1A;计算第一参数的第三数据倍得到签名私钥;本实施例中得到的签名私钥具体为:(A5702F05CF1315305E2D6EB64B0DEB923DB1A0BCF0CAFF90523AC8754AA69820,78559A844411F9825C109F5EE3F52D720DD01785392A727BB1556952B2B013D3。[0137]实施例2[0138]本实施例提供一种基于用户标识的验签方法,CHJ中预存有签名主公钥、第一参数、第二参数、第三参数和函数识别符;如图2所示,包括:[0139]预存的第一参数具体为:(93DE051D62BF718FF5ED0704487D01D6E1E4086909DC3280E8C4E4817C66DDDD,21FE8DDA4F21E607631065125C395BBC1C1C00CBFA6024350C464CD70A3EA616;[0140]第二参数具体为:B640000002A3A6F1D603AB4FF58EC74449F2934B18EA8BEEE56EE19CD69ECF25;[0141]第三参数具体为:(85AEF3D078640C98597B6027B441A01FF1DD2C190F5E93C454806C11D8806141,3722755292130B08D2AAB97FD34EC120EE265948D19C17ABF9B7213BAF82D65B17509B092E845C1266BA0D262CBEE6ED0736A96FA347C8BD856DC76B84EBEB96,A7CF28D519BE3DA65F3170153D278FF247EFBA98A71A08116215BBA5C999A7C7;[0142]函数识别符具体为:01[0143]签名主公钥具体为:(9F64080B3084F733E48AFF4B41B565011CE0711C5E392CFB0AB1B6791B94C40829DBA116152D1F786CE843ED24A3B573414D2177386A92DD8F14D65696EA5E32,69850938ABEA0112B57329F447E3A0CBAD3E2FDB1A77F335E89E1408D0EF1C2541E00A53DDA532DA1A7CE027B7A46F741006E85F5CDFF0730E75C05FB4E3216D;[0144]步骤R1、当接收到待签名数据、数字签名和用户标识时,CPU根据预设规则将数字签名截取得到第一数据和第二数据;[0145]本实施例中接收到的待签名数据具体为:4368696E65736520494253207374616E64617264;[0146]数字签名具体为:(823C4B21E4BD2DFE1ED92C606653E996668563152FC33F55D7BFBB9BD9705ADB,0473BF96923CE58B6AD0E13E9643A406D8EB98417C50EF1B29CEF9ADB48B6D598C856712F1C2E0968AB7769F42A99586AED139D5B8B3E15891827CC2ACED9BAA05;[0147]用户标识具体为:416C696365;[0148]具体的,CPU从数字签名中获取前8个字节作为第一数据,将数字签名中的剩余数据作为第二数据;[0149]更为详细的,截取得到的第一数据具体为:823C4B21E4BD2DFE1ED92C606653E996668563152FC33F55D7BFBB9BD9705ADB;[0150]第二数据具体为:73BF96923CE58B6AD0E13E%43A4〇6D8EB98417C50EF1B29CEF9ADB48B6D598C856712F1C2E0968AB7769F42A99586AED139D5B8B3E15891827CC2ACED9BAA05;[0151]步骤R2、CHJ判断第一数据是否满足第一预设条件,是则保存第一数据,执行步骤R3,否则验证失败;[0152]具体的,CPU获取第一数据,判断第一数据不大于第三预设值且不小于第二参数与第三预设值之差,是则执行步骤203,否则验证失败;[0153]更为详细的,第三预设值为1;[0154]步骤R3、CPU将第二数据的数据类型转换为预设椭圆曲线上的点,判断转换后的第二数据是否满足第二预设条件,是则保存第二数据,执行步骤R4,否则验证失败;[0155]步骤R3具体为,CPU获取第二数据,并将第二数据的数据类型转换为预设椭圆曲线上的点,并判断转换后的第二数据是否处于预设群中,是则执行步骤R4,否则验证失败:[0156]更为详细的,将第二数据的数据类型转换为预设椭圆曲线上的点具体包括:[0157]步骤701、PU将第二数据平均拆分为两个字节串;[0158]步骤702、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0159]步骤703、CPU判断第二数据中是否还有未被获取过的字节串,是则返回步骤702,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第二数据;[0160]步骤R4、PU读取第一数据和预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,根据转换后的数据进行双线性对运算,再与第一数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;[0161]步骤R4具体为:CPU读取第一数据和预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,根据转换后的数据进行双线性对运算,以双线性对运算的运算结果为底,第一数据为指数进行运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;[0162]更为详细的,CPU根据转换后的第一参数和签名主公钥进行双线性对运算,运算结果具体为:[0163]4E378FB5561CD0668F906B731AC58FEE25738EDF09CADC7A29C0ABC0177AEA6D,28B3404A61908F5D6198815C99AF1990C8AF38655930058C28C21BB539CE0000,38BFFE40A22D529A0C66124B2C308DAC9229912656F62B4FACFCED408E02380F,A01F2C8BEE81769609462C69C96AA923FD863E209D3CE26DD889B55E2E3873DB,67E0E0C2EED7A6993DCE28FE9AA2EF56834307860839677F96685F2B44D091IF,5A1AE172102EFD95DF7338DBC577C66D8D6C15E0A0158C7507228EFB078F42A6,1604A3FCFA9783E667CE9FCB1062C2A5C6685C316DDA62DE0548BAA6BA30038B,93634F44FA13AF76169F3CC8FBEA880ADAFF8475D5FD28A75DEB83C44362B439,B3129A75D31D17194675A1BC56947920898FBF390A5BF5D931CE6CBB3340F66D,4C744E69C4A2E1C8ED72F796D151A17CE2325B943260FC460B9F73CB57C9014B,84B87422330D7936EABA1109FA5A7A7181EE16F2438B0AEB2F38FD5F[0164]7554E57A,AAB9F06A4EEBA4323A7833DB202E4E35639D93FA3305AF73F0F071D7D284FCFB[0165]CPU读取第一数据,并根据第一寄存器的数据和第一数据进行幂运算,将运算结果的数据类型转换为字节串,转换后的运算结果具体为:[0166]B59486D6F3AE4649ADF387C5A22790E42B98051A339B3403B17B1F2B38259EFE,1632C30AA86001F52EEFED517AA672D70F03AF3EE9197017EDA431436CFBDACE,2F635B5B0243F6F4876A1D9149EAFAB71060EA4352DE6D4A83B5F8F3DF73EFF0,3A27F33E024339B83F16E58AE524A5FAA3E7FD009568A9FF23752BC8DD85B704,08208E26734BC66731AEE530692B3AE277EA70D6BBAF8F485295D067E67B3B4F,1DBDDD78126E962E950CEBB385C3F7A3E0A5597F9C3B9FB3F5DAC3DAA85FD016,189E64A3C0A0D87611A83AEC8F3A3688C0ABF2F64860CF331463ACB3A4AABB04,6E3FA26F762D1A2371601BE00DA702B1A726273CE843D991CE5C2EABAB2EAC6F,A5BCFFD540EE56B5A26CCDA566FD8ABC3615CB7DEA8F240E0BF4615816C2B23E,A074A0AA62A26C283F11543CECDEA5242113FE2E982CCBDA2D495EF6C05550A6,2E3F160C96C160595A1034B5156920668A7BEE5E82E0B8BE06963FDDBDEB5AAE,0DCF9EA28617B5965313B917D556DA0D3A557C4112CE1C4A06B327D7DC18273D;[0167]CPU将第一参数的数据类型转换为预设椭圆曲线上的点具体包括:[0168]步骤401、CPU将第一参数平均拆分为两个字节串;[0169]步骤402、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0170]步骤403、CTU判断第一参数中是否还有未被获取过的字节串,是则返回步骤402,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一参数;[0171]CPU将签名主公钥的数据类型转换为预设椭圆曲线上的点具体包括:[0172]步骤501、CPU将签名主公钥平均拆分为两个字节串;[0173]步骤502、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0174]步骤503、CPU判断签名主公钥中是否还有未被获取过的字节串,是则返回步骤502,否则将所有转换后的数据组合得到的数据类型为预设椭圆曲线的点的签名主公钥;[0175]步骤R4中的将运算结果的数据类型转换成字节串与步骤R2中的将运算结果的数据类型转换成字节串类似,在此不再赘述。[0176]步骤R5、CPU读取用户标识、预存的函数识别符和第二参数,根据用户标识、函数识别符和第二参数进行第二杂凑运算,将运算结果写入第二寄存器;[0177]本实施例中CPU读取用户标识、预存的函数识别符和第二参数,根据用户标识、预设函数识别符和第二参数进行第二杂凑运算,运算结果具体为:2ACC468C3926B0BDB2767E99FF26E084DE9CED8DBC7D5FBF418027B667862FAB;[0178]具体的,CPU读取用户标识、预存的函数识别符和第二参数,并将用户标识和函数识别符顺序拼接,将拼接结果和第二参数作为输入参数调用第二密码函数,将第二密码函数的输出数据写入第二寄存器。[0179]或者,步骤R5具体包括:[0180]步骤D1、CPU初始化计数器,并读取用户标识、预存的函数识别符和第二参数,将用户标识和函数识别符顺序拼接,将拼接接结果写入第二寄存器;[0181]步骤D2、CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将顶函数的输出数据写入第五寄存器;[0182]步骤D3、CPU将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;[0183]步骤D4、CIU更新计数器,判断计数器的值是否等于第五寄存器的数据,是则执行步骤D5,否则返回步骤D3;[0184]步骤D5、CPU判断第四寄存器的数据是否为整数,是则执行D6,否则执行D7;[0185]步骤D6、CPU将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果为所述第六寄存器赋值;[0186]步骤D7、CPU根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;[0187]步骤D8、CPU获取第二参数,根据第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第二寄存器。[0188]步骤R6、CPU读取第二数据和预存的第三参数和签名主公钥,将第一寄存器的数据、第二数据、第三参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,并根据第二寄存器的数据、转换后的第三参数和签名主公钥进行第六预设运算,再与转换后的第二数据进行双线性对运算,再与第一寄存器的数据进行点乘运算,将运算结果的数据类型转换成字节串,并将转换后的运算结果写入第一寄存器;[0189]具体的,根据第二寄存器的数据、转换后的第三参数和签名主公钥进行第六预设运算具体为:将第二寄存器的数据与第三参数倍点运算,再与签名主公钥进行加法运算;[0190]本实施例中,CPU根据第二寄存器的数据、第三参数和签名主公钥进行第六预设运算,运算结果具体为:(511F2C823C7484DDFC16BBC53AAD33B78D2429AFCF7F8AD8B72261B4E1FFCF79,7B234E1D623A172AAA89164AF3E828B4D0E49CE6EC5C7FE92E657272250CBAF6,4831DD313EC39FDA59F3E14FEBCFF7848D11875D805662D26969CF705D46ED70,73B542A69058F4601AC19F237203686368FEC436C13C2B0761F9F9B6E14A36E4[0191]进一步的,点乘运算的运算结果具体为:(81377B8FDBC2839B4FA2D0E0F8AA6853BBBE9E9C4099608F8612C6078ACD7563,[0192]815AEBA217AD502DA0F48704CC73CABB3C06209BD87142E14CBD99E8BCA1680F,[0193]30DADC5CD9E207AEE32209F6C3CA3EC0D800A1A42D33C73153DED47C70A39D2E,[0194]8EAF5D179A1836B359A9D1D9BFC19F2EFCDB829328620962BD3FDF15F2567F58,[0195]A543D25609AE943920679194ED30328BB33FD15660BDE485C6B79A7B32B01398,[0196]3F012DB04BA59FE88DB889321CC2373D4C0C35E84F7AB1FF33679BCA575D6765,[0197]4F8624EB435B838CCA77B2D0347E65D5E46964412A096F4150D8C5EDE5440DDF,[0198]0656FCB663D24731E80292188A2471B8B68AA993899268499D23C89755A1A897,[0199]44643CEAD40F0965F28E1CD2895C3D118E4F65C9A0E3E741B6DD52C0EE2D25F5,[0200]898D60848026B7EFB8FCC1B2442ECF0795F8A81CEE99A6248F294C82C90D26BD,[0201]6A814AAF475F128AEF43A128E37F80154AE6CB92CAD7D1501BAE30F750B3A9BD,[0202]1F96B08E97997363911314705BFB9A9DBB97F75553EC90FBB2DDAE53C8F68E42[0203]更为详细的,CPU将第一寄存器的数据的数据类型转换为预设椭圆曲线上的点具体包括:[0204]步骤601、CPU将第一寄存器的数据平均拆分为两个字节串;[0205]步骤6〇2、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0206]步骤6〇3、CPU判断第一寄存器的数据中是否还有未被获取过的字节串,是则返回步骤6〇2,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一寄存器的数据;[0207]CPU将第二数据的数据类型转换成预设椭圆曲线上的点具体包括:[0208]步骤7〇1、CRJ将第二数据平均拆分为两个字节串;[0209]步骤7〇2、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0210]步骤7〇3、CPU判断所述第二数据中是否还有未被获取过的字节串,是则返回步骤7〇2,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第二数据;[0211]CPU将第三参数的数据类型转换成预设椭圆曲线上的点具体包括:[0212]步骤801、CPU将第三参数平均拆分为两个字节串;[0213]步骤802、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0214]步骤803、CPU判断所述第三参数中是否还有未被获取过的字节串,是则返回步骤802,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第三参数;[0215]步骤R6中将签名主公钥的数据类型转换成预设椭圆曲线上的点与步骤R4中的将签名主公钥的数据类型转换成预设椭圆曲线上的点的过程类似,在此不再赘述。[0216]步骤R7、CPU读取待签名数据和第二参数,根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;[0217]本实施例中根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,运算结果具体为:823C4B21E4BD2DFE1ED92C606653E996668563152FC33F55D7BFBB9BD9705ADB[0218]具体的,步骤R7中根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器,具体为CPU将所述待签名数据和第一寄存器的数据顺序拼接,将拼接结果和所述第二参数作为输入参数调用第一密码函数,将所述第一密码函数的输出数据写入所述第一寄存器。[0219]或者,步骤R7中根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器,具体包括:[0220]步骤E1、CPU初始化计数器,并将所述待签名数据和第一寄存器的数据顺序拼接,将拼接接结果写入第一寄存器;[0221]步骤E2、CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据为第五寄存器赋值;[0222]步骤E3、CPU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果为所述第六寄存器赋值;[0223]步骤E4、CPU更新计数器,判断计数器的值是否等于第五寄存器的数据,是则执行步骤B5,否则返回步骤B3;[0224]步骤E5、CPU判断第四寄存器的数据是否为整数,是则执行E6,否则执行E7;[0225]步骤E6、PU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果为所述第六寄存器赋值;[0226]步骤E7、CPU根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;[0227]步骤E8、CPU获取第二参数,根据第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。[0228]步骤R8、CPU获取第一数据,并判断第一数据和第一寄存器的数据是否相等,是则验证成功,否则验证失败。[0229]实施例3[0230]本实施例提供了一种基于用户标识的数字签名装置,参见图3,包括:[0231]接收模块,用于接收待签名数据;并保存待签名数据;[0232]随机数生成模块,用于生成随机数;并将随机数写入第二寄存器;[0233]第一数据类型转换模块,用于读取预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型转换为预设椭圆曲线上的点;[0234]第一运算模块,用于将第一数据类型转换模块转换后的第一参数和签名主公钥进行双线性对运算,再与随机数生成模块写入第二寄存器的数据进行幂运算;[0235]具体的,第一运算模块,用于将第一数据类型转换模块转换后的第一参数和签名主公钥进行双线性对运算,再以双线性对运算的运算结果为底,第二寄存器的数据为指数进行运算。[0236]第二数据类型转换模块,用于将第一运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;[0237]杂凑运算模块,用于获取接收模块保存的待签名数据和预存的第二参数,并根据待签名数据、所述第二数据类型转换模块写入第一寄存器的数据和第二参数进行第一杂凑运算,并将运算结果写入第一寄存器;[0238]可选的,杂凑运算模块,具体用于获取接收模块保存的待签名数据和预存的第二参数,并将待签名数据和第一寄存器的数据顺序拼接,将拼接结果和第二参数作为输入参数调用第一密码函数,将第一密码函数的输出数据写入第一寄存器。[0239]或者,杂凑运算模块,具体包括:[0240]初始化子模块,用于初始化计数器;[0241]拼接子模块,用于获取待签名数据和第二参数,并将待签名数据和第一寄存器的数据顺序拼接,将拼接接结果写入第一寄存器;[0242]第一运算子模块,用于将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据写入第五寄存器;[0243]第二运算子模块,用于将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;还用于当第一判断子模块判定所述计数器的值不等于第一运算子模块写入第五寄存器的数据时,将第一预设值、所述拼接子模块写入第一寄存器的数据和第一判断子模块更新后的计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;[0244]第一判断子模块,用于更新计数器,并判断所述计数器的值是否等于第一运算子模块写入第五寄存器的数据;[0245]第二判断子模块,用于当所述第一判断子模块判定所述计数器的值等于第一运算模块写入第五寄存器的数据时,判断所述第一运算子模块写入第四寄存器的数据是否为整数;[0246]第三运算子模块,用于当所述第二判断模块判定所述第一运算子模块写入第四寄存器的数据为整数时,将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;[0247]第四运算子模块,用于当第二判断模块判定第一运算子模块写入第四寄存器的数据不为整数时,根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;[0248]第五运算子模块,用于获取第二参数,根据第三运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器;还用于获取第二参数,根据第四运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。[0249]第二运算模块,用于读取第二参数、并根据所述杂凑运算模块写入第一寄存器的数据、所述随机数生成模块写入第二寄存器的数据和所述第二参数进行第一预设运算,将运算结果写入所述第二寄存器;[0250]具体的,第二运算模块,用于读取第二参数,计算第二寄存器的数据和第一寄存器的数据之差,将计算结果与第二参数进行模运算,将运算结果写入第二寄存器。[0251]第三数据类型转换模块,用于读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设椭圆曲线上的点;[0252]第三运算模块,用于根据所述第二运算模块写入第二寄存器的数据和第三数据类型转换模块转换后的签名私钥进行第二预设运算;[0253]具体的,第三运算模块具体用于根据第二运算模块写入第二寄存器的数据和第三数据类型转换模块转换后的签名私钥进行倍点运算。[0254]第二数据类型转换模块,还用于将第三运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第二寄存器;[0255]输出模块,用于将所述杂凑运算模块写入第一寄存器的数据和第二数据类型转换模块写入第二寄存器的数据作为数字签名输出。[0256]具体的,输出模块,用于将杂凑运算模块写入第一寄存器的数据、预设分隔符和第二数据类型转换模块写入第二寄存器的数据顺序拼接,输出拼接结果。[0257]优选的,该装置还包括:判断模块,用于判断第二运算模块写入第二寄存器的数据是否等于预设值;[0258]本实施例中,预设值为0;[0259]相应的,第三数据类型转换模块,用于当判断模块判定第二运算模块写入第二寄存器的数据不等于预设值时,读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设椭圆曲线上的点;[0260]本实施例中,预设值为0;[0261]随机数生成模块,具体用于当判断模块判定第二运算模块写入第二寄存器的数据等于预设值时生成随机数,并将随机数写入第二寄存器。[0262]优选的,该装置还包括:获取模块,用于从密码管理系统获取签名主公钥、第一参数、第二参数和与用户标识相关联的签名私钥,并保存获取到的签名主公钥、签名私钥、第一参数和第二参数。[0263]具体的,第二数据类型转换模块具体包括:[0264]第六运算子模块,用于将获取第二参数,根据运算结果的长度和第二参数计算得到第三数据[0265]第一转换子模块,用于从运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第三判断子模块判定所述运算结果的横坐标中还有未被获取过的分量时从所述运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;[0266]第三判断子模块,用于判断运算结果的横坐标中是否还有未被获取过的分量;[0267]第二转换子模块,用于当第三判断子模块判定运算结果中没有未被获取过的分量时从运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第四判断子模块判定所述运算结果的纵坐标中还有未被获取过的分量时,从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;[0268]第四判断子模块,用于判断运算结果的纵坐标中是否还有未被获取过的分量;当判定运算结果的纵坐标中没有未被获取过的分量时数据类型转换成功。[0269]具体的,第一数据类型转换模块包括:第三转换子模块和第四转换子模块;[0270]第三转换子模块具体包括:[0271]第一拆分单元,用于将第一参数平均拆分为两个字节串;[0272]第一转换单元,用于依次获取第一拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第一判断单元判定还有未被获取过的字节串时,依次获取第一拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0273]第一判断单元,用于判断第一拆分单元拆分得到的字节串中是否还有未被获取过的字节串;[0274]_第一组合单元,用于当第一判断单元判定没有未被获取过的字节串时将所述第一转换单元转换后的数据组合得到数据类型为预设椭圆曲线的点的第一参数;[0275]第四转换子模块具体包括:[0276]第二拆分单元,用于将签名主公钥平均拆分为两个字节串;[0277]第二转换单元,用于依次获取所述第二拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第二判断单元判定还有未被获取过的字节串时,依次获取第二拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0278]第二判断单元,用于第二拆分单元拆分得到的字节串中判断是否还有未被获取过的字节串;[0279]第二组合单元,用于当第二判断单元判定没有未被获取过的字节串时将所述第二转换单元转换后的数据组合得到数据类型为预设椭圆曲线的点的签名主公钥;[0280]第三数据类型转换模块具体包括:[0281]第三拆分单元,用于将签名私钥平均拆分为两个字节串;[0282]第三转换单元,用于依次获取第三拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第三判断单元判定还有未被获取过的字节串时,依次获取第三拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0283]第三判断单元,用于判断第三拆分单元拆分得到的字节串中是否还有未被获取过的字节串;[0284]第三组合单元,用于当第三判断单元判定没有未被获取过的字节串时将第三转换单元转换后的数据组合得到数据类型为预设椭圆曲线的点的签名私钥。[0285]实施例4[0286]本实施例提供一种基于用户标识的验证装置,如图4所示,包括:[0287]接收模块,用于接收待签名数据、数字签名和用户标识,并根据预设规则将所述数字签名截取得到第一数据和第二数据,保存第一数据、第二数据、所述待签名数据和用户标识;[0288]可选的,接收模块,具体包括:[0289]截取子模块,用于接收待签名数据、数字签名和用户标识,并根据预设规则将所述数字签名截取得到第一数据和第二数据;[0290]判断子模块,用于判断所述截取子模块截取到的所述第一数据是否满足第一预设条件;[0291]写入子模块,用于当所述判断子模块判定所述第一数据满足第一预设条件时保存所述第一数据、第二数据、所述待签名数据和所述用户标识;[0292]报错子模块,用于当所述判断子模块判定所述第一数据不满足第一预设条件时报错,验证失败。[0293]或者,接收模块具体包括:[0294]截取子模块,用于接收待签名数据、数字签名和用户标识,并根据预设规则将所述数字签名截取得到第一数据和第二数据;[0295]判断子模块,用于将所述截取子模块截取到的第二数据将第一数据的数据类型转换为预设椭圆曲线上的点,并判断所述转换后的第二数据是否满足第二预设条件;[0296]写入子模块,用于当所述判断子模块判定所述第二数据满足第二预设条件时保存所述第一数据、第二数据、所述待签名数据和所述用户标识;[0297]报错子模块,用于当所述判断子模块判定所述第二数据不满足第二预设条件时报错,验证失败。[0298]第一数据类型转换模块,用于读取第一数据和预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型分别均转换为预设椭圆曲线上的点;[0299]第一运算模块,用于根据第一数据类型转换模块转换后的数据进行双线性对运算,再与第一数据进行幕运算;[0300]具体的,第一运算模块,用于根据第一数据类型转换模块转换后的数据进行双线性对运算,以双线性对运算的运算结果为底,第一数据为指数进行运算。[0301]第二数据类型转换模块,用于将第一运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;[0302]第二杂凑运算模块,用于读取用户标识、预存的函数识别符和第二参数,根据用户标识、函数识别符和第二参数进行第二杂凑运算,将运算结果写入第二寄存器;[0303]可选的,第二杂凑运算模块,具体用于读取用户标识、预存的函数识别符和第二参数,并将用户标识和所述函数识别符顺序拼接,将拼接结果和所述第二参数作为输入参数调用第二密码函数,将第二密码函数的输出数据写入第二寄存器。[0304]或者,第二杂凑运算模块,具体包括:[0305]初始化子模块,用于初始化计数器;[0306]拼接子模块,用于读取所述用户标识、预存的函数识别符和第二参数,将所述用户标识和所述函数识别符顺序拼接,将拼接接结果写入第二寄存器;[0307]第一运算子模块,用于将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据写入第五寄存器;[0308]第二运算子模块,用于将第二预设值、所述拼接子模块写入第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;还用于当第一判断子模块判定所述计数器的值不等于第一运算子模块写入第五寄存器的数据时,将第二预设值、所述拼接子模块写入第二寄存器的数据和第一判断子模块更新后的计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;[0309]第一判断子模块,用于更新计数器,并判断所述计数器的值是否等于第一运算子模块写入第五寄存器的数据;[0310]第二判断子模块,用于当所述第一判断子模块判定所述计数器的值等于第一运算模块写入第五寄存器的数据时,判断所述第一运算子模块写入第四寄存器的数据是否为整数;[0311]第三运算子模块,用于当所述第二判断模块判定所述第一运算子模块写入第四寄存器的数据为整数时,将第二预设值、所述拼接子模块写入第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;[0312]第四运算子模块,用于根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;[0313]第五运算子模块,用于获取第二参数,根据第三运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第二寄存器;还用于获取第二参数,根据第四运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第二寄存器。[0314]第三数据类型转换模块,用于读取第二数据和预存的第三参数和签名主公钥,将第二数据类型转换后的第一寄存器的数据、第二数据、第三参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点;[0315]第二运算模块,用于根据第二寄存器的数据、第三数据类型模块转换后的第三参数和签名主公钥进行第六预设运算,再与第三数据类型转换模块转换后的第二数据进行双线性对运算,再与第三数据类型转换模块转换后的第一寄存器的数据进行点乘运算;[0316]具体的,第二运算模块,用于根据第二寄存器的数据与第三数据类型模块转换后的第三参数进行倍点运算,再与转换后的签名主公钥进行加法运算,将加法运算结果与第三数据类型转换模块转换后的第二数据进行双线性对运算,再与第三数据类型转换模块转换后的第一寄存器的数据进行点乘运算。[0317]第四数据类型转换模块,用于第二运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;[0318]第一杂凑运算模块,用于读取待签名数据和第二参数,根据待签名数据、第四数据类型转换模块转换后的第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;[0319]可选的,第一杂凑运算模块,具体用于将待签名数据和第一寄存器的数据顺序拼接,将拼接结果和所述第二参数作为输入参数调用第一密码函数,将第一密码函数的输出数据写入第一寄存器。[0320]或者,第一杂凑运算模块具体包括:[0321]初始化子模块,用于初始化计数器;[0322]拼接子模块,用于读取所述用户标识、预存的函数识别符和第二参数,将所述用户标识和所述函数识别符顺序拼接,将拼接接结果写入第一寄存器;[0323]第一运算子模块,用于将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将顶函数的输出数据写入第五寄存器;[0324]第二运算子模块,用于将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;还用于当第一判断子模块判定所述计数器的值不等于第一运算子模块写入第五寄存器的数据时,将第一预设值、所述拼接子模块写入第一寄存器的数据和第一判断子模块更新后的计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入第六寄存器;[0325]第一判断子模块,用于更新计数器,并判断所述计数器的值是否等于第一运算子模块写入第五寄存器的数据;[0326]第二判断子模块,用于当所述第一判断子模块判定所述计数器的值等于第一运算模块写入第五寄存器的数据时,判断所述第一运算子模块写入第四寄存器的数据是否为整数;[0327]第三运算子模块,用于当所述第二判断模块判定所述第一运算子模块写入第四寄存器的数据为整数时,将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入第六寄存器;[0328]第四运算子模块,用于根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;[0329]第五运算子模块,用于获取第二参数,根据第三运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第二寄存器;还用于获取第二参数,根据第四运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。[0330]验证模块,用于获取第一数据,并判断第一数据和第一杂凑运算模块写入第一寄存器的数据是否相等,当第一数据和第一杂凑运算模块写入第一寄存器的数据相等时验证成功,当第一数据和第一杂凑运算模块写入第一寄存器的数据不相等时验证失败。[0331]具体的,第一数据类型转换模块包括:第一参数数据类型转换子模块和第一签名主公钥数据类型转换子模块;[0332]第一参数数据类型转换子模块具体包括:[0333]第一获取单元,用于读取第一参数,将第一参数平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第一判断单元中判定第一参数中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0334]第一判断单元,用于判断所述第一参数中是否还有未被获取过的字节串;[0335]第一组合单元,用于当所述第一判断单元判定第一参数中没有未被获取过的字节串时将所述第一获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一参数;[0336]第一签名主公钥数据类型转换子模块具体包括:[0337]第二获取单元,用于读取签名主公钥,将签名主公钥平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第二判断单元判定签名主公钥中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0338]第二判断单元,用于判断所述签名主公钥中是否还有未被获取过的字节串;[0339]第二组合单元,用于当所述第二判断单元判定签名主公钥中没有未被获取过的字节串时将所述第二获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的签名主公钥;[0340]所述第三数据转换模块具体包括:第一寄存器的数据数据类型转换子模块、第二数据数据类型转换子模块、第三参数数据类型转换子模块和第二签名主公钥数据类型转换子模块;[0341]第一寄存器的数据数据类型转换子模块具体包括:[0342]第三获取单元,用于将第一寄存器的数据平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第三判断单元判定第一寄存器的数据中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0343]第三判断单元,用于判断所述第一寄存器的数据中是否还有未被获取过的字节串;[0344]第三组合单元,用于当所述第三判断单元判定第一寄存器的数据中没有未被获取过的字节串时将所述第三获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一寄存器的数据;[0345]第二数据数据类型转换子模块具体包括:[0346]第四获取单元,用于将第二数据平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第四判断单元判定第二数据中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0347]第四判断单元,用于判断第二数据中是否还有未被获取过的字节串;[0348]第四组合单元,用于当第四判断单元判定第二数据中没有未被获取过的字节串时将所述第四获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第二数据;[0349]第三参数数据类型转换子模块具体包括:[0350]第五获取单元,用于将第三参数平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第五判断单元判定第三参数中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0351]第五判断单元,用于判断所述第三参数中是否还有未被获取过的字节串;[0352]第五组合单元,用于当所述第五判断单元判定第三参数中没有未被获取过的字节串时将所述第五获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第三参数;[0353]第二签名主公钥数据类型转换子模块具体包括:[0354]第六获取单元,用于将签名主公钥平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第六判断单元中判定签名主公钥中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;[0355]第六判断单元,用于判断所述签名主公钥中是否还有未被获取过的字节串;[0356]第六组合单元,用于当所述第六判断单元判定签名主公钥中没有未被获取过的字节串时将所述第六获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的签名主公钥。[°357]具体的,第二数据类型转换模块包括:[0358]第一计算子模块,用于获取第二参数,根据所述第一运算模块的运算结果的长度和第二参数计算得到第三数据;[0359]第一拼接子模块,用于从所述第一运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第一判断子模块中判定所述第一运算模块的运算结果的横坐标中还有未被获取到的分量时从所述第一运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;[0360]第一判断子模块,用于判断所述第一运算模块的运算结果的横坐标中是否还有未被获取到的分量;[0361]第二拼接子模块,用于当第一判断子模块中判定所述第一运算模块的运算结果的横坐标中没有未被获取到的分量时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第二判断子模块判定所述第一运算模块的运算结果纵坐标中还有未被获取到的分粮时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;[0362]第二判断子模块,用于判断所述第一运算模块的运算结果纵坐标中是否还有未被获取到的分量;并当判定所述第一运算模块的运算结果纵坐标中没有未被获取到的分量时转换结束;[0363]第四数据类型转换模块具体包括:[0364]第二计算子模块,用于获取第二参数,根据所述第二运算模块的运算结果的长度和第二参数计算得到第三数据;[0365]第三拼接子模块,用于从所述第二运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第三判断子模块中判定所述第二运算模块的运算结果的横坐标中还有未被获取到的分量时从所述第二运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;[0366]第三判断子模块,用于判断所述第二运算模块的运算结果的横坐标中是否还有未被获取到的分量;[0367]第四拼接子模块,用于当第三判断子模块中判定所述第二运算模块的运算结果的横坐标中没有未被获取到的分量时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第四判断子模块判定所述第二运算模块的运算结果纵坐标中还有未被获取到的分粮时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;[0368]第四判断子模块,用于判断所述第二运算模块的运算结果纵坐标中是否还有未被获取到的分量;并当判定所述第二运算模块的运算结果纵坐标中没有未被获取到的分量时转换结束。[0369]以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

权利要求:1.一种基于用户标识的数字签名方法,其特征在于,包括:步骤S1、当接收到待签名数据时,CPU保存所述待签名数据;步骤S2、所述CRJ通过随机数生成器生成随机数,将所述随机数写入第二寄存器;步骤S3、所述CPU读取预存的第一参数和签名主公钥,将所述第一参数和所述签名主公钥的数据类型均转换为预设预设椭圆曲线上的点,根据转换后的第一参数和签名主公钥进行双线性对运算,再与所述第二寄存器的数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;步骤S4、所述CPU获取所述待签名数据和预存的第二参数,并根据所述待签名数据、所述第一寄存器的数据和所述第二参数进行第一杂凑运算,将运算结果写入所述第一寄存器;步骤S5、所述CPU读取第二参数、并根据所述第一寄存器的数据、所述第二寄存器的数据和所述第二参数进行第一预设运算,将运算结果写入所述第二寄存器;步骤S6、所述CPU读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设预设椭圆曲线上的点,并根据所述第二寄存器的数据和转换后的签名私钥进行第二预设运算,再将运算结果的数据类型转换为字节串,将转换后的运算结果写入所述第二寄存益;步骤S7、所述将所述第一寄存器的数据和所述第二寄存器的数据作为数字签名输出。2.如权利要求1所述的方法,其特征在于,所述根据转换后的第一参数和签名主公钥进行双线性对运算,再与第二寄存器的数据进行幂运算具体为:所述CPU根据转换后的第一参数和签名主公钥进行双线性对运算,再以所述双线性对运算的运算结果为底,所述第二寄存器的数据为指数进行运算。3.如权利要求1所述的方法,其特征在于,所述步骤S4具体为:所述CPU获取所述待签名数据和预存的第二参数,并将所述待签名数据和所述第一寄存器的数据顺序拼接,将拼接结果和所述第二参数作为输入参数调用第一密码函数,将所述第一密码函数的输出数据写入所述第一寄存器。4.如权利要求1所述的方法,其特征在于,所述S4具体为:步骤Bl、CPU初始化计数器,并获取待签名数据和第二参数,并将所述待签名数据和第一寄存器的数据顺序拼接,将拼接接结果写入所述第一寄存器;步骤B2、所述CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据写入第五寄存器;步骤B3、所述CTU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;步骤B4、所述CPU更新计数器,判断计数器的值是否等于第五寄存器的数据,是则执行步骤B5,否则返回步骤B3;步骤B5、所述CPU判断第四寄存器的数据是否为整数,是则执行B6,否则执行B7;步骤B6、所述CHJ将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器,执行步骤B8;步骤B7、CPU根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;步骤B8、CPU获取第二参数,根据第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。5.如权利要求1所述的方法,其特征在于,所述步骤S5具体为:所述CPU读取第二参数,计算所述第二寄存器的数据和所述第一寄存器的数据之差,将计算结果与所述第二参数进行模运算,将运算结果写入所述第二寄存器。6.如权利要求1所述的方法,其特征在于,所述步骤S5之后还包括:所述CPU判断所述第二寄存器的数据是否等于预设值,是则重新调用随机数生成器生成随机数,将随机数写入所述第二寄存器,返回步骤S3,否则继续执行步骤S6。7.如权利要求1所述的方法,其特征在于,所述步骤S1之前还包括:所述CPU从密码管理系统获取签名主公钥、第一参数、第二参数和与用户标识相关联的签名私钥,并保存获取到的所述签名主公钥、签名私钥、所述第一参数和所述第二参数。8.如权利要求1所述的方法,其特征在于,所述步骤S6具体为:所述CPU读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设预设椭圆曲线上的点,根据第二寄存器的数据和转换后的签名私钥进行倍点运算,将运算结果的数据类型转换为字节串,将转换后的运算结果写入所述第二寄存器。9.如权利要求1所述的方法,其特征在于,所述步骤S7具体为:所述CPU将所述第一寄存器的数据的数据、预设分隔符和所述第二寄存器的数据顺序拼接,输出拼接结果。10.如权利要求1所述的方法,其特征在于,所述将运算结果的数据类型转换为字节串具体包括:步骤A1、CPU获取第二参数,根据运算结果的长度和所述第二参数计算得到第三数据;步骤A2、CHJ从所述运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;步骤A:3、CPU判断所述运算结果中是否还有未被获取到的分量,是则返回步骤A2,否则执行步骤A4;步骤A4、CPU从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;步骤A5、CPU判断所述运算结果中是否还有未被获取到的分量,是则返回步骤A4,否则结束。11.如权利要求1所述的方法,其特征在于,所述将第一参数的数据类型转换为预设预设椭圆曲线上的点具体包括:步骤101、所述CPU将第一参数平均拆分为两个字节串;步骤102、所述CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;步骤103、所述CPU判断所述第一参数中是否还有未被获取过的字节串,是则返回步骤102,否则将所有转换后的数据组合得到数据类型为预设预设椭圆曲线的点的第一参数;所述将签名主公钥的数据类型转换为预设预设椭圆曲线上的点具体包括:步骤201、所述CPU将签名主公钥平均拆分为两个字节串;步骤202、所述CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;步骤203、所述CPU判断所述签名主公钥中是否还有未被获取过的字节串,是则返回步骤202,否则将所有转换后的数据组合得到数据类型为预设预设椭圆曲线的点的签名主公钥;将签名私钥的数据类型转换为预设预设椭圆曲线上的点具体包括:步骤301、所述CPU将签名私钥平均拆分为预设数量的字节串;步骤302、所述依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;步骤303、所述判断所述第二数据中是否还有未被获取过的字节串,是则返回步骤302,否则将所有转换后的数据组合得到数据类型为预设预设椭圆曲线的点的签名私钥。12.—种基于用户标识的验签方法,其特征在于,包括:步骤R1、当接收到待签名数据、数字签名和用户标识时,CPU根据预设规则将所述数字签名截取得到第一数据和第二数据,并保存所述第一数据、第二数据、所述待签名数据和所述用户标识;步骤R2、所述CPU读取第一数据和预存的第一参数和签名主公钥,将所述第一参数和所述签名主公钥的数据类型转换为预设预设椭圆曲线上的点,根据转换后的数据进行双线性对运算,再与所述第一数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;步骤R3、所述CPU读取所述用户标识、预存的函数识别符和第二参数,根据所述用户标识、所述函数识别符和所述第二参数进行第二杂凑运算,将运算结果写入第二寄存器;步骤R4、所述CPU读取第二数据和预存的第三参数和签名主公钥,将第一寄存器的数据、第二数据、第三参数和签名主公钥的数据类型均转换为预设预设椭圆曲线上的点,并根据第二寄存器的数据、转换后的第三参数和签名主公钥进行第六预设运算,再与转换后的第二数据进行双线性对运算,再与第一寄存器的数据进行点乘运算,将运算结果的数据类型转换成字节串,并将转换后的运算结果写入第一寄存器;步骤R5、所述CPU读取待签名数据和第二参数,根据所述待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;步骤R6、所述CPU获取第一数据,并判断第一数据和第一寄存器的数据是否相等,是则验证成功,否则验证失败。13.如权利要求12所述的方法,其特征在于,所述根据转换后的数据进行双线性对运算,再与第一数据进行幂运算具体为:所述根据转换后的数据进行双线性对运算,以双线性对运算的运算结果为底,第一数据为指数进行运算。14.如权利要求12所述的方法,其特征在于,所述步骤R3具体为:所述CHJ读取所述用户标识、预存的函数识别符和第二参数,并将所述用户标识和所述函数识别符顺序拼接,将拼接结果和所述第二参数作为输入参数调用第二密码函数,将所述第二密码函数的输出数据写入所述第二寄存器。15.如权利要求12所述的方法,其特征在于,所述R3具体为:步骤D1、所述CPU初始化计数器,并读取所述用户标识、预存的函数识别符和第二参数,将所述用户标识和所述函数识别符顺序拼接,将拼接接结果写入所述第二寄存器;步骤D2、所述CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据写入第五寄存器;步骤D3、所述CPU将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;步骤D4、所述CPU更新计数器,判断计数器的值是否等于第五寄存器的数据,是则执行步骤D5,否则返回步骤D3;步骤D5、所述CPU判断第四寄存器的数据是否为整数,是则执行D6,否则执行D7;步骤D6、所述CPU将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果为所述第六寄存器赋值;步骤D7、所述CPU根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;步骤D8、所述CPU获取第二参数,根据第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第二寄存器。16.如权利要求12所述的方法,其特征在于,所述根据第二寄存器的数据、转换后的第三参数和签名主公钥进行第六预设运算具体为:将第二寄存器的数据与转换后的第三参数进行倍点运算,再与转换后的签名主公钥进行加法运算。17.如权利要求12所述的方法,其特征在于,所述保存所述第一数据、第二数据、所述待签名数据和所述用户标识之前还包括:所述CPU判断所述第一数据是否满足第一预设条件,是则保存所述第一数据、第二数据、所述待签名数据和所述用户标识,否则验证失败。18.如权利要求12所述的方法,其特征在于,所述保存所述第一数据、第二数据、所述待签名数据和所述用户标识之前还包括:所述CPU将第二数据的数据类型转换为预设预设椭圆曲线上的点,并判断所述转换后的第二数据是否满足第二预设条件,是则继续执行保存所述第一数据、第二数据、所述待签名数据和所述用户标识,否则验证失败。19.如权利要求12所述的方法,其特征在于,所述将第一参数的数据类型转换为预设预设椭圆曲线上的点具体包括:步骤401、所述CPU将第一参数平均拆分为两个字节串;步骤402、所述CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;步骤403、所述CPU判断所述第一参数中是否还有未被获取过的字节串,是则返回步骤402,否则将所有转换后的数据组合得到数据类型为预设预设橢圆曲线的点的第一参数;所述将签名主公钥的数据类型转换为预设预设椭圆曲线上的点具体包括:步骤501、所述CPU将签名主公钥平均拆分为两个字节串;步骤502、所述CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;步骤503、所述CRJ判断所述签名主公钥中是否还有未被获取过的字节串,是则返回步骤502,否则将所有转换后的数据组合得到数据类型为预设预设椭圆曲线的点的签名主公钥;所述将第一寄存器的数据类型分别均转换为预设预设椭圆曲线上的点具体包括:步骤601、所述CPU将第一寄存器的数据平均拆分为两个字节串;步骤602、所述CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;步骤603、所述CHJ判断所述第一寄存器的数据中是否还有未被获取过的字节串,是则返回步骤602,否则将所有转换后的数据组合得到数据类型为预设预设椭圆曲线的点的第一寄存器的数据;所述将第二数据的数据类型分别均转换为预设预设椭圆曲线上的点具体包括:步骤701、所述CPU将第二数据平均拆分为两个字节串;步骤702、所述CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;步骤703、所述CPU判断所述第二数据中是否还有未被获取过的字节串,是则返回步骤702,否则将所有转换后的数据组合得到数据类型为预设预设椭圆曲线的点的第二数据;将第三参数的数据类型分别均转换为预设预设椭圆曲线上的点具体包括:步骤801、所述CPU将第三参数平均拆分为两个字节串;步骤802、所述CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;步骤803、所述CPU判断所述第三参数中是否还有未被获取过的字节串,是则返回步骤802,否则将所有转换后的数据组合得到数据类型为预设预设椭圆曲线的点的第三参数。20.如权利要求12所述的方法,其特征在于,所述根据所述待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器具体为:所述CPU将所述待签名数据和第一寄存器的数据顺序拼接,将拼接结果和所述第二参数作为输入参数调用第一密码函数,将所述第一密码函数的输出数据写入所述第一寄存器。21.如权利要求12所述的方法,其特征在于,所述根据所述待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器具体为:步骤E1、所述CPU初始化计数器,并将所述待签名数据和第一寄存器的数据顺序拼接,将拼接接结果写入所述第一寄存器;步骤E2、所述CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据为第五寄存器赋值;步骤E3、所述CPU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果为所述第六寄存器赋值;步骤E4、所述CPU更新计数器,判断计数器的值是否等于第五寄存器的数据,是则执行步骤E5,否则返回步骤E3;步骤E5、所述CPU判断第四寄存器的数据是否为整数,是则执行E6,否则执行E7;步骤E6、所述CPU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果为所述第六寄存器赋值;步骤E7、所述CPU根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;步骤E8、所述CTU获取第二参数,根据第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。22.如权利要求12所述的方法,其特征在于,所述将运算结果的数据类型转换为字节串具体包括:步骤901、所述CPU获取第二参数,根据运算结果的长度和第二参数计算得到第三数据;步骤902、所述CPU从所述运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;步骤903、所述CPU判断所述运算结果的横坐标中是否还有未被获取到的分量,是则返回步骤902,否则执行步骤904;步骤904、所述CPU从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;步骤905、所述CPU判断所述运算结果的纵坐标中是否还有未被获取到的分量,是则返回步骤904,否则结束。23.—种基于用户标识的数字签名装置,其特征在于,包括:接收模块,用于接收待签名数据;并保存所述待签名数据;随机数生成模块,用于生成随机数;并将所述随机数写入第二寄存器;第一数据类型转换模块,用于读取预存的第一参数和签名主公钥,将所述第一参数和所述签名主公钥的数据类型转换为预设预设椭圆曲线上的点;第一运算模块,用于将所述第一数据类型转换模块转换后的所述第一参数和所述签名主公钥进行双线性对运算,再与所述随机数生成模块写入第二寄存器的数据进行幂运算;第二数据类型转换模块,用于将所述第一运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;杂凑运算模块,用于获取所述接收模块保存的待签名数据和预存的第二参数,并根据所述待签名数据、所述第二数据类型转换模块写入第一寄存器的数据和所述第二参数进行第一杂凑运算,并将运算结果写入第一寄存器;第二运算模块,用于读取第二参数、并根据所述杂凑运算模块写入第一寄存器的数据、所述随机数生成模块写入第二寄存器的数据和所述第二参数进行第一预设运算,将运算结果写入所述第二寄存器;第三数据类型转换模块,用于读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设预设椭圆曲线上的点;第三运算模块,用于根据所述第二运算模块写入第二寄存器的数据和第三数据类型转换模块转换后的签名私钥进行第二预设运算;所述第二数据类型转换模块,还用于将第三运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第二寄存器;输出模块,用于将所述杂凑运算模块写入第一寄存器的数据和第二数据类型转换模块写入第二寄存器的数据作为数字签名输出。24.如权利要求23所述的装置,其特征在于,所述第一运算模块,具体用于将所述第一数据类型转换模块转换后的所述第一参数和所述签名主公钥进行双线性对运算,再以所述双线性对运算的运算结果为底,所述第二寄存器的数据为指数进行运算。25.如权利要求23所述的装置,其特征在于,所述杂凑运算模块,具体用于获取所述接收模块保存的待签名数据和预存的第二参数,并将所述待签名数据和所述第一寄存器的数据顺序拼接,将拼接结果和所述第二参数作为输入参数调用第一密码函数,将所述第一密码函数的输出数据写入所述第一寄存器。26.如权利要求23所述的装置,其特征在于,所述杂凑运算模块,具体包括:初始化子模块,用于初始化计数器;拼接子模块,用于获取待签名数据和第二参数,并将所述待签名数据和第一寄存器的数据顺序拼接,将拼接接结果写入所述第一寄存器;第一运算子模块,用于将所述第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据写入第五寄存器;第二运算子模块,用于将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;还用于,当第一判断子模块判定所述计数器的值不等于第一运算子模块写入第五寄存器的数据时,将第一预设值、所述拼接子模块写入第一寄存器的数据和第一判断子模块更新后的计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;第一判断子模块,用于更新计数器,并判断所述计数器的值是否等于第一运算子模块写入第五寄存器的数据;第二判断子模块,用于当所述第一判断子模块判定所述计数器的值等于第一运算模块写入第五寄存器的数据时,判断所述第一运算子模块写入第四寄存器的数据是否为整数;第三运算子模块,用于当所述第二判断模块判定所述第一运算子模块写入第四寄存器的数据为整数时,将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;第四运算子模块,用于当所述第二判断模块判定所述第一运算子模块写入第四寄存器的数据不为整数时,根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;第五运算子模块,用于获取第二参数,根据第三运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器;还用于获取第二参数,根据第四运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。27.如权利要求23所述的装置,其特征在于,所述第二运算模块,具体用于读取第二参数,计算所述第二寄存器的数据和所述第一寄存器的数据之差,将计算结果与所述第二参数进行模运算,将运算结果写入所述第二寄存器。_28.如权利要求23所述的装置,其特征在于,还包括:判断模块,用于判断所述第二运算模块写入第二寄存器的数据是否等于预设值;所述第三数据类型转换模块,具体用于当所述判断模块判定所述第二运算模块写入第二寄存器的数据不等于预设值时,读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设预设椭圆曲线上的点;_所述随机数生成模块,还用于当所述判断模块判定所述第二运算模块写入第二寄存器的数据等于预设值时,生成随机数;并将所述随机数写入所述第二寄存器。29.如权利要求23所述的装置,其特征在于,还包括:获取模块,用于从密码管理系统获取签名主公钥、第一参数、第二参数和与用户标识相关联的签名私钥,并保存获取到的所述签名主公钥、所述签名私钥、所述第一参数和所述第二参数:一30.如权利要求23所述的装置,其特征在于,所述第三运算模块具体用于根据所述第〒运算模块写入第二寄存器的数据和第三数据类型转换模块转换后的签名私钥进行倍点运算。、、31.如权利要求23所述的装置,其特征在于,所述输出模块,具体用于将所述将所述杂凑运算模块写入第一寄存器的数据、预设分隔符和所述第二数据类型转换模块写入第二寄存器的数据顺序拼接,输出拼接结果。32.如权利要求23所述的装置,其特征在于,所述第二数据类型转换模块具体包括:第六运算子模块,用于将获取第二参数,根据运算结果的长度和所述第二参数计算得到第三数据第一转换子模块,用于从所述运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入所述第一寄存器;还用于当第三判断子模块判定所述运算结果的横坐标中还有未被获取过的分量时从所述运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;所述第三判断子模块,用于判断所述运算结果的横坐标中是否还有未被获取过的分量;第二转换子模块,用于当所述运算结果中没有未被获取过的分量时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与所述第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第四判断子模块判定所述运算结果的纵坐标中还有未被获取过的分量时,从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;所述第四判断子模块,用于判断所述运算结果的纵坐标中是否还有未被获取过的分量;当判定所述运算结果的纵坐标中没有未被获取过的分量时数据类型转换成功。33.如权利要求23所述的装置,其特征在于,所述第一数据类型转换模块具体包括:第三转换子模块和第四转换子模块;所述第三转换子模块具体包括:第一拆分单元,用于将第一参数平均拆分为两个字节串;第一转换单元,用于依次获取所述第一拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第一判断单元判定还有未被获取过的字节串时,依次获取所述第一拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;所述第一判断单元,用于判断所述第一拆分单元拆分得到的字节串中是否还有未被获取过的字节串;第一组合单元,用于当所述第一判断单元判定没有未被获取过的字节串时将所述第一转换单元转换后的数据组合得到数据类型为预设预设椭圆曲线的点的第一参数;所述第四转换子模块具体包括:第二拆分单元,用于将签名主公钥平均拆分为两个字节串;第二转换单元,用于依次获取所述第二拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第二判断单元判定还有未被获取过的字节串时,依次获取所述第二拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;所述第二判断单元,用于判断所述第二拆分单元拆分得到的字节串中是否还有未被获取过的字节串;第二组合单元,用于当所述第二判断单元判定没有未被获取过的字节串时将所述第二转换单元转换后的数据组合得到数据类型为预设预设椭圆曲线的点的签名主公钥;所述第三数据类型转换模块具体包括:第三拆分单元,用于将签名私钥平均拆分为两个字节串;第三转换单元,用于依次获取所述第三拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第三判断单元判定还有未被获取过的字节串时,依次获取所述第三拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;所述第三判断单元,用于判断所述第三拆分单元拆分得到的字节串中是否还有未被获取过的字节串;第三组合单元,用于当所述第三判断单元判定没有未被获取过的字节串时将所述第三转换单元转换后的数据组合得到数据类型为预设预设椭圆曲线的点的签名私钥。34.—种基于用户标识的验证装置,其特征在于,包括:接收模块,用于接收待签名数据、数字签名和用户标识,并根据预设规则将所述数字签名截取得到第一数据和第二数据,保存所述第一数据、第二数据、所述待签名数据和所述用户标识;第一数据类型转换模块,用于读取第一数据和预存的第一参数和签名主公钥,将所述第一参数和所述签名主公钥的数据类型转换为预设椭圆曲线上的点;第一运算模块,用于根据所述第一数据类型转换模块转换后的数据进行双线性对运算,再与所述第一数据进行幂运算;第二数据类型转换模块,用于将所述第一运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;第二杂凑运算模块,用于读取所述用户标识、预存的函数识别符和第二参数,根据所述用户标识、所述函数识别符和所述第二参数进行第二杂凑运算,将运算结果写入第二寄存器;第三数据类型转换模块,用于读取第二数据和预存的第三参数和签名主公钥,将第二数据类型转换后的第一寄存器的数据、所述第二数据、所述第三参数和所述签名主公钥的数据类型均转换为预设椭圆曲线上的点;第二运算模块,用于根据第二寄存器的数据、第三数据类型模块转换后的第三参数和签名主公钥进行第六预设运算,再与第三数据类型转换模块转换后的第二数据进行双线性对运算,再与第三数据类型转换模块转换后的第一寄存器的数据进行点乘运算;第四数据类型转换模块,用于第二运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入所述第一寄存器;第一杂凑运算模块,用于读取待签名数据和第二参数,根据所述待签名数据、所述第四数据类型转换模块转换后的第一寄存器的数据和所述第二参数进行第一杂凑运算,将运算结果写入所述第一寄存器;验证模块,用于获取第一数据,并判断第一数据和第一杂凑运算模块写入第一寄存器的数据是否相等,当第一数据和第一杂凑运算模块写入第一寄存器的数据相等时验证成功,当第一数据和第一杂凑运算模块写入第一寄存器的数据不相等时验证失败。35.如权利要求34所述的装置,其特征在于,所述第一运算模块,具体用于根据所述第一转换模块转换后的数据进行双线性对运算,以双线性对运算的运算结果为底,第一数据为指数进行运算。36.如权利要求34所述的装置,其特征在于,所述第二杂凑运算模块,具体用于读取所述用户标识、预存的函数识别符和第二参数,并将所述用户标识和所述函数识别符顺序拼接,将拼接结果和所述第二参数作为输入参数调用第二密码函数,将所述第二密码函数的输出数据写入所述第二寄存器。37.如权利要求34所述的装置,其特征在于,所述第二杂凑运算模块,具体包括:初始化子模块,用于初始化计数器;拼接子模块,用于读取所述用户标识、预存的函数识别符和第二参数,将所述用户标识和所述函数识别符顺序拼接,将拼接接结果写入所述第二寄存器;第一运算子模块,用于将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据写入第五寄存器;第二运算子模块,用于将第二预设值、所述拼接子模块写入第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;还用于当第一判断子模块判定所述计数器的值不等于第一运算子模块写入第五寄存器的数据时,将第二预设值、所述拼接子模块写入第二寄存器的数据和第一判断子模块更新后的计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;所述第一判断子模块,用于更新计数器,并判断所述计数器的值是否等于第一运算子模块写入第五寄存器的数据;第二判断子模块,用于当所述第一判断子模块判定所述计数器的值等于第一运算模块写入第五寄存器的数据时,判断所述第一运算子模块写入第四寄存器的数据是否为整数;第三运算子模块,用于当所述第二判断模块判定所述第一运算子模块写入第四寄存器的数据为整数时,将第二预设值、所述拼接子模块写入第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;第四运算子模块,用于根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;第五运算子模块,用于获取第二参数,根据第三运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第二寄存器;还用于获取第二参数,根据第四运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入所述第二寄存器。38.如权利要求34所述的装置,其特征在于,所述第二运算模块,具体用于根据第二寄存器的数据与第三数据类型模块转换后的第三参数进行倍点运算,再与转换后的签名主公钥进行加法运算,将加法运算结果与第三数据类型转换模块转换后的第二数据进行双线性对运算,再与第三数据类型转换模块转换后的第一寄存器的数据进行点乘运算。39.如权利要求34所述的装置,其特征在于,所述接收模块具体包括:截取子模块,用于接收待签名数据、数字签名和用户标识,并根据预设规则将所述数字签名截取得到第一数据和第二数据;判断子模块,用于判断所述截取子模块截取到的所述第一数据是否满足第一预设条件;写入子模块,用于当所述判断子模块判定所述第一数据满足第一预设条件时保存所述第一数据、第二数据、所述待签名数据和所述用户标识;报错子模块,用于当所述判断子模块判定所述第一数据不满足第一预设条件时报错,验证失败。40.如权利要求34所述的装置,其特征在于,所述接收模块具体包括:截取子模块,用于接收待签名数据、数字签名和用户标识,并根据预设规则将所述数字签名截取得到第一数据和第二数据;判断子模块,用于将所述截取子模块截取到的第二数据将第一数据的数据类型转换为预设椭圆曲线上的点,并判断所述转换后的第二数据是否满足第二预设条件;写入子模块,用于当所述判断子模块判定所述第二数据满足第二预设条件时保存所述第一数据、第二数据、所述待签名数据和所述用户标识;报错子模块,用于当所述判断子模块判定所述第二数据不满足第二预设条件时报错,验证失败。41.如权利要求34所述的装置,其特征在于,所述第一数据类型转换模块具体包括:第一参数数据类型转换子模块和第一签名主公钥数据类型转换子模块;所述第一参数数据类型转换子模块具体包括:第一获取单元,用于读取第一参数,将第一参数平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第一判断单元判定第一参数中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;第一判断单元,用于判断所述第一参数中是否还有未被获取过的字节串;第一组合单元,用于当所述第一判断单元判定第一参数中没有未被获取过的字节串时将所述第一获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一参数;所述第一签名主公钥数据类型转换子模块具体包括:第二获取单元,用于读取签名主公钥,将签名主公钥平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第二判断单元判定签名主公钥中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;第二判断单元,用于判断所述签名主公钥中是否还有未被获取过的字节串;第二组合单元,用于当所述第二判断单元判定签名主公钥中没有未被获取过的字节串时将所述第二获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的签名主公钥;所述第三数据转换模块具体包括:第一寄存器的数据数据类型转换子模块、第二数据数据类型转换子模块、第三参数数据类型转换子模块和第二签名主公钥数据类型转换子模块;所述第一寄存器的数据数据类型转换子模块具体包括:第三获取单元,用于将第一寄存器的数据平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第三判断单元判定第一寄存器的数据中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;第三判断单元,用于判断所述第一寄存器的数据中是否还有未被获取过的字节串;第三组合单元,用于当所述第三判断单元判定第一寄存器的数据中没有未被获取过的字节串时将所述第三获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一寄存器的数据;所述第二数据数据类型转换子模块具体包括:第四获取单元,用于将第二数据平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第四判断单元判定第二数据中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;第四判断单元,用于判断所述第二数据中是否还有未被获取过的字节串;第四组合单元,用于当所述第四判断单元判定第二数据中没有未被获取过的字节串时将所述第四获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第二数据;所述第三参数数据类型转换子模块具体包括:第五获取单元,用于将第三参数平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第五判断单元判定第三参数中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;第五判断单元,用于判断所述第三参数中是否还有未被获取过的字节串;第五组合单元,用于当所述第五判断单元判定第三参数中没有未被获取过的字节串时将所述第五获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第三参数;所述第二签名主公钥数据类型转换子模块具体包括:第六获取单元,用于将签名主公钥平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第六判断单元中判定签名主公钥中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;第六判断单元,用于判断所述签名主公钥中是否还有未被获取过的字节串;第六组合单元,用于当所述第六判断单元判定签名主公钥中没有未被获取过的字节串时将所述第六获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的签名主公钥。42.如权利要求34所述的装置,其特征在于,所述第一杂凑运算模块,具体用于将所述待签名数据和第一寄存器的数据顺序拼接,将拼接结果和所述第二参数作为输入参数调用第一密码函数,将所述第一密码函数的输出数据写入所述第一寄存器。43.如权利要求34所述的装置,其特征在于,所述第一杂凑运算模块具体包括:初始化子模块,用于初始化计数器;拼接子模块,用于读取所述用户标识、预存的函数识别符和第二参数,将所述用户标识和所述函数识别符顺序拼接,将拼接接结果写入所述第一寄存器;第一运算子模块,用于将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据写入第五寄存器;第二运算子模块,用于将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;还用于当第一判断子模块判定所述计数器的值不等于第一运算子模块写入第五寄存器的数据时,将第一预设值、所述拼接子模块写入第一寄存器的数据和第一判断子模块更新后的计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;所述第一判断子模块,用于更新计数器,并判断所述计数器的值是否等于第一运算子模块写入第五寄存器的数据;第二判断子模块,用于当所述第一判断子模块判定所述计数器的值等于第一运算模块写入第五寄存器的数据时,判断所述第一运算子模块写入第四寄存器的数据是否为整数;第三运算子模块,用于当所述第二判断模块判定所述第一运算子模块写入第四寄存器的数据为整数时,将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;第四运算子模块,用于根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;第五运算子模块,用于获取第二参数,根据第三运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第二寄存器;还用于获取第二参数,根据第四运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。44.如权利要求34所述的装置,其特征在于,第二数据类型转换模块具体包括:第一计算子模块,用于获取第二参数,根据所述第一运算模块的运算结果的长度和第二参数计算得到第三数据;第一拼接子模块,用于从所述第一运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一'寄存器的数据拼接,并将拼接结果与入所述第一'寄存器;还用于当第一判断子模块中判定所述第一运算模块的运算结果的横坐标中还有未被获取到的分量时从所述第一运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入所述第一寄存器;第一判断子模块,用于判断所述第一运算模块的运算结果的横坐标中是否还有未被获取到的分量;第二拼接子模块,用于当第一判断子模块判定所述第一运算模块的运算结果的横坐标中没有未被获取到的分量时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第二判断子模块判定所述第一运算模块的运算结果纵坐标中还有未被获取到的分粮时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入所述第一寄存器;第二判断子模块,用于判断所述第一运算模块的运算结果纵坐标中是否还有未被获取到的分量;并当判定所述第一运算模块的运算结果纵坐标中没有未被获取到的分量时转换结束;所述第四数据类型转换模块具体包括:第二计算子模块,用于获取第二参数,根据所述第二运算模块的运算结果的长度和第二参数计算得到第三数据;第三拼接子模块,用于从所述第二运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第三判断子模块中判定所述第二运算模块的运算结果的横坐标中还有未被获取到的分量时从所述第二运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;第三判断子模块,用于判断所述第二运算模块的运算结果的横坐标中是否还有未被获取到的分量;第四拼接子模块,用于当第三判断子模块中判定所述第二运算模块的运算结果的横坐标中没有未被获取到的分量时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第四判断子模块判定所述第二运算模块的运算结果纵坐标中还有未被获取到的分粮时从所述运算结果的纵坐标中依次获取长又一,、里孜伏为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;第四判断子模块,用于判断所述第二运算模块的运算结果纵坐标中是否还有未被获取到的分量;并当判定所述第二运算模块的运算结果纵坐标中没有未被获取到的分量时转换结束。

百度查询: 飞天诚信科技股份有限公司 一种基于用户标识的数字签名、验签方法及装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。