CN104331657A - 一种支持数据签名的java卡实现方法 - Google Patents
一种支持数据签名的java卡实现方法 Download PDFInfo
- Publication number
- CN104331657A CN104331657A CN201410513378.1A CN201410513378A CN104331657A CN 104331657 A CN104331657 A CN 104331657A CN 201410513378 A CN201410513378 A CN 201410513378A CN 104331657 A CN104331657 A CN 104331657A
- Authority
- CN
- China
- Prior art keywords
- function
- parameter
- value
- data
- signed
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/31—User authentication
- G06F21/34—User authentication involving the use of external additional devices, e.g. dongles or smart cards
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供一种支持数据签名的java卡实现方法,属于信息安全领域。采用的方法为:java卡虚拟机根据函数调用指令,执行被调用的函数;通过执行第一函数,将传入的第一数据信息作为私钥保存,根据私钥计算公钥,对第二数据信息、公钥进行哈希计算,将得到的哈希结果作为第一中间值,将计算模式信息作为签名模式保存,将公钥、传入的第二数据信息和第一中间值保存;通过执行第二函数,更新第一向量值;通过执行第三函数,分配存储区,对第一向量值和传入的原待签名数据进行哈希计算,得到第二中间值,获取私钥,对私钥和第二中间值进行签名,将得到的签名结果保存至存储区中,计算签名结果的长度,返回签名结果的长度。
Description
技术领域
本发明涉及信息安全领域,特别涉及一种支持数据签名的java卡实现方法。
背景技术
随着通信技术的迅速发展,信息网络得到广泛的应用,与此同时计算机网络犯罪也层出不穷。人们通常采用集合国密算法的智能卡进行身份识别,从而达到保护信息网络内部数据安全的目的。
目前,智能卡种类很多,java卡作为智能卡中的一种得到广泛应用,然而,本发明技术人员在开发的过程中发现,java卡不能够支持国密算法,限制了java卡在身份识别方面的应用。
发明内容
为了解决现有技术的缺陷,现提出一种支持数据签名的java卡实现方法,包括:java卡虚拟机进行初始化时,清空第一存储区;当所述java卡虚拟机执行函数调用指令时,所述java卡虚拟机从堆栈中获取函数引用及对象引用:
当第一函数被调用时,执行步骤S1;
步骤S1:所述java卡虚拟机获取第一数据信息、计算模式信息、第二数据信息,执行步骤S2;
步骤S2:所述java卡虚拟机判断所述第一数据信息的类型和所述计算模式信息的类型,如果所述第一数据信息为私钥类型,并且所述计算模式信息为签名模式,则将所述第一数据信息作为私钥保存至所述第一存储区中,根据所述私钥计算公钥,执行步骤S3;否则报错,结束;
步骤S3:所述java卡虚拟机将预先设置的第一向量值置为初始值,并对所述公钥、所述第二数据信息以及预先保存的第一预设数据、第二预设数据、第三预设数据、第四预设数据进行哈希计算,将得到的哈希结果作为第一中间值,将所述公钥、所述签名模式、所述第二数据信息和所述第一中间值保存至所述第一存储区中;
当第二函数被调用时,所述java卡虚拟机获取传入的原待签名数据,判断第一存储区中是否存在公钥、签名模式、第二数据信息、第一中间值,是则获取第一向量值,采用预设哈希算法对所述原待签名数据和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值;否则报错,结束;
当第三函数被调用时,执行步骤T1;
步骤T1:所述java卡虚拟机获取传入的原待签名数据,并且分配第二存储区,判断第一存储区中是否存在私钥、签名模式、第二数据信息、第一中间值,是则执行步骤T2;否则报错,结束;
步骤T2:所述java卡虚拟机获取第一向量值,执行步骤T3;
步骤T3:所述java卡虚拟机采用预设哈希算法对所述原待签名数据和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值,采用预设哈希算法对所述第一向量值进行哈希计算,将得到的哈希结果作为第二中间值,从所述第一存储区中获取私钥,采用签名算法对所述私钥和所述第二中间值进行签名,将得到的签名结果保存至所述第二存储区中,计算所述签名结果的长度,返回所述签名结果的长度。
所述步骤S1中,所述java卡虚拟机获取第一数据信息、计算模式信息、第二数据信息,具体为:
步骤01:所述java卡虚拟机接收第一函数的第一参数、第一函数的第二参数、第一函数的第三参数、第一函数的第四参数、第一函数的第五参数;
步骤02:所述java卡虚拟机根据所述第一函数的第一参数查找与其对应的地址,获取所述地址中的数据将所述数据作为第一数据信息,将所述第一函数的第二参数作为计算模式信息;根据所述第一函数的第三参数、所述第一函数的第四参数、所述第一函数的第五参数获取第二数据信息。
当第一函数被调用时,还包括:将表示第一函数的第一参数已经初始化的标识置位;所述java卡虚拟机接收第一函数的第一参数、第一函数的第二参数、第一函数的第三参数、第一函数的第四参数、第一函数的第五参数之后,还包括:
步骤1:所述java卡虚拟机根据所述表示第一函数的第一参数已经初始化的标识,判断所述第一函数的第一参数是否已经初始化,如果已经初始化,则执行步骤2;否则报错,结束;
步骤2:所述java卡虚拟机判断所述第一函数的第三参数、所述第一函数的第四参数、所述第一函数的第五参数是否合法,如果合法,则执行步骤02;如果不合法,则报错,结束。
所述判断所述第一数据信息的类型,具体包括:
计算所述第一数据信息的长度,根据所述第一数据信息的长度判断所述第一数据信息的类型,如果所述第一数据信息的长度为第一预设长度,则确定所述第一数据信息为私钥类型;否则确定所述第一数据信息为公钥类型。
所述步骤S2中,如果所述第一数据信息为私钥类型,并且所述计算模式信息为签名模式时,还包括:
判断所述第一存储区中是否存在私钥、签名模式、所述第二数据信息,是则结束;否则将所述第一数据信息作为私钥保存至第一存储区中,根据所私钥计算公钥,执行步骤S3。
所述步骤S3中,所述采用预设哈希算法对所述第二数据信息、所述第一预设数据、所述第二预设数据、所述第三预设数据、所述第四预设数据、所述公钥进行哈希计算,具体包括:
根据所述第二数据信息计算第二数据信息长度值,将所述第二数据信息长度值、所述第二数据信息、所述第三预设数据、所述第四预设数据、所述第一预设数据、所述第二预设数据、所述公钥顺序拼接得到拼接结果,采用预设哈希算法对所述拼接结果进行哈希计算。
当所述第二函数被调用时,所述java卡虚拟机获取传入的原待签名数据,具体包括:
步骤11:所述java卡虚拟机接收第二函数的第一参数、第二函数的第二参数、第二函数的第三参数,将所述第二函数的第一参数作为存储原待签名数据的数组,将所述第二函数的第二参数作为所述原待签名数据在存储原待签名数据的数组中的起始地址,将所述第二函数的第三参数作为原待签名数据的长度,根据所述原待签名数据在存储原待签名数据的数组中的起始地址和所述原待签名数据的长度,从存储原待签名数据的数组中获取所述原待签名数据。
所述java卡虚拟机接收第二函数的第一参数、第二函数的第二参数、第二函数的第三参数之后,还包括:
判断是否同时满足所述第二函数的第一参数不为空、所述第二函数的第二参数大于等于0,并且所述第二函数的第三参数大于等于0,是则执行步骤11;否则报错,结束。
所述采用预设哈希算法对所述原待签名数据和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值,具体包括:
步骤a1:判断所述第一向量值是否为初始值,是则执行步骤a2;否则执行步骤a3;
步骤a2:将所述第一向量值置为预设值,从所述第一存储区中获取所述第一中间值,采用预设哈希算法对所述第一中间值和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值,执行步骤a3;
步骤a3:采用预设哈希算法对所述原待签名数据和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值。
所述步骤T1中,所述java卡虚拟机获取传入的原待签名数据,并且分配第二存储区,具体包括:
步骤21:所述java卡虚拟机接收第三函数的第一参数、第三函数的第二参数、第三函数的第三参数、第三函数的第四参数、第三函数的第五参数;
步骤22:所述java卡虚拟机将所述第三函数的第一参数作为存储原待签名数据的数组,将所述第三函数的第二参数作为原待签名数据在存储原待签名数据的数组中的起始地址,将所述第三函数的第三参数作为原待签名数据的长度,根据原待签名数据在存储原待签名数据的数组的起始地址和原待签名数据的长度,从存储原待签名数据的数组中获取原待签名数据;将所述第三函数的第四参数作为存储签名结果的数组,将所述第三函数的第五参数作为签名结果在存储签名结果的数组中的起始地址,根据签名结果在存储数组中的起始地址和存储签名结果的数组分配第二存储区。
所述java卡虚拟机接收第三函数的第一参数、第三函数的第二参数、第三函数的第三参数、第三函数的第四参数、第三函数的第五参数之后,还包括:
判断是否同时满足所述第三函数的第一参数是否不为空、所述第三函数的第二参数大于等于0、所述第三函数的第三参数大于等于0、所述第三函数的第四参数不为空,并且所述第三函数的第五参数大于等于0,是则执行步骤22;否则报错,结束。
所述步骤T2中,所述获取第一向量值之后,还包括:
步骤b1:判断所述第一向量值是否为初始值,是则执行步骤b2;否则执行步骤T3;
步骤b2:将所述第一向量值置为预设值,从所述第一存储区中获取所述第一中间值,执行步骤b3;
步骤b3:采用预设哈希算法对所述第一中间值和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值,执行步骤T3。
所述步骤T3中,所述采用签名算法对所述私钥和所述第二中间值进行签名,将得到的签名结果保存至所述第二存储区中,具体包括:
步骤c1:获取预先保存的第一常量,根据所述第一常量生成第一随机数;
步骤c2:获取预先保存的第一预设数据、第二预设数据,根据所述第一预设数据、所述第二预设数据和所述第一随机数生成临时参数;
步骤c3:根据所述第二中间值、所述第一常量和所述临时参数生成第一取模值,并判断所述第一取模值是否为所需值,是则执行步骤c4;否则返回步骤c1;
步骤c4:根据所述私钥、所述第一取模值和所述第一随机数生成第二取模值,并判断所述第二取模值是否为所需值,是则执行步骤c5;否则返回执行步骤c1;
步骤c5:根据所述第一取模值和所述第二取模值生成签名结果。
所述步骤c3中,所述根据所述第二中间值、所述第一常量和所述临时参数生成第一取模值,具体包括:
对所述第二中间值和所述临时参数执行模数为所述第一常量的加法运算,并将取模结果作为第一取模值。
所述判断所述第一取模值是否为所需值,具体为:
判断所述第一取模值是否等于0,或等于所述第一常量与所述第一随机数的差,是则确定所述第一取模值不是所需值;否则确定所述第一取模值是所需值。
所述根据所述私钥、所述第一取模值和所述第一随机数生成第二取模值,具体为:
步骤c4-1:将所述私钥加1,并对得到的结果取倒数,将所述倒数的值记为第一运算值;
步骤c4-2:将所述第一取模值与所述私钥做乘积,并以所述第一随机数为被减数减去上述乘积结果,得到第二运算值;
步骤c4-3:对所述第一运算值和所述第二运算值执行模数为所述第一常量的乘法运算,并记取模结果作为第二取模值。
所述判断所述第二取模值是否为所需值,具体为:
判断所述第二取模值是否为0,是则确定所述第二取模值不是所需值;否则确定所述第二取模值是所需值。
所述步骤c5中所述根据所述第一取模值和所述第二取模值生成签名结果,具体包括:
将所述第一取模值和所述第二取模值分别转换为长度为256比特的字节类型,得到第一字节串和第二字节串,将所述第一字节串和所述第二字节串顺序拼接,将拼接结果作为签名结果。
采用本发明提供的方法,能达到的有益效果为,java卡中进行数据签名,扩展了java卡的应用范围,提高了java卡在应用过程中的安全性。
附图说明
图1为实施例1提供的一种支持数据签名的java卡实现方法流程图;
图2为实施例1提供的执行第一函数的方法流程图;
图3为实施例1提供的执行第二函数的方法流程图;
图4为实施例1提供的执行第三函数的方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式做进一步的详细描述。
实施例1
本发明提供一种支持数据签名的java卡实现方法,如图1所示,具体包括:
步骤W01:java卡虚拟机进行初始化,清空第一存储区;
步骤W02:当java卡虚拟机执行函数调用指令时,从堆栈中获取函数引用及对象引用;
步骤W03:java卡虚拟机判断函数引用,如果函数引用等于java卡标准函数中的第一函数,则执行步骤W04;如果函数引用等于java卡标准函数中的第二函数,则执行步骤W05;如果函数引用等于java卡标准函数中的第三函数,则执行步骤W06;
步骤W04:java卡虚拟机根据函数引用及对象引用获取第一函数地址,并将java卡虚拟机的PC指针指向第一函数地址,执行第一函数,然后返回步骤W02;
步骤W05:java卡虚拟机根据函数引用及对象引用获取第二函数地址,并将java卡虚拟机的PC指针指向第二函数地址,执行第二函数,然后返回步骤W02;
步骤W06:java卡虚拟机根据函数引用及对象引用获取第三函数地址,并将java卡虚拟机的PC指针指向第三函数地址,执行第三函数,然后返回步骤W02;
java卡虚拟机执行第一函数时,如图2所示,包括以下步骤:
步骤k01:java卡虚拟机获取第一数据信息、计算模式信息、第二数据信息;
具体地,
步骤k01-1:java卡虚拟机接收第一函数的第一参数、第一函数的第二参数、第一函数的第三参数、第一函数的第四参数、第一函数的第五参数;
其中,第一函数的第一参数为密钥对象,第一函数的第二参数为计算模式信息,第一函数的第三参数为存储第二数据信息的数组,第一函数的第四参数为起始偏移量,第一函数的第五参数为第二数据信息长度;java卡虚拟机根据上述参数获取第二信息。
例如:java卡虚拟机接收到的第一函数的第一参数为:1000;
第一函数的第二参数为:0;
第一函数的第三参数为:
68E7FA9E9C7F5E344C579E4BCF6509A7F39789F514AB8F96CA8CBC414C940E93;
第一函数的第四参数为:01;
第一函数的第五参数为:08。
步骤k01-2:java卡虚拟机判断第一函数的第一参数是否已经初始化,如果已经初始化,则执行步骤k01-3;否则报错,结束;
本实施例中,java卡虚拟机调用第一函数时,将表示第一函数的第一参数已经初始化的标识置位;java卡虚拟机根据表示第一函数的第一参数已经初始化的标识判断第一函数的第一参数是否初始化,如果表示第一函数的第一参数已经初始化的标识置位,则表示第一函数的第一参数已经初始化;如果表示第一函数的第一参数已经初始化的标识未置位,则表示第一函数的第一参数未初始化。
步骤k01-3:java卡虚拟机判断第一函数的第三参数、第一函数的第四参数、第一函数的第五参数是否合法,如果合法,则执行步骤k01-4;如果不合法,则报错,结束。
本实施例中,java卡虚拟机判断是否同时满足第一函数的第三参数不为空,第一函数的第四参数大于等于0,并且第一函数的第五参数大于等于0,是则执行步骤k01-4;否则报错,结束;
例如:第一函数的第三参数为:
68E7FA9E9C7F5E344C579E4BCF6509A7F39789F514AB8F96CA8CBC414C940E93;
第一函数的第四参数为:01;
第一函数的第五参数为:08。
即:同时满足第一函数的第三参数不为空,第一函数的第四参数大于等于0,并且第一函数的第五参数大于等于0,执行步骤k01-4;
步骤k01-4:根据第一函数的第一参数查找与其对应的地址,获取地址中的数据将数据作为第一数据信息,将第一函数的第二参数作为计算模式信息;根据第一函数的第三参数、第一函数的第四参数、第一函数的第五参数获取第二数据信息。
例如:第一函数的第一参数为:1000;
获取1000对应的地址中存储的第一数据信息为:
FB0EEB34DD4BD85C645F2CD2DD343ECD0ED03349282C3E1BF6DB51F1384FBC76;
根据第一函数的第二参数确定计算模式信息为:签名模式;
根据第一函数的第三参数、第一函数的第四参数、第一函数的第五参数获取第二数据信息为:31323334353637383132333435363738;
步骤k02:java卡虚拟机判断第一数据信息的类型和计算模式信息的类型,如果第一数据信息为私钥类型,并且计算模式信息为签名模式,则执行步骤k03;否则报错,结束;
本实施例中,判断第一数据信息的类型,具体为:计算第一数据信息的长度,根据第一数据信息的长度判断第一数据信息的类型,如果第一数据信息的长度为第一预设长度,则确定第一数据信息为私钥类型;否则确定第一数据信息为公钥类型。优选的,第一预设长度为32字节。判断计算模式信息的类型,具体为:判断第一函数的第二参数,如果第一函数的第二参数的取值为0,则计算模式信息为签名模式;否则计算模式信息不是签名模式。
例如:第一数据信息为:
FB0EEB34DD4BD85C645F2CD2DD343ECD0ED03349282C3E1BF6DB51F1384FBC76;第一数据信息的长度为32字节,等于第一预设长度,确定第一数据信息为私钥;第一函数的第二参数为0,确定计算模式信息是签名模式,执行步骤k03;
步骤k03:java卡虚拟机判断第一存储区中是否存在私钥、签名模式、第二数据信息,是则报错,结束;否则执行步骤k04;
本实施例中,以第一存储区中不存在私钥、签名模式、第二数据信息,执行步骤k04为例来说明;
步骤k04:java卡虚拟机将第一数据信息作为私钥保存至第一存储区中,根据私钥计算公钥,执行步骤k05;
例如,私钥为:
FB0EEB34DD4BD85C645F2CD2DD343ECD0ED03349282C3E1BF6DB51F1384FBC76;根据私钥计算得到的公钥为:
A876F78AABB8C8C0BBC0D03CD76D2AE8AD19FCF176F6B0E7D0C803783B0CBC91
2E00F90B473D38D95A03C1C1B3629D0DA1BD07FC796D7CC6E365C8296245E305;
步骤k05:java卡虚拟机将预先设置的第一向量值置为初始值,获取预先保存的第一预设数据、第二预设数据、第三预设数据、第四预设数据,采用预设哈希算法对第二数据信息、第一预设数据、第二预设数据、第三预设数据、第四预设数据、公钥进行哈希计算,将得到的哈希结果作为第一中间值,将公钥、签名模式、第二数据信息和第一中间值保存至第一存储区中;
本实施例中,采用预设哈希算法对第二数据信息、第一预设数据、第二预设数据、第三预设数据、第四预设数据、公钥进行哈希计算,具体包括:
根据第二数据信息计算第二数据信息长度值,将第二数据信息长度值、第二数据信息、第三预设数据、第四预设数据、第一预设数据、第二预设数据、公钥顺序拼接得到拼接结果,采用预设哈希算法对拼接结果进行哈希计算。
其中,第一向量值的初始值为0;
第一预设数据为:
32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7;
第二预设数据为:
BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0;
第三预设数据为:
FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC;
第四预设数据为:
28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93;
需要说明的是,java卡虚拟机将公钥、签名模式、第二数据信息和第一中间值保存至第一存储区中,具体为,将公钥、签名模式、第二数据信息和第一中间值分别保存至第一存储区中,并记录公钥、签名模式、第二数据信息和第一中间值在第一存储区中的地址,java卡虚拟机判断第一存储区中是否存在私钥、签名模式、第二数据信息,具体为,判断在第一存储区中与记录的地址对应的地址中是否存在数据,是则确定;
例如:根据第二数据信息计算第二数据信息长度值为:0080;
将第二数据信息长度值、第二数据信息、第三预设数据、第四预设数据、第一预设数据、第二预设数据、公钥顺序拼接得到拼接结果,得到的拼接结果为:
0080
31323334353637383132333435363738
FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC
28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93
32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7
BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0
A876F78AABB8C8C0BBC0D03CD76D2AE8AD19FCF176F6B0E7D0C803783B0CBC912E00F90B473D38D95A03C1C1B3629D0DA1BD07FC796D7CC6E365C8296245E305;
对上述拼接结果进行哈希计算,得到的第一中间值为:
6F73DC832ABB274E6B4A7305BE2A4C0F3B78C77F585B3680FF31814E9FE4AA3B。
java卡虚拟机调用第二函数时,如图3所示,包括以下步骤:
步骤m01:java卡虚拟机获取传入的原待签名数据;
具体地,
步骤m01-1:java卡虚拟机接收第二函数的第一参数、第二函数的第二参数、第二函数的第三参数;
其中,第二函数的第一参数为存储原待签名数据的数组,第二函数的第二参数为原待签名数据在存储原待签名数据的数组中的起始地址,第二函数的第三参数为原待签名数据的长度;java卡虚拟机可以根据原待签名数据在存储原待签名数据的数组中的起始地址和原待签名数据的长度从存储原待签名数据的数组中获取原待签名数据。
例如:第二函数的第一参数为:
CA305245A430F32B 37E7FA9E5C7F5E31 1C579E1BCF6502A7F49359F5312B8F96 CD8CBF137C910E93;
第二函数的第二参数为:01;
第二函数的第三参数为:08。
步骤m01-2:java卡虚拟机判断第二函数的第一参数是否不为空,是则执行步骤m01-3;否则报错,结束;
以步骤m01-1中的数据为例,第二函数的第一参数不为空,执行步骤m01-3;
步骤m01-3:java卡虚拟机判断是否同时满足第二函数的第二参数大于等于0,并且第二函数的第三参数大于等于0,是则执行步骤m01-4;否则报错,结束;
以步骤m01-1中的数据为例,第二函数的第二参数大于0,并且第二函数的第三参数大于0,执行步骤m01-4;
步骤m01-4:java卡虚拟机将第二函数的第一参数作为存储原待签名数据的数组,将第二函数的第二参数作为原待签名数据在存储原待签名数据的数组中的起始地址,将第二函数的第三参数作为原待签名数据的长度,根据原待签名数据在存储原待签名数据的数组中的起始地址和原待签名数据的长度,从存储原待签名数据的数组中获取原待签名数据;
例如:java卡虚拟机获取到的原待签名数据为:
CA305245A430F32B;
步骤m02:java卡虚拟机判断第一存储区中是否存在公钥、签名模式、第二数据信息、第一中间值,是则执行步骤m03;否则报错,结束;
步骤m03:java卡虚拟机获取第一向量值,采用预设哈希算法对原待签名数据和第一向量值进行哈希计算,用得到的哈希结果更新第一向量值;
具体地,
步骤m03-1:判断第一向量值是否为初始值,是则执行步骤m03-2;否则执行步骤m03-3;
以第一向量值是初始值为例,执行步骤m03-2;
步骤m03-2:将第一向量值置为预设值,从第一存储区中获取第一中间值,采用预设哈希算法对第一中间值和第一向量值进行哈希计算,用得到的哈希结果更新第一向量值,执行步骤m03-3;
例如:第一中间值为:
6F73DC832ABB274E6B4A7305BE2A4C0F3B78C77F585B3680FF31814E9FE4AA3B;采用预设哈希算法对第一中间值和第一向量值进行计算,得到的哈希结果为:
43A3DC832A222A4E324AA3052E2A4C0F32A8CAAF58523380FF31814E9FE4AA32,将其作为更新后的第一向量值,执行步骤m03-3;
步骤m03-3:采用预设哈希算法对原待签名数据和第一向量值进行哈希计算,用得到的哈希结果更新第一向量值。
例如:原待签名数据为:CA305245A430F32B;
第一向量值为:
43A3DC832A222A4E324AA3052E2A4C0F32A8CAAF58523380FF31814E9FE4AA32;
对原待签名数据和第一向量值进行哈稀计算得到的更新后的第一向量值为:
53A3DC83EAE7EA5E3E5A6305E3EA5C0F3EA8CA8F585E3380FF31815E9FB5A73E。
java卡虚拟机调用第三函数时,如图4所示,包括以下步骤:
步骤T1:java卡虚拟机获取传入的原待签名数据,并且分配第二存储区;
具体地:
步骤T1-1:java卡虚拟机接收第三函数的第一参数、第三函数的第二参数、第三函数的第三参数、第三函数的第四参数、第三函数的第五参数;
其中,第三函数的第一参数为存储原待签名数据的数组,第三函数的第二参数为原待签名数据在存储原待签名数据的数组中的起始地址,第三函数的第三参数为原待签名数据的长度,第三函数的第四参数为存储签名结果的数组、第三函数的第五参数为签名结果在存储签名结果的数组中的起始地址,java卡虚拟机可以根据原待签名数据在存储原待签名数据的数组的起始地址和原待签名数据的长度,从存储原待签名数据的数组中获取原待签名数据,根据签名结果在存储数组中的起始地址和存储签名结果的数组分配第二存储区;
步骤T1-2:java卡虚拟机判断第三函数的第一参数是否不为空,是则执行步骤T1-3;否则报错,结束;
步骤T1-3:java卡虚拟机判断是否同时满足第三函数的第二参数大于等于0,并且第三函数的第三参数大于等于0,是则执行步骤T1-4;否则报错,结束;
步骤T1-4:java卡虚拟机判断是否同时满足第三函数的第四参数不为空,并且第三函数的第五参数大于等于0,是则执行步骤T1-5;否则报错,结束;
步骤T1-5:java卡虚拟机将第三函数的第一参数作为存储原待签名数据的数组,将第三函数的第二参数作为原待签名数据在存储原待签名数据的数组中的起始地址,将第三函数的第三参数作为原待签名数据的长度,根据原待签名数据在存储原待签名数据的数组的起始地址和原待签名数据的长度,从存储原待签名数据的数组中获取原待签名数据;将第三函数的第四参数作为存储签名结果的数组,将第三函数的第五参数作为签名结果在存储签名结果的数组中的起始地址,根据签名结果在存储数组中的起始地址和存储签名结果的数组分配第二存储区;
例如,第三函数的第一参数为:31323334;
第三函数的第二参数为:00;
第三函数的第三参数为:04;
第三函数的第四参数为:输出数据数组的应用;
第三函数的第五参数为:0;
获取到的原待签名数据为:CA305245A430F32B;
步骤T2:java卡虚拟机判断第一存储区中是否存在私钥、签名模式、第二数据信息、第一中间值,是则执行步骤T3;否则报错,结束;
以第一存储区中存在私钥、签名模式、第二数据信息、第一中间值为例,执行步骤T3;
步骤T3:java卡虚拟机获取第一向量值,执行步骤T4;
具体地,本步骤包括:
步骤T3-1:java卡虚拟机获取第一向量值,判断第一向量值是否为初始值,是则执行步骤T3-2;否则执行步骤T4;
步骤T3-2:java卡虚拟机将第一向量值置为预设值,从第一存储区中获取第一中间值,执行步骤T3-3;
步骤T3-3:java卡虚拟机采用预设哈希算法对第一中间值和第一向量值进行哈希计算,用得到的哈希结果更新第一向量值,执行步骤T4。
例如:第一中间值为:
6F73DC832ABB274E6B4A7305BE2A4C0F3B78C77F585B3680FF31814E9FE4AA3B;
更新后的第一向量值为:
43A3DC832A222A4E324AA3052E2A4C0F32A8CAAF58523380FF31814E9FE4AA32;
步骤T4:java卡虚拟机采用预设哈希算法对原待签名数据和第一向量值进行哈希计算,用得到的哈希结果更新第一向量值,采用预设哈希算法对第一向量值进行哈希计算,将得到的哈希结果作为第二中间值,从第一存储区中获取私钥,采用签名算法对私钥和第二中间值进行签名,将得到的签名结果保存至第二存储区中,计算签名结果的长度,返回签名结果的长度。
具体地:
步骤T4-1:java卡虚拟机采用预设哈希算法对原待签名数据和第一向量值进行哈希计算,用得到的哈希结果更新第一向量值,采用预设哈希算法对第一向量值进行计算,将得到的计算结果作为第二中间值;
步骤T4-2:java卡虚拟机从第一存储区中获取私钥;
步骤T4-3:java卡虚拟机获取预先保存的第一常量,根据第一常量生成第一随机数,获取预先保存的第一预设数据、第二预设数据,根据第一预设数据、第二预设数据和第一随机数生成临时参数,根据第二中间值、第一常量和临时参数生成第一取模值,并判断第一取模值是否为所需值,是则执行步骤T4-4;否则返回步骤T4-3;
具体地,java卡虚拟机获取预先保存的第一常量,根据第一常量生成第一随机数,获取预先保存的第一预设数据、第二预设数据,根据第一预设数据、第二预设数据和第一随机数生成临时参数,对第二中间值和临时参数执行模数为第一常量的加法运算,并将取模结果作为第一取模值,判断第一取模值是否等于0,或等于第一常量与第一随机数的差,是则确定第一取模值不是所需值;否则确定第一取模值是所需值。
步骤T4-4:java卡虚拟机根据私钥、第一取模值和第一随机数生成第二取模值,并判断第二取模值是否为所需值,是则执行步骤T4-5;否则返回执行步骤T4-3;
具体地,java卡虚拟机将私钥加1,并对得到的结果取倒数,将倒数的值记为第一运算值,将第一取模值与私钥做乘积,并以第一随机数为被减数减去上述乘积结果,得到第二运算值,对第一运算值和第二运算值执行模数为第一常量的乘法运算,并记取模结果作为第二取模值,判断第二取模值是否为0,是则确定第二取模值不是所需值;否则确定第二取模值是所需值。
步骤T4-5:java卡虚拟机根据第一取模值和第二取模值生成签名结果,计算签名结果长度,返回签名结果长度。
具体地,java卡虚拟机将第一取模值和第二取模值分别转换为长度为256比特的字节类型,得到第一字节串和第二字节串,将第一字节串和第二字节串顺序拼接,将拼接结果作为签名结果。
例如:java卡虚拟机采用预设哈希算法对原待签名数据和第一向量值进行哈希计算,得到更新后的第一向量值为:
53A3DC83EAE7EA5E3E5A6305E3EA5C0F3EA8CA8F585E3380FF31815E9FB5A73E;采用预设哈希算法对第一向量值进行计算,得到第二中间值为:
83A3DC23BAB7BA8B3B8A6308B3BA8C0F3BA2CA2F828B3320FF31218B9FB8A73B;
获取到的私钥为:
FB0EEB34DD4BD85C645F2CD2DD343ECD0ED03349282C3E1BF6DB51F1384FBC76;
得到的签名结果为:
635C1F237D5A57CAD826208AF564D28A1E9383023FD0032A540A8986B335FD54FC3BAB38FC9F749478CFB9C8AD82F04F13C5E2D074FE6A1F7D4E00B6AFA4D4DD;根据签名结果计算得到签名结果长度为64字节。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (18)
1.一种支持数据签名的java卡实现方法,其特征在于,包括:java卡虚拟机进行初始化时,清空第一存储区;当所述java卡虚拟机执行函数调用指令时,所述java卡虚拟机从堆栈中获取函数引用及对象引用:
当第一函数被调用时,执行步骤S1;
步骤S1:所述java卡虚拟机获取第一数据信息、计算模式信息、第二数据信息,执行步骤S2;
步骤S2:所述java卡虚拟机判断所述第一数据信息的类型和所述计算模式信息的类型,如果所述第一数据信息为私钥类型,并且所述计算模式信息为签名模式,则将所述第一数据信息作为私钥保存至所述第一存储区中,根据所述私钥计算公钥,执行步骤S3;否则报错,结束;
步骤S3:所述java卡虚拟机将预先设置的第一向量值置为初始值,并对所述公钥、所述第二数据信息以及预先保存的第一预设数据、第二预设数据、第三预设数据、第四预设数据进行哈希计算,将得到的哈希结果作为第一中间值,将所述公钥、所述签名模式、所述第二数据信息和所述第一中间值保存至所述第一存储区中;
当第二函数被调用时,所述java卡虚拟机获取传入的原待签名数据,判断第一存储区中是否存在公钥、签名模式、第二数据信息、第一中间值,是则获取第一向量值,采用预设哈希算法对所述原待签名数据和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值;否则报错,结束;
当第三函数被调用时,执行步骤T1;
步骤T1:所述java卡虚拟机获取传入的原待签名数据,并且分配第二存储区,判断第一存储区中是否存在私钥、签名模式、第二数据信息、第一中间值,是则执行步骤T2;否则报错,结束;
步骤T2:所述java卡虚拟机获取第一向量值,执行步骤T3;
步骤T3:所述java卡虚拟机采用预设哈希算法对所述原待签名数据和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值,采用预设哈希算法对所述第一向量值进行哈希计算,将得到的哈希结果作为第二中间值,从所述第一存储区中获取私钥,采用签名算法对所述私钥和所述第二中间值进行签名,将得到的签名结果保存至所述第二存储区中,计算所述签名结果的长度,返回所述签名结果的长度。
2.如权利要求1所述的方法,其特征在于,所述步骤S1中,所述java卡虚拟机获取第一数据信息、计算模式信息、第二数据信息,具体为:
步骤01:所述java卡虚拟机接收第一函数的第一参数、第一函数的第二参数、第一函数的第三参数、第一函数的第四参数、第一函数的第五参数;
步骤02:所述java卡虚拟机根据所述第一函数的第一参数查找与其对应的地址,获取所述地址中的数据将所述数据作为第一数据信息,将所述第一函数的第二参数作为计算模式信息;根据所述第一函数的第三参数、所述第一函数的第四参数、所述第一函数的第五参数获取第二数据信息。
3.如权利要求2所述的方法,其特征在于,当第一函数被调用时,还包括:将表示第一函数的第一参数已经初始化的标识置位;所述java卡虚拟机接收第一函数的第一参数、第一函数的第二参数、第一函数的第三参数、第一函数的第四参数、第一函数的第五参数之后,还包括:
步骤1:所述java卡虚拟机根据所述表示第一函数的第一参数已经初始化的标识,判断所述第一函数的第一参数是否已经初始化,如果已经初始化,则执行步骤2;否则报错,结束;
步骤2:所述java卡虚拟机判断所述第一函数的第三参数、所述第一函数的第四参数、所述第一函数的第五参数是否合法,如果合法,则执行步骤02;如果不合法,则报错,结束。
4.如权利要求1所述的方法,其特征在于,所述判断所述第一数据信息的类型,具体包括:
计算所述第一数据信息的长度,根据所述第一数据信息的长度判断所述第一数据信息的类型,如果所述第一数据信息的长度为第一预设长度,则确定所述第一数据信息为私钥类型;否则确定所述第一数据信息为公钥类型。
5.如权利要求1所述的方法,其特征在于,所述步骤S2中,如果所述第一数据信息为私钥类型,并且所述计算模式信息为签名模式时,还包括:
判断所述第一存储区中是否存在私钥、签名模式、所述第二数据信息,是则结束;否则将所述第一数据信息作为私钥保存至第一存储区中,根据所私钥计算公钥,执行步骤S3。
6.如权利要求1所述的方法,其特征在于,所述步骤S3中,所述采用预设哈希算法对所述第二数据信息、所述第一预设数据、所述第二预设数据、所述第三预设数据、所述第四预设数据、所述公钥进行哈希计算,具体包括:
根据所述第二数据信息计算第二数据信息长度值,将所述第二数据信息长度值、所述第二数据信息、所述第三预设数据、所述第四预设数据、所述第一预设数据、所述第二预设数据、所述公钥顺序拼接得到拼接结果,采用预设哈希算法对所述拼接结果进行哈希计算。
7.如权利要求1所述的方法,其特征在于,当所述第二函数被调用时,所述java卡虚拟机获取传入的原待签名数据,具体包括:
步骤11:所述java卡虚拟机接收第二函数的第一参数、第二函数的第二参数、第二函数的第三参数,将所述第二函数的第一参数作为存储原待签名数据的数组,将所述第二函数的第二参数作为所述原待签名数据在存储原待签名数据的数组中的起始地址,将所述第二函数的第三参数作为原待签名数据的长度,根据所述原待签名数据在存储原待签名数据的数组中的起始地址和所述原待签名数据的长度,从存储原待签名数据的数组中获取所述原待签名数据。
8.如权利要求7所述的方法,其特征在于,所述java卡虚拟机接收第二函数的第一参数、第二函数的第二参数、第二函数的第三参数之后,还包括:
判断是否同时满足所述第二函数的第一参数不为空、所述第二函数的第二参数大于等于0,并且所述第二函数的第三参数大于等于0,是则执行步骤11;否则报错,结束。
9.如权利要求1所述的方法,其特征在于,所述采用预设哈希算法对所述原待签名数据和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值,具体包括:
步骤a1:判断所述第一向量值是否为初始值,是则执行步骤a2;否则执行步骤a3;
步骤a2:将所述第一向量值置为预设值,从所述第一存储区中获取所述第一中间值,采用预设哈希算法对所述第一中间值和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值,执行步骤a3;
步骤a3:采用预设哈希算法对所述原待签名数据和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值。
10.如权利要求1所述的方法,其特征在于,所述步骤T1中,所述java卡虚拟机获取传入的原待签名数据,并且分配第二存储区,具体包括:
步骤21:所述java卡虚拟机接收第三函数的第一参数、第三函数的第二参数、第三函数的第三参数、第三函数的第四参数、第三函数的第五参数;
步骤22:所述java卡虚拟机将所述第三函数的第一参数作为存储原待签名数据的数组,将所述第三函数的第二参数作为原待签名数据在存储原待签名数据的数组中的起始地址,将所述第三函数的第三参数作为原待签名数据的长度,根据原待签名数据在存储原待签名数据的数组的起始地址和原待签名数据的长度,从存储原待签名数据的数组中获取原待签名数据;将所述第三函数的第四参数作为存储签名结果的数组,将所述第三函数的第五参数作为签名结果在存储签名结果的数组中的起始地址,根据签名结果在存储数组中的起始地址和存储签名结果的数组分配第二存储区。
11.如权利要求10所述的方法,其特征在于,所述java卡虚拟机接收第三函数的第一参数、第三函数的第二参数、第三函数的第三参数、第三函数的第四参数、第三函数的第五参数之后,还包括:
判断是否同时满足所述第三函数的第一参数是否不为空、所述第三函数的第二参数大于等于0、所述第三函数的第三参数大于等于0、所述第三函数的第四参数不为空,并且所述第三函数的第五参数大于等于0,是则执行步骤22;否则报错,结束。
12.如权利要求1所述的方法,其特征在于,所述步骤T2中,所述获取第一向量值之后,还包括:
步骤b1:判断所述第一向量值是否为初始值,是则执行步骤b2;否则执行步骤T3;
步骤b2:将所述第一向量值置为预设值,从所述第一存储区中获取所述第一中间值,执行步骤b3;
步骤b3:采用预设哈希算法对所述第一中间值和所述第一向量值进行哈希计算,用得到的哈希结果更新所述第一向量值,执行步骤T3。
13.如权利要求1所述的方法,其特征在于,所述步骤T3中,所述采用签名算法对所述私钥和所述第二中间值进行签名,将得到的签名结果保存至所述第二存储区中,具体包括:
步骤c1:获取预先保存的第一常量,根据所述第一常量生成第一随机数;
步骤c2:获取预先保存的第一预设数据、第二预设数据,根据所述第一预设数据、所述第二预设数据和所述第一随机数生成临时参数;
步骤c3:根据所述第二中间值、所述第一常量和所述临时参数生成第一取模值,并判断所述第一取模值是否为所需值,是则执行步骤c4;否则返回步骤c1;
步骤c4:根据所述私钥、所述第一取模值和所述第一随机数生成第二取模值,并判断所述第二取模值是否为所需值,是则执行步骤c5;否则返回执行步骤c1;
步骤c5:根据所述第一取模值和所述第二取模值生成签名结果。
14.如权利要求13所述的方法,其特征在于,所述步骤c3中,所述根据所述第二中间值、所述第一常量和所述临时参数生成第一取模值,具体包括:
对所述第二中间值和所述临时参数执行模数为所述第一常量的加法运算,并将取模结果作为第一取模值。
15.如权利要求13所述的方法,其特征在于,所述判断所述第一取模值是否为所需值,具体为:
判断所述第一取模值是否等于0,或等于所述第一常量与所述第一随机数的差,是则确定所述第一取模值不是所需值;否则确定所述第一取模值是所需值。
16.如权利要求13所述的方法,其特征在于,所述根据所述私钥、所述第一取模值和所述第一随机数生成第二取模值,具体为:
步骤c4-1:将所述私钥加1,并对得到的结果取倒数,将所述倒数的值记为第一运算值;
步骤c4-2:将所述第一取模值与所述私钥做乘积,并以所述第一随机数为被减数减去上述乘积结果,得到第二运算值;
步骤c4-3:对所述第一运算值和所述第二运算值执行模数为所述第一常量的乘法运算,并记取模结果作为第二取模值。
17.如权利要求13所述的方法,其特征在于,所述判断所述第二取模值是否为所需值,具体为:
判断所述第二取模值是否为0,是则确定所述第二取模值不是所需值;否则确定所述第二取模值是所需值。
18.如权利要求13所述的方法,其特征在于,所述步骤c5中所述根据所述第一取模值和所述第二取模值生成签名结果,具体包括:
将所述第一取模值和所述第二取模值分别转换为长度为256比特的字节类型,得到第一字节串和第二字节串,将所述第一字节串和所述第二字节串顺序拼接,将拼接结果作为签名结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410513378.1A CN104331657B (zh) | 2014-09-29 | 2014-09-29 | 一种支持数据签名的java卡实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410513378.1A CN104331657B (zh) | 2014-09-29 | 2014-09-29 | 一种支持数据签名的java卡实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104331657A true CN104331657A (zh) | 2015-02-04 |
CN104331657B CN104331657B (zh) | 2017-03-22 |
Family
ID=52406379
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410513378.1A Active CN104331657B (zh) | 2014-09-29 | 2014-09-29 | 一种支持数据签名的java卡实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104331657B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020049906A1 (en) * | 2000-08-31 | 2002-04-25 | Ibm | Digital signature system, digital signature method, digital signature mediation method, digital signature mediation system, information terminal and storage medium |
US20040059919A1 (en) * | 2001-01-11 | 2004-03-25 | Alain Benayoun | Security system for preventing a personal computer from being used by an unauthorized people |
CN1955971A (zh) * | 2005-10-27 | 2007-05-02 | 北京振戎融通通信技术有限公司 | 一种适用于Java应用程序的安全安装方法 |
CN101394398A (zh) * | 2008-08-15 | 2009-03-25 | 华中科技大学 | 一种面向终端数字接口的内容保护方法及系统 |
CN102571357A (zh) * | 2012-02-24 | 2012-07-11 | 飞天诚信科技股份有限公司 | 一种签名的实现方法和装置 |
CN102801705A (zh) * | 2012-06-25 | 2012-11-28 | 飞天诚信科技股份有限公司 | 一种java卡上安全域的实现方法 |
CN102855186A (zh) * | 2012-07-24 | 2013-01-02 | 飞天诚信科技股份有限公司 | 一种Java卡调试信息的处理方法 |
-
2014
- 2014-09-29 CN CN201410513378.1A patent/CN104331657B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020049906A1 (en) * | 2000-08-31 | 2002-04-25 | Ibm | Digital signature system, digital signature method, digital signature mediation method, digital signature mediation system, information terminal and storage medium |
US20040059919A1 (en) * | 2001-01-11 | 2004-03-25 | Alain Benayoun | Security system for preventing a personal computer from being used by an unauthorized people |
CN1955971A (zh) * | 2005-10-27 | 2007-05-02 | 北京振戎融通通信技术有限公司 | 一种适用于Java应用程序的安全安装方法 |
CN101394398A (zh) * | 2008-08-15 | 2009-03-25 | 华中科技大学 | 一种面向终端数字接口的内容保护方法及系统 |
CN102571357A (zh) * | 2012-02-24 | 2012-07-11 | 飞天诚信科技股份有限公司 | 一种签名的实现方法和装置 |
CN102801705A (zh) * | 2012-06-25 | 2012-11-28 | 飞天诚信科技股份有限公司 | 一种java卡上安全域的实现方法 |
CN102855186A (zh) * | 2012-07-24 | 2013-01-02 | 飞天诚信科技股份有限公司 | 一种Java卡调试信息的处理方法 |
Non-Patent Citations (1)
Title |
---|
程恒: "Java智能卡安全运行环境的设计与实现", 《西安电子科技大学》 * |
Also Published As
Publication number | Publication date |
---|---|
CN104331657B (zh) | 2017-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103560882B (zh) | 一种基于标识的椭圆曲线密码系统 | |
CN107135408B (zh) | 一种视频流地址的鉴权方法及装置 | |
CN109560931B (zh) | 一种基于无证书体系的设备远程升级方法 | |
CN107147488A (zh) | 一种基于sm2加解密算法的签名验签系统和方法 | |
WO2021036086A1 (zh) | 交易数据处理方法、装置、系统及计算机可读存储介质 | |
US8422673B2 (en) | Method and system for protecting against unity keys | |
JP7091322B2 (ja) | 複合デジタル署名 | |
RU2010140392A (ru) | Делегирование ip-адреса | |
CN107801059A (zh) | 一种鉴权方法及服务器 | |
CN113079139B (zh) | 基于区块链的共识组主节点确定方法、装置及系统 | |
CN112187469B (zh) | 一种基于密钥因子的sm2多方协同数字签名方法和系统 | |
CN109818730A (zh) | 盲签名的获取方法、装置和服务器 | |
WO2010046799A3 (en) | Method of generating a cryptographic key, network and computer program therefor | |
US20220129565A1 (en) | Operation method, operation apparatus, and device | |
US11917084B2 (en) | Cryptographic validation of media integrity | |
CN110535635A (zh) | 一种支持信息隐藏的协同签名方法与系统 | |
CN104915602A (zh) | 一种Android平台下的PIN码保护方法 | |
TW201228248A (en) | Dynamic decoding lookup table generation method and electronic device applying the same | |
CN107707564B (zh) | 一种基于云网络的安全通道建立系统 | |
CN103152724B (zh) | 一种硬件锁sim卡的方法及系统 | |
JP2019519176A (ja) | 鍵管理システム及び方法 | |
CN113014387B (zh) | 基于硬件加密机的多维加密接口的改进方法及加密装置 | |
CN104821884A (zh) | 基于非对称密钥体系的私钥保护方法 | |
CN104123431B (zh) | 一种元素的模逆计算方法及装置 | |
CN104331657A (zh) | 一种支持数据签名的java卡实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |