CN108259184A - 一种基于用户标识的数字签名、验签方法及装置 - Google Patents
一种基于用户标识的数字签名、验签方法及装置 Download PDFInfo
- Publication number
- CN108259184A CN108259184A CN201810037962.2A CN201810037962A CN108259184A CN 108259184 A CN108259184 A CN 108259184A CN 201810037962 A CN201810037962 A CN 201810037962A CN 108259184 A CN108259184 A CN 108259184A
- Authority
- CN
- China
- Prior art keywords
- data
- register
- parameter
- written
- submodule
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 238000001629 sign test Methods 0.000 title claims abstract description 11
- 238000012795 verification Methods 0.000 claims abstract description 10
- 238000006243 chemical reaction Methods 0.000 claims description 154
- 235000013399 edible fruits Nutrition 0.000 claims description 43
- 241000208340 Araliaceae Species 0.000 claims description 9
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 claims description 9
- 235000003140 Panax quinquefolius Nutrition 0.000 claims description 9
- 235000008434 ginseng Nutrition 0.000 claims description 9
- 238000004364 calculation method Methods 0.000 claims description 7
- 238000004321 preservation Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000009466 transformation Effects 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0869—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/30—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
- H04L9/3066—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving algebraic varieties, e.g. elliptic or hyper-elliptic curves
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- General Physics & Mathematics (AREA)
- Algebra (AREA)
- Storage Device Security (AREA)
Abstract
本发明涉及信息安全领域,特别涉及一种基于用户标识的数字签名及验签的方法及装置,当签名时,CPU使用与用户标识相关联的签名私钥对待签名数据进行运算产生数据签名;当验签时,CPU使用用户标识验证签名的可靠性,本发明通过基于用户标识确定的签名公钥来验证数据单元的数据完整性和数据单元发送者的身份,使用户无需通过第三方验证单元验证签名公钥的真实性,简化了密钥管理流程。
Description
技术领域
本发明涉及信息安全领域,特别涉及一种基于用户标识的数字签名、验签方法及装置。
背景技术
数字签名技术即身份认证的技术,数字签名就是在数据单元上附加一些数据,或是对数据单元进行加密变换。这种附加数据或变换使得数据单元的接收者能够确认数据单元的来源,确保数据单元的完整性、合法性和真实性,防止数据被他人伪造或者篡改;数字签名是基于公钥密码体制实现的,即需要通过公钥对签名结果进行验证,但是验证过程之前往往需要第三方检查公钥的真实性,公钥管理复杂且繁琐。
发明内容
本发明提供了一种基于用户标识的数字签名、验签方法及装置;
本发明提供了一种基于用户标识的数字签名方法,包括:
步骤S1、当接收到待签名数据时,CPU保存待签名数据;
步骤S2、CPU通过随机数生成器生成随机数,将随机数写入第二寄存器;
步骤S3、CPU读取预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,根据转换后的第一参数和签名主公钥进行双线性对运算,再与第二寄存器的数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
步骤S4、CPU获取待签名数据和预存的第二参数,并根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;
步骤S5、CPU读取第二参数、并根据第一寄存器的数据、第二寄存器的数据和第二参数进行第一预设运算,将运算结果写入所述第二寄存器;
步骤S6、CPU读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设椭圆曲线上的点,并根据第二寄存器的数据和转换后的签名私钥进行第二预设运算,再将运算结果的数据类型转换为字节串,将转换后的运算结果写入所述第二寄存器;
步骤S7、CPU将第一寄存器的数据和第二寄存器的数据作为数字签名输出。
本发明提供了一种基于用户标识的验签方法,包括:
步骤R1、当接收到待签名数据、数字签名和用户标识时,CPU根据预设规则将数字签名截取得到第一数据和第二数据,并保存第一数据、第二数据、待签名数据和用户标识;
步骤R2、CPU读取第一数据和预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型转换为预设椭圆曲线上的点,根据转换后的数据进行双线性对运算,再与第一数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
步骤R3、CPU读取用户标识、预存的函数识别符和第二参数,根据用户标识、函数识别符和第二参数进行第二杂凑运算,将运算结果写入第二寄存器;
步骤R4、CPU读取第二数据和预存的第三参数和签名主公钥,将第一寄存器的数据、第二数据、第三参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,并根据第二寄存器的数据、转换后的第三参数和签名主公钥进行第六预设运算,再与转换后的第二数据进行双线性对运算,再与第一寄存器的数据进行点乘运算,将运算结果的数据类型转换成字节串,并将转换后的运算结果写入第一寄存器;
步骤R5、CPU读取待签名数据和第二参数,根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;
步骤R6、CPU获取第一数据,并判断第一数据和第一寄存器的数据是否相等,是则验证成功,否则验证失败。
本发明提供了一种基于用户标识的数字签名装置,包括:
接收模块,用于接收待签名数据;并保存待签名数据;
随机数生成模块,用于生成随机数;并将随机数写入第二寄存器;
第一数据类型转换模块,用于读取预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型转换为预设椭圆曲线上的点;
第一运算模块,用于将第一数据类型转换模块转换后的第一参数和签名主公钥进行双线性对运算,再与随机数生成模块写入第二寄存器的数据进行幂运算;
第二数据类型转换模块,用于将第一运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
杂凑运算模块,用于获取所述接收模块保存的待签名数据和预存的第二参数,并根据待签名数据、第二数据类型转换模块写入第一寄存器的数据和第二参数进行第一杂凑运算,并将运算结果写入第一寄存器;
第二运算模块,用于读取第二参数、并根据杂凑运算模块写入第一寄存器的数据、随机数生成模块写入第二寄存器的数据和第二参数进行第一预设运算,将运算结果写入第二寄存器;
第三数据类型转换模块,用于读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设椭圆曲线上的点;
第三运算模块,用于根据第二运算模块写入第二寄存器的数据和第三数据类型转换模块转换后的签名私钥进行第二预设运算;
第二数据类型转换模块,还用于将第三运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第二寄存器;
输出模块,用于将杂凑运算模块写入第一寄存器的数据和第二数据类型转换模块写入第二寄存器的数据作为数字签名输出。
本发明提供了一种基于用户标识的验证装置,包括:
接收模块,用于接收待签名数据、数字签名和用户标识,并根据预设规则将所述数字签名截取得到第一数据和第二数据,保存第一数据、第二数据、待签名数据和用户标识;
第一数据类型转换模块,用于读取第一数据和预存的第一参数和签名主公钥,将第一参数和所述签名主公钥的数据类型转换为预设椭圆曲线上的点;
第一运算模块,用于根据第一数据类型转换模块转换后的数据进行双线性对运算,再与第一数据进行幂运算;
第二数据类型转换模块,用于将第一运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
第二杂凑运算模块,用于读取所述用户标识、预存的函数识别符和第二参数,根据用户标识、函数识别符和第二参数进行第二杂凑运算,将运算结果写入第二寄存器;
第三数据类型转换模块,用于读取第二数据和预存的第三参数和签名主公钥,将第二数据类型转换后的第一寄存器的数据、所述第二数据、所述第三参数和所述签名主公钥的数据类型均转换为预设椭圆曲线上的点;
第二运算模块,用于根据第二寄存器的数据、第三数据类型模块转换后的第三参数和签名主公钥进行第六预设运算,再与第三数据类型转换模块转换后的第二数据进行双线性对运算,再与第三数据类型转换模块转换后的第一寄存器的数据进行点乘运算;
第四数据类型转换模块,用于第二运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入所述第一寄存器;
第一杂凑运算模块,用于读取待签名数据和第二参数,根据待签名数据、第四数据类型转换模块转换后的第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入所述第一寄存器;
验证模块,用于获取第一数据,并判断第一数据和第一杂凑运算模块写入第一寄存器的数据是否相等,当第一数据和第一杂凑运算模块写入第一寄存器的数据相等时验证成功,当第一数据和第一杂凑运算模块写入第一寄存器的数据不相等时验证失败。
本发明取得的有益效果是:签名公钥由用户的唯一标识所确定,通过基于用户标识确定的签名公钥来验证数据单元的数据完整性和数据单元发送者的身份,使用户无需通过第三方验证单元验证签名公钥的真实性,简化了密钥管理流程。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1提供的一种基于用户标识的数字签名方法流程图;
图2位本发明实施例2提供的一种基于用户标识的验签方法流程图;
图3为本发明实施例3提供的一种基于用户标识的数字签名装置的方框图;
图4为本发明实施例4提供的一种基于用户标识的验签装置的方框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本实施例提供一种基于用户标识的数字签名方法,需要说明的是,CPU中预存有第一参数、第二参数、签名主公钥和签名私钥;如图1所示,包括:
本实施例中,预存的第一参数具体为:(93DE051D 62BF718F F5ED0704 487D01D6E1E40869 09DC3280 E8C4E481 7C66DDDD,21FE8DDA 4F21E607 63106512 5C395BBC1C1C00CB FA602435 0C464CD7 0A3EA616);
第二参数具体为:B6400000 02A3A6F1 D603AB4F F58EC744 49F2934B 18EA8BEEE56EE19C D69ECF25;
签名主公钥具体为:(9F64080B 3084F733 E48AFF4B 41B56501 1CE0711C5E392CFB 0AB1B679 1B94C408 29DBA116 152D1F78 6CE843ED 24A3B573 414D2177386A92DD 8F14D656 96EA5E32,69850938 ABEA0112 B57329F4 47E3A0CB AD3E2FDB1A77F335 E89E1408 D0EF1C2541E00A53 DDA532DA 1A7CE027 B7A46F74 1006E85F5CDFF073 0E75C05F B4E3216D));
签名私钥具体为:(A5702F05 CF131530 5E2D6EB6 4B0DEB92 3DB1A0BC F0CAFF90523AC875 4AA69820,78559A84 4411F982 5C109F5E E3F52D72 0DD01785 392A727BB1556952 B2B013D3);
可选的,CPU获取预存的用户标识,并通过向密钥生成***上传用户标识获取第一参数、第二参数、签名主公钥和签名私钥,并保存获取到的签名主公钥、签名私钥、第一参数和第二参数。
步骤S1、当接收到待签名数据时,CPU保存待签名数据;
本实施例中,CPU接收到的待签名数据具体为:4368696E 65736520 494253207374616E 64617264;
步骤S2、CPU读取预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,根据转换后的第一参数和签名主公钥进行双线性对运算,再与第二寄存器的数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
具体的,将第一参数的数据类型转换为预设椭圆曲线上的点具体包括:
步骤101、CPU将第一参数平均拆分为两个字节串;
步骤102、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
步骤103、CPU判断第一参数中是否还有未被获取过的字节串,是则返回步骤102,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一参数;
将签名主公钥的数据类型转换为预设椭圆曲线上的点具体包括:
步骤201、CPU将签名主公钥平均拆分为两个字节串;
步骤202、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
步骤203、CPU判断签名主公钥中是否还有未被获取过的字节串,是则返回步骤202,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的签名主公钥;
具体的,根据转换后的第一参数和签名主公钥进行双线性对运算,运算结果为:
(4E378FB5 561CD066 8F906B73 1AC58FEE 25738EDF 09CADC7A29C0ABC0177AEA6D,28B3404A 61908F5D 6198815C 99AF1990 C8AF3865 5930058C28C21BB5 39CE0000,38BFFE40 A22D529A 0C66124B 2C308DAC 92299126 56F62B4FACFCED40 8E02380F,A01F2C8B EE817696 09462C69 C96AA923 FD863E20 9D3CE26DD889B55E 2E3873DB,67E0E0C2 EED7A699 3DCE28FE 9AA2EF56 83430786 0839677F96685F2B 44D0911F,5A1AE172 102EFD95 DF7338DB C577C66D 8D6C15E0 A0158C7507228EFB 078F42A6,1604A3FC FA9783E6 67CE9FCB 1062C2A5 C6685C31 6DDA62DE0548BAA6 BA30038B,93634F44 FA13AF76 169F3CC8 FBEA880A DAFF8475 D5FD28A75DEB83C4 4362B439,B3129A75 D31D1719 4675A1BC 56947920 898FBF39 0A5BF5D931CE6CBB 3340F66D,4C744E69 C4A2E1C8 ED72F796 D151A17C E2325B94 3260FC460B9F73CB 57C9014B,84B87422 330D7936 EABA1109 FA5A7A71 81EE16F2 438B0AEB2F38FD5F 7554E57A,AAB9F06A 4EEBA432 3A7833DB 202E4E35 639D93FA 3305AF73F0F071D7 D284FCFB)
CPU以双线性对运算的运算结果为底,第二寄存器的数据为指数进行运算;运算结果具体为:(81377B8F DBC2839B 4FA2D0E0 F8AA6853 BBBE9E9C 4099608F 8612C6078ACD7563,
815AEBA2 17AD502D A0F48704 CC73CABB 3C06209B D87142E1 4CBD99E8BCA1680F,
30DADC5C D9E207AE E32209F6 C3CA3EC0 D800A1A4 2D33C731 53DED47C70A39D2E,
8EAF5D17 9A1836B3 59A9D1D9 BFC19F2E FCDB8293 28620962 BD3FDF15F2567F58,
A543D256 09AE9439 20679194 ED30328B B33FD156 60BDE485 C6B79A7B32B01398,
3F012DB0 4BA59FE8 8DB88932 1CC2373D 4C0C35E8 4F7AB1FF 33679BCA575D6765,
4F8624EB 435B838C CA77B2D0 347E65D5 E4696441 2A096F41 50D8C5EDE5440DDF,
0656FCB6 63D24731 E8029218 8A2471B8 B68AA993 89926849 9D23C89755A1A897,
44643CEA D40F0965 F28E1CD2 895C3D11 8E4F65C9 A0E3E741 B6DD52C0EE2D25F5,
898D6084 8026B7EF B8FCC1B2 442ECF07 95F8A81C EE99A624 8F294C82C90D26BD,
6A814AAF 475F128A EF43A128 E37F8015 4AE6CB92 CAD7D150 1BAE30F750B3A9BD,
1F96B08E 97997363 91131470 5BFB9A9D BB97F755 53EC90FB B2DDAE53C8F68E42)
具体的,将运算结果的数据类型转换为字节串包括:
步骤A1、CPU获取第二参数,根据运算结果的长度和第二参数计算得到第三数据;
步骤A2、CPU从运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;
步骤A3、CPU判断运算结果中是否还有未被获取到的分量,是则返回步骤A2,否则执行步骤A4;
步骤A4、CPU从运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;
步骤A5、CPU判断运算结果中是否还有未被获取到的分量,是则返回步骤A4,否则结束;
步骤S3、CPU通过随机数生成器生成随机数,并将随机数写入第二寄存器;
本实施例中CPU调用随机数生成器生成随机数具体为:0X 033C86 16B06704813203DF D0096502 2ED15975 C662337A ED648835 DC4B1CBE;
步骤S4、CPU获取待签名数据和预存的第二参数,并根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;
具体的,根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,运算结果具体为:823C4B21 E4BD2DFE 1ED92C60 6653E996 66856315 2FC33F55 D7BFBB9BD9705ADB;
更为具体的,CPU获取待签名数据和预存的第二参数,并将待签名数据和第一寄存器的数据顺序拼接,将拼接结果和所述第二参数作为输入参数调用第一密码函数,将第一密码函数的输出数据写入第一寄存器;
或者,步骤S4具体包括:
步骤B1、CPU初始化计数器,并获取待签名数据和第二参数,并将待签名数据和第一寄存器的数据顺序拼接,将拼接接结果写入第一寄存器;
步骤B2、CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将顶函数的输出数据写入第五寄存器;
更为详细的,CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器具体为:CPU计算以2为底第二参数的对数,将计算结果与5相乘,再与32相除,将相除后的结果作为输入参数调用顶函数,将顶函数的输出数据与8相乘,将相乘的结果写入第三寄存器;将第三寄存器的数据与预设的密码杂凑函数的输出数据的长度相除,将相除的结果写入第四寄存器,将第四寄存器的数据作为输入参数调用顶函数,将顶函数的输出数据写入第五寄存器;
步骤B3、CPU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果赋值给第六寄存器;
可选的,密码杂凑函数具体为:MD5或者SHA256或者SM3;
例如,预设的密码杂凑函数为SM3密码杂凑函数,则密码杂凑函数的输出数据的长度为32字节;
步骤B4、CPU更新计数器,判断计数器的值是否等于第五寄存器的数据,是则执行步骤B5,否则返回步骤B3;
具体的,CPU将计算器的值加1作为更新后的计数器的值;
步骤B5、CPU判断第四寄存器的数据是否为整数,是则执行B6,否则执行B7;
步骤B6、CPU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果为第六寄存器赋值,执行步骤B8;
本实施例中,第一预设值具体为0x02;
步骤B7、CPU根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并根据第七寄存器的数据截取杂凑值,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;
CPU根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器具体为:CPU将第四寄存器的数据作为输入参数调用底函数,将底函数的输出数据与密码杂凑函数的输出数据的长度相乘,将第三寄存器的数据与相乘结果进行减法运算,将运算结果写入第七寄存器;
步骤B8、CPU获取第二参数,根据第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。
步骤S5、CPU读取第二参数、并根据第一寄存器的数据、第二寄存器的数据和第二参数进行第一预设运算,将运算结果写入第二寄存器;
具体的,CPU读取第二参数,将第二寄存器的数据和第一寄存器的数据进行减法运算,将差值与第二参数进行模运算,将运算结果赋值给第二寄存器。
更为详细的,CPU读取第二参数、并根据第一寄存器的数据、第二寄存器的数据和第二参数进行第一预设运算,运算结果具体为:
3406F1643496DFF8385C82CF5F4442B0123E89ABAF898013FB13AE36D9799108
步骤S6、CPU判断第二寄存器的数据是否等于预设值,是则返回步骤S3,否则继续执行步骤S7;
本实施例中,预设值为0;
步骤S7、CPU读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设椭圆曲线上的点,并根据第二寄存器的数据和转换后的签名私钥进行第二预设运算,再将运算结果的数据类型转换为字节串,将转换后的运算结果写入第二寄存器;
具体的,CPU将签名私钥的数据类型转换为预设椭圆曲线上的点包括:
步骤301、CPU将签名私钥平均拆分为预设数量的字节串;
步骤302、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
步骤303、CPU判断第二数据中是否还有未被获取过的字节串,是则返回步骤302,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的签名私钥。
根据第二寄存器的数据和转换后的签名私钥进行第二预设运算具体为:将第二寄存器的数据与签名私钥进行倍点运算。
更为详细的,CPU读取预存的签名私钥,将第二寄存器的数据与签名私钥进行倍点运算,运算结果具体为:(73BF9692 3CE58B6A D0E13E96 43A406D8 EB98417C 50EF1B29CEF9ADB4 8B6D598C,856712F1 C2E0968A B7769F42 A99586AE D139D5B8 B3E15891827CC2AC ED9BAA05);
具体的,将第二预设运算的运算结果的数据类型转换为字节串与步骤S2中将幂运算的运算结果的数据类型转换成字节串的过程类似,在此不再赘述。
步骤S8、所述CPU将第一寄存器的数据和第二寄存器的数据作为数字签名输出。
优选的,CPU将第一寄存器的数据、预设分隔符和第二寄存器的数据顺序拼接得到数字签名,输出数字签名。
本实施例中,预设识别符为04,则数字签名具体为:(823C4B21 E4BD2DFE1ED92C60 6653E996 66856315 2FC33F55 D7BFBB9B D9705ADB,04 73BF9692 3CE58B6AD0E13E96 43A406D8 EB98417C 50EF1B29 CEF9ADB4 8B6D598C856712F1 C2E0968AB7769F42 A99586AE D139D5B8 B3E15891 827CC2AC ED9BAA05)。
需要说明的是,密钥生成***根据用户标识生成签名私钥的方法具体包括:
步骤X1、密钥生成***生成随机数作为签名主私钥;并根据签名主私钥生成签名主公钥;
本实施例中的随机数具体为:0130E7 8459D785 45CB54C5 87E02CF4 80CE0B66340F319F 348A1D5B 1F2DC5F4;
密钥生成***计算第三参数的随机数倍点作为签名主公钥,本实施例中得到的签名主公钥具体为:
(9F64080B 3084F733 E48AFF4B 41B56501 1CE0711C 5E392CFB 0AB1B6791B94C408 29DBA116 152D1F78 6CE843ED 24A3B573 414D2177 386A92DD 8F14D65696EA5E32,69850938 ABEA0112 B57329F4 47E3A0CB AD3E2FDB 1A77F335 E89E1408D0EF1C2541E00A53 DDA532DA 1A7CE027 B7A46F74 1006E85F 5CDFF073 0E75C05FB4E3216D));
步骤X2、密钥生成***根据用户标识和签名主私钥生成签名私钥;
步骤X2具体包括:
步骤X2-1、密钥生成***根据签名主私钥选择函数识别符,根据用户标识、函数识别符和循环群的阶通过第二密码函数生成第一数据;并根据第一数据和签名主私钥生成第二数据。
更进一步的,密钥生成***将用户标识416C6963 65和函数识别符01顺序拼接,根据拼接结果416C6963 6501和第二参数通过第二密码函数生成第一数据2ACC468C3926B0BD B2767E99 FF26E084 DE9CED8D BC7D5FBF 418027B6 67862FAB,并将第一数据和签名主私钥相加得到第二数据2ACD7773 BD808842 F841D35F 87070D79 5F6AF8F3F08C915E 760A4511 86B3F59F;
步骤X2-2、密钥生成***判断第二数据是否等于预设值,是则返回步骤X1;否则执行步骤X2-3;
本实施例中,预设值为0;
步骤X2-3、密钥生成***根据签名主私钥、第二数据和第一参数生成签名私钥;
具体的,密钥生成***将签名主私钥和第二数据相除得到第三数据291FE3CAC8F58AD2 DC462C8D 4D578A94 DAFD5624 DDC28E32 8D293668 8A86CF1A;计算第一参数的第三数据倍得到签名私钥;本实施例中得到的签名私钥具体为:(A5702F05 CF1315305E2D6EB6 4B0DEB92 3DB1A0BC F0CAFF90 523AC875 4AA69820,78559A84 4411F9825C109F5EE3F52D72 0DD01785 392A727B B1556952 B2B013D3)。
实施例2
本实施例提供一种基于用户标识的验签方法,CPU中预存有签名主公钥、第一参数、第二参数、第三参数和函数识别符;如图2所示,包括:
预存的第一参数具体为:(93DE051D 62BF718F F5ED0704 487D01D6 E1E4086909DC3280 E8C4E481 7C66DDDD,21FE8DDA 4F21E607 63106512 5C395BBC 1C1C00CBFA602435 0C464CD7 0A3EA616);
第二参数具体为:B6400000 02A3A6F1 D603AB4F F58EC744 49F2934B 18EA8BEEE56EE19C D69ECF25;
第三参数具体为:(85AEF3D0 78640C98 597B6027 B441A01F F1DD2C19 0F5E93C454806C11 D8806141,37227552 92130B08 D2AAB97F D34EC120 EE265948 D19C17ABF9B7213B AF82D65B17509B09 2E845C12 66BA0D26 2CBEE6ED 0736A96F A347C8BD856DC76B 84EBEB96,A7CF28D5 19BE3DA6 5F317015 3D278FF2 47EFBA98 A71A08116215BBA5 C999A7C7);
函数识别符具体为:01
签名主公钥具体为:(9F64080B 3084F733 E48AFF4B 41B56501 1CE0711C5E392CFB 0AB1B679 1B94C408 29DBA116 152D1F78 6CE843ED 24A3B573 414D2177386A92DD 8F14D656 96EA5E32,69850938 ABEA0112 B57329F4 47E3A0CB AD3E2FDB1A77F335 E89E1408 D0EF1C2541E00A53 DDA532DA 1A7CE027 B7A46F74 1006E85F5CDFF073 0E75C05F B4E3216D));
步骤R1、当接收到待签名数据、数字签名和用户标识时,CPU根据预设规则将数字签名截取得到第一数据和第二数据;
本实施例中接收到的待签名数据具体为:4368696E 65736520 494253207374616E 64617264;
数字签名具体为:(823C4B21 E4BD2DFE 1ED92C60 6653E996 66856315 2FC33F55D7BFBB9B D9705ADB,04 73BF9692 3CE58B6A D0E13E96 43A406D8 EB98417C 50EF1B29CEF9ADB4 8B6D598C856712F1 C2E0968A B7769F42 A99586AE D139D5B8 B3E15891827CC2AC ED9BAA05);
用户标识具体为:416C6963 65;
具体的,CPU从数字签名中获取前8个字节作为第一数据,将数字签名中的剩余数据作为第二数据;
更为详细的,截取得到的第一数据具体为:823C4B21 E4BD2DFE 1ED92C606653E996 66856315 2FC33F55 D7BFBB9B D9705ADB;
第二数据具体为:73BF9692 3CE58B6A D0E13E96 43A406D8 EB98417C 50EF1B29CEF9ADB4 8B6D598C 856712F1 C2E0968A B7769F42 A99586AE D139D5B8 B3E15891827CC2AC ED9BAA05;
步骤R2、CPU判断第一数据是否满足第一预设条件,是则保存第一数据,执行步骤R3,否则验证失败;
具体的,CPU获取第一数据,判断第一数据不大于第三预设值且不小于第二参数与第三预设值之差,是则执行步骤203,否则验证失败;
更为详细的,第三预设值为1;
步骤R3、CPU将第二数据的数据类型转换为预设椭圆曲线上的点,判断转换后的第二数据是否满足第二预设条件,是则保存第二数据,执行步骤R4,否则验证失败;
步骤R3具体为,CPU获取第二数据,并将第二数据的数据类型转换为预设椭圆曲线上的点,并判断转换后的第二数据是否处于预设群中,是则执行步骤R4,否则验证失败:
更为详细的,将第二数据的数据类型转换为预设椭圆曲线上的点具体包括:
步骤701、CPU将第二数据平均拆分为两个字节串;
步骤702、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
步骤703、CPU判断第二数据中是否还有未被获取过的字节串,是则返回步骤702,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第二数据;
步骤R4、CPU读取第一数据和预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,根据转换后的数据进行双线性对运算,再与第一数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
步骤R4具体为:CPU读取第一数据和预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,根据转换后的数据进行双线性对运算,以双线性对运算的运算结果为底,第一数据为指数进行运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
更为详细的,CPU根据转换后的第一参数和签名主公钥进行双线性对运算,运算结果具体为:
(4E378FB5 561CD066 8F906B73 1AC58FEE 25738EDF 09CADC7A29C0ABC0177AEA6D,28B3404A 61908F5D 6198815C 99AF1990 C8AF3865 5930058C28C21BB5 39CE0000,38BFFE40 A22D529A 0C66124B 2C308DAC 92299126 56F62B4FACFCED40 8E02380F,A01F2C8B EE817696 09462C69 C96AA923 FD863E20 9D3CE26DD889B55E 2E3873DB,67E0E0C2 EED7A699 3DCE28FE 9AA2EF56 83430786 0839677F96685F2B 44D0911F,5A1AE172 102EFD95 DF7338DB C577C66D 8D6C15E0 A0158C7507228EFB 078F42A6,1604A3FC FA9783E6 67CE9FCB 1062C2A5 C6685C31 6DDA62DE0548BAA6 BA30038B,93634F44 FA13AF76 169F3CC8 FBEA880A DAFF8475 D5FD28A75DEB83C4 4362B439,B3129A75 D31D1719 4675A1BC 56947920 898FBF39 0A5BF5D931CE6CBB 3340F66D,4C744E69 C4A2E1C8 ED72F796 D151A17C E2325B94 3260FC460B9F73CB 57C9014B,84B87422 330D7936 EABA1109 FA5A7A71 81EE16F2 438B0AEB2F38FD5F
7554E57A,AAB9F06A 4EEBA432 3A7833DB 202E4E35 639D93FA 3305AF73F0F071D7 D284FCFB)
CPU读取第一数据,并根据第一寄存器的数据和第一数据进行幂运算,将运算结果的数据类型转换为字节串,转换后的运算结果具体为:
(B59486D6 F3AE4649 ADF387C5 A22790E4 2B98051A 339B3403 B17B1F2B38259EFE,1632C30A A86001F5 2EEFED51 7AA672D7 0F03AF3E E9197017 EDA431436CFBDACE,2F635B5B 0243F6F4 876A1D91 49EAFAB7 1060EA43 52DE6D4A 83B5F8F3DF73EFF0,3A27F33E 024339B8 3F16E58A E524A5FA A3E7FD00 9568A9FF 23752BC8DD85B704,08208E26 734BC667 31AEE530 692B3AE2 77EA70D6 BBAF8F48 5295D067E67B3B4F,1DBDDD78 126E962E 950CEBB3 85C3F7A3 E0A5597F 9C3B9FB3 F5DAC3DAA85FD016,189E64A3 C0A0D876 11A83AEC 8F3A3688 C0ABF2F6 4860CF33 1463ACB3A4AABB04,6E3FA26F 762D1A23 71601BE0 0DA702B1 A726273C E843D991 CE5C2EABAB2EAC6F,A5BCFFD5 40EE56B5 A26CCDA5 66FD8ABC 3615CB7D EA8F240E 0BF4615816C2B23E,A074A0AA 62A26C28 3F11543C ECDEA524 2113FE2E 982CCBDA 2D495EF6C05550A6,2E3F160C 96C16059 5A1034B5 15692066 8A7BEE5E 82E0B8BE 06963FDDBDEB5AAE,0DCF9EA2 8617B596 5313B917 D556DA0D 3A557C41 12CE1C4A 06B327D7DC18273D);
CPU将第一参数的数据类型转换为预设椭圆曲线上的点具体包括:
步骤401、CPU将第一参数平均拆分为两个字节串;
步骤402、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
步骤403、CPU判断第一参数中是否还有未被获取过的字节串,是则返回步骤402,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一参数;
CPU将签名主公钥的数据类型转换为预设椭圆曲线上的点具体包括:
步骤501、CPU将签名主公钥平均拆分为两个字节串;
步骤502、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
步骤503、CPU判断签名主公钥中是否还有未被获取过的字节串,是则返回步骤502,否则将所有转换后的数据组合得到的数据类型为预设椭圆曲线的点的签名主公钥;
步骤R4中的将运算结果的数据类型转换成字节串与步骤R2中的将运算结果的数据类型转换成字节串类似,在此不再赘述。
步骤R5、CPU读取用户标识、预存的函数识别符和第二参数,根据用户标识、函数识别符和第二参数进行第二杂凑运算,将运算结果写入第二寄存器;
本实施例中CPU读取用户标识、预存的函数识别符和第二参数,根据用户标识、预设函数识别符和第二参数进行第二杂凑运算,运算结果具体为:2ACC468C 3926B0BDB2767E99 FF26E084 DE9CED8D BC7D5FBF 418027B6 67862FAB;
具体的,CPU读取用户标识、预存的函数识别符和第二参数,并将用户标识和函数识别符顺序拼接,将拼接结果和第二参数作为输入参数调用第二密码函数,将第二密码函数的输出数据写入第二寄存器。
或者,步骤R5具体包括:
步骤D1、CPU初始化计数器,并读取用户标识、预存的函数识别符和第二参数,将用户标识和函数识别符顺序拼接,将拼接接结果写入第二寄存器;
步骤D2、CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将顶函数的输出数据写入第五寄存器;
步骤D3、CPU将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;
步骤D4、CPU更新计数器,判断计数器的值是否等于第五寄存器的数据,是则执行步骤D5,否则返回步骤D3;
步骤D5、CPU判断第四寄存器的数据是否为整数,是则执行D6,否则执行D7;
步骤D6、CPU将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果为所述第六寄存器赋值;
步骤D7、CPU根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;
步骤D8、CPU获取第二参数,根据第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第二寄存器。
步骤R6、CPU读取第二数据和预存的第三参数和签名主公钥,将第一寄存器的数据、第二数据、第三参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点,并根据第二寄存器的数据、转换后的第三参数和签名主公钥进行第六预设运算,再与转换后的第二数据进行双线性对运算,再与第一寄存器的数据进行点乘运算,将运算结果的数据类型转换成字节串,并将转换后的运算结果写入第一寄存器;
具体的,根据第二寄存器的数据、转换后的第三参数和签名主公钥进行第六预设运算具体为:将第二寄存器的数据与第三参数倍点运算,再与签名主公钥进行加法运算;
本实施例中,CPU根据第二寄存器的数据、第三参数和签名主公钥进行第六预设运算,运算结果具体为:(511F2C82 3C7484DD FC16BBC5 3AAD33B7 8D2429AF CF7F8AD8B72261B4 E1FFCF79,7B234E1D 623A172A AA89164A F3E828B4 D0E49CE6 EC5C7FE92E657272 250CBAF6,4831DD31 3EC39FDA 59F3E14F EBCFF784 8D11875D 805662D26969CF70 5D46ED70,73B542A6 9058F460 1AC19F23 72036863 68FEC436 C13C2B0761F9F9B6 E14A36E4)
进一步的,点乘运算的运算结果具体为:(81377B8F DBC2839B 4FA2D0E0F8AA6853 BBBE9E9C 4099608F 8612C607 8ACD7563,
815AEBA2 17AD502D A0F48704 CC73CABB 3C06209B D87142E1 4CBD99E8BCA1680F,
30DADC5C D9E207AE E32209F6 C3CA3EC0 D800A1A4 2D33C731 53DED47C70A39D2E,
8EAF5D17 9A1836B3 59A9D1D9 BFC19F2E FCDB8293 28620962 BD3FDF15F2567F58,
A543D256 09AE9439 20679194 ED30328B B33FD156 60BDE485 C6B79A7B32B01398,
3F012DB0 4BA59FE8 8DB88932 1CC2373D 4C0C35E8 4F7AB1FF 33679BCA575D6765,
4F8624EB 435B838C CA77B2D0 347E65D5 E4696441 2A096F41 50D8C5EDE5440DDF,
0656FCB6 63D24731 E8029218 8A2471B8 B68AA993 89926849 9D23C89755A1A897,
44643CEA D40F0965 F28E1CD2 895C3D11 8E4F65C9 A0E3E741 B6DD52C0EE2D25F5,
898D6084 8026B7EF B8FCC1B2 442ECF07 95F8A81C EE99A624 8F294C82C90D26BD,
6A814AAF 475F128A EF43A128 E37F8015 4AE6CB92 CAD7D150 1BAE30F750B3A9BD,
1F96B08E 97997363 91131470 5BFB9A9D BB97F755 53EC90FB B2DDAE53C8F68E42)
更为详细的,CPU将第一寄存器的数据的数据类型转换为预设椭圆曲线上的点具体包括:
步骤601、CPU将第一寄存器的数据平均拆分为两个字节串;
步骤602、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
步骤603、CPU判断第一寄存器的数据中是否还有未被获取过的字节串,是则返回步骤602,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一寄存器的数据;
CPU将第二数据的数据类型转换成预设椭圆曲线上的点具体包括:
步骤701、CPU将第二数据平均拆分为两个字节串;
步骤702、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
步骤703、CPU判断所述第二数据中是否还有未被获取过的字节串,是则返回步骤702,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第二数据;
CPU将第三参数的数据类型转换成预设椭圆曲线上的点具体包括:
步骤801、CPU将第三参数平均拆分为两个字节串;
步骤802、CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
步骤803、CPU判断所述第三参数中是否还有未被获取过的字节串,是则返回步骤802,否则将所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第三参数;
步骤R6中将签名主公钥的数据类型转换成预设椭圆曲线上的点与步骤R4中的将签名主公钥的数据类型转换成预设椭圆曲线上的点的过程类似,在此不再赘述。
步骤R7、CPU读取待签名数据和第二参数,根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;
本实施例中根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,运算结果具体为:823C4B21 E4BD2DFE 1ED92C60 6653E996 66856315 2FC33F55 D7BFBB9BD9705ADB
具体的,步骤R7中根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器,具体为CPU将所述待签名数据和第一寄存器的数据顺序拼接,将拼接结果和所述第二参数作为输入参数调用第一密码函数,将所述第一密码函数的输出数据写入所述第一寄存器。
或者,步骤R7中根据待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器,具体包括:
步骤E1、CPU初始化计数器,并将所述待签名数据和第一寄存器的数据顺序拼接,将拼接接结果写入第一寄存器;
步骤E2、CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据为第五寄存器赋值;
步骤E3、CPU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果为所述第六寄存器赋值;
步骤E4、CPU更新计数器,判断计数器的值是否等于第五寄存器的数据,是则执行步骤B5,否则返回步骤B3;
步骤E5、CPU判断第四寄存器的数据是否为整数,是则执行E6,否则执行E7;
步骤E6、CPU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果为所述第六寄存器赋值;
步骤E7、CPU根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;
步骤E8、CPU获取第二参数,根据第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。
步骤R8、CPU获取第一数据,并判断第一数据和第一寄存器的数据是否相等,是则验证成功,否则验证失败。
实施例3
本实施例提供了一种基于用户标识的数字签名装置,参见图3,包括:
接收模块,用于接收待签名数据;并保存待签名数据;
随机数生成模块,用于生成随机数;并将随机数写入第二寄存器;
第一数据类型转换模块,用于读取预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型转换为预设椭圆曲线上的点;
第一运算模块,用于将第一数据类型转换模块转换后的第一参数和签名主公钥进行双线性对运算,再与随机数生成模块写入第二寄存器的数据进行幂运算;
具体的,第一运算模块,用于将第一数据类型转换模块转换后的第一参数和签名主公钥进行双线性对运算,再以双线性对运算的运算结果为底,第二寄存器的数据为指数进行运算。
第二数据类型转换模块,用于将第一运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
杂凑运算模块,用于获取接收模块保存的待签名数据和预存的第二参数,并根据待签名数据、所述第二数据类型转换模块写入第一寄存器的数据和第二参数进行第一杂凑运算,并将运算结果写入第一寄存器;
可选的,杂凑运算模块,具体用于获取接收模块保存的待签名数据和预存的第二参数,并将待签名数据和第一寄存器的数据顺序拼接,将拼接结果和第二参数作为输入参数调用第一密码函数,将第一密码函数的输出数据写入第一寄存器。
或者,杂凑运算模块,具体包括:
初始化子模块,用于初始化计数器;
拼接子模块,用于获取待签名数据和第二参数,并将待签名数据和第一寄存器的数据顺序拼接,将拼接接结果写入第一寄存器;
第一运算子模块,用于将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据写入第五寄存器;
第二运算子模块,用于将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;还用于当第一判断子模块判定所述计数器的值不等于第一运算子模块写入第五寄存器的数据时,将第一预设值、所述拼接子模块写入第一寄存器的数据和第一判断子模块更新后的计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;
第一判断子模块,用于更新计数器,并判断所述计数器的值是否等于第一运算子模块写入第五寄存器的数据;
第二判断子模块,用于当所述第一判断子模块判定所述计数器的值等于第一运算模块写入第五寄存器的数据时,判断所述第一运算子模块写入第四寄存器的数据是否为整数;
第三运算子模块,用于当所述第二判断模块判定所述第一运算子模块写入第四寄存器的数据为整数时,将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;
第四运算子模块,用于当第二判断模块判定第一运算子模块写入第四寄存器的数据不为整数时,根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;
第五运算子模块,用于获取第二参数,根据第三运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器;还用于获取第二参数,根据第四运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。
第二运算模块,用于读取第二参数、并根据所述杂凑运算模块写入第一寄存器的数据、所述随机数生成模块写入第二寄存器的数据和所述第二参数进行第一预设运算,将运算结果写入所述第二寄存器;
具体的,第二运算模块,用于读取第二参数,计算第二寄存器的数据和第一寄存器的数据之差,将计算结果与第二参数进行模运算,将运算结果写入第二寄存器。
第三数据类型转换模块,用于读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设椭圆曲线上的点;
第三运算模块,用于根据所述第二运算模块写入第二寄存器的数据和第三数据类型转换模块转换后的签名私钥进行第二预设运算;
具体的,第三运算模块具体用于根据第二运算模块写入第二寄存器的数据和第三数据类型转换模块转换后的签名私钥进行倍点运算。
第二数据类型转换模块,还用于将第三运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第二寄存器;
输出模块,用于将所述杂凑运算模块写入第一寄存器的数据和第二数据类型转换模块写入第二寄存器的数据作为数字签名输出。
具体的,输出模块,用于将杂凑运算模块写入第一寄存器的数据、预设分隔符和第二数据类型转换模块写入第二寄存器的数据顺序拼接,输出拼接结果。
优选的,该装置还包括:判断模块,用于判断第二运算模块写入第二寄存器的数据是否等于预设值;
本实施例中,预设值为0;
相应的,第三数据类型转换模块,用于当判断模块判定第二运算模块写入第二寄存器的数据不等于预设值时,读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设椭圆曲线上的点;
本实施例中,预设值为0;
随机数生成模块,具体用于当判断模块判定第二运算模块写入第二寄存器的数据等于预设值时生成随机数,并将随机数写入第二寄存器。
优选的,该装置还包括:获取模块,用于从密码管理***获取签名主公钥、第一参数、第二参数和与用户标识相关联的签名私钥,并保存获取到的签名主公钥、签名私钥、第一参数和第二参数。
具体的,第二数据类型转换模块具体包括:
第六运算子模块,用于将获取第二参数,根据运算结果的长度和第二参数计算得到第三数据
第一转换子模块,用于从运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第三判断子模块判定所述运算结果的横坐标中还有未被获取过的分量时从所述运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;
第三判断子模块,用于判断运算结果的横坐标中是否还有未被获取过的分量;
第二转换子模块,用于当第三判断子模块判定运算结果中没有未被获取过的分量时从运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第四判断子模块判定所述运算结果的纵坐标中还有未被获取过的分量时,从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;
第四判断子模块,用于判断运算结果的纵坐标中是否还有未被获取过的分量;当判定运算结果的纵坐标中没有未被获取过的分量时数据类型转换成功。
具体的,第一数据类型转换模块包括:第三转换子模块和第四转换子模块;
第三转换子模块具体包括:
第一拆分单元,用于将第一参数平均拆分为两个字节串;
第一转换单元,用于依次获取第一拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第一判断单元判定还有未被获取过的字节串时,依次获取第一拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
第一判断单元,用于判断第一拆分单元拆分得到的字节串中是否还有未被获取过的字节串;
第一组合单元,用于当第一判断单元判定没有未被获取过的字节串时将所述第一转换单元转换后的数据组合得到数据类型为预设椭圆曲线的点的第一参数;
第四转换子模块具体包括:
第二拆分单元,用于将签名主公钥平均拆分为两个字节串;
第二转换单元,用于依次获取所述第二拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第二判断单元判定还有未被获取过的字节串时,依次获取第二拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
第二判断单元,用于第二拆分单元拆分得到的字节串中判断是否还有未被获取过的字节串;
第二组合单元,用于当第二判断单元判定没有未被获取过的字节串时将所述第二转换单元转换后的数据组合得到数据类型为预设椭圆曲线的点的签名主公钥;
第三数据类型转换模块具体包括:
第三拆分单元,用于将签名私钥平均拆分为两个字节串;
第三转换单元,用于依次获取第三拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第三判断单元判定还有未被获取过的字节串时,依次获取第三拆分单元拆分得到的字节串的一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
第三判断单元,用于判断第三拆分单元拆分得到的字节串中是否还有未被获取过的字节串;
第三组合单元,用于当第三判断单元判定没有未被获取过的字节串时将第三转换单元转换后的数据组合得到数据类型为预设椭圆曲线的点的签名私钥。
实施例4
本实施例提供一种基于用户标识的验证装置,如图4所示,包括:
接收模块,用于接收待签名数据、数字签名和用户标识,并根据预设规则将所述数字签名截取得到第一数据和第二数据,保存第一数据、第二数据、所述待签名数据和用户标识;
可选的,接收模块,具体包括:
截取子模块,用于接收待签名数据、数字签名和用户标识,并根据预设规则将所述数字签名截取得到第一数据和第二数据;
判断子模块,用于判断所述截取子模块截取到的所述第一数据是否满足第一预设条件;
写入子模块,用于当所述判断子模块判定所述第一数据满足第一预设条件时保存所述第一数据、第二数据、所述待签名数据和所述用户标识;
报错子模块,用于当所述判断子模块判定所述第一数据不满足第一预设条件时报错,验证失败。
或者,接收模块具体包括:
截取子模块,用于接收待签名数据、数字签名和用户标识,并根据预设规则将所述数字签名截取得到第一数据和第二数据;
判断子模块,用于将所述截取子模块截取到的第二数据将第一数据的数据类型转换为预设椭圆曲线上的点,并判断所述转换后的第二数据是否满足第二预设条件;
写入子模块,用于当所述判断子模块判定所述第二数据满足第二预设条件时保存所述第一数据、第二数据、所述待签名数据和所述用户标识;
报错子模块,用于当所述判断子模块判定所述第二数据不满足第二预设条件时报错,验证失败。
第一数据类型转换模块,用于读取第一数据和预存的第一参数和签名主公钥,将第一参数和签名主公钥的数据类型分别均转换为预设椭圆曲线上的点;
第一运算模块,用于根据第一数据类型转换模块转换后的数据进行双线性对运算,再与第一数据进行幂运算;
具体的,第一运算模块,用于根据第一数据类型转换模块转换后的数据进行双线性对运算,以双线性对运算的运算结果为底,第一数据为指数进行运算。
第二数据类型转换模块,用于将第一运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
第二杂凑运算模块,用于读取用户标识、预存的函数识别符和第二参数,根据用户标识、函数识别符和第二参数进行第二杂凑运算,将运算结果写入第二寄存器;
可选的,第二杂凑运算模块,具体用于读取用户标识、预存的函数识别符和第二参数,并将用户标识和所述函数识别符顺序拼接,将拼接结果和所述第二参数作为输入参数调用第二密码函数,将第二密码函数的输出数据写入第二寄存器。
或者,第二杂凑运算模块,具体包括:
初始化子模块,用于初始化计数器;
拼接子模块,用于读取所述用户标识、预存的函数识别符和第二参数,将所述用户标识和所述函数识别符顺序拼接,将拼接接结果写入第二寄存器;
第一运算子模块,用于将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据写入第五寄存器;
第二运算子模块,用于将第二预设值、所述拼接子模块写入第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;还用于当第一判断子模块判定所述计数器的值不等于第一运算子模块写入第五寄存器的数据时,将第二预设值、所述拼接子模块写入第二寄存器的数据和第一判断子模块更新后的计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;
第一判断子模块,用于更新计数器,并判断所述计数器的值是否等于第一运算子模块写入第五寄存器的数据;
第二判断子模块,用于当所述第一判断子模块判定所述计数器的值等于第一运算模块写入第五寄存器的数据时,判断所述第一运算子模块写入第四寄存器的数据是否为整数;
第三运算子模块,用于当所述第二判断模块判定所述第一运算子模块写入第四寄存器的数据为整数时,将第二预设值、所述拼接子模块写入第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;
第四运算子模块,用于根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第二预设值、第二寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;
第五运算子模块,用于获取第二参数,根据第三运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第二寄存器;还用于获取第二参数,根据第四运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第二寄存器。
第三数据类型转换模块,用于读取第二数据和预存的第三参数和签名主公钥,将第二数据类型转换后的第一寄存器的数据、第二数据、第三参数和签名主公钥的数据类型均转换为预设椭圆曲线上的点;
第二运算模块,用于根据第二寄存器的数据、第三数据类型模块转换后的第三参数和签名主公钥进行第六预设运算,再与第三数据类型转换模块转换后的第二数据进行双线性对运算,再与第三数据类型转换模块转换后的第一寄存器的数据进行点乘运算;
具体的,第二运算模块,用于根据第二寄存器的数据与第三数据类型模块转换后的第三参数进行倍点运算,再与转换后的签名主公钥进行加法运算,将加法运算结果与第三数据类型转换模块转换后的第二数据进行双线性对运算,再与第三数据类型转换模块转换后的第一寄存器的数据进行点乘运算。
第四数据类型转换模块,用于第二运算模块的运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
第一杂凑运算模块,用于读取待签名数据和第二参数,根据待签名数据、第四数据类型转换模块转换后的第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;
可选的,第一杂凑运算模块,具体用于将待签名数据和第一寄存器的数据顺序拼接,将拼接结果和所述第二参数作为输入参数调用第一密码函数,将第一密码函数的输出数据写入第一寄存器。
或者,第一杂凑运算模块具体包括:
初始化子模块,用于初始化计数器;
拼接子模块,用于读取所述用户标识、预存的函数识别符和第二参数,将所述用户标识和所述函数识别符顺序拼接,将拼接接结果写入第一寄存器;
第一运算子模块,用于将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将顶函数的输出数据写入第五寄存器;
第二运算子模块,用于将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;还用于当第一判断子模块判定所述计数器的值不等于第一运算子模块写入第五寄存器的数据时,将第一预设值、所述拼接子模块写入第一寄存器的数据和第一判断子模块更新后的计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入第六寄存器;
第一判断子模块,用于更新计数器,并判断所述计数器的值是否等于第一运算子模块写入第五寄存器的数据;
第二判断子模块,用于当所述第一判断子模块判定所述计数器的值等于第一运算模块写入第五寄存器的数据时,判断所述第一运算子模块写入第四寄存器的数据是否为整数;
第三运算子模块,用于当所述第二判断模块判定所述第一运算子模块写入第四寄存器的数据为整数时,将第一预设值、所述拼接子模块写入第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入第六寄存器;
第四运算子模块,用于根据第三寄存器的数据、预设的密码杂凑函数的输出数据长度和第四寄存器的数据进行第四预设运算,将结果写入第七寄存器,将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值;并从杂凑值中截取长度为第七寄存器的数据的数据,将第六寄存器的数据与截取到的数据拼接后写入第六寄存器;
第五运算子模块,用于获取第二参数,根据第三运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第二寄存器;还用于获取第二参数,根据第四运算子模块写入第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。
验证模块,用于获取第一数据,并判断第一数据和第一杂凑运算模块写入第一寄存器的数据是否相等,当第一数据和第一杂凑运算模块写入第一寄存器的数据相等时验证成功,当第一数据和第一杂凑运算模块写入第一寄存器的数据不相等时验证失败。
具体的,第一数据类型转换模块包括:第一参数数据类型转换子模块和第一签名主公钥数据类型转换子模块;
第一参数数据类型转换子模块具体包括:
第一获取单元,用于读取第一参数,将第一参数平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第一判断单元中判定第一参数中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
第一判断单元,用于判断所述第一参数中是否还有未被获取过的字节串;
第一组合单元,用于当所述第一判断单元判定第一参数中没有未被获取过的字节串时将所述第一获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一参数;
第一签名主公钥数据类型转换子模块具体包括:
第二获取单元,用于读取签名主公钥,将签名主公钥平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第二判断单元判定签名主公钥中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
第二判断单元,用于判断所述签名主公钥中是否还有未被获取过的字节串;
第二组合单元,用于当所述第二判断单元判定签名主公钥中没有未被获取过的字节串时将所述第二获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的签名主公钥;
所述第三数据转换模块具体包括:第一寄存器的数据数据类型转换子模块、第二数据数据类型转换子模块、第三参数数据类型转换子模块和第二签名主公钥数据类型转换子模块;
第一寄存器的数据数据类型转换子模块具体包括:
第三获取单元,用于将第一寄存器的数据平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第三判断单元判定第一寄存器的数据中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
第三判断单元,用于判断所述第一寄存器的数据中是否还有未被获取过的字节串;
第三组合单元,用于当所述第三判断单元判定第一寄存器的数据中没有未被获取过的字节串时将所述第三获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第一寄存器的数据;
第二数据数据类型转换子模块具体包括:
第四获取单元,用于将第二数据平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第四判断单元判定第二数据中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
第四判断单元,用于判断第二数据中是否还有未被获取过的字节串;
第四组合单元,用于当第四判断单元判定第二数据中没有未被获取过的字节串时将所述第四获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第二数据;
第三参数数据类型转换子模块具体包括:
第五获取单元,用于将第三参数平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第五判断单元判定第三参数中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
第五判断单元,用于判断所述第三参数中是否还有未被获取过的字节串;
第五组合单元,用于当所述第五判断单元判定第三参数中没有未被获取过的字节串时将所述第五获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的第三参数;
第二签名主公钥数据类型转换子模块具体包括:
第六获取单元,用于将签名主公钥平均拆分为两个字节串,依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;还用于当第六判断单元中判定签名主公钥中还有未被获取过的字节串时依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
第六判断单元,用于判断所述签名主公钥中是否还有未被获取过的字节串;
第六组合单元,用于当所述第六判断单元判定签名主公钥中没有未被获取过的字节串时将所述第六获取单元所有转换后的数据组合得到数据类型为预设椭圆曲线的点的签名主公钥。
具体的,第二数据类型转换模块包括:
第一计算子模块,用于获取第二参数,根据所述第一运算模块的运算结果的长度和第二参数计算得到第三数据;
第一拼接子模块,用于从所述第一运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第一判断子模块中判定所述第一运算模块的运算结果的横坐标中还有未被获取到的分量时从所述第一运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;
第一判断子模块,用于判断所述第一运算模块的运算结果的横坐标中是否还有未被获取到的分量;
第二拼接子模块,用于当第一判断子模块中判定所述第一运算模块的运算结果的横坐标中没有未被获取到的分量时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第二判断子模块判定所述第一运算模块的运算结果纵坐标中还有未被获取到的分粮时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;
第二判断子模块,用于判断所述第一运算模块的运算结果纵坐标中是否还有未被获取到的分量;并当判定所述第一运算模块的运算结果纵坐标中没有未被获取到的分量时转换结束;
第四数据类型转换模块具体包括:
第二计算子模块,用于获取第二参数,根据所述第二运算模块的运算结果的长度和第二参数计算得到第三数据;
第三拼接子模块,用于从所述第二运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第三判断子模块中判定所述第二运算模块的运算结果的横坐标中还有未被获取到的分量时从所述第二运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;
第三判断子模块,用于判断所述第二运算模块的运算结果的横坐标中是否还有未被获取到的分量;
第四拼接子模块,用于当第三判断子模块中判定所述第二运算模块的运算结果的横坐标中没有未被获取到的分量时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第四判断子模块判定所述第二运算模块的运算结果纵坐标中还有未被获取到的分粮时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;
第四判断子模块,用于判断所述第二运算模块的运算结果纵坐标中是否还有未被获取到的分量;并当判定所述第二运算模块的运算结果纵坐标中没有未被获取到的分量时转换结束。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (44)
1.一种基于用户标识的数字签名方法,其特征在于,包括:
步骤S1、当接收到待签名数据时,CPU保存所述待签名数据;
步骤S2、所述CPU通过随机数生成器生成随机数,将所述随机数写入第二寄存器;
步骤S3、所述CPU读取预存的第一参数和签名主公钥,将所述第一参数和所述签名主公钥的数据类型均转换为预设预设椭圆曲线上的点,根据转换后的第一参数和签名主公钥进行双线性对运算,再与所述第二寄存器的数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
步骤S4、所述CPU获取所述待签名数据和预存的第二参数,并根据所述待签名数据、所述第一寄存器的数据和所述第二参数进行第一杂凑运算,将运算结果写入所述第一寄存器;
步骤S5、所述CPU读取第二参数、并根据所述第一寄存器的数据、所述第二寄存器的数据和所述第二参数进行第一预设运算,将运算结果写入所述第二寄存器;
步骤S6、所述CPU读取与用户标识相关联的签名私钥,并将签名私钥的数据类型转换为预设预设椭圆曲线上的点,并根据所述第二寄存器的数据和转换后的签名私钥进行第二预设运算,再将运算结果的数据类型转换为字节串,将转换后的运算结果写入所述第二寄存器;
步骤S7、所述CPU将所述第一寄存器的数据和所述第二寄存器的数据作为数字签名输出。
2.如权利要求1所述的方法,其特征在于,所述根据转换后的第一参数和签名主公钥进行双线性对运算,再与第二寄存器的数据进行幂运算具体为:所述CPU根据转换后的第一参数和签名主公钥进行双线性对运算,再以所述双线性对运算的运算结果为底,所述第二寄存器的数据为指数进行运算。
3.如权利要求1所述的方法,其特征在于,所述步骤S4具体为:所述CPU获取所述待签名数据和预存的第二参数,并将所述待签名数据和所述第一寄存器的数据顺序拼接,将拼接结果和所述第二参数作为输入参数调用第一密码函数,将所述第一密码函数的输出数据写入所述第一寄存器。
4.如权利要求1所述的方法,其特征在于,所述S4具体为:
步骤B1、CPU初始化计数器,并获取待签名数据和第二参数,并将所述待签名数据和第一寄存器的数据顺序拼接,将拼接接结果写入所述第一寄存器;
步骤B2、所述CPU将第二参数进行第三预设运算,将运算结果写入第三寄存器;并将第三寄存器中的数据与预设的密码杂凑函数的输出数据的长度相除,将结果写入第四寄存器;将第四寄存器的数据作为顶函数的输入参数,将所述顶函数的输出数据写入第五寄存器;
步骤B3、所述CPU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器;
步骤B4、所述CPU更新计数器,判断计数器的值是否等于第五寄存器的数据,是则执行步骤B5,否则返回步骤B3;
步骤B5、所述CPU判断第四寄存器的数据是否为整数,是则执行B6,否则执行B7;
步骤B6、所述CPU将第一预设值、第一寄存器的数据和计数器的值顺序拼接,将拼接结果作为输入参数调用密钥杂凑函数得到杂凑值,将第六寄存器的数据与杂凑值拼接,将拼接结果写入所述第六寄存器,执行步骤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、CPU从所述运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;
步骤A3、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、所述CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
步骤303、所述CPU判断所述第二数据中是否还有未被获取过的字节串,是则返回步骤302,否则将所有转换后的数据组合得到数据类型为预设预设椭圆曲线的点的签名私钥。
12.一种基于用户标识的验签方法,其特征在于,包括:
步骤R1、当接收到待签名数据、数字签名和用户标识时,CPU根据预设规则将所述数字签名截取得到第一数据和第二数据,并保存所述第一数据、第二数据、所述待签名数据和所述用户标识;
步骤R2、所述CPU读取第一数据和预存的第一参数和签名主公钥,将所述第一参数和所述签名主公钥的数据类型转换为预设预设椭圆曲线上的点,根据转换后的数据进行双线性对运算,再与所述第一数据进行幂运算,将运算结果的数据类型转换为字节串,并将转换后的运算结果写入第一寄存器;
步骤R3、所述CPU读取所述用户标识、预存的函数识别符和第二参数,根据所述用户标识、所述函数识别符和所述第二参数进行第二杂凑运算,将运算结果写入第二寄存器;
步骤R4、所述CPU读取第二数据和预存的第三参数和签名主公钥,将第一寄存器的数据、第二数据、第三参数和签名主公钥的数据类型均转换为预设预设椭圆曲线上的点,并根据第二寄存器的数据、转换后的第三参数和签名主公钥进行第六预设运算,再与转换后的第二数据进行双线性对运算,再与第一寄存器的数据进行点乘运算,将运算结果的数据类型转换成字节串,并将转换后的运算结果写入第一寄存器;
步骤R5、所述CPU读取待签名数据和第二参数,根据所述待签名数据、第一寄存器的数据和第二参数进行第一杂凑运算,将运算结果写入第一寄存器;
步骤R6、所述CPU获取第一数据,并判断第一数据和第一寄存器的数据是否相等,是则验证成功,否则验证失败。
13.如权利要求12所述的方法,其特征在于,所述根据转换后的数据进行双线性对运算,再与第一数据进行幂运算具体为:所述根据转换后的数据进行双线性对运算,以双线性对运算的运算结果为底,第一数据为指数进行运算。
14.如权利要求12所述的方法,其特征在于,所述步骤R3具体为:所述CPU读取所述用户标识、预存的函数识别符和第二参数,并将所述用户标识和所述函数识别符顺序拼接,将拼接结果和所述第二参数作为输入参数调用第二密码函数,将所述第二密码函数的输出数据写入所述第二寄存器。
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、所述CPU判断所述签名主公钥中是否还有未被获取过的字节串,是则返回步骤502,否则将所有转换后的数据组合得到数据类型为预设预设椭圆曲线的点的签名主公钥;
所述将第一寄存器的数据类型分别均转换为预设预设椭圆曲线上的点具体包括:
步骤601、所述CPU将第一寄存器的数据平均拆分为两个字节串;
步骤602、所述CPU依次获取一个字节串作为当前字节串,并将当前字节串转换为十进制数据;
步骤603、所述CPU判断所述第一寄存器的数据中是否还有未被获取过的字节串,是则返回步骤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、所述CPU获取第二参数,根据第六寄存器的数据和第二参数进行第五预设运算,将运算结果写入第一寄存器。
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所述的装置,其特征在于,第二数据类型转换模块具体包括:
第一计算子模块,用于获取第二参数,根据所述第一运算模块的运算结果的长度和第二参数计算得到第三数据;
第一拼接子模块,用于从所述第一运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入所述第一寄存器;还用于当第一判断子模块中判定所述第一运算模块的运算结果的横坐标中还有未被获取到的分量时从所述第一运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入所述第一寄存器;
第一判断子模块,用于判断所述第一运算模块的运算结果的横坐标中是否还有未被获取到的分量;
第二拼接子模块,用于当第一判断子模块判定所述第一运算模块的运算结果的横坐标中没有未被获取到的分量时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第二判断子模块判定所述第一运算模块的运算结果纵坐标中还有未被获取到的分粮时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入所述第一寄存器;
第二判断子模块,用于判断所述第一运算模块的运算结果纵坐标中是否还有未被获取到的分量;并当判定所述第一运算模块的运算结果纵坐标中没有未被获取到的分量时转换结束;
所述第四数据类型转换模块具体包括:
第二计算子模块,用于获取第二参数,根据所述第二运算模块的运算结果的长度和第二参数计算得到第三数据;
第三拼接子模块,用于从所述第二运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第三判断子模块中判定所述第二运算模块的运算结果的横坐标中还有未被获取到的分量时从所述第二运算模块的运算结果的横坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;
第三判断子模块,用于判断所述第二运算模块的运算结果的横坐标中是否还有未被获取到的分量;
第四拼接子模块,用于当第三判断子模块中判定所述第二运算模块的运算结果的横坐标中没有未被获取到的分量时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;还用于当第四判断子模块判定所述第二运算模块的运算结果纵坐标中还有未被获取到的分粮时从所述运算结果的纵坐标中依次获取长度为第三数据的分量作为当前分量,将所述当前分量转换为十六进制数据,将转换后的数据与第一寄存器的数据拼接,并将拼接结果写入第一寄存器;
第四判断子模块,用于判断所述第二运算模块的运算结果纵坐标中是否还有未被获取到的分量;并当判定所述第二运算模块的运算结果纵坐标中没有未被获取到的分量时转换结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810037962.2A CN108259184B (zh) | 2018-01-16 | 2018-01-16 | 一种基于用户标识的数字签名、验签方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810037962.2A CN108259184B (zh) | 2018-01-16 | 2018-01-16 | 一种基于用户标识的数字签名、验签方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108259184A true CN108259184A (zh) | 2018-07-06 |
CN108259184B CN108259184B (zh) | 2021-06-08 |
Family
ID=62740718
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810037962.2A Active CN108259184B (zh) | 2018-01-16 | 2018-01-16 | 一种基于用户标识的数字签名、验签方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108259184B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111162907A (zh) * | 2019-12-28 | 2020-05-15 | 飞天诚信科技股份有限公司 | 一种协商密钥的生成方法及智能卡设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101626294A (zh) * | 2008-07-07 | 2010-01-13 | 华为技术有限公司 | 基于身份的认证方法、保密通信方法、设备和*** |
CN103546288A (zh) * | 2013-09-25 | 2014-01-29 | 中国科学院数据与通信保护研究教育中心 | Sm2数字签名生成算法的实现方法及装置 |
WO2015021934A1 (zh) * | 2013-08-16 | 2015-02-19 | 西安西电捷通无线网络通信股份有限公司 | 一种生成数字签名的方法及装置 |
CN104753684A (zh) * | 2015-04-15 | 2015-07-01 | 飞天诚信科技股份有限公司 | 一种实现数字签名和验签的方法 |
CN104852805A (zh) * | 2015-05-11 | 2015-08-19 | 中国科学院软件研究所 | 一种抵抗基于格的错误攻击的sm2签名算法防护方法 |
-
2018
- 2018-01-16 CN CN201810037962.2A patent/CN108259184B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101626294A (zh) * | 2008-07-07 | 2010-01-13 | 华为技术有限公司 | 基于身份的认证方法、保密通信方法、设备和*** |
WO2015021934A1 (zh) * | 2013-08-16 | 2015-02-19 | 西安西电捷通无线网络通信股份有限公司 | 一种生成数字签名的方法及装置 |
CN103546288A (zh) * | 2013-09-25 | 2014-01-29 | 中国科学院数据与通信保护研究教育中心 | Sm2数字签名生成算法的实现方法及装置 |
CN104753684A (zh) * | 2015-04-15 | 2015-07-01 | 飞天诚信科技股份有限公司 | 一种实现数字签名和验签的方法 |
CN104852805A (zh) * | 2015-05-11 | 2015-08-19 | 中国科学院软件研究所 | 一种抵抗基于格的错误攻击的sm2签名算法防护方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111162907A (zh) * | 2019-12-28 | 2020-05-15 | 飞天诚信科技股份有限公司 | 一种协商密钥的生成方法及智能卡设备 |
CN111162907B (zh) * | 2019-12-28 | 2023-05-23 | 飞天诚信科技股份有限公司 | 一种协商密钥的生成方法及智能卡设备 |
Also Published As
Publication number | Publication date |
---|---|
CN108259184B (zh) | 2021-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DK2122527T3 (en) | Autentificeringsanordning and procedure | |
CN107395574A (zh) | 信息标识、信息请求及提供方法和装置、存储介质和设备 | |
CN108540291A (zh) | 基于身份的云存储中数据完整性验证方法 | |
CN112118100B (zh) | 改进的可链接环签名方法、验证方法、装置、电子设备及介质 | |
CN104200177A (zh) | 一种移动医疗敏感数据加密方法 | |
CN110311776A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN104166823A (zh) | 一种智慧医疗数据安全保障*** | |
US20160149708A1 (en) | Electronic signature system | |
CN112149156B (zh) | 用于公开记录的属性和数据条目的***和选择器及其方法 | |
CN115102688A (zh) | 数据处理方法、多项式计算方法及电子设备 | |
CN108923907A (zh) | 一种基于模容错学习问题的同态內积方法 | |
CA3167092A1 (en) | Generating emoji sequence identifications to identify wallet addresses for blockchain wallets | |
CN109359471A (zh) | 基于用户身份的加密方法、装置、***、设备和介质 | |
CN108259184A (zh) | 一种基于用户标识的数字签名、验签方法及装置 | |
CN105991289A (zh) | Sm3密码算法的侧信道能量分析方法及装置 | |
CN115514496A (zh) | 一种基于卷积神经网络的rsa数字签名伪造方法 | |
CN105338004B (zh) | 云环境下低性能设备适用的具有隐私保护的公开审计方法 | |
US9842086B2 (en) | Calculation device, calculation method, and program | |
CN107533454B (zh) | 用于固定执行流乘数再译码和标量乘法的方法和装置 | |
CN109842493A (zh) | 基于非对称密钥池的抗量子计算环签名方法和*** | |
CN115134093B (zh) | 数字签名方法及计算设备 | |
CN109086063A (zh) | 软件更新方法、文件加密方法、装置及存储介质 | |
KR102519490B1 (ko) | 영지식 증명 기반 블록체인 가상머신의 검증방법 | |
CN112632636B (zh) | 一种密文数据比较结果的证明与验证方法及装置 | |
RU2356172C1 (ru) | Способ формирования и проверки подлинности электронной цифровой подписи, заверяющей электронный документ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
OL01 | Intention to license declared | ||
OL01 | Intention to license declared |