CN102929705B - 一种在嵌入式系统中快速生成坐标点的方法 - Google Patents
一种在嵌入式系统中快速生成坐标点的方法 Download PDFInfo
- Publication number
- CN102929705B CN102929705B CN201210428772.6A CN201210428772A CN102929705B CN 102929705 B CN102929705 B CN 102929705B CN 201210428772 A CN201210428772 A CN 201210428772A CN 102929705 B CN102929705 B CN 102929705B
- Authority
- CN
- China
- Prior art keywords
- data
- value
- point value
- data segment
- point
- 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.)
- Active
Links
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/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/0872—Generation of secret information including derivation or calculation of cryptographic keys or passwords using geo-location information, e.g. location data, time, relative position or proximity to other entities
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/12—Applying verification of the received information
- H04L63/123—Applying verification of the received information received data contents, e.g. message integrity
-
- 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/0816—Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/24—Key scheduling, i.e. generating round keys or sub-keys for block encryption
Abstract
本发明公开一种在嵌入式系统中快速生成坐标点的方法,包括:按预设拆分段数和预设步长对待计算的数值分段再对各个数据段分组,计算各个数据段的一组数据中每一位所对应的原始点值;检测所有数据段的当前数据组中每一位上的值,并将值为1的位所对应的原始点值与中间点值进行点加运算,并用点加运算结果更新中间点值;判断各个数据段的下一个数据组是否存在,如不在则将中间点值作为结果坐标点值存储,结束;如存在则对中间点值进行预设步长次的点倍运算,并用点倍运算结果更新中间点值,将各个数据段的下一个数据组作为新的当前数据组,继续进行点加和点倍运算。本发明能快速生成坐标点,有效应用到生成密钥对和签名中来,极大的提高运算速度。
Description
技术领域
本发明涉及密码学领域,尤其涉及一种在嵌入式系统中快速生成坐标点的方法。
背景技术
随着科学技术的发展,对于数据安全性的要求也越来越高,现有保护数据安全可以通过加密和签名等方式实现,但是加密过程和签名过程都需要有密钥的参与,现有生成密钥的过程中数据量大,运算速度慢,使得加密和签名过程的实现效率都很低。
发明内容
本发明的目的是为了克服现有技术的不足,提供一种在嵌入式系统中快速生成坐标点的方法。
本发明提供一种在嵌入式系统中快速生成坐标点的方法,包括:
步骤S1:按预设拆分段数对待计算的数值进行分段,并计算每个数据段的数据位长度;
步骤S2:根据预设步长对所述每个数据段进行分组,根据基点、所述每个数据段的数据位长度和所述预设步长计算各个数据段的一组数据中每一位所对应的原始点值,将所述每个数据段的第一组数据作为当前数据组;
步骤S3:检测所述每个数据段的当前数据组中的数据是否均为0,是则执行步骤S4,否则执行步骤S5;
步骤S4:将所述每个数据段的下一个数据组作为当前数据组,返回步骤S3;
步骤S5:检测当前数据段的当前数据组中的每一位上的值,并将值为1的位所对应的原始点值与中间点值进行点加运算,并用点加运算结果更新所述中间点值;
步骤S6:判断是否处理完所有数据段的当前数据组,是则执行步骤S8,否则执行步骤S7;
步骤S7:将其他未处理的数据段作为新的当前数据段,返回步骤S5;
步骤S8:判断各个数据段的下一个数据组是否存在,是执行步骤S9,否则将所述中间点值作为结果坐标点值存储,结束;
步骤S9:对所述中间点值进行所述预设步长次的点倍运算,并用点倍运算结果更新所述中间点值,将各个数据段的下一个数据组作为新的当前数据组;
步骤S10:检测所述每个数据段的当前数据组中的数据是否均为0,是则执行步骤S8,否则返回步骤S5。
进一步地,所述步骤S1之前包括:
步骤S0:判断所述待计算的数值的数据位长度是否为所述预设拆分段数与所述预设步长乘积的整数倍,是则执行步骤S1,否则在所述待计算的数值前补0,返回步骤S0。
进一步地,在所述步骤S0之前包括:
步骤a1:生成或获取随机数;
步骤a2:用第一固定值对所述随机数取余,判断取余结果是否为0,是则输出错误提示信息,返回步骤a1;否则将所述随机数转化为二进制数得到所述待计算的数值。
进一步地,所述步骤S2中根据基点、所述每个数据段的数据位长度和所述预设步长计算各个数据段的一组数据中每一位所对应的原始点值,具体包括:步骤S21-步骤S25为计算所有数据段的一个数据组中最高位所对应的初始点值的过程,步骤S26-步骤S28为计算每个数据段的一个数据组中除最高位的其他位所对应的初始点值的过程;
步骤S21:将拆分的每个数据段按照从低位到高位的顺序,从小到大进行编号,将所述基点作为最小编号数据段的一组数据组中最高位所对应的原始点值,将所述最小编号数据段作为当前数据段;
步骤S22:将当前数据段的一组数据组中最高位所对应的初始点值进行点倍运算,第一计数值自加1;所述第一计数值的初始值为0,中间值的初始值为0;
步骤S23:判断所述第一计数值是否大于所述每个数据段的数据位长度,是则执行步骤S25,否则执行步骤S24;
步骤S24:用点倍运算结果更新所述中间值,对所述中间值进行点倍运算,所述第一计数值自加1,返回步骤S23;
步骤S25:判断是否计算完成所有的数据段的一个数组中最高位所对应的原始点值,是则执行步骤S26,否则将下一个数据段作为新的当前数据段,将点倍运算结果作为当前数据段的一个数据组中最高位所对应的初始点值,返回步骤S22;
步骤S26:将当前数据段的一个数据组中最高位作为当前位,第二计数值的初始值为0;
步骤S27:对当前位所对应的初始点值进行点倍运算,所述第二计数值自加1,判断所述第二计数值是否大于所述预设步长,是则执行步骤S29,否则执行步骤S28;
步骤S28:将下一位作为新的当前位,将点倍运算结果作为新的当前位所对应的原始点值,返回步骤S27;
步骤S29:判断是否计算完成所有数据段的一个数据组中每一位所对应的初始点值,是则执行步骤S3,否则将下一个数据段作为当前数据段,返回步骤S26。
进一步地,所述步骤S3与步骤S5之间包括步骤A1;
步骤A1:根据所有数据段的当前数据组的组合在初始值列表中检索对应的初始点值,如找到则获取对应的初始点值并将其与中间点值进行点加运算,用点加运算结果更新所述中间点值,执行步骤S8,如未找到则执行步骤S5;
所述步骤S6和步骤S8之间包括:将点加结果作为初始点值与对应的所有数据段的当前数据组的组合对应存储到所述初始值列表中;
所述步骤S10判断为否时返回步骤A1。
进一步地,所述步骤A1中根据所有数据段的当前数据组的组合在初始值列表中检索对应的初始点值具体为:
按编号从大到小的顺序将每个数据段的当前数据组进行组合得到二进制数据串,根据所述二进制数据串在所述初始值列表中检索对应的初始点值。
进一步地,所述根据二进制数据串在所述初始值列表中检索对应的初始点值具体为:将所述二进制数据串转换为十进制数得到所述序号,根据所述序号在所述初始值列表中检索对应的初始点值。
本发明又提供一种在嵌入式系统中快速生成坐标点的方法,包括:
步骤s1:根据预设拆分段数和预设步长确定需计算的初始点值个数;
步骤s2:根据基点和所述预设拆分段数分别计算每个数据段上最高位所对应的原始点值,将所述每个数据段的最高位作为当前位;
步骤s3:对各个数据段上当前位的原始点值进行点倍运算得到当前相邻低位所对应的原始点值并存储,第一计数值自加1;
步骤s4:判断所述第一计数值是否超过所述预设步长的值,是则执行步骤s5,否则将所述相邻低位作为新的当前位,返回步骤s3;
步骤s5:根据所述预设拆分段数及所述预设步长建立二进制数据串;
步骤s6:分别将所述二进制数据串的各数据位依次设为0 或1得到当前二进制数据串;
步骤s7:分别检查当前二进制数据串中的各个数据位,将值为1的数据位在相应数据段中所对应的原始点值进行点加运算得到初始点值;并将所述初始点值和当前二进制数据串一一对应存储为初始值列表,第二计数值自加1;
步骤s8:判断所述第二计数值是否大于所述初始点值个数,是则执行步骤s9;否则返回步骤s6;
步骤s9:根据所述预设拆分段数对待计算的数值进行分段,根据所述预设步长对每个数据段进行分组,将所述每个数据段的第一组数据作为当前数据组;
步骤s10:检测所述每个数据段的当前数据组中的数据是否均为0,是则执行步骤s11,否则执行步骤s12;
步骤s11:将所述每个数据段的下一个数据组作为当前数据组,返回步骤s10;
步骤s12:根据各个数据段的当前数据组的组合从所述初始值列表中获取对应初始点值作为中间点值,判断所述各个数据段的下一个数据组是否存在,是执行步骤s13,否则将所述获取的初始点值作为结果坐标点值存储,结束;
步骤s13:将所述中间点值进行所述预设步长次的点倍运算,用点倍运算结果更新中间点值,将所述各个数据段的下一个数据组作为新的当前数据组;
步骤s14:检测所述每个数据段的当前数据组中的数据是否均为0,是则执行步骤s16,否则执行步骤s15;
步骤s15:根据所有数据段的当前数据组的组合从所述初始值列表中获取对应初始点值,将所述中间点值与所述获取的对应初始点值进行点加运算,用点加运算结果更新中间点值,执行步骤s16;
步骤s16:判断各个数据段的下一个数据组是否存在,是则返回步骤s13,否则将所述中间点值作为结果坐标点值存储,结束。
进一步地,所述步骤s1具体为:将所述预设拆分段数和预设步长的乘积减1的结果作为初始点值个数。
进一步地,所述步骤s5具体为:将所述预设拆分段数和预设步长的乘积转化为二进制数得到所述二进制数据串。
进一步地,在所述步骤s9之前包括:
步骤s9’:判断所述待计算的数值的数据位长度是否为所述预设拆分段数与所述预设步长乘积的整数倍,是则执行步骤s9,否则在所述待计算的数值前补0,返回步骤s9’。
进一步地,在所述步骤s9’之前包括:
步骤a1:生成或获取随机数;
步骤a2:用第一固定值对所述随机数取余,判断取余结果是否为0,是则输出错误提示信息,返回步骤a1;否则将所述随机数转化为二进制数得到所述待计算的数值。
进一步地,所述步骤s7中将所述初始点值和当前二进制数据串一一对应存储为所述初始值列表,具体为:将当前二进制数据串转化为十进制数得到序号,将所述初始点值和对应的序号存储为所述初始值列表;
所述步骤s15中根据各个数据段的当前数据组的组合从所述初始值列表中获取对应初始点值,具体为:根据所有数据段的当前数据组计算所述序号,根据所述序号在所述初始值列表中获取对应的初始点值。
进一步地,根据所有数据段的当前数据组计算所述序号具体为:将所有数据段的当前数据组顺序组合,将组合的二进制数转换为十进制数得到所述序号。
进一步地,所述步骤s2中根据基点和预设拆分段数分别计算各个数据段上最高位的原始点值,具体为:
步骤s21:将拆分的每个数据段按照从低位到高位的顺序,从小到大进行编号,将所述基点作为最小编号数据段的一组数据组中最高位所对应的原始点值,将所述最小编号数据段作为当前数据段;
步骤s22:将当前数据段的一组数据组中最高位所对应的初始点值进行点倍运算,第一计数值自加1;所述第一计数值的初始值为0,中间值的初始值为0;
步骤s23:判断所述第一计数值是否大于所述每个数据段的数据位长度,是则执行步骤s25,否则执行步骤s24;
步骤s24:用点倍运算结果更新所述中间值,对所述中间值进行点倍运算,所述第一计数值自加1,返回步骤s23;
步骤s25:判断是否计算完成所有的数据段的一个数组中最高位所对应的原始点值,是则执行步骤s26,否则将下一个数据段作为新的当前数据段,用点倍运算结果作为当前数据段的一个数据组中最高位所对应的初始点值,返回步骤s22。
本发明与现有技术相比,具有以下优点:
本实施例中的通过采用固定点乘算法,能快速生成坐标点,有效应用到生成密钥对和签名中来,极大的提高运算速度。
附图说明
图1为本发明实施例一提供的一种在嵌入式系统中快速生成坐标点的方法流程图;
图2为本发明实施例一提供的方法中的生成初始点值的详细流程图;
图3为本发明实施例二提供的一种在嵌入式系统中快速生成坐标点的方法流程图;
图4为本发明实施例三提供的一种在嵌入式系统中快速生成坐标点的方法流程图;
图5为本发明实施例三提供的另一种在嵌入式系统中快速生成坐标点的方法流程图;
图6为本发明实施例三提供的又一种在嵌入式系统中快速生成坐标点的方法流程图;
图7为本发明实施例四提供的一种在嵌入式系统中快速生成坐标点的方法流程图;
图8为本发明实施例五提供的一种在嵌入式系统中快速生成坐标点的方法流程图;
图9为本发明实施例六提供的一种在嵌入式系统中快速生成坐标点的方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明实施例一提供了一种在嵌入式系统中快速生成坐标点的方法,预先定义了一条椭圆曲线,在硬件资源足够的情况下,可将生成的随机数拆成多段在素数域上来实现,具体以分成3段为例进行说明,本实施例中的序号和对应的初始点值预先进行计算,参照图1,本实施例提供的方法包括:
步骤S1:用第一固定值对随机数进行取余得到第一余数,判断第一余数是否为0,是则输出错误信息,否则执行步骤S2;
在本实施例中,如第一余数为0时可多次生成随机数,则步骤S1之前包括:生成随机数,获取第一固定值;在步骤S1中判断为否时还包括生成随机数,执行步骤S1;
步骤S2:将第一余数转换为二进制数,并用预设拆分段数对二进制数的位数取余得到第二余数,并判断第二余数是否为0,是则执行步骤S4,否则执行步骤S3;
在本实施例中,如第一余数为372,则转换为相应的9位二进制数101110100,如预设拆分段数为3,用3对9取余得到的第二余数为0,
步骤S3:在第一余数的二进制数的最高位补0,返回步骤S2;
本实施例中,如预设拆分段数为4,第一余数为372,则转换为相应的9位二进制数101110100,则用4对9取余得到的第二余数为1;则需要在101110100前补000,得到12位的二进制数000101110100,用4对12取余得到的第二余数为0;
步骤S4:按照预设拆分段数将第一余数的二进制数拆分成等长的数据段;
具体的,本实施例中,将101110100拆分为3段为101、110、100;
步骤S5:根据预设步长对每个数据段进行分组,根据预设拆分段数和预设步长计算序号及其对应的初始点值,将序号和对应的初始点值存储在初始值列表中;
本实施例中,按照从低位高位的顺序对每个数据段从0开始编号;计算序号具体过程为:将最大编号的数据段的当前数据组中的数据至编号为0的数据段的当前数据组中的数据依次组合成新二进制数,将新二进制数转换为十进制数得到序号;
如最大编号为2,预设步长为3,编号2当前数组中的数据为101、编号1当前数组中的数据为110、编号0当前数组中的数据为100,则组合成的新二进制数为:101110100,对应的序号为:372;
如最大编号为2,预设步长为1,编号2当前数组中的数据为1、编号1当前数组中的数据为1、编号0当前数组中的数据为0,则组合成的新二进制数为:110,对应的序号为:6;
参见图2,本实施例中计算每个序号对应的初始点值具体为:
步骤b21:用预设步长与预设拆分段数的乘积对第一余数的二进制数的数据位长度进行取余,判断取余结果是否为0,是则执行步骤b23,否则执行步骤b22;
例如,第一余数的二进制数为101110100,预设拆分段数为3,预设步长为3,则取余结果为0,执行步骤b23;
例如,第一余数的二进制数为1011101000111010,预设拆分段数为3,预设步长为3,则取余结果为7,执行步骤b22;
步骤b22:在第一余数的二进制数的最高位补0,返回步骤b21;
具体,本实施例中,在第一余数的二进制数为1011101000111010的最高位补00,得到二进制数001011101000111010;
步骤b23:用预设步长分别对每个数据段进行分组;
例如,本实施例中的每个数据段分别为:(2)001011、(1)101000、(0)111010;用预设步长3对每个数据段进行分组结果为:(2)001、011,(1)101、000,(0)111、010;
步骤b24:以2为底数,每个数据段的编号与每个数据段的数据位长度的乘积为指数计算得到幂值,将编号为0的数据段作为当前数据段;
例如,每个数据段分别为:(2)001011、(1)101000、(0)111010;得到的三个幂值分别为:22×6、21×6、20×6;当前数据段为(0)111010;
步骤b25:以第二固定值为模数,对当前数据段对应的幂值与获取的基点进行模乘得到当前数据段的一个数据组中最高位所对应的原始点值,将最高位作为当前位;
本实施例中的基点为G(x,y),当前数据段中的当前数据组为111;则最高位所对应的原始点值为20×6×G(x,y)(即G(x,y));
步骤b26:对当前位对应的原始点值进行点倍运算作为当前位相邻低位的对应原始点值;
本实施例中当前数据组111中计算出的所有原始点值分别为20×6×G(x,y)、2×20×6×G(x,y)、2×2×20×6×G(x,y):
步骤b27:判断是否计算完成当前数据段的一个数据组中所有位对应的原始点值,是则执行步骤b28;否则将当前位的相邻低位作为新的当前位,返回步骤b26;
步骤b28:判断是否计算完成所有数据段的一个数据组中所有位对应的原始点值,是则执行步骤b29;否则取下一个的数据段作为当前数据段,返回步骤b24;
本实施例中所有数据段的当前数据组为:(2)001(1)101、(0)111;对应的原始点值为:(2)22×6×G(x,y)、2×22×6×G(x,y)、2×2×22×6×G(x,y)、(1)21×6×G(x,y)、2×21×6×G(x,y)、2×2×21×6×G(x,y)、(0)20×6×G(x,y)、2×20×6×G(x,y)、2×2×20×6×G(x,y);
步骤b29:以第二固定值为模数,分别对序号的二进制数中的每一个数据位上的数据和与每一位数据位的位号所对应的原始点值进行模乘,将所有模乘结果进行点加得到初始点值;
具体的,在本实施例中,第一原始点值(第一横坐标、第一纵坐标)和第二原始点值(第二横坐标、第二纵坐标)进行点加运算过程具体为:
步骤a11:获取第二固定值并以第二固定值为模数,对第二纵坐标和第一纵坐标进行模减得到第一差值,对第二横坐标和第一横坐标进行模减得到第二差值,对第一差值和第二差值进行模除得到第一参数;
步骤a12:以第二固定值为模数,对第一参数和第一参数进行模乘得到第一乘积,对第一乘积和第一横坐标、第二横坐标进行模减得到初始横坐标;
步骤a13:以第二固定值为模数,对第一横坐标和第三横坐标进行模减得到第三差值,对第三差值和第一参数模乘得到第二乘积,对第二乘积和第一纵坐标进行模减得到初始纵坐标;
例如,本实施例中的序号为372,对应的二进制数101110100;则该序号对应的初始点值为Q372=1×22×6×G(x,y)+0×2×22×6×G(x,y)+1×2×2×22×6×G(x,y)+1×21×6×G(x,y)+1×2×21×6×G(x,y)+0×2×2×21×6×G(x,y)+1×20×6×G(x,y)+0×2×20×6×G(x,y)+0×2×2×20×6×G(x,y);
如预设步长为1,则计算序号的初始点值为:
步骤b11:以2为底数,每个数据段的编号与每个数据段的数据位长度的乘积为指数计算得到幂值;以第二固定值为模数,对幂值与获取的基点进行模乘得到对应的原始点值;
本实施例中的数据段为(2)001011、(1)101000、(0)111010;得到的三个幂值分别为:22×6、21×6、20×6;计算得到的原始点值具体为:22×6×G(x,y)、21×6×G(x,y)、20×6×G(x,y);
步骤b12:以第二固定值为模数,分别对序号的二进制数中的每一个数据位上的数据和与每一位数据位的位号相同的编号所对应的原始点值进行模乘,将所有模乘结果进行点加得到初始点值;
如序号为6,对应的二进制为110;得到的初始点值为:1×22×6×G(x,y)+1×21×6×G(x,y)+0×20×6×G(x,y);
步骤S6:获取每个数据段的第一组数据作为当前数据组;
具体的,如本实施例中的数据段分别为(2)001011,(1)101000,(0)111010;则当前数据组分别为:001、101、111;
步骤S7:检测每个数据段的当前数据组中的数据是否均为0,是则执行步骤S8,否则执行步骤S9;
步骤S8:将每个数据段的下一组数据作为当前数据组,返回步骤S7;
步骤S9:根据每个数据段的当前数据组中的数据计算序号并从初始值列表中获取对应的初始点值;
具体的如前数据组分别为:001、101、111,组合成新二进制数001101111,得到的序号为111;则获取的对应初始点值为:Q111=0×22×6×G(x,y)+0×2×22×6×G(x,y)+1×2×2×22×6×G(x,y)+1×21×6×G(x,y)+0×2×21×6×G(x,y)+1×2×2×21×6×G(x,y)+1×20×6×G(x,y)+1×2×20×6×G(x,y)+1×2×2×20×6×G(x,y);
步骤S10:判断每个数据段中是否存在未处理的下一组数据,是则将下一组数据作为当前数据组,执行步骤S11,否则将初始点值作为结果点值并存储,结束;
本实施例中将下一组数据011、000、010作为当前数据组;
步骤S11:对初始点值进行预设步长次的点倍运算,将结果记为中间点值;
具体的,在本实施例中预设步长为3则需要进行三次点倍运算,中间点值具体为:2×2×2×Q111;
本实施例中,点倍运算的实现过程具体为:
步骤h1:以第二固定值为模数,对初始点值横坐标和初始点值横坐标进行模乘得到第二乘积,对第二乘积的三倍与获取的第三固定值进行模加得到第一和值;对第一和值与初始点值纵坐标的两倍进行模除得到第二参数;
步骤h2:以第二固定值为模数,对第二参数与第二参数进行模乘得到第三乘积,对第三乘积与初始点值横坐标的两倍进行模减得到中间点值横坐标;
步骤h3:以第二固定值为模数,对初始点值横坐标与中间点值横坐标进行模减得到第四差值,对第二参数与第四差值进行模乘得到第四乘积,对第四乘积与初始点值纵坐标进行模减得到中间点值纵坐标;
步骤S12:检测每个数据段的当前数据组中的数据是否均为0,是则执行步骤S13,否则执行步骤S14;
本实施例中的当前数据组011、000、010不是均为0,执行步骤S14;
步骤S13:将中间点值作为结果点值,执行步骤S15;
步骤S14:根据每个数据段的当前数据组中的数据计算序号,根据序号在初始值列表中获取对应的初始点值,将初始点值和中间点值进行点加运算得到结果点值,执行步骤S15;
本实施例中的根据当前数据组011、000、010计算得到的序号为194,获取的初始点值具体为Q194=0×22×6×G(x,y)+1×2×22×6×G(x,y)+1×2×2×22×6×G(x,y)+0×21×6×G(x,y)+0×2×21×6×G(x,y)+0×2×2×21×6×G(x,y)+0×20×6×G(x,y)+1×2×20×6×G(x,y)+0×2×2×20×6×G(x,y);计算得到的结果点值为:2×2×2×Q111+ Q194;
步骤S15:判断每个数据段的所有数据组是否处理完成,是则将结果点值存储,结束;否则执行步骤S16;
本实施例中最终存储的结果点值为2×2×2×Q111+ Q194;
步骤S16:将结果点值作为初始点值,将每个数据段的下一组数据作为当前数据组,返回步骤S11。
实施例二
本发明实施例二提供了一种在嵌入式系统中快速生成坐标点的方法,预先定义了一条椭圆曲线,在硬件资源足够的情况下,可将生成的随机数拆成多段在素数域上来实现,具体以分成3段为例进行说明,本实施例中的序号和初始点值在操作过程中进行计算,实现过程如图3所示,将图1中的步骤S5-步骤S16替换为步骤S5’-步骤S17’;
步骤S5’:将每个数据段的第一组数据作为当前数据组;
具体的,如本实施例中的数据段分别为(2)001011,(1)101000,(0)111010;则当前数据组分别为:001、101、111;
步骤S6’:检测每个数据段的当前数据组中的数据是否均为0,是则执行步骤S7’,否则执行步骤S8’;
步骤S7’:将每个数据段的下一个数据组作为当前数据组,返回步骤S6’;
步骤S8’:根据每个数据段的当前数据组中的数据计算序号并从初始值列表中查找对应的初始点值,如找到则执行步骤S10’,如未找到则执行步骤S9’;
本实施例中计算序号的实现方式可参照实施例一中步骤S4;即根据当前数据组中的数据001、101、111计算得到的序号为111,具体为,将组合后的二进制数001101111转化为十进制数为111;
步骤S9’:根据每个数据段的当前数据组中的数据计算与序号对应的初始点值,将序号和对应的初始点值存储到初始值列表中,执行步骤S10’;
如步骤S8’中未获取到序号111对应的初始点值,则该步骤计算得到的初始点值具体为:将每个数据段的当前数据组中的数据与对应的原始点值进行模乘,将模乘结果进行点加得到初始点值;例如每个数据段中的当前数据组为001、101、111,则计算对应的初始点值过程具体为:Q111=0×22×6×G(x,y)+0×2×22×6×G(x,y)+1×2×2×22×6×G(x,y)+1×21×6×G(x,y)+0×2×21×6×G(x,y)+1×2×2×21×6×G(x,y)+1×20×6×G(x,y)+1×2×20×6×G(x,y)+1×2×2×20×6×G(x,y);
步骤S10’:判断每个数据段中是否存在未处理的下一组数据,是则将下一组数据作为当前数据组,执行步骤S11’;否则将初始点值作为结果点值并存储,结束;
本实施例中存在未处理的下一组数据011、000、010;
步骤S11’:对初始点值进行预设步长次的点倍运算,将结果记为中间点值;
在本实施例中,对初始点值Q111进行三次点倍运算得到中间点值2×2×2×Q111;
步骤S12’:检测每个数据段的当前数据组中的数据是否均为0,是则执行步骤S13’,否则执行步骤S14’;
本实施例中当前数据组011、000、010中数据不均为0,所以执行步骤S14’;
步骤S13’:将中间点值作为结果点值,执行步骤S17’;
步骤S14’:根据每个数据段的当前数据组中的数据计算当前序号,根据当前序号从初始值列表中查找对应的初始点值,如找到则执行步骤S16’,如未找到则执行步骤S15’;
本实施例中根据当前数据组011、000、010计算得到的序号为194,如初始值列表中存储查找到对应的初始点值Q194,则执行步骤S16’;如未查找到对应的初始点值Q194,则执行步骤S15’;
步骤S15’:根据每个数据段的当前数据组中的数据计算与当前序号对应的初始点值,将当前序号和对应的初始点值存储到初始值列表中,执行步骤S16’;
本实施例中计算序号194对应的初始点值可参照实施例一中步骤S14,在此不再赘述;
步骤S16’:将当前序号对应的初始点值和中间点值进行点加运算得到结果点值;
本实施例中计算得到的结果点值为:2×2×2×Q111+ Q194;
步骤S17’:判断每个数据段的所有数据组是否处理完成,是则将结果点值存储,结束;否则将结果点值作为初始点值,将每个数据段的下一组数据作为当前数据组,执行步骤S11’。
实施例三
本发明实施例三提供了一种在嵌入式系统中快速生成坐标点的方法,预先定义了一条椭圆曲线,在硬件资源足够的情况下,可将生成的随机数拆成多段在素数域上来实现,具体以预设拆分段数为N,预设步长为1为例进行说明,本实施例中的序号和对应的初始点值预先进行计算,如图4所示,本实施例提供的方法包括:
步骤401:用第一固定值对随机数进行取余得到第一余数,判断第一余数是否为0,是则输出错误信息,否则执行步骤402;
本实施例中,在步骤401之前还包括:
步骤400:生成随机数,获取第一固定值;
在该步骤中如果判断为是输出错误信息后,还可以继续生成随机数,再执行步骤401;
步骤402:将第一余数转换为二进制数,并用N对第一余数的二进制数的位数取余得到第二余数,并判断第二余数是否为0,是则执行步骤404,否则执行步骤403;
步骤403:在第一余数的二进制数的最高位前补0,返回步骤402;
步骤404:将第一余数的二进制数拆分成等长的N个数据段,将每个数据段从0开始顺序编号;
例如,本实施例中的第一余数为10011111011001;例如将第一余数拆分成5段分别为:010、011、111、011、001;
在本实施例中,例如:将第一余数拆分成长度固定的N段,分别记为第0段、第1段、第2段……第N-1段;如将第一余数拆分成等长的4段,分别记为第0段、第1段、第2段和第3段;
步骤405:以2为底数,每个数据段的编号与每个数据段的数据位长度的乘积为指数计算得到幂值;以第二固定值为模数,对幂值与获取的基点进行模乘得到对应的原始点值;根据预设拆分段数N计算初始点值的序号列表,从序号列表中获取一个序号作为当前序号;
例如,在本实施例将第一余数拆分成N段,则N位二进制数生成的序号列表中的序号为:1、2、3…2N-1,如将第一余数具体拆分成5段,则序号列表中的序号为1到(25-1)的所有整数,即在序号列表中的序号为1、2、3、4……29、30、31;其中,每个数据段长度为L,每个数据段的编号记为i(取值范围0-(N-1)),基点记为G(x,y),则数据段编号为i所对应的原始点值为:2i×L×G(x,y);
具体的,在本实施例中,将第一余数具体拆分成5段,每个数据段的长度为3;则第0段对应的原始点值为20×3×G(x,y)、第1段对应的原始点值为21×3×G(x,y)、第2段对应的原始点值为22×3×G(x,y)、第3段对应的原始点值为23×3×G(x,y)、第4段对应的原始点值为24×3×G(x,y);
在本实施例中,上述计算过程中均以第二固定值为模数进行的模乘和模加;
步骤406:将当前序号转换为二进制数,以第二固定值为模数,对序号的二进制数的当前数据位上的数据和与每一位数据位的位号相同的编号所对应的原始点值进行模乘,将所有模乘结果进行点加得到初始点值,将初始点值存储到初始值列表中与当前序号对应的位置;
本实施例中,如将第一余数拆分成N段,则初始值列表中的数据具体为:第1初始点值、第2初始点值、第3初始点值……第2N-1初始点值;
具体的,本实施例中将第一余数拆分成5段,初始值列表中有31个初始点值;例如序号13转换为二进制数为1101,二进制数中1、1、0、1所对应的位号分别为3、2、1、0;则计算当前序号13对应的初始点值为:1×23×3×G(x,y)+1×22×3×G(x,y)+0×21×3×G(x,y)+1×20×3×G(x,y);上述计算过程中均以第二固定值为模数进行的;
步骤407:判断序号列表中的所有序号对应的初始点值是否计算完成,是则执行步骤409,否则执行步骤408;
优选的,在本实施例中,计算初始点值是按照序号从大到小的顺序进行的,则步骤404-步骤407替换为步骤404’-步骤407’,参照图5;
步骤404’:将第一余数的二进制数拆分成等长的N个数据段;根据预设拆分段数计算初始点值的序号列表,从序号列表中获取最大序号作为当前序号;
具体的,本实施例中将第一余数拆分成5段,序号列表中的序号为1、2、3……29、30、31;
步骤405’:将当前序号转换为二进制数,以2为底数,对序号的二进制数中每位数据的位号与每个数据段的数据位长度的乘积为指数计算得到幂值;以第二固定值为模数,对幂值与获取的基点进行模乘得到对应的原始点值;
本实施例中如当前序号的二进制数的数据位有L位,则对应的原始点值有L个;
具体的,本实施例中获取的最大序号为31,转换为二进制数为11111,二进制数中每位数据的位号分别为4、3、2、1、0;对应的原始点值为:24×3×G(x,y)、23×3×G(x,y)、22×3×G(x,y)、21×3×G(x,y)、20×3×G(x,y);
步骤406’:以第二固定值为模数,对序号的二进制数的当前数据位上的数据与当前数据位的位号对应的原始点值进行模乘,将所有模乘结果进行点加得到初始点值,将初始点值存储到初始值列表中与当前序号对应的位置;
具体的,在本实施例中,计算当前序号31对应的初始点值为:1×24×3×G(x,y)+1×23×3×G(x,y)+1×22×3×G(x,y)+1×21×3×G(x,y)+1×20×3×G(x,y);上述计算过程中均以第二固定值为模数进行的;
步骤407’:判断当前序号是否为1,是则执行步骤409,否则执行步骤408’;
本实施例中,还可以从序号列表中获取一个序号计算其对应的初始点值,则在步骤404中不需对每个数据段进行编号,步骤404-步骤406替换为步骤c1-步骤c4,参照图6;
步骤c1:将第一余数的二进制数拆分成等长的N个数据段;根据预设拆分段数计算初始点值的序号列表,从序号列表中获取一个序号作为当前序号;
例如,本实施例在该步骤中获取的序号为18;
步骤c2:将当前序号转化为二进制数,判断序号的二进制数的数据位长度是否等于预设拆分段数,是则执行步骤c3,否则在二进制数的最高位补0,直到使其数据位长度等于预设拆分段数,执行步骤c3;
如将序号18转化为二进制数10010,数据位长度为5,和预设拆分段数相同,直接执行步骤c3;
步骤c3:以2为底数,序号的二进制数中的每位数据的位号(记为i,取值为0-(N-1))与每个数据段的数据位长度(L)的乘积为指数计算得到幂值;以第二固定值为模数,对幂值与基点进行模乘得到原始点值;
该步骤中计算得到原始点值的实现过程可参照上述步骤405’的实现过程;
步骤c4:以第二固定值为模数,对序号的二进制数中每位上的数据与其对应的原始点值进行模乘,将所有模乘结果进行点加得到初始点值,将初始点值存储到当前序号对应的位置;
例如,计算序号18对应的初始点值具体为:1×24×3×G(x,y)+0×23×3×G(x,y)+0×22×3×G(x,y)+1×21×3×G(x,y)+0×20×3×G(x,y);
步骤408:从序号列表中获取下一个序号并将其作为当前序号,返回步骤406;
如上述过程是随机从序号列表中获取一个序号计算其对应的初始点值,则执行完该步骤408之后返回步骤c2,如图6所示;
如上述过程是从最大序号开始计算其对应的初始点值,则步骤408替换为:步骤408’:从序号列表中获取下一个序号并将其作为当前序号,将当前序号转化为二进制数,返回步骤406’,如图5所示;
具体的,本实施例中的初始值列表和序号序列表如下表所示:
序号 | 初始点值 |
1 | Q1=G(x,y) |
2 | Q2=21×3×G(x,y) |
3 | Q3=G1+G2 |
4 | Q4=22×3×G(x,y) |
5 | Q5=G1+G4 |
6 | Q6=G2+G4 |
7 | Q7=G1+G2+G4 |
8 | Q8=23×3×G(x,y) |
9 | Q9=G1+G8 |
10 | Q10=G2+G8 |
11 | Q11= G1+G2+G8 |
12 | Q12= G4+G8 |
13 | Q13= G1+G4+G8 |
14 | Q14= G2+G4+G8 |
15 | Q15= G1+G2+ G4+G8 |
16 | Q16=24×3×G(x,y) |
17 | Q17= G1+G16 |
18 | Q18= G2+G16 |
19 | Q19= G1+G2+G16 |
20 | Q20= G4+G16 |
21 | Q21= G1+G4+G16 |
22 | Q22= G2+G4+G16 |
23 | Q23= G1+G2+ G4+G16 |
24 | Q24= G8+G16 |
25 | Q25= G1+G8+G16 |
26 | Q26= G2+G8+G16 |
27 | Q27= G1+G2+ G8+G16 |
28 | Q28= G4+ G8+G16 |
29 | Q29= G1+G4+ G8+G16 |
30 | Q30= G2+G4+ G8+G16 |
31 | Q31= G1+G2+ G4+G8+G16 |
步骤409:将每个数据段的最高位作为当前位;
具体的,本实施例中的5个数据段分别为:010、011、111、011、001;
步骤410:检测每个数据段的当前位上的数据是否均为0,是则执行步骤411,否则执行步骤412;
步骤411:将每个数据段的当前位的下一位为新的当前位,返回步骤410;
步骤412:根据每个数据段的当前位上的数据计算序号并从初始值列表中获取对应的初始点值;
例如,获取当前位上的数据0、0、1、0、0,将其组成二进制数001000对应的十进制数4,记为计算得到序号4,从初始列表中获取对应的G4;
步骤413:判断每个数据段的当前位的下一位是否存在,是则将当前位的下一位作为新的当前位,执行步骤414,否则将初始点值作为结果点值并存储,结束;
步骤414:对初始点值进行点倍运算,将结果记为中间点值;
具体的,本实施例中的中间点值为:2×G4;
步骤415:检测每个数据段的当前位上的数据,判断是否均为0,是则执行步骤416,否则执行步骤417;
本实施例中,该步骤中的当前位上的数据为: 1、1、1、1、0,不均为0,执行步骤417;
步骤416:将中间点值作为结果点值,执行步骤418;
步骤417:根据每个数据段的当前位上的数据计算序号,并根据序号在初始值列表中查找对应的初始点值,将初始点值和中间点值进行点加运算得到结果点值,执行步骤418;
本实施例中根据当前位上的数据计算得到序号30,从初始列表中获取的初始点值G30;计算得到的结果点值为:2×G4+ G30;
步骤418:判断每个数据段上的数据是否处理完成,是则将结果点值存储,结束;否则执行步骤419;
步骤419:将结果点值作为初始点值,当前位的下一位作为新的当前位,返回步骤414;
本实施例中拆分的5个数据段分别为:010、011、111、011、001,最终存储的结果点值为:2×(2×G4+ G30)+ G15。
本实施例中的初始点值也可以等用到时再计算,即先计算序号并从初始值列表中查找对应的初始点值,如找到则继续,如未找到则先计算初始点值并存储到初始值列表,方便下次使用,计算出初始点值后继续后续执行过程,具体实现过程可参照实施例二,在此不再赘述。
实施例四
本发明实施例四提供了一种在嵌入式系统中快速生成坐标点的方法,预先定义了一条椭圆曲线,在硬件资源足够的情况下,可将生成的随机数拆成多段在素数域上来实现,本实施例中以分成两段,预设步长是1为例进行说明,初始点值预先进行计算存储到初始值列表中,如图7所示,本实施例的方法包括:
步骤701:生成随机数;
步骤702:获取第一固定值,用第一固定值对随机数取余并将结果记为第一余数,并判断第一余数是否为0,是则输出提示错误信息,返回步骤701,否则执行步骤703;
本实施例中根据预定义的椭圆曲线确定第一固定值,具体为FFFFFFFEFFFF
FFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123;提示错误信息为具体为无穷远点;
步骤703:将第一余数转换为二进制数,判断第一余数的二进制数的位数是否为偶数,是则执行步骤705,否则执行步骤704;
步骤704:在第一余数的二进制数的最高位前补0,顺序执行步骤705;
步骤705:将第一余数的二进制数拆分成长度相同的两段,分别记为高位段和低位段,计算初始点值的序号列表,并从序号列表中获取最大序号作为当前序号;
具体的,在本实施例中,根据长度值计算初始点值列表的序号的实现方法与实施例三相同,即序号列表中序号具体为3、2、1;
步骤706:将当前序号转换为二进制数,以2为底数,序号的二进制数中每位数据的位号与数据段的数据位长度的乘积为指数计算得到幂值;以第二固定值为模数,对幂值与获取的基点进行模乘得到对应的原始点值;
本实施中从预定义的椭圆曲线上获取一个点,得到该点的横坐标和纵坐标(即基点),基点(G(x,y))具体为:Gx=32C4AE2C1F1981195F9904466A39C9
948FE30BBFF2660BE1715A4589334C74C7,Gy=BC3736A2F4F6779C59BDCEE3
6B692153D0A9877CC62A474002DF32E52139F0A0);
具体的,本实施例中,将二进制数拆分为两段,每段长度为L,本实施例中的序号转换为两位二进制数,该步骤计算得到的原始点值具体为:2l×L×G(x,y)、20×L×G(x,y);
步骤707:以第二固定值为模数,对序号的二进制数的当前数据位上的数据与当前数据位的位号对应的原始点值进行模乘,将所有模乘结果进行点加得到初始点值,将初始点值存储到初始值列表中与当前序号对应的位置;
步骤708:判断当前序号是否为1,是则执行步骤710,否则执行步骤709;
步骤709:从序号列表中获取下一个序号并将其作为当前序号,将当前序号转化为二进制数,返回步骤707;
具体的,本实施例中,将第一余数拆分为两段,最大序号为3,初始列表具体如下:
序号 | 初始点值 |
1 | G1=20×L×G(x,y) |
2 | G1=2l×L×G(x,y) |
3 | G3=2l×L×G(x,y)+ 20×L×G(x,y) |
步骤710:将每个数据段的最高位作为当前位;
步骤711:检测每个数据段的当前位上的数据是否均为0,是则执行步骤712,否则执行步骤713;
步骤712:将每个数据段的当前位的下一位作为新的当前位,返回步骤711;
步骤713:根据每个数据段的当前位上的数据计算序号并从初始值列表中获取对应的初始点值;
具体的,本实施例中以高位段和低位段的当前位上的数据为10进行详细阐述,则在初始值列表中找到序号为2对应的初始点值,找到的初始点值具体为:初始点值横坐标:B692E5B574D55DA93DB7B24888C21F3A2B2308F6484E1B38
EAE3D9A9D13A42ED,初始点值纵坐标:A175051B0F3FB6135A924F85544926F
9DB61AC1773438E6DD186469DE295E5AB;
步骤714:判断每个数据段的当前位的下一位是否存在,是则将当前位的下一位作为新的当前位,执行步骤715,否则将初始点值作为结果点值并存储,结束;
步骤715:对初始点值进行点倍运算,将结果记为中间点值;
具体的,根据预定义的椭圆曲线确定第三固定值,具体为: FFFFFFFEFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC;中间点值横坐标为EB3A6E8C595DADF2A96AF4197D9AD709AD51757A765299ABDD616
BF72D336B66,中间点值的纵坐标为3DD094C026F102CF7C19769F881763195A
8FDCBFA4EE925BFCEDCCCEA614044D;
步骤716:检测每个数据段的当前位上的数据,判断是否均为0,是则执行步骤717,否则执行步骤718;
步骤717:将中间点值作为结果点值,执行步骤719;
步骤718:根据每个数据段的当前位上的数据计算序号,并根据序号在初始值列表中获取对应的初始点值,将初始点值和中间点值进行点加运算得到结果点值,执行步骤719;
步骤719:判断每个数据段上的数据是否处理完成,是则将结果点值存储,结束;否则执行步骤720;
步骤720:将结果点值作为初始点值,将当前位的下一位作为新的当前位,返回步骤715。
实施例五
本发明实施例五提供了一种初始点值在操作过程中进行计算的实现方法,如图8所示,包括:
步骤801:按预设拆分段数对待计算的数值进行分段,并计算每个数据段的数据位长度;
具体地,待计算的数值是预先获取或生成的长度不超过预设最大值的二进制数据串,如果二进制数据串的长度小于预设最大值,则在高位补0使其达到所述最大值。例如,所述最大值为32,所述二进制数据串为11011011001111010100111010101;则补位后的二进制数据串为00011011011001111010100111010101;优选地,本实施例中的预设最大值为8的整数倍。
具体地,在本实施例中,最大值为32;相应地,分段后的二进制数据串为00011011、01100111、10101001、11010101;为便于表述,按照从低到高的顺序给各段编号,分别记做第1段、第2段、第3段、第4段,即(第4段)00011011、(第3段)01100111、(第2段)10101001、(第1段)11010101。
本实施例中在步骤801之前还包括:
步骤a1:生成或获取随机数;
步骤a2:用第一固定值对所述随机数取余,判断取余结果是否为0,是则输出错误提示信息,返回步骤a1;否则将所述随机数转化为二进制数得到待计算的数值;
步骤802:根据预设步长对每个数据段进行分组,根据基点、每个数据段的数据位长度和预设步长计算各个数据段的一组数据中每一位所对应的原始点值,将每个数据段的第一组数据作为当前数据组;
所述基点是根据预先定义的椭圆曲线确定的点,记做G(x,y);
本实施例中预设步长为N,如N为1则计算各段原始点值具体为:
第1段的原始点值为G(x,y);
设第i段的原始点值为Gi(x,y),每个数据段的数据位长度为L,则第i+1段的原始点值为2LGi(x,y);
优选地,计算2LGi(x,y)的具体过程为:
步骤A-1:计数器的初始计数值设为0,将Gi(x,y) 记为当前中间变量;
步骤A-2:对当前中间变量初始值进行点倍运算,并以计算结果更新当前中间变量,计数器的计数值自加1;
步骤A-3:检查计数器的计数值是否为L,如果是,则得到的中间变量即为2LGi(x,y),结束;否则,返回步骤A-2。
如预设步长N为4,则计算第i个数据段的一组数据中每一位所对应的原始点值,具体为:
第i个数据段的一组数据中最高位所对应的原始点值为Gi(x,y);
步骤B-1:将当前数据段的一个数据组中最高位作为当前位,第二计数值的初始值为0;
步骤B-2:对当前位所对应的初始点值进行点倍运算,第二计数值自加1,判断所述第二计数值是否大于4,是则执行步骤B-4,否则执行步骤B-3;
步骤B-3:将下一位作为新的当前位,将点倍运算结果作为新的当前位所对应的原始点值,返回步骤B-2;
步骤B-4:判断是否计算完成所有数据段的一个数据组中每一位所对应的初始点值,是则继续,否则将下一个数据段作为当前数据段,返回步骤B-1。
步骤803:检测所述每个数据段的当前数据组中的数据是否均为0,是则执行步骤804,否则执行步骤805;
步骤804:将所述每个数据段的下一个数据组作为当前数据组,返回步骤803;
步骤805:根据每个数据段当前数据组中每一位上的值以及对应的原始点值计算得到对应初始点值。
优选地,在本实施例中,具体计算初始点值过程为:
步骤805-1:获取一个数据段作为当前数据段;
步骤805-2:检测当前数据段的当前数据组每一位的值,将值为1的位所对应的原始点值与中间点值进行点加运算,并用点加运算结果更新中间点值,顺序执行步骤805-3;
具体的,在本实施例中中间点值的初值为0;
步骤805-3:判断是否获取并处理了所有数据段的当前数据组,是则将中间点值作为对应的初始点值存储,执行步骤806,否则执行步骤805-4;
步骤805-4:获取另一个数据段的作为新的当前数据段,返回步骤805-2;
例如,各个数据段的当前数据组分别为:(第4段)1、(第3段)1、(第2段)0、(第1段)0;则将第4段对应的原始点值、第3段对应的原始点值以及中间点值进行点加运算。
步骤806:判断各个数据段的下一个数据组是否存在,是执行步骤807,否则将所述中间点值作为结果坐标点值存储,结束;
步骤807:对中间点值进行所述预设步长次的点倍运算,并用点倍运算结果更新所述中间点值,将各个数据段的下一个数据组作为新的当前数据组;
本实施例中的四个数据段:(第4段)00011011、(第3段)01100111、(第2段)10101001、(第1段)11010101中,如各数据段的当前位分别为:(第4段)0、(第3段)0、(第2段)1、(第1段)1,则经过步骤807之后新的当前位为:(第4段)0、(第3段)1、(第2段)0、(第1段)1。
如本实施例中的预设步长为1则进行1次点倍运算;
步骤808:检测每个数据段的当前数据组中的数据是否均为0,是则执行步骤806,否则返回步骤805-1。
进一步地,在第一次计算得到各个数据段的一个数据组中每一位所对应的原始点值可将其保存。可用于在后续根据各数据段的当前位上的值计算对应的初始点值,除非使用新的计算参数(曲线、基点或预设拆分段数)。
实施例六
本发明实施例六提供了一种预先计算初始点值的实现方法,具体以预设拆分段数为3、预设步长为1进行详细说明,如图9所示,包括:
步骤901:根据预设拆分段数和预设步长确定需计算的初始点值个数;
具体地,在本实施例中,预设拆分段数为3,预设步长为1。
优选地,预设步长的取值满足“分段后的各数据段的数据位长度是预设步长的整数倍”。
本实施例中,例如待计算的数值为101110100,预设拆分段数为3,分段后各数据段为:(第3段)101、(第2段)110、(第1段)100;所述原始点值个数根据预设拆分段数及预设步长计算得出,具体为:以2为底数,预设拆分段数和预设步长的乘积为指数计算的结果减1记为原始点值的个数,在本实施例中,所述原始点值个数为23×1-1=7;
例如,待计算的数值110111010100,预设拆分段数为2,分段后各数据段为:(第2段)110111、(第1段)010100;预设步长为3,所述原始点值个数为22×3-1=63;
步骤902:根据基点和预设拆分段数分别计算各数据段的一个数据组中最高位所对应的原始点值,根据最高位所对应的原始点值和预设步长计算各个数据段的一个数据组中其余位所对应的原始点值;
本实施例中,根据基点和预设拆分段数分别计算各段最高位上的原始点值的方法实施例五已经介绍,在此不再赘述。
本实施例中,将各个数据段的每个数据组中的最高位作为第一次计算的当前位,根据最高位所对应的原始点值和预设步长计算各数据段的一个数据组中其余位所对应的原始点值具体为:
步骤902-1:对各数据段上当前位的原始点值进行点倍运算得到当前相邻低位对应的原始点值并存储,计数器的计数值加1;
本实施例中该步骤中的计数器的初始值为0;
步骤902-2:判断计数器的值是否超过预设步长的值,是则执行步骤903,否则将相邻低位作为新的当前位,返回步骤902-1;
步骤903:根据预设拆分段数及预设步长建立二进制数据串;
在本实施例中,步骤903具体为:将预设拆分段数和预设步长的乘积作为二进制数据串的位数。
具体地,在本实施例中,如预设拆分段数为2,预设步长为3则二进制数据串的位数为2×3=6;优选地,在本实施例中,二进制数据串的初始值为000000。
步骤904:分别将二进制数据串各位的值设为0或1得到当前二进制数据串。
具体的,在本实施例中,如预设拆分段数为2,预设步长为3则得到的当前二进制数据串为下列的其中之一:000001、000010、000011、000100、000101、000110、000111、001000、001001、001010、001011、001100、001101、001110、001111、010000、010001、010010、010011、010100、010101、010110、010111、011000、011001、011010、011011、011100、011101、011110、011111;100000、100001、100010、100011、100100、100101、100110、100111、101000、101001、101010、101011、101100、101101、101110、101111、110000、110001、110010、110011、110100、110101、110110、110111、111000、111001、111010、111011、111100、111101、111110、111111;
步骤905:分别检查当前二进制数据串中的各个数据位,如果数据位上的值为1,则取对应数据段上的该位所对应的原始点值进行点加运算得到初始点值;将初始点值和当前二进制数据串一一对应地存储为初始值列表;
例如,二进制数据串为011001则将第2段一个数据段最低位和次低位所对应的原始点值进行点加计算,将点加结果与第1段最低位所对应的原始点值进行再进行点加计算,将计算结果和二进制数据串011011对应存储。
本实施例中也可将二进制数据串转化为十进制数得到序号,将序号和对应的初始点值对应存储。
步骤906:计数器计数一次,判断计数器的值是否大于初始点值个数,是则结束;否则返回步骤904。
具体的,本实施例中计数器的初始值为0。
计算完成后,可得到二进制数据串所有取值的组合(即二进制数据串的列表)与对应的所有初始点值(即初始值列表),并可将其保存。后续无需重复计算,除非使用新的计算参数。
在计算过程中,首先根据预设拆分段数和预设步长对待计算的数值进行分段和分组,获取一个非0的数据组,并从初始值列表获取对应的初始点值,对初始点值进行点倍运算后,再获取下一组数据,将点倍运算结果与下一组数据对应的初始点值进行点加运算,直至计算完各数据段上的所有数据组;具体实现过程如下:
步骤D1:根据预设拆分段数对待计算的数值进行分段,根据预设步长对每个数据段进行分组,将所述每个数据段的第一组数据作为当前数据组;
具体的,步骤D1之前包括步骤D0:判断所述待计算的数值的数据位长度是否为所述预设拆分段数与预设步长乘积的整数倍,是则执行步骤D1,否则在所述待计算的数值前补0,返回步骤D1。
在步骤D0之前包括:步骤a1:生成或获取随机数;
步骤a2:用第一固定值对所述随机数取余,判断取余结果是否为0,是则输出错误提示信息,返回步骤a1;否则将所述随机数转化为二进制数得到所述待计算的数值。
步骤D2:检测所述每个数据段的当前数据组中的数据是否均为0,是则获取每个数据段的下一组数据作为当前数据组,返回D2,否则执行步骤D3;
具体的,在本实施例中与待计算的数值的长度不是预设拆分段数与预设步长乘积的整数倍,则需在待计算的数值前补0使其长度为预设拆分段数与预设步长乘积的整数倍,如待计算的数值为110101000011101,则拆分为两个数据段为(第2段)000110101、(第1段)000011101,预设步长为3则当前获取的一组数据为110、011后执行步骤D3;
步骤D3:根据获取的各个数据段的当前数据组的组合从初始值列表中获取对应的初始点值,并将其作为中间点值;
如在本实施例中获取的当前数据组为110、011,则根据110011从初始值列表中获取对应的初始点值。
如列表中存储的是序号与对应的初始点值,则需将当前数据组组合成二进制数据串,将该二进制数据串对应的十进制数作为序号,获取与该序号对应的初始点值;
步骤D4:判断各个数据段的下一个数据组是否存在,是则执行步骤D5;否则将获取的初始点值作为结果坐标点值存储,结束;
步骤D5:对中间点值进行预设步长次的点倍运算,用点倍运算结果更新中间点值,将各个数据段的下一个数据组作为新的当前数据组;
优选的本实施例中的中间点值初始值为0;
在本实施例中,如预设步长为3,则需对第一初始点值进行3次点倍运算,例如第一初始点值为P,则得到的中间点值为2×2×2×P。
步骤D6:检测每个数据段的当前数据组中的数据是否均为0,是则执行步骤D8,否则执行步骤D7;
步骤D7:根据所有数据段的当前数据组的组合从初始值列表中获取对应初始点值,将中间点值与获取的对应初始点值进行点加运算,并用点加运算结果更新中间点值,执行步骤D8;
步骤D8:判断各个数据段的下一个数据组是否存在,是则返回步骤D5,否则将中间点值作为结果坐标点值存储,结束。
本发明实施例中的第一固定值、第二固定值、第三固定值和基点都是根据预先定义的椭圆曲线确定的参数。
以上,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (15)
1.一种在嵌入式系统中快速生成坐标点的方法,其特征在于,所述坐标点为实现椭圆曲线公钥密码算法中的椭圆曲线上的坐标点,所述方法包括:
步骤S1:按预设拆分段数对待计算的数值进行分段,并计算每个数据段的数据位长度;
步骤S2:根据预设步长对所述每个数据段进行分组,根据基点、所述每个数据段的数据位长度和所述预设步长计算各个数据段的一组数据中每一位所对应的原始点值,将所述每个数据段的第一组数据作为每个数据段的当前数据组;所述基点是根据预先定义的椭圆曲线确定的点;
步骤S3:检测所述每个数据段的当前数据组中的数据是否均为0,是则执行步骤S4,否则执行步骤S5;
步骤S4:将所述每个数据段的下一个数据组作为每个数据段的当前数据组,返回步骤S3;
步骤S5:检测当前数据段的当前数据组中的每一位上的值,并将当前数据段的当前数据组中所有的值为1的位所对应的原始点值与中间点值进行点加运算,并用点加运算结果更新所述中间点值;所述中间点值为一个坐标变量,其初始值为(0,0);
步骤S6:判断是否处理完所有数据段的当前数据组,是则执行步骤S8,否则执行步骤S7;
步骤S7:将其他未处理的数据段作为新的当前数据段,返回步骤S5;
步骤S8:判断各个数据段的下一个数据组是否存在,是执行步骤S9,否则将所述中间点值作为结果坐标点值存储,结束;
步骤S9:对所述中间点值进行所述预设步长次的点倍运算,并用点倍运算结果更新所述中间点值,将各个数据段的下一个数据组作为新的当前数据组;
步骤S10:检测所述每个数据段的当前数据组中的数据是否均为0,是则执行步骤S8,否则返回步骤S5。
2.如权利要求1所述的方法,其特征在于,所述步骤S1之前包括:
步骤S0:判断所述待计算的数值的数据位长度是否为所述预设拆分段数与所述预设步长乘积的整数倍,是则执行步骤S1,否则在所述待计算的数值前补0,返回步骤S0。
3.如权利要求2所述的方法,其特征在于,在所述步骤S0之前包括:
步骤a1:生成或获取随机数;
步骤a2:用第一固定值对所述随机数取余,判断取余结果是否为0,是则输出错误提示信息,返回步骤a1;否则将所述随机数转化为二进制数得到所述待计算的数值。
4.如权利要求1-3任意一项所述的方法,其特征在于,所述步骤S2中根据基点、所述每个数据段的数据位长度和所述预设步长计算各个数据段的一组数据中每一位所对应的原始点值,具体包括:步骤S21-步骤S25为计算所有数据段的一个数据组中最高位所对应的原始点值的过程,步骤S26-步骤S28为计算每个数据段的一个数据组中除最高位的其他位所对应的原始点值的过程;
步骤S21:将拆分的每个数据段按照从低位到高位的顺序,从小到大进行编号,将最小编号数据段作为当前数据段,将所述基点作为当前数据段的一组数据组中最高位所对应的原始点值;
步骤S22:将当前数据段的一组数据组中最高位所对应的原始点值进行点倍运算,第一计数值自加1;所述第一计数值的初始值为0,定义一个坐标变量作为中间值,其初始值为(0,0);
步骤S23:判断所述第一计数值是否大于所述每个数据段的数据位长度,是则执行步骤S25,否则执行步骤S24;
步骤S24:用点倍运算结果更新所述中间值,对所述中间值进行点倍运算,所述第一计数值自加1,返回步骤S23;
步骤S25:判断是否计算完成所有的数据段的一个数组中最高位所对应的原始点值,是则执行步骤S26,否则将下一个数据段作为新的当前数据段,将点倍运算结果作为当前数据段的一个数据组中最高位所对应的原始点值,返回步骤S22;
步骤S26:将当前数据段的一个数据组中最高位作为当前位,第二计数值的初始值为0;
步骤S27:对当前位所对应的原始点值进行点倍运算,所述第二计数值自加1,判断所述第二计数值是否大于所述预设步长,是则执行步骤S29,否则执行步骤S28;
步骤S28:将下一位作为新的当前位,将点倍运算结果作为新的当前位所对应的原始点值,返回步骤S27;
步骤S29:判断是否计算完成所有数据段的一个数据组中每一位所对应的原始点值,是则执行步骤S3,否则将下一个数据段作为当前数据段,返回步骤S26。
5.如权利要求4所述的方法,其特征在于,所述步骤S3中判断为否与步骤S5之间包括步骤A1;
步骤A1:根据所有数据段的当前数据组的组合在初始值列表中检索对应的初始点值,如找到则获取对应的初始点值并将其与中间点值进行点加运算,用点加运算结果更新所述中间点值,执行步骤S8,如未找到则执行步骤S5;
所述步骤S6判断为是与步骤S8之间包括步骤P1;
步骤P1:将点加结果作为初始点值与对应的所有数据段的当前数据组的组合对应存储到所述初始值列表中,执行步骤S8;
所述步骤S10替换为:检测所述每个数据段的当前数据组中的数据是否均为0,是则执行步骤S8,否则返回步骤A1。
6.如权利要求5所述的方法,其特征在于,所述步骤A1中根据所有数据段的当前数据组的组合在初始值列表中检索对应的初始点值具体为:
按编号从大到小的顺序将每个数据段的当前数据组进行组合得到二进制数据串,根据所述二进制数据串在所述初始值列表中检索对应的初始点值。
7.如权利要求6所述的方法,其特征在于,所述根据二进制数据串在所述初始值列表中检索对应的初始点值具体为:将所述二进制数据串转换为十进制数得到序号,根据所述序号在所述初始值列表中检索对应的初始点值。
8.一种在嵌入式系统中快速生成坐标点的方法,其特征在于,所述坐标点为实现椭圆曲线公钥密码算法中的椭圆曲线上的坐标点,所述方法包括:
步骤s1:根据预设拆分段数和预设步长确定需计算的初始点值个数;
步骤s2:根据基点和所述预设拆分段数分别计算每个数据段的最高位所对应的原始点值,将所述每个数据段的最高位作为所述每个数据段的当前位;所述基点是根据预先定义的椭圆曲线确定的点;
步骤s3:对每个数据段的当前位的原始点值进行点倍运算得到所述每个数据段的当前位的相邻低位所对应的原始点值并存储,第一计数值自加1;
步骤s4:判断所述第一计数值是否超过所述预设步长的值,是则执行步骤s5,否则将所述每个数据段的当前位的相邻低位作为所述每个数据段的当前位,返回步骤s3;
步骤s5:根据所述预设拆分段数及所述预设步长建立二进制数据串;
步骤s6:分别将所述二进制数据串的各数据位依次设为0或1得到当前二进制数据串;
步骤s7:分别检查当前二进制数据串中的各个数据位,将当前二进制数据串中的值为1的数据位所对应的原始点值进行点加运算得到初始点值;并将所述初始点值和当前二进制数据串一一对应存储为初始值列表,第二计数值自加1;
步骤s8:判断所述第二计数值是否大于所述初始点值个数,是则执行步骤s9;否则返回步骤s6;
步骤s9:根据所述预设拆分段数对待计算的数值进行分段,根据所述预设步长对每个数据段进行分组,将所述每个数据段的第一组数据作为所述每个数据段的当前数据组;
步骤s10:检测所述每个数据段的当前数据组中的数据是否均为0,是则执行步骤s11,否则执行步骤s12;
步骤s11:将所述每个数据段的下一个数据组作为所述每个数据段的当前数据组,返回步骤s10;
步骤s12:根据所有数据段的当前数据组的组合从所述初始值列表中获取对应初始点值作为中间点值,判断所述每个数据段的下一个数据组是否存在,是执行步骤s13,否则将所述获取的初始点值作为结果坐标点值存储,结束;所述中间点值为一坐标变量,其初始值为(0,0);
步骤s13:将所述中间点值进行所述预设步长次的点倍运算,用点倍运算结果更新中间点值,将所述每个数据段的下一个数据组作为所述每个数据段的当前数据组;
步骤s14:检测所述每个数据段的当前数据组中的数据是否均为0,是则执行步骤s16,否则执行步骤s15;
步骤s15:根据所有数据段的当前数据组的组合从所述初始值列表中获取对应初始点值,将所述中间点值与所述获取的对应初始点值进行点加运算,用点加运算结果更新中间点值,执行步骤s16;
步骤s16:判断每个数据段的下一个数据组是否存在,是则返回步骤s13,否则将所述中间点值作为结果坐标点值存储,结束。
9.如权利要求8所述的方法,其特征在于,所述步骤s1具体为:将所述预设拆分段数和预设步长的乘积减1的结果作为初始点值个数。
10.如权利要求9所述的方法,其特征在于,所述步骤s5具体为:将所述预设拆分段数和预设步长的乘积转化为二进制数得到所述二进制数据串。
11.如权利要求10所述的方法,其特征在于,在所述步骤s9之前包括:
步骤s9’:判断所述待计算的数值的数据位长度是否为所述预设拆分段数与所述预设步长乘积的整数倍,是则执行步骤s9,否则在所述待计算的数值前补0,返回步骤s9’。
12.如权利要求11所述的方法,其特征在于,在所述步骤s9’之前包括:
步骤a1:生成或获取随机数;
步骤a2:用第一固定值对所述随机数取余,判断取余结果是否为0,是则输出错误提示信息,返回步骤a1;否则将所述随机数转化为二进制数得到所述待计算的数值。
13.如权利要求12所述的方法,其特征在于,所述步骤s7中将所述初始点值和当前二进制数据串一一对应存储为所述初始值列表,具体为:将当前二进制数据串转化为十进制数得到序号,将所述初始点值和对应的序号存储为所述初始值列表;
所述步骤s15中根据各个数据段的当前数据组的组合从所述初始值列表中获取对应初始点值,具体为:根据所有数据段的当前数据组计算所述序号,根据所述序号在所述初始值列表中获取对应的初始点值。
14.如权利要求13所述的方法,其特征在于,根据所有数据段的当前数据组计算所述序号具体为:将所有数据段的当前数据组顺序组合,将组合的二进制数转换为十进制数得到所述序号。
15.如权利要求8-14任意一项所述的方法,其特征在于,所述步骤s2中根据基点和预设拆分段数分别计算各个数据段上最高位的原始点值,具体为:
步骤s21:将拆分的每个数据段按照从低位到高位的顺序,从小到大进行编号,将所述基点作为最小编号数据段的一组数据组中最高位所对应的原始点值,将所述最小编号数据段作为当前数据段;
步骤s22:将当前数据段的一组数据组中最高位所对应的初始点值进行点倍运算,第一计数值自加1;所述第一计数值的初始值为0,定义一个坐标变量作为中间值,其初始值为(0,0);
步骤s23:判断所述第一计数值是否大于所述每个数据段的数据位长度,是则执行步骤s25,否则执行步骤s24;
步骤s24:用点倍运算结果更新所述中间值,对所述中间值进行点倍运算,所述第一计数值自加1,返回步骤s23;
步骤s25:判断是否计算完成所有的数据段的一个数组中最高位所对应的原始点值,是则将所述每个数据段的最高位作为所述每个数据段的当前位,执行步骤s3,否则将下一个数据段作为新的当前数据段,用点倍运算结果作为当前数据段的一个数据组中最高位所对应的初始点值,返回步骤s22。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210428772.6A CN102929705B (zh) | 2012-10-31 | 2012-10-31 | 一种在嵌入式系统中快速生成坐标点的方法 |
PCT/CN2013/085692 WO2014067410A1 (zh) | 2012-10-31 | 2013-10-22 | 一种在嵌入式系统中快速生成坐标点的方法 |
US14/423,506 US9667420B2 (en) | 2012-10-31 | 2013-10-22 | Method for rapidly generating coordinate point in embedded system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210428772.6A CN102929705B (zh) | 2012-10-31 | 2012-10-31 | 一种在嵌入式系统中快速生成坐标点的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102929705A CN102929705A (zh) | 2013-02-13 |
CN102929705B true CN102929705B (zh) | 2015-06-17 |
Family
ID=47644513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210428772.6A Active CN102929705B (zh) | 2012-10-31 | 2012-10-31 | 一种在嵌入式系统中快速生成坐标点的方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9667420B2 (zh) |
CN (1) | CN102929705B (zh) |
WO (1) | WO2014067410A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117785108A (zh) * | 2024-02-27 | 2024-03-29 | 芯来智融半导体科技(上海)有限公司 | 一种前导数处理方法、系统、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050267926A1 (en) * | 2004-05-27 | 2005-12-01 | King Fahd University Of Petroleum And Minerals | Finite field serial-serial multiplication/reduction structure and method |
US20090016523A1 (en) * | 2007-07-12 | 2009-01-15 | Atmel Corporation | Masking and Additive Decomposition Techniques for Cryptographic Field Operations |
CN102521544A (zh) * | 2011-12-26 | 2012-06-27 | 飞天诚信科技股份有限公司 | 一种在cpu中抗能量攻击的模幂运算的实现方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7231329B1 (en) * | 2002-11-07 | 2007-06-12 | United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration (Nasa) | Enhanced elliptic grid generation |
CN102131198B (zh) * | 2011-03-01 | 2013-11-06 | 广州杰赛科技股份有限公司 | 认证系统中椭圆曲线密码运算装置的实现方法 |
CN102411489B (zh) * | 2011-10-18 | 2014-06-04 | 飞天诚信科技股份有限公司 | 一种嵌入式系统中的数据处理方法及装置 |
CN102447698B (zh) * | 2011-11-29 | 2014-11-12 | 数字金融服务(杭州)有限公司 | 一种网络通信信息加密传输方法 |
-
2012
- 2012-10-31 CN CN201210428772.6A patent/CN102929705B/zh active Active
-
2013
- 2013-10-22 WO PCT/CN2013/085692 patent/WO2014067410A1/zh active Application Filing
- 2013-10-22 US US14/423,506 patent/US9667420B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050267926A1 (en) * | 2004-05-27 | 2005-12-01 | King Fahd University Of Petroleum And Minerals | Finite field serial-serial multiplication/reduction structure and method |
US20090016523A1 (en) * | 2007-07-12 | 2009-01-15 | Atmel Corporation | Masking and Additive Decomposition Techniques for Cryptographic Field Operations |
CN102521544A (zh) * | 2011-12-26 | 2012-06-27 | 飞天诚信科技股份有限公司 | 一种在cpu中抗能量攻击的模幂运算的实现方法 |
Also Published As
Publication number | Publication date |
---|---|
US20150349955A1 (en) | 2015-12-03 |
CN102929705A (zh) | 2013-02-13 |
WO2014067410A1 (zh) | 2014-05-08 |
US9667420B2 (en) | 2017-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100938030B1 (ko) | 암호화 프로그램을 위한 가능성 있는 솟수들을 테스트하기 위한 방법 | |
US9385954B2 (en) | Hashing techniques for use in a network environment | |
US10193806B2 (en) | Performing a finishing operation to improve the quality of a resulting hash | |
CN107330047B (zh) | 一种基于完美哈希算法的fpga训练及查询电路实现方法 | |
TWI557641B (zh) | 除法運算裝置及其運算方法 | |
Sasao | Index Generation Functions: Tutorial. | |
CN102929705B (zh) | 一种在嵌入式系统中快速生成坐标点的方法 | |
CN107395347B (zh) | 对称密码系统代数次数评估方法 | |
US9613229B2 (en) | Method for generating coordinate point in embedded system | |
CN116436709B (zh) | 一种数据的加解密方法、装置、设备和介质 | |
CN109379191A (zh) | 一种基于椭圆曲线基点的点乘运算电路和方法 | |
CN110275693B (zh) | 用于随机计算的多加数加法电路 | |
CN111147390B (zh) | 负载分担求余的方法及装置 | |
US9419793B2 (en) | Method for generating large prime number in embedded system | |
CN102508632B (zh) | 一种在嵌入式系统中实现乘法运算的方法和装置 | |
US20160034255A1 (en) | Arithmetic Devices, Montgomery Parameter Calculation Method and Modular Multiplication Method Thereof | |
KR101331270B1 (ko) | 등가 검증을 위한 디지털 회로의 상태 요소를 매핑하는 시스템 및 방법 | |
KR101655809B1 (ko) | 복수의 룩업테이블을 이용한 crc 연산 장치 및 방법 | |
CN108804883B (zh) | 一种混淆代码的运行方法和装置 | |
CN101266682A (zh) | 一种针对图像lsb嵌入隐藏信息的硬件检测器 | |
CN105553659A (zh) | 一种快速生成大素数的方法和装置 | |
JP6351530B2 (ja) | 通信装置及び制御方法 | |
US8363825B1 (en) | Device for and method of collision-free hashing for near-match inputs | |
CN115276960A (zh) | 一种sm2蒙哥马利域上的快速模逆芯片实现装置及方法 | |
Mohan | Base Extension, Scaling and Division Techniques |
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 |