CN103207770B - 一种在嵌入式系统中实现大数预计算的方法 - Google Patents
一种在嵌入式系统中实现大数预计算的方法 Download PDFInfo
- Publication number
- CN103207770B CN103207770B CN201310132081.6A CN201310132081A CN103207770B CN 103207770 B CN103207770 B CN 103207770B CN 201310132081 A CN201310132081 A CN 201310132081A CN 103207770 B CN103207770 B CN 103207770B
- Authority
- CN
- China
- Prior art keywords
- data
- depositor
- access memory
- random access
- read
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/728—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic using Montgomery reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
Landscapes
- Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
- Executing Machine-Instructions (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种在嵌入式系统中实现大数预计算的方法,根据模长的数据格式以及模长对应的二进制数的各个数据位的取值,调用取模模块、模加模块和蒙哥马利模乘器进行迭代运算,能够在模长为任意值时,得到大数预计算结果,从而提高了数据处理速度。
Description
技术领域
本发明涉及信息安全领域,特别是涉及一种在嵌入式系统中实现大数预计算的方法。
背景技术
随着网络应用的普及,网络安全变得越来越重要,各种网络安全产品应运而生。网络安全产品涉及到信息保密、漏洞防护等方面,通常使用大数运算来保证数据的机密性。
发明人在实现本发明的过程中,发现现有技术至少存在以下缺陷:
现有技术中,在基于蒙哥马利模乘实现的大数运算过程中,通过减法和移位操作得到预计算值,处理速度较慢。
发明内容
本发明提供了一种在嵌入式系统中实现大数预计算的方法,用于解决大数运算过程中处理速度过慢的缺陷。
本发明提供了一种在嵌入式系统中实现大数预计算的方法,包括以下步骤:
S1、读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器;所述第一寄存器用于存储第一数据,所述第二寄存器用于存储第二数据,所述第二数据的取值为以2为底数,以第三数据的取值为指数的幂,所述第三数据为整数;
S2、调用取模模块,对所述第一随机存储器和所述第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器;所述取模模块用于将所述第一随机存储器中的数据作为模数,将所述第二随机存储器中的数据作为被模数,进行取模运算;
S3、读取所述第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第五随机存储器;
S4、调用模加模块,对所述第三随机存储器、所述第四随机存储器和所述第五随机存储器中的数据进行运算,使用运算结果更新所述第三寄存器中的数据;所述模加模块用于将所述第三随机存储器中的数据和所述第四随机存储器中的数据作为加数,将所述第五随机存储器中的数据作为模数,进行模加运算;
S5、根据第五寄存器中的数据,从第六寄存器中读取位于最低位的数据,将读取到的数据作为当前位数据,所述第五寄存器中的数据的初始值为预设值,所述第六寄存器用于存储所述第三数据;
S6、对所述当前位数据的取值进行判断,如果所述当前位数据的取值为零,则执行步骤S7;如果所述当前位数据的取值为1,则执行步骤S10;
S7、读取所述第三寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第八随机存储器;
S8、调用蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第三寄存器中的数据;所述蒙哥马利模乘器用于将所述第六随机存储器中的数据、所述第七随机存储器中的数据和所述第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算;
S9、对所述第五寄存器中的数据进行更新,根据更新后的所述第五寄存器中的数据,从所述第六寄存器中读取比所述当前位数据高一位的数据,将读取到数据作为更新后的当前位数据,并返回步骤S6;
S10、读取所述第四寄存器中的数据,使用读取到的数据更新所述第六随机存储器中的数据;读取所述第三寄存器中的数据,使用读取到的数据更新所述第七随机存储器中的数据;读取所述第一寄存器中的数据,使用读取到的数据更新所述第八随机存储器中的数据;
S11、调用所述蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第四寄存器中的数据;
S12、判断所述当前位数据是否为所述第六寄存器中位于最高位的数据,如果是,则执行步骤S13;否则,返回步骤S7;
S13、将所述第四寄存器中的数据输出。
本发明还提供了一种在嵌入式系统中实现大数预计算的方法,包括以下步骤:
S1、读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器;所述第一寄存器用于存储第一数据,所述第二寄存器用于存储第二数据,所述第二数据的取值为以2为底数,以第三数据的取值为指数的幂,所述第三数据为整数;
S2、调用取模模块,对所述第一随机存储器和所述第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器;所述取模模块用于将所述第一随机存储器中的数据作为模数,将所述第二随机存储器中的数据作为被模数,进行取模运算;
S3、读取所述第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第五随机存储器;
S4、调用模加模块,对所述第三随机存储器、所述第四随机存储器和所述第五随机存储器中的数据进行运算,使用运算结果更新所述第三寄存器中的数据;所述模加模块用于将所述第三随机存储器中的数据和所述第四随机存储器中的数据作为加数,将所述第五随机存储器中的数据作为模数,进行模加运算;
S5、读取所述第四寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第八随机存储器;调用蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第四寄存器中的数据;所述蒙哥马利模乘器用于将所述第六随机存储器中的数据、所述第七随机存储器中的数据和所述第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算;
根据第五寄存器中的数据,从第六寄存器中读取位于最高位的数据,将读取到的数据作为当前位数据,所述第五寄存器中的数据的初始值为预设值,所述第六寄存器用于存储所述第三数据;
S6、对所述当前位数据的取值进行判断,如果所述当前位数据的取值为零,则执行步骤S9;如果所述当前位数据的取值为1,则执行步骤S7;
S7、读取所述第四寄存器中的数据,使用读取到的数据更新所述第六随机存储器中的数据;读取所述第三寄存器中的数据,使用读取到的数据更新所述第七随机存储器中的数据;读取所述第一寄存器中的数据,使用读取到的数据更新所述第八随机存储器中的数据;
S8、调用所述蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第四寄存器中的数据,并执行步骤S9;
S9、判断所述当前位数据是否为所述第六寄存器中位于最低位的数据,如果是,则执行步骤S11;否则,执行步骤S10;
S10、读取所述第四寄存器中的数据,使用读取到的数据分别更新所述第六随机存储器和所述第七随机存储器中的数据;读取所述第一寄存器中的数据,使用读取到的数据更新第八随机存储器中的数据;调用蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第四寄存器中的数据;所述蒙哥马利模乘器用于将所述第六随机存储器中的数据、所述第七随机存储器中的数据和所述第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算;
对所述第五寄存器中的数据进行更新,根据更新后的所述第五寄存器中的数据,从所述第六寄存器中读取比所述当前位数据低一位的数据,将读取到数据作为更新后的当前位数据,并返回步骤S6;
S11、将所述第四寄存器中的数据输出。
本发明还提供了一种在嵌入式系统中实现大数预计算的方法,包括以下步骤:
S1、读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器中;所述第一寄存器用于存储第一数据,所述第二寄存器用于存储第二数据,所述第二数据的取值为以2为底数,以第三数据的取值为指数的幂,所述第三数据为整数;
S2、调用取模模块,对所述第一随机存储器和所述第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器;所述取模模块用于将所述第一随机存储器中的数据作为模数,将所述第二随机存储器中的数据作为被模数,进行取模运算;
S3、读取所述第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第五随机存储器;
S4、调用模加模块,对所述第三随机存储器、所述第四随机存储器和所述第五随机存储器中的数据进行运算,使用运算结果更新所述第三寄存器中的数据;所述模加模块用于将所述第三随机存储器中的数据和所述第四随机存储器中的数据作为加数,将所述第五随机存储器中的数据作为模数,进行模加运算;
S5、读取所述第三寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第八随机存储器;
S6、调用蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第三寄存器中的数据;所述蒙哥马利模乘器用于将所述第六随机存储器中的数据、所述第七随机存储器中的数据和所述第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算;
S7、将第五寄存器中的数据加1,将得到的结果作为更新后的所述第五寄存器中的数据,判断所述第五寄存器中的数据是否等于所述第六寄存器中的数据的长度,如果是,则执行步骤S8;否则,返回步骤S5;所述第五寄存器中的数据的初始值为零,所述第六寄存器用于存储所述第三数据,所述第三数据的取值为2的整数次幂;
S8、将所述第三寄存器中的数据输出。
本发明还提供了一种在嵌入式系统中实现大数预计算的方法,包括以下步骤:
S1、读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器;所述第一寄存器用于存储第一数据,所述第二寄存器用于存储第二数据,所述第二数据的取值为以2为底数,以第三数据的取值为指数的幂,所述第三数据为整数;
S2、调用取模模块,对所述第一随机存储器和所述第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器;所述取模模块用于将所述第一随机存储器中的数据作为模数,将所述第二随机存储器中的数据作为被模数,进行取模运算;
S3、读取所述第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第五随机存储器;
S4、调用模加模块,对所述第三随机存储器、所述第四随机存储器和所述第五随机存储器中的数据进行运算,使用运算结果更新所述第三寄存器中的数据;所述模加模块用于将所述第三随机存储器中的数据和所述第四随机存储器中的数据作为加数,将所述第五随机存储器中的数据作为模数,进行模加运算;
S5、读取所述第三寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第八随机存储器;
S6、调用蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第三寄存器中的数据;所述蒙哥马利模乘器用于将所述第六随机存储器中的数据、所述第七随机存储器中的数据和所述第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算;
S7、判断第五寄存器中的数据是否等于所述第六寄存器中的数据的长度,如果是,则执行步骤S9;否则,执行步骤S8;所述第五寄存器中的数据的初始值为1,所述第六寄存器用于存储所述第三数据,所述第三数据的取值为2的整数次幂;
S8、将所述第五寄存器中的数据加1,将得到的结果作为更新后的所述第五寄存器中的数据,并返回步骤S5;
S9、将所述第三寄存器中的数据输出。
本发明实施例的技术方案,使用蒙哥马利模乘器对数据进行迭代运算,得到预计算结果,从而提高了数据处理速度。
附图说明
图1为本发明实施例一中的一种在嵌入式系统中实现大数预计算的方法流程图;
图2为本发明实施例二中的一种在嵌入式系统中实现大数预计算的方法流程图;
图3为本发明实施例三中的一种在嵌入式系统中实现大数预计算的方法流程图;
图4为本发明实施例四中的一种在嵌入式系统中实现大数预计算的方法流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本实施例提供了一种基于蒙哥马利模乘的数据处理方法,CPU(CentralProcessing Unit,中央处理器)在数据处理过程中,可调用取模模块、模加模块和蒙哥马利模乘器,其中,取模模块用于将第一随机存储器中的数据作为模数,将第二随机存储器中的数据作为被模数,进行取模运算;模加模块用于将第三随机存储器中的数据和第四随机存储器中的数据作为加数,将第五随机存储器中的数据作为模数,进行模加运算;蒙哥马利模乘器用于将第六随机存储器中的数据、第七随机存储器中的数据和第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算。
此外,本实施例中,第一寄存器用于存储第一数据N,第二寄存器用于存储第二数据R=2n,n为整数,第三寄存器、第四寄存器和第五寄存器用于存储数据处理过程中的中间数据,第六寄存器用于存储第三数据,该第三数据为模长n。
如图1所示,为本发明实施例一中的一种在嵌入式系统中实现大数预计算的方法流程图,包括以下步骤:
步骤101,读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器。
步骤102,调用取模模块,对第一随机存储器和第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器。
本实施例中,调用取模模块进行运算后,第三寄存器中的数据记为W,第四寄存器中的数据记为S,且S=W=R mod N。例如,N为0xD99E413375024660171E3AB08CA00A3E1AA4985BEAAF8AC09F892DA9C61915945C7B4D72849EC1CD747586AB780D0B171FD8C27A5688A2E085AF6C50687AE3E0997238134D7DA34B96B8B7C0C993B4F1DF3FF6D46826460E13B0E8FAFA0BD59B2843627A4B8B253C5873FA87720D28DC3021A1898CF7DE8B4BC7525086CBFFE7CD1176663EC8EE958D59C94D60010E2F6063D5108049931454D00985B478064C2607DEB977D973C7750A19B2BC65DA102DD0A371,R为0x1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,则W和S的取值均为0x2661BECC8AFDB99FE8E1C54F735FF5C1E55B67A41550753F6076D25639E6EA6BA384B28D7B613E328B8A795487F2F4E8E0273D85A9775D1F7A5093AF97851C1F668DC7ECB2825CB46947483F366C4B0E20C0092B97D9B9F1EC4F170505F42A64D7BC9D85B474DAC3A78C05788DF2D723CFDE5E7673082174B438ADAF7934001832EE8999C137116A72A636B29FFEF1D09F9C2AEF7FB66CEBAB2FF67A4B87F9B3D9F8214688268C388AF5E64D439A25EFD22F5C8F。
步骤103,读取第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取第一寄存器中的数据,将读取到的数据写入到第五随机存储器。
步骤104,调用模加模块,对第三随机存储器、第四随机存储器和第五随机存储器中的数据进行运算,将运算结果写入到第三寄存器。
本实施例中,调用模加模块进行运算后,可得到运算结果(R mod N)+(R mod N)mod N=2R mod N,第三寄存器中的数据W被更新为2R mod N。例如,更新后的第三寄存器中的数据W的取值为0x4CC37D9915FB733FD1C38A9EE6BFEB83CAB6CF482AA0EA7EC0EDA4AC73CDD4D74709651AF6C27C651714F2A90FE5E9D1C04E7B0B52EEBA3EF4A1275F2F0A383ECD1B8FD96504B968D28E907E6CD8961C418012572FB373E3D89E2E0A0BE854C9AF793B0B68E9B5874F180AF11BE5AE479FBCBCECE61042E968715B5EF268003065DD1333826E22D4E54C6D653FFDE3A13F3855DEFF6CD9D7565FECF4970FF367B3F0428D104D187115EBCC9A87344BDFA45EB91E。
步骤105,对第五寄存器中的数据进行初始化。
优选地,本实施例中,可以将第五寄存器中的数据设置为1。
步骤106,根据第五寄存器中的数据,从第六寄存器中读取相应位的数据。
具体地,可以根据第五寄存器中的数据的取值,确定第六寄存器中的读取位置,根据该位置从第六寄存器中读取相应位的数据。
优选地,本实施例中,可以根据第五寄存器中的数据得到需要读取的数据在第六寄存器中的位序,并根据该位序从第六寄存器中读取1比特位(bit)的数据,其中,位序为第六寄存器中的各个比特位数据在第六寄存器中的位置序号。例如,当第六寄存器中的数据n=nk*2k+nk-1*2k-1+…+ni*2i+…+n1*21+n0*20(ni=1或0)时,转换成二进制为(nknk-1…ni…n1n0)2,其中,nk、nk-1、ni、n1和n0的位序分别为k、k-1、i、1和0;第五寄存器中的数据为1时,根据该数据读取到的相应位的数据为最低位n0,第五寄存器中的数据为k+1时,根据该数据读取到的相应位的数据为最高位nk。
本实施例中,第六寄存器中的数据n的取值为1440,其二进制格式为(101 10100000)2,初始化后,第五寄存器中的数据为1时,第一次读取到的数据为最低位0。
步骤107,判断最近一次从第六寄存器中读取到的数据的取值是否为零,如果为零,则执行步骤108,否则,执行步骤111。
步骤108,读取第三寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取第一寄存器中的数据,将读取到的数据写入到第八随机存储器。
步骤109,调用蒙哥马利模乘器,对第六随机存储器、第七随机存储器和第八随机存储器中的数据进行模乘运算,使用运算结果更新第三寄存器中的数据。
本实施例中,将蒙哥马利模乘器的三个输入参数分别设置为第三寄存器中的数据W、第三寄存器中的数据W和第一寄存器中的数据N,可模乘得到MontMul(W,W,N)=W*W*R-1modN,第三寄存器中的数据W被更新为W*W*R-1mod N。
例如,读取到的数据为n0时,第三寄存器中的数据W被更新为0x9986FB322BF6E67FA387153DCD7FD707956D9E905541D4FD81DB4958E79BA9AE8E12CA35ED84F8CA2E29E5521FCBD3A3809CF616A5DD747DE9424EBE5E14707D9A371FB2CA0972D1A51D20FCD9B12C38830024AE5F66E7C7B13C5C1417D0A9935EF27616D1D36B0E9E3015E237CB5C8F3F7979D9CC2085D2D0E2B6BDE4D00060CBBA266704DC45A9CA98DACA7FFBC7427E70ABBDFED9B3AEACBFD9E92E1FE6CF67E0851A209A30E22BD799350E6897BF48BD723C;
读取到的数据为n1时,第三寄存器中的数据W被更新为0xB2DF6A61C5D70D3E5FDFDF961CBF47A2206D49897FA83E74C85ACA10123C7B917F548DF2ACD65F8DCFBC87F18F15385FC2C25365EA648C3699AA6258A75BFA3535F80EA48D2A84AF67031471D39D46FE4D80A510AD4F13029D8F9E5A6B2AFB172B431366B03761C1C7D86279FB1320849DA2A45416925A34ABFC365685A801B394C5ACCF95DF397C0FAFD88F3FED00AB38FB04D6FAD3A892095F54994F8F8EA5537256F592B5DBF9C54A316EC0D6AADCC754820E;
读取到的数据为n2时,第三寄存器中的数据W被更新为0x20ED567F6C534104D174FE6AA7D3F4FAAC78DBED0F99DB846BB54F621481A08F4305F05A1156216E11D0A863D8A9F5CF8E23562841587E02D0BDA575278210EB94B4114DE347001FC8CFF252FD543F9C81CAC8418AFFA172D8FE10E80015D891A8C536352D65380BFFA26EBEE686F51B68751145408F5637E6A4375182241C73E277C9C82DBF7A28CD6E50061EC2524BAA9E7B99297E11184764CDCACEE0987748BF1FEE1552DE7B631FC8D87C3E9AFA21AFD423;
读取到的数据为n3时,第三寄存器中的数据W被更新为0x9FD8D1C8F4EA928E0681B472F4337574846D4F6AC3CCEBD406F29AE119E75B3D4BA2DB11A690A99287366664D8062A1F69294A188035D57CE59B6137FFD3183DED1CFB05C659E29070870C5F6852C09AA7499E0389F30CC211CE52BEF816DCA0CB3597062E90850A81378ECB99010AB950134AD5A28B2F3964A1198E21D4777A073235006DA6BE9A72FC24A2822A30A24FA9F8B673254342CDEC60F616C787FB19F4DE8D88974BC7C04907F4477C9BBAE2DBE03A;
读取到的数据为n4时,第三寄存器中的数据W被更新为0x19B89EFA54C8B5C69A2B02086FAE826F65194FDCD7132643A1FCA3CB32697FECB16086B2E50C13A98AE7A929E577FEDEDCCF0FE21C89A6A954D2B7F4C41815A71B6168B097BC8CE38236A6C267F3F5E3EC3FE92ADFD0FECBA2BD8EA8674C81948812864F6242BBE6EE4857F4EC340420B6E44FA5A61C6789C351C7B16393CD8B5F5EB78CBB8B4D56AF4BD2A3AA2CF706E458024A386020D849D7870656AAEF0D9AAEA154EC42C08B0AB00426739C7C94DE0CA196;
读取到的数据为n5时,第三寄存器中的数据W被更新为0x737AD2CCAEA97D279F22DE4C575118ECBF39F9E41F1BDA8C740677C14A8FBAA19CBB5DA2125FB13BBD3815EB7DA6D6454A4716A0E71BF59F578DE159809F82EF52AA42DD0452155DF6AE438506C7C7B0C28921EA7CE4EB5BD6C88362FF45F9DF3999B591A03AEC9B305B0753E40AC3928973836BF12119DA294FF815EAF2F8ACFB2B436AFA9BED27EF69C68AB81A059BC7BD678A82BCD2CEF9DFF577CC8F33E1B9822B8E3F0D5804A225A44B1EE53CB6EEF93848;
读取到的数据为n6时,第三寄存器中的数据W被更新为0xD33D4904E41AC66FB543E22D002A68946486D522E59CCD6C1C59A81ED619FA6D095A98DDC04A47B42576D3C91DA81498F59B59CBB1753C7603979261A33A7208167F0F1CEA375139E8DD99D04F2423E4A6EE10F39AE347A0AEB5444625AD2574545E236EEA5174DEBF82EFF3DC5405971FC1212EC726E49B2BE7CE6AF543ACD508872EA4DC5B38A2C2742E4AA80A7A9D63B190D39B3C095753D1EBE8725A9B711437D93B585539FB3948163775F8C15EAD65C935;
读取到的数据为n7时,第三寄存器中的数据W被更新为0x1AD2EA8F41E8E7D6C06D04317F406C438950CF08918357FFB4BA6C14372740E319D5FB082ECDD03D741FF45168AA01EA8112D1F1BE57EDE660D1DD510D1B1E9F4C4355D690F864BC2644247AD1E254EF85C106ED14FAC18327BB8DD7441D0FB68D5F1B0E761988D72C87843803896D0B76A5EB674C9D4384BDA76861713AE8962AD204631EC1ABA0843F66E49E6D2EFE5DBA80A95DF371990BF14A86DC5AD5F67125B9696DF601E04DE091214B5F82F5B47457EF;
读取到的数据为n8时,第三寄存器中的数据W被更新为0x4AF096BF06BE71B157C1B12A7A39EC6FD9DDBBC4E8B8C5FA317562B31DFB0FED8C71B4D37D5F9F000FCC0BFDD49CBA1591D619F615098ED7D5788662AEEA2443CE8F3ABD8B766E928D9CF9F0D0E94AA0B7D179DFF1715AA215B400150F331BA33514DF597D677D8490E0E0C73219E0907600EB08A876A0F49AAB3B14E2F728C54192A8480B216EC1BCE54B5DADFC1581AC04FCB87ABFFDB1E854511242AB801366BFE0C01C5639878D658BDE44CC6237DB4330BD;
读取到的数据为n9时,第三寄存器中的数据W被更新为0x956CB88B112F1DCB30309A00C50A3098B51AABC48B94E89DDF0F8582DCB07371D7194494E08EA453A528616950ABB1B65176956399E6FBC74BD334812D9DA3D3B5B229BCD643307D7E52DADC3E64C61874EB307BD62CB6A77E4AA893A2FCF9A64759D9B88E6E676511AC5101F1F358231652B00D78AA05AA0AFB71F161AA89CF0DEAE77CCD412441620B35E3D3D3728CAA84368ACDF33538BE766BAFA60F6CD40C867FB024363D1489B87D604936EEB7D44034F5;
读取到的数据为n10时,第三寄存器中的数据W被更新为0xCDE0AC6F912257FF9A51B338A27E951CBE0A5B3A790CA56E2488CED7EDCA526900012803FCC3A6EBF9819D5490F2438DC50DB41B48B19C2DE714895E8853334269ED374748BB9EE99B81FB6A7CC97B64BD1CDB14AA48C1677BB46D7C06770FA8608E0D74984DE085CE5CF0ADDB3EE4271D8E93D9949D553E34456CA8A9E41DA95744EB840A81498E081193048734C370CDECECBE976FE7A9622B40E805A7881184C2F7FE85357CA13FB01C2EB1A7159ED229CC99。
步骤110,对第五寄存器中的数据进行更新,并返回步骤106。
具体地,可以将第五寄存器中的数据加预设步长,例如1,作为更新后的第五寄存器中的数据。
步骤111,读取第四寄存器中的数据,使用读取到的数据更新第六随机存储器中的数据;读取第三寄存器中的数据,使用读取到的数据更新第七随机存储器中的数据;读取第一寄存器中的数据,使用读取到的数据更新第八随机存储器中的数据。
步骤112,调用蒙哥马利模乘器,对第六随机存储器、第七随机存储器和第八随机存储器中的数据进行模乘运算,使用运算结果更新第四寄存器中的数据。
本实施例中,将蒙哥马利模乘器的三个输入参数分别设置为第四寄存器中的数据S、第三寄存器中的数据W和第一寄存器中的数据N,可模乘得到MontMul(S,W,N)=S*W*R-1modN,将模乘结果存储到第四寄存器后,第四寄存器中的数据S被更新为S*W* R-1mod N。
读取到的数据为n5时,其取值为1,第四寄存器中的数据更新为0x19B89EFA54C8B5C69A2B02086FAE826F65194FDCD7132643A1FCA3CB32697FECB16086B2E50C13A98AE7A929E577FEDEDCCF0FE21C89A6A954D2B7F4C41815A71B6168B097BC8CE38236A6C267F3F5E3EC3FE92ADFD0FECBA2BD8EA8674C81948812864F6242BBE6EE4857F4EC340420B6E44FA5A61C6789C351C7B16393CD8B5F5EB78CBB8B4D56AF4BD2A3AA2CF706E458024A386020D849D7870656AAEF0D9AAEA154EC42C08B0AB00426739C7C94DE0CA196;
读取到的数据为n7时,其取值为1,第四寄存器中的数据更新为0xCDA46337DD938E5CBBE5BD34A433D49223AEDC489354AEA5961317A372FF02A2DE00FC155C91FD4629CECF48ABA3E6B5FB6E47D192931C41F5D22579A187F99061FBA714BE6C8BF44B6E2F4DA3F9D549B7CD638227182DE2D309405178EC7DD8DE2C05EAD5F073636C11A56FD0A7E6FC77847B4090EF0F13EE529A47CB9003EC4D96796ABAB10F9E9EE64D02EF6B8ED46DB07E0C32A6D398DB4126A61A592E7DDE02215134E7AE35902F525D3A96C5B45CEDEAA4;
读取到的数据为n8时,其取值为1,第四寄存器中的数据更新为0xBCA266809D0887DFDD16887E3D061AFD601DED198DE11BA3196241D5C647615002B30D1FA2AC61D8EE8A2493ABD4D0D8C48D6255F7CC043070E385A4DA0D1A0EC746A9BA501D403162D185AD4A69C619B60B217060A9B23F41296DF95852A4373DD5D71D7FCCF7DD9E3F26432F41CF6CA2D726EF5B49C63FF57D535C58BB42D87BB258E6804FF5730CF3D71276305A0630359656CB5DA6E5A095A45F00F724B6B181C37A9830E456947B3AC5F249D4D723D6E34D;
读取的数据为n10时,其取值为1,第四寄存器中的数据更新为0xB83C9F28C1E3054ABC74607F8D0E9BF7749570117F35B79B891169D963F693E928F26FC3422F7EB469E4360872C2C1122A27EA331D8EA13B559CF48F5F60573FDCAAAA8F83103CD6A5FF4E6AB3B6F6A4C2C073CEBC2E12EEC89CF8FB0CD4EF713C354FE5C3D7E60E5D2DA4D7C82D181B4B1DEF3DE585A616398CACE990EBDAF23C441DD72D89D1A295163B6337F5AFB59FA35E77FA7EDF391F257220D0D5BB61395D26826690AD1297D714B5D114A2CBD0A814E7。
步骤113,判断最近一次从第六寄存器中读取到的数据是否为第六寄存器中位于最高位的数据,如果是,则执行步骤114;否则,返回步骤108。
具体地,可以判断第五寄存器中的数据的取值是否等于第六寄存器中的数据的长度,如果是,则确定读取到的数据为第六寄存器中位于最高位的数据;否则,确定读取到的数据不是第六寄存器中位于最高位的数据。
步骤114,将第四寄存器中的数据输出。
本实施例中,输出的运算结果为0xB83C9F28C1E3054ABC74607F8D0E9BF7749570117F35B79B891169D963F693E928F26FC3422F7EB469E4360872C2C1122A27EA331D8EA13B559CF48F5F60573FDCAAAA8F83103CD6A5FF4E6AB3B6F6A4C2C073CEBC2E12EEC89CF8FB0CD4EF713C354FE5C3D7E60E5D2DA4D7C82D181B4B1DEF3DE585A616398CACE990EBDAF23C441DD72D89D1A295163B6337F5AFB59FA35E77FA7EDF391F257220D0D5BB61395D26826690AD1297D714B5D114A2CBD0A814E7。
本发明实施例的技术方案,根据模长对应的二进制数的各个数据位的取值,通过蒙哥马利模乘器进行迭代运算,能够在模长为任意值时,得到大数预计算结果,从而提高了数据处理速度。
需要说明的是,在本发明的其他实施方式中,也可以将第五寄存器中的数据初始化为除1之外的其他数值,该数值与第六寄存器中的最低位的数据的位置相对应;还可以在对第五寄存器中的数据更新时,对该数据加上除1之外的其他数值,根据更新之后的第五寄存器中的数据读取到的第六寄存器中的数据,比根据更新之前的第五寄存器中的数据读取到的第六寄存器中的数据高一位,同样可以实现本发明的发明目的。
如图2所示为,本发明实施例二中的一种在嵌入式系统中实现大数预计算的方法流程图,本实施例中,第六寄存器中的存储的模长n=2k,实现大数预计算的方法包括以下步骤:
步骤201,读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器。
步骤202,调用取模模块,对第一随机存储器和第二随机存储器中的数据进行运算,将运算结果写入到第三寄存器。
本实施例中,调用取模模块进行运算后,第三寄存器中的数据记为W=R mod N。
步骤203,读取第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取第一寄存器中的数据,将读取到的数据写入到第五随机存储器。
步骤204,调用模加模块,对第三随机存储器、第四随机存储器和第五随机存储器中的数据进行运算,将运算结果写入到第三寄存器。
本实施例中,调用模加模块进行运算后,可得到运算结果(R mod N)+(R mod N)mod N=2R mod N,第三寄存器中的数据W被更新为2R mod N。
步骤205,对第五寄存器中的数据进行初始化。
优选地,本实施例中,可以将第五寄存器中的数据设置为零。
步骤206,读取第三寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取第一寄存器中的数据,将读取到的数据写入到第八随机存储器。
步骤207,调用蒙哥马利模乘器,对第六随机存储器、第七随机存储器和第八随机存储器中的数据进行模乘运算,使用运算结果更新第三寄存器中的数据。
本实施例中,将蒙哥马利模乘器的三个输入参数分别设置为第三寄存器中的数据W、第三寄存器中的数据W和第一寄存器中的数据N,可模乘得到MontMul(W,W,N)=W*W* R- 1mod N,将模乘结果存储到第三寄存器后,第三寄存器中的数据W被更新为W*W* R-1mod N。
步骤208,对第五寄存器中的数据进行更新。
具体地,可以将第五寄存器中的数据加1,作为更新后的第五寄存器中的数据。
步骤209,判断第五寄存器中的数据是否等于第六寄存器中的数据的长度,如果是,则执行步骤210;否则,返回步骤206。
步骤210,将第三寄存器中的数据输出。
本发明实施例的技术方案,通过蒙哥马利模乘器进行迭代运算,能够在模长为2k时,得到大数预计算结果,从而提高了数据处理速度。
需要说明的是,在本发明的其他实施方式中,也可以将第五寄存器中的数据初始化为1,执行完步骤206至步骤207后,执行步骤209,判断第五寄存器中的数据是否等于第六寄存器中的数据的长度,如果是,则将第三寄存器中的数据作为运算结果输出;否则,将第五寄存器中的数据加1,作为更新后的第五寄存器中的数据,执行步骤206至步骤207,并执行步骤209,依次循环,同样可以实现本发明的发明目的。
如图3所示为,本发明实施例三中的一种在嵌入式系统中实现大数预计算的方法流程图,包括以下步骤:
步骤301,读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器。
步骤302,调用取模模块,对第一随机存储器和第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器。
本实施例中,调用取模模块进行运算后,第三寄存器中的数据记为W,第四寄存器中的数据记为S,且S=W=R mod N。
步骤303,读取第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取第一寄存器中的数据,将读取到的数据写入到第五随机存储器。
步骤304,调用模加模块,对第三随机存储器、第四随机存储器和第五随机存储器中的数据进行运算,将运算结果写入到第三寄存器。
本实施例中,调用模加模块进行运算后,可得到运算结果(R mod N)+(R mod N)mod N=2R mod N,第三寄存器中的数据W被更新为2R mod N。
步骤305,对第五寄存器中的数据进行初始化。
优选地,本实施例中,可以将第五寄存器中的数据设置为零。
步骤306,根据第五寄存器中的数据,从第六寄存器中读取相应位的数据。
具体地,可以根据第五寄存器中的数据的取值,确定第六寄存器中的读取位置,根据该位置从第六寄存器中读取相应的数据。
优选地,本实施例中,可以将第五寄存器中的数据作为需要读取的数据在第六寄存器中的位序,从第六寄存器中读取1比特位(bit)的数据,其中,位序为第六寄存器中的各个比特位数据在第六寄存器中的位置序号。
例如,当第六寄存器中的数据n=nk*2k+nk-1*2k-1+…+ni*2i+…+n1*21+n0*20(ni=1或0)时,转换成二进制为(nknk-1…ni…n1n0)2,其中,nk、nk-1、ni、n1和n0的位序分别为k、k-1、i、1和0;第五寄存器中的数据为0时,根据该数据读取到的相应位的数据为最低位n0,第五寄存器中的数据位为k时,根据该数据读取到的相应位的数据为最高位nk。
步骤307,判断最近一次从第六寄存器中读取到的数据的取值是否为零,如果为零,则执行步骤310,否则,执行步骤308。
步骤308,将第三寄存器中的数据写入到第四寄存器。
步骤309,判断最近一次从第六寄存器中读取到的数据是否为第六寄存器中位于最高位的数据,如果是,则执行步骤316;否则,执行步骤310。
步骤310,对第五寄存器中的数据进行更新,根据第五寄存器中的数据,从第六寄存器中读取相应位的数据。
具体地,可以将第五寄存器中的数据加1,作为更新后的第五寄存器中的数据。
步骤311,读取第三寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取第一寄存器中的数据,将读取到的数据写入到第八随机存储器。
步骤312,调用蒙哥马利模乘器,对第六随机存储器、第七随机存储器和第八随机存储器中的数据进行模乘运算,使用运算结果更新第三寄存器中的数据。
本实施例中,将蒙哥马利模乘器的三个输入参数分别设置为第三寄存器中的数据W、第三寄存器中的数据W和第一寄存器中的数据N,可模乘得到MontMul(W,W,N)=W*W*R-1modN,将模乘结果存储到第三寄存器后,第三寄存器中的数据W被更新为W*W* R-1mod N。
步骤313,判断最近一次从第六寄存器中读取到的数据的取值是否为零,如果为零,则返回步骤310,否则,执行步骤314。
步骤314,读取第四寄存器中的数据,将读取到的数据写入到第六随机存储器;读取第三寄存器中的数据,根据读取到的数据更新第七随机存储器中的数据;读取第一寄存器中的数据,根据读取到的数据更新第八随机存储器中的数据。
步骤315,调用蒙哥马利模乘器,对第六随机存储器、第七随机存储器和第八随机存储器中的数据进行模乘运算,使用运算结果更新第四寄存器中的数据,并返回步骤309。
本实施例中,将蒙哥马利模乘器的三个输入参数分别设置为第四寄存器中的数据S、第三寄存器中的数据W和第一寄存器中的数据N,可模乘得到MontMul(S,W,N)=S*W* R- 1mod N,将模乘结果存储到第四寄存器后,第四寄存器中的数据S被更新为S*W* R-1mod N。
步骤316,将第四寄存器中的数据输出。
本发明实施例的技术方案,根据模长对应的二进制数的各个数据位的取值,通过蒙哥马利模乘器进行迭代运算,能够在模长为任意值时,得到大数预计算结果,从而提高了数据处理速度。
需要说明的是,在本发明的其他实施方式中,也可以将第五寄存器中的数据初始化为除零之外的其他数值,该数值与第六寄存器中的最低位的数据的位置相对应;还可以在对第五寄存器中的数据更新时,对该数据加上除1之外的其他数值,根据更新之后的第五寄存器中的数据读取到的第六寄存器中的数据,比根据更新之前的第五寄存器中的数据读取到的第六寄存器中的数据高一位,同样可以实现本发明的发明目的。
如图4所示为,本发明实施例四中的一种在嵌入式系统中实现大数预计算的方法流程图,包括以下步骤:
步骤401,读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器。
步骤402,调用取模模块,对第一随机存储器和第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器。
本实施例中,调用取模模块进行运算后,第三寄存器中的数据记为W,第四寄存器中的数据记为S,且S=W=R mod N。例如,N为0xD99E413375024660171E3AB08CA00A3E1AA4985BEAAF8AC09F892DA9C61915945C7B4D72849EC1CD747586AB780D0B171FD8C27A5688A2E085AF6C50687AE3E0997238134D7DA34B96B8B7C0C993B4F1DF3FF6D46826460E13B0E8FAFA0BD59B2843627A4B8B253C5873FA87720D28DC3021A1898CF7DE8B4BC7525086CBFFE7CD1176663EC8EE958D59C94D60010E2F6063D5108049931454D00985B478064C2607DEB977D973C7750A19B2BC65DA102DD0A371,R为0x1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,则W和S的取值均为0x2661BECC8AFDB99FE8E1C54F735FF5C1E55B67A41550753F6076D25639E6EA6BA384B28D7B613E328B8A795487F2F4E8E0273D85A9775D1F7A5093AF97851C1F668DC7ECB2825CB46947483F366C4B0E20C0092B97D9B9F1EC4F170505F42A64D7BC9D85B474DAC3A78C05788DF2D723CFDE5E7673082174B438ADAF7934001832EE8999C137116A72A636B29FFEF1D09F9C2AEF7FB66CEBAB2FF67A4B87F9B3D9F8214688268C388AF5E64D439A25EFD22F5C8F。
步骤403,读取第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取第一寄存器中的数据,将读取到的数据写入到第五随机存储器。
步骤404,调用模加模块,对第三随机存储器、第四随机存储器和第五随机存储器中的数据进行运算,将运算结果写入到第三寄存器。
本实施例中,调用模加模块进行运算后,可得到运算结果(R mod N)+(R mod N)mod N=2R mod N,第三寄存器中的数据W被更新为2R mod N。
本实施例中,更新后的第三寄存器中的数据W的取值为0x4CC37D9915FB733FD1C38A9EE6BFEB83CAB6CF482AA0EA7EC0EDA4AC73CDD4D74709651AF6C27C651714F2A90FE5E9D1C04E7B0B52EEBA3EF4A1275F2F0A383ECD1B8FD96504B968D28E907E6CD8961C418012572FB373E3D89E2E0A0BE854C9AF793B0B68E9B5874F180AF11BE5AE479FBCBCECE61042E968715B5EF268003065DD1333826E22D4E54C6D653FFDE3A13F3855DEFF6CD9D7565FECF4970FF367B3F0428D104D187115EBCC9A87344BDFA45EB91E。
步骤405,对第五寄存器中的数据进行初始化。
优选地,本实施例中,可以将第五寄存器中的数据设置为第六寄存器中的数据的长度。
步骤406,根据第五寄存器中的数据,从第六寄存器中读取相应位的数据。
具体地,可以根据第五寄存器中的数据的取值,确定第六寄存器中的读取位置,根据该位置从第六寄存器中读取相应的数据。优选地,本实施例中,可以根据第五寄存器中的数据得到需要读取的数据在第六寄存器中的位序,并根据该位序从第六寄存器中读取1比特位(bit)的数据,其中,位序为第六寄存器中的各个比特位数据在第六寄存器中的位置序号。
例如,当第六寄存器中的数据n=nk*2k+nk-1*2k-1+…+ni*2i+…+n1*21+n0*20(ni=1或0)时,转换成二进制为(nknk-1…ni…n1n0)2,其中,nk、nk-1、ni、n1和n0的位序分别为k、k-1、i、1和0;第五寄存器中的数据为1时,根据该数据读取到的相应位的数据为最低位n0,第五寄存器中的数据为k+1时,根据该数据读取到的相应位的数据为最高位nk。
本实施例中,第六寄存器中的数据n的取值为1440,其二进制格式为(101 10100000)2,初始化后,第五寄存器中的数据为11时,第一次读取到的数据为1。
步骤407,读取第四寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取第一寄存器中的数据,将读取到的数据写入到第八随机存储器。
步骤408,调用蒙哥马利模乘器,对第六随机存储器、第七随机存储器和第八随机存储器中的数据进行模乘运算,使用运算结果更新第四寄存器中的数据。
本实施例中,将蒙哥马利模乘器的三个输入参数分别设置为第四寄存器中的数据S、第四寄存器中的数据S和第一寄存器中的数据N,可模乘得到MontMul(S,S,N)=S*S*R-1modN,将模乘结果存储到第四寄存器后,第四寄存器中的数据S被更新为S*S* R-1mod N。
例如,读取到的数据为n10时,更新后的第四寄存器中的数据为0x2661BECC8AFDB99FE8E1C54F735FF5C1E55B67A41550753F6076D25639E6EA6BA384B28D7B613E328B8A795487F2F4E8E0273D85A9775D1F7A5093AF97851C1F668DC7ECB2825CB46947483F366C4B0E20C0092B97D9B9F1EC4F170505F42A64D7BC9D85B474DAC3A78C05788DF2D723CFDE5E7673082174B438ADAF7934001832EE8999C137116A72A636B29FFEF1D09F9C2AEF7FB66CEBAB2FF67A4B87F9B3D9F8214688268C388AF5E64D439A25EFD22F5C8F;
读取到的数据为n9时,更新后的第四寄存器中的数据S为0x9986FB322BF6E67FA387153DCD7FD707956D9E905541D4FD81DB4958E79BA9AE8E12CA35ED84F8CA2E29E5521FCBD3A3809CF616A5DD747DE9424EBE5E14707D9A371FB2CA0972D1A51D20FCD9B12C38830024AE5F66E7C7B13C5C1417D0A9935EF27616D1D36B0E9E3015E237CB5C8F3F7979D9CC2085D2D0E2B6BDE4D00060CBBA266704DC45A9CA98DACA7FFBC7427E70ABBDFED9B3AEACBFD9E92E1FE6CF67E0851A209A30E22BD799350E6897BF48BD723C;
读取到的数据为n8时,更新后的第四寄存器中的数据S为0xB2DF6A61C5D70D3E5FDFDF961CBF47A2206D49897FA83E74C85ACA10123C7B917F548DF2ACD65F8DCFBC87F18F15385FC2C25365EA648C3699AA6258A75BFA3535F80EA48D2A84AF67031471D39D46FE4D80A510AD4F13029D8F9E5A6B2AFB172B431366B03761C1C7D86279FB1320849DA2A45416925A34ABFC365685A801B394C5ACCF95DF397C0FAFD88F3FED00AB38FB04D6FAD3A892095F54994F8F8EA5537256F592B5DBF9C54A316EC0D6AADCC754820E;
读取到的数据为n7时,更新后的第四寄存器中的数据S为0x83B559FDB14D041345D3F9AA9F4FD3EAB1E36FB43E676E11AED53D885206823D0C17C168455885B84742A18F62A7D73E388D58A10561F80B42F695D49E0843AE52D045378D1C007F233FC94BF550FE72072B21062BFE85CB63F843A000576246A314D8D4B594E02FFE89BAFB9A1BD46DA1D44515023D58DF9A90DD46089071CF89DF2720B6FDE8A335B940187B09492EAA79EE64A5F844611D93372B3B8261DD22FC7FB8554B79ED8C7F2361F0FA6BE886BF508C;
读取到的数据为n6时,更新后的第四寄存器中的数据S为0x022679CABF39B7DD61E056533B7B7BBA371BE1D0DD007BA47277561B1B3BD915EE138C634B04CFE96C05DFBAF7257E9B7186D1AA2A5F7800DBA36B3CC636393F1B4675E65C67A93B75D95B751291EE41D5A92FE35DBC53EED619E9AA1D8AF0B66906AD17C5956C8C1098B4084FD82DE72EA60D27C149F2C63EAE46BFB5A9E2F326588355E2CBD927CB8D336BEA5A8DE1382A0F953BCECFF7E8E67DF98FD8D6CB81C5BF5524E6B051956745414873E5C04DAA0CC1;
读取到的数据为n5时,更新后的第四寄存器中的数据S为0x1ABC6003530F5BF6FAF99131099398E735CDBFA97E81E5F22AE25E2C1091FE972F4CC1CE0514303E4C6002288744F614BB2E727D0016A4D06BD6843BF9039D13FA9904FD47457D3A7530BE02241C2579E9A404682790478E9E720BF409B96F2908FEC6ED58AC08CD4A39A6AF9F60CB234564F25341D7DCD9D7A375FA6328E3B63674F26A00F258357F69A4594D719CB34365D05376F3722D1F1E64A17C04F1B30334381D94E9CB91B929D14D9739074A2BA45E5C;
读取到的数据为n4时,更新后的第四寄存器中的数据S为0x8A7128F0EF38233D76C6D8AFBA66D0C2473B5F689344E19E7DEA9CEB7DCBAC9B5C7BDB9075052C77595E892754BD98B6E437FC212FF564D33A51F952230B997C066C0165712821EC0CD43B3063D4D331293B80E37D9FE28D447D29D510C40417796EEBF09DCE40240969D87E9B29608CE9479B72F989D02884CF0B54D2861DD96FC66FB6C52974CAB7288CB5CF927BDD4A70C5AA27F3E1BB2BF491D6C3C67FEF1C2F5716539F569535F1E601A4C90ED5E3D38EA5;
读取到的数据为n3时,更新后的第四寄存器中的数据S为0x531BC239F295E4934C5AF1EF888563C5F0DA69A5B3F228983F89EDC6E3426D11944D372E299D28020DD9B0F0E613A3E90821CD5D81D1C8A21B6915F0A0274A73DCAB3E080D16581C3ACA2D604EAF0A347348D29B40B756A8196CFBBA737F2F2C1C7CE95D75C8AE953DBCB0FEAC60E7A71857074D41C4BBFC0F5528115CAAB9877292A206A97553F0AC735212B83858203754DF69D1042C07C888D30CBA570898D37F0C0565ADF0C7E16C9EA6411774CBCB39FDCA;
读取到的数据为n2时,更新后的第四寄存器中的数据S为0x0871B99B9478368B4A9AD8631C3E72E08A91D37611FD998D0517BF8757E0E5DA896A8AB60E53B8814CA9F38FE671FBC903059E4E37450546CAF563F65A7B644FDA8A206C8944157534F62E8D6AA548B138069FCD7389569C4D721BD7B9395A3379E0D41709DF4ED1BA93B8F2461B57D530959E69CE9B8591EF27CF0D5BA1BD1F8D446C8685F1DE91649351CFB0CEEC751E76F59A1E8CE702D4DFD9E20A8A263C7F36F4985A1BC08236CAF0CCFE95893670D5D406;
读取到的数据为n1时,更新后的第四寄存器中的数据S为0x07010678BB199C55EA69B55807E60458299B2374A9137F6E61DE2749010B02232A67B08843C0F24CF146863C8457D7AF3508301D6A74686D402C8E4F4E99DD4C63FD9BF70CE8773E0919B98891080EB666B21621792BD0D02356A816CD6BCEE83F15C2AE86B08A081C35C3D6F14631BD80A061BC212B398BC0CE83A6A2F202B0898C2564AA9AF159E236F787B8747D31A82C5979E69534CF0BAF78F9A99A1AF99D82BC6922BF77D87F4C0E55E3793A2CC29E0C14;
读取到的数据为n0时,更新后的第四寄存器中的数据S为0xB83C9F28C1E3054ABC74607F8D0E9BF7749570117F35B79B891169D963F693E928F26FC3422F7EB469E4360872C2C1122A27EA331D8EA13B559CF48F5F60573FDCAAAA8F83103CD6A5FF4E6AB3B6F6A4C2C073CEBC2E12EEC89CF8FB0CD4EF713C354FE5C3D7E60E5D2DA4D7C82D181B4B1DEF3DE585A616398CACE990EBDAF23C441DD72D89D1A295163B6337F5AFB59FA35E77FA7EDF391F257220D0D5BB61395D26826690AD1297D714B5D114A2CBD0A814E7。
步骤409,判断最近一次从第六寄存器中读取到的数据的取值是否为零,如果为零,则执行步骤412,否则,执行步骤410。
步骤410,读取第四寄存器中的数据,根据读取到的数据更新第六随机存储器中的数据;读取第三寄存器中的数据,根据读取到的数据更新第七随机存储器中的数据;读取第一寄存器中的数据,根据读取到的数据更新第八随机存储器中的数据。
步骤411,调用蒙哥马利模乘器,对第六随机存储器、第七随机存储器和第八随机存储器中的数据进行模乘运算,使用运算结果更新第四寄存器中的数据。
本实施例中,将蒙哥马利模乘器的三个输入参数分别设置为第四寄存器中的数据S、第三寄存器中的数据W和第一寄存器中的数据N,可模乘得到MontMul(S,W,N)=S*W* R- 1mod N,将模乘结果存储到第四寄存器后,第四寄存器中的数据S被更新为S*W* R-1mod N。
读取到的数据为n10时,其取值为1,更新后的第四寄存器中的数据S为0x4CC37D9915FB733FD1C38A9EE6BFEB83CAB6CF482AA0EA7EC0EDA4AC73CDD4D74709651AF6C27C651714F2A90FE5E9D1C04E7B0B52EEBA3EF4A1275F2F0A383ECD1B8FD96504B968D28E907E6CD8961C418012572FB373E3D89E2E0A0BE854C9AF793B0B68E9B5874F180AF11BE5AE479FBCBCECE61042E968715B5EF268003065DD1333826E22D4E54C6D653FFDE3A13F3855DEFF6CD9D7565FECF4970FF367B3F0428D104D187115EBCC9A87344BDFA45EB91E;
读取到的数据为n8时,其取值为1,更新后的第四寄存器中的数据S为0x8C20939016ABD41CA8A1847BACDE85062635FAB714A0F228F12C66765E5FE18EA22DCE72D50DFD4E2B038937A61D65A865ABE4517E40758CADA55860E63D1089D27DE535CCD76613374D7122DDA6D90ABBC1534CF277DFF7276E53B9DC4A20932E42C45314E39E47373CCA6C8419182D0B23A71EA02CD5DE0C311A5C8484037F5C79E338ECF584629205E7D11FD8F3271192349D755DBE0FBDEE9FACEAA716FE80DCCF31AD92442C158A492AC5477BA960D860AB;
读取到的数据为n7时,其取值为1,更新后的第四寄存器中的数据S为0x2DCC72C7ED97C1C67489B8A4B1FF9D974922470C921F5162BE214D66DDF3EEE5BBB4355E061249A31A0FBC734D42A3655141EEC7B43B4D36003DBF58D395A37C0C2E525BCCBA5DB2AFC6DAD7210E47F22F164B37EFD6C588B43F9E4506A2EEF21DE64F2F1F9E9B23A49F7B6FC22A7FFF1386E8A07782D333E95A683B8A54E3B746ACD7DB2F32E2B0DE18B6E39611842DF49007B8CBA6F5ADE65664D0C28CBD6E1FF120B732BD8013A3F42D11258EFDC0DFADFDA7;
读取到的数据为n5时,其取值为1,更新后的第四寄存器中的数据S为0x3578C006A61EB7EDF5F32262132731CE6B9B7F52FD03CBE455C4BC582123FD2E5E99839C0A28607C98C004510E89EC29765CE4FA002D49A0D7AD0877F2073A27F53209FA8E8AFA74EA617C0448384AF3D34808D04F208F1D3CE417E81372DE5211FD8DDAB158119A94734D5F3EC196468AC9E4A683AFB9B3AF46EBF4C651C76C6CE9E4D401E4B06AFED348B29AE3396686CBA0A6EDE6E45A3E3CC942F809E3660668703B29D397237253A29B2E720E945748BCB8。
需要说明的是,执行完本步骤后,继续执行步骤412。
步骤412,判断最近一次从第六寄存器中读取到的数据是否为第六寄存器中位于最低位的数据,如果是,则执行步骤414;否则,执行步骤413。
步骤413,对第五寄存器中的数据进行更新,并返回步骤407。
具体地,可以将第五寄存器中的数据减1,作为更新后的第五寄存器中的数据。
步骤414,将第四寄存器中的数据输出。
本发明实施例的技术方案,根据模长对应的二进制数的各个数据位的取值,通过蒙哥马利模乘器进行迭代运算,能够在模长为任意值时,得到大数预计算结果,从而提高了数据处理速度。
需要说明的是,在本发明的其他实施方式中,也可以将第五寄存器中的数据初始化为除第六寄存器中的数据的长度之外的其他数值,该数值与第六寄存器中的最高位的数据的位置相对应;还可以在对第五寄存器中的数据更新时,对该数据减去除1之外的其他数值,根据更新之后的第五寄存器中的数据读取到的第六寄存器中的数据,比根据更新之前的第五寄存器中的数据读取到的第六寄存器中的数据低一位,同样可以实现本发明的发明目的。
结合本文中所公开的实施例描述的方法中的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (11)
1.一种在嵌入式系统中实现大数预计算的方法,其特征在于,包括以下步骤:
S1、读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器;所述第一寄存器用于存储第一数据,所述第二寄存器用于存储第二数据,所述第二数据的取值为以2为底数,以第三数据的取值为指数的幂,所述第三数据为整数;
S2、调用取模模块,对所述第一随机存储器和所述第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器;所述取模模块用于将所述第一随机存储器中的数据作为模数,将所述第二随机存储器中的数据作为被模数,进行取模运算;
S3、读取所述第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第五随机存储器;
S4、调用模加模块,对所述第三随机存储器、所述第四随机存储器和所述第五随机存储器中的数据进行运算,使用运算结果更新所述第三寄存器中的数据;所述模加模块用于将所述第三随机存储器中的数据和所述第四随机存储器中的数据作为加数,将所述第五随机存储器中的数据作为模数,进行模加运算;
S5、根据第五寄存器中的数据,从第六寄存器中读取位于最低位的数据,将读取到的数据作为当前位数据,所述第五寄存器中的数据的初始值为预设值,所述第六寄存器用于存储所述第三数据;
S6、对所述当前位数据的取值进行判断,如果所述当前位数据的取值为零,则执行步骤S7;如果所述当前位数据的取值为1,则执行步骤S10;
S7、读取所述第三寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第八随机存储器;
S8、调用蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第三寄存器中的数据;所述蒙哥马利模乘器用于将所述第六随机存储器中的数据、所述第七随机存储器中的数据和所述第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算;
S9、对所述第五寄存器中的数据进行更新,根据更新后的所述第五寄存器中的数据,从所述第六寄存器中读取比所述当前位数据高一位的数据,将读取到数据作为更新后的当前位数据,并返回步骤S6;
S10、读取所述第四寄存器中的数据,使用读取到的数据更新所述第六随机存储器中的数据;读取所述第三寄存器中的数据,使用读取到的数据更新所述第七随机存储器中的数据;读取所述第一寄存器中的数据,使用读取到的数据更新所述第八随机存储器中的数据;
S11、调用所述蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第四寄存器中的数据;
S12、判断所述当前位数据是否为所述第六寄存器中位于最高位的数据,如果是,则执行步骤S13;否则,返回步骤S7;
S13、将所述第四寄存器中的数据输出。
2.如权利要求1所述的方法,其特征在于,所述对所述第五寄存器中的数据进行更新,具体为:
将所述第五寄存器中的数据加预设步长,将得到的结果作为更新后的所述第五寄存器中的数据。
3.如权利要求2所述的方法,其特征在于,所述预设值为1,所述预设步长为1;
所述判断所述当前位数据是否为所述第六寄存器中位于最高位的数据,具体为:
判断所述第五寄存器中的数据的取值是否等于所述第六寄存器中的数据的长度,如果是,则确定所述当前位数据为所述第六寄存器中位于最高位的数据;否则,确定所述当前位数据不是所述第六寄存器中位于最高位的数据。
4.一种在嵌入式系统中实现大数预计算的方法,其特征在于,包括以下步骤:
S1、读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器;所述第一寄存器用于存储第一数据,所述第二寄存器用于存储第二数据,所述第二数据的取值为以2为底数,以第三数据的取值为指数的幂,所述第三数据为整数;
S2、调用取模模块,对所述第一随机存储器和所述第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器;所述取模模块用于将所述第一随机存储器中的数据作为模数,将所述第二随机存储器中的数据作为被模数,进行取模运算;
S3、读取所述第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第五随机存储器;
S4、调用模加模块,对所述第三随机存储器、所述第四随机存储器和所述第五随机存储器中的数据进行运算,使用运算结果更新所述第三寄存器中的数据;所述模加模块用于将所述第三随机存储器中的数据和所述第四随机存储器中的数据作为加数,将所述第五随机存储器中的数据作为模数,进行模加运算;
S5、根据第五寄存器中的数据,从第六寄存器中读取位于最低位的数据,将读取到的数据作为当前位数据,所述第五寄存器中的数据的初始值为预设值,所述第六寄存器用于存储所述第三数据;
S6、对所述当前位数据的取值进行判断,如果所述当前位数据的取值为零,则执行步骤S9;如果所述当前位数据的取值为1,则执行步骤S7;
S7、根据所述第三寄存器中的数据更新所述第四寄存器中的数据;
S8、判断所述当前位数据是否为所述第六寄存器中位于最高位的数据,如果是,则执行步骤S15;否则,执行步骤S9;
S9、对所述第五寄存器中的数据进行更新,根据更新后的所述第五寄存器中的数据,从所述第六寄存器中读取比所述当前位数据高一位的数据,将读取到数据作为更新后的当前位数据;
S10、读取所述第三寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第八随机存储器;
S11、调用蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第三寄存器中的数据;所述蒙哥马利模乘器用于将所述第六随机存储器中的数据、所述第七随机存储器中的数据和所述第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算;
S12、对所述当前位数据的取值进行判断,如果所述当前位数据的取值为零,则返回步骤S9;如果所述当前位数据的取值为1,则执行步骤S13;
S13、读取所述第四寄存器中的数据,使用读取到的数据更新所述第六随机存储器中的数据;读取所述第三寄存器中的数据,使用读取到的数据更新所述第七随机存储器中的数据;读取所述第一寄存器中的数据,使用读取到的数据更新所述第八随机存储器中的数据;
S14、调用所述蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第四寄存器中的数据,并返回步骤S9;
S15、将所述第四寄存器中的数据输出。
5.如权利要求4所述的方法,其特征在于,所述对所述第五寄存器中的数据进行更新,具体为:
将所述第五寄存器中的数据加预设步长,将得到的结果作为更新后的所述第五寄存器中的数据。
6.如权利要求5所述的方法,其特征在于,所述预设值为1,所述预设步长为1;
所述判断所述当前位数据是否为所述第六寄存器中位于最高位的数据,具体为:
判断所述第五寄存器中的数据的取值是否等于所述第六寄存器中的数据的长度,如果是,则确定所述当前位数据为所述第六寄存器中位于最高位的数据;否则,确定所述当前位数据不是所述第六寄存器中位于最高位的数据。
7.一种在嵌入式系统中实现大数预计算的方法,其特征在于,包括以下步骤:
S1、读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器;所述第一寄存器用于存储第一数据,所述第二寄存器用于存储第二数据,所述第二数据的取值为以2为底数,以第三数据的取值为指数的幂,所述第三数据为整数;
S2、调用取模模块,对所述第一随机存储器和所述第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器;所述取模模块用于将所述第一随机存储器中的数据作为模数,将所述第二随机存储器中的数据作为被模数,进行取模运算;
S3、读取所述第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第五随机存储器;
S4、调用模加模块,对所述第三随机存储器、所述第四随机存储器和所述第五随机存储器中的数据进行运算,使用运算结果更新所述第三寄存器中的数据;所述模加模块用于将所述第三随机存储器中的数据和所述第四随机存储器中的数据作为加数,将所述第五随机存储器中的数据作为模数,进行模加运算;
S5、读取所述第四寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第八随机存储器;调用蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第四寄存器中的数据;所述蒙哥马利模乘器用于将所述第六随机存储器中的数据、所述第七随机存储器中的数据和所述第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算;
根据第五寄存器中的数据,从第六寄存器中读取位于最高位的数据,将读取到的数据作为当前位数据,所述第五寄存器中的数据的初始值为预设值,所述第六寄存器用于存储所述第三数据;
S6、对所述当前位数据的取值进行判断,如果所述当前位数据的取值为零,则执行步骤S9;如果所述当前位数据的取值为1,则执行步骤S7;
S7、读取所述第四寄存器中的数据,使用读取到的数据更新所述第六随机存储器中的数据;读取所述第三寄存器中的数据,使用读取到的数据更新所述第七随机存储器中的数据;读取所述第一寄存器中的数据,使用读取到的数据更新所述第八随机存储器中的数据;
S8、调用所述蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第四寄存器中的数据,并执行步骤S9;
S9、判断所述当前位数据是否为所述第六寄存器中位于最低位的数据,如果是,则执行步骤S11;否则,执行步骤S10;
S10、读取所述第四寄存器中的数据,使用读取到的数据分别更新所述第六随机存储器和所述第七随机存储器中的数据;读取所述第一寄存器中的数据,使用读取到的数据更新第八随机存储器中的数据;调用蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第四寄存器中的数据;所述蒙哥马利模乘器用于将所述第六随机存储器中的数据、所述第七随机存储器中的数据和所述第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算;
对所述第五寄存器中的数据进行更新,根据更新后的所述第五寄存器中的数据,从所述第六寄存器中读取比所述当前位数据低一位的数据,将读取到数据作为更新后的当前位数据,并返回步骤S6;
S11、将所述第四寄存器中的数据输出。
8.如权利要求7所述的方法,其特征在于,所述对所述第五寄存器中的数据进行更新,具体为:
将所述第五寄存器中的数据减预设步长,将得到的结果作为更新后的所述第五寄存器中的数据。
9.如权利要求8所述的方法,其特征在于,所述预设值为所述第六寄存器中的数据的长度,所述预设步长为1;
所述判断所述当前位数据是否为所述第六寄存器中位于最低位的数据,具体为:
判断所述第五寄存器中的数据的取值是否等于1,如果是,则确定所述当前位数据为所述第六寄存器中位于最低位的数据;否则,确定所述当前位数据不是所述第六寄存器中位于最低位的数据。
10.一种在嵌入式系统中实现大数预计算的方法,其特征在于,包括以下步骤:
S1、读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器中;所述第一寄存器用于存储第一数据,所述第二寄存器用于存储第二数据,所述第二数据的取值为以2为底数,以第三数据的取值为指数的幂,所述第三数据为整数;
S2、调用取模模块,对所述第一随机存储器和所述第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器;所述取模模块用于将所述第一随机存储器中的数据作为模数,将所述第二随机存储器中的数据作为被模数,进行取模运算;
S3、读取所述第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第五随机存储器;
S4、调用模加模块,对所述第三随机存储器、所述第四随机存储器和所述第五随机存储器中的数据进行运算,使用运算结果更新所述第三寄存器中的数据;所述模加模块用于将所述第三随机存储器中的数据和所述第四随机存储器中的数据作为加数,将所述第五随机存储器中的数据作为模数,进行模加运算;
S5、读取所述第三寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第八随机存储器;
S6、调用蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第三寄存器中的数据;所述蒙哥马利模乘器用于将所述第六随机存储器中的数据、所述第七随机存储器中的数据和所述第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算;
S7、将第五寄存器中的数据加1,将得到的结果作为更新后的所述第五寄存器中的数据,判断所述第五寄存器中的数据是否等于第六寄存器中的数据的长度,如果是,则执行步骤S8;否则,返回步骤S5;所述第五寄存器中的数据的初始值为零,所述第六寄存器用于存储所述第三数据,所述第三数据的取值为2的整数次幂;
S8、将所述第三寄存器中的数据输出。
11.一种在嵌入式系统中实现大数预计算的方法,其特征在于,包括以下步骤:
S1、读取第一寄存器中的数据,将读取到的数据写入到第一随机存储器;读取第二寄存器中的数据,将读取到的数据写入到第二随机存储器;所述第一寄存器用于存储第一数据,所述第二寄存器用于存储第二数据,所述第二数据的取值为以2为底数,以第三数据的取值为指数的幂,所述第三数据为整数;
S2、调用取模模块,对所述第一随机存储器和所述第二随机存储器中的数据进行运算,将运算结果分别写入到第三寄存器和第四寄存器;所述取模模块用于将所述第一随机存储器中的数据作为模数,将所述第二随机存储器中的数据作为被模数,进行取模运算;
S3、读取所述第三寄存器中的数据,将读取到的数据分别写入到第三随机存储器和第四随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第五随机存储器;
S4、调用模加模块,对所述第三随机存储器、所述第四随机存储器和所述第五随机存储器中的数据进行运算,使用运算结果更新所述第三寄存器中的数据;所述模加模块用于将所述第三随机存储器中的数据和所述第四随机存储器中的数据作为加数,将所述第五随机存储器中的数据作为模数,进行模加运算;
S5、读取所述第三寄存器中的数据,将读取到的数据分别写入到第六随机存储器和第七随机存储器;读取所述第一寄存器中的数据,将读取到的数据写入到第八随机存储器;
S6、调用蒙哥马利模乘器,对所述第六随机存储器、所述第七随机存储器和所述第八随机存储器中的数据进行模乘运算,使用运算结果更新所述第三寄存器中的数据;所述蒙哥马利模乘器用于将所述第六随机存储器中的数据、所述第七随机存储器中的数据和所述第八随机存储器中的数据分别作为第一输入参数、第二输入参数和第三输入参数,进行模乘运算;
S7、判断第五寄存器中的数据是否等于第六寄存器中的数据的长度,如果是,则执行步骤S9;否则,执行步骤S8;所述第五寄存器中的数据的初始值为1,所述第六寄存器用于存储所述第三数据,所述第三数据的取值为2的整数次幂;
S8、将所述第五寄存器中的数据加1,将得到的结果作为更新后的所述第五寄存器中的数据,并返回步骤S5;
S9、将所述第三寄存器中的数据输出。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310132081.6A CN103207770B (zh) | 2013-04-16 | 2013-04-16 | 一种在嵌入式系统中实现大数预计算的方法 |
PCT/CN2014/075172 WO2014169783A1 (zh) | 2013-04-16 | 2014-04-11 | 一种在嵌入式系统中实现大数预计算的方法 |
US14/765,423 US9851948B2 (en) | 2013-04-16 | 2014-04-11 | Method for implementing precomputation of large number in embedded system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310132081.6A CN103207770B (zh) | 2013-04-16 | 2013-04-16 | 一种在嵌入式系统中实现大数预计算的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103207770A CN103207770A (zh) | 2013-07-17 |
CN103207770B true CN103207770B (zh) | 2016-09-28 |
Family
ID=48755005
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310132081.6A Active CN103207770B (zh) | 2013-04-16 | 2013-04-16 | 一种在嵌入式系统中实现大数预计算的方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9851948B2 (zh) |
CN (1) | CN103207770B (zh) |
WO (1) | WO2014169783A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103207770B (zh) | 2013-04-16 | 2016-09-28 | 飞天诚信科技股份有限公司 | 一种在嵌入式系统中实现大数预计算的方法 |
CN103593299B (zh) * | 2013-11-12 | 2016-02-24 | 飞天诚信科技股份有限公司 | 一种节省存储空间的数据处理方法 |
CN104750457B (zh) * | 2013-12-31 | 2018-03-06 | 上海复旦微电子集团股份有限公司 | 一种基于模幂运算的数据处理方法和装置 |
US9806544B2 (en) | 2015-08-14 | 2017-10-31 | Draeger Medical Systems, Inc. | Medical device battery charge indicator |
WO2017165793A1 (en) * | 2016-03-25 | 2017-09-28 | Thorlabs, Inc. | Mems tunable vcsel powered swept source oct for 3d metrology applications |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5777916A (en) * | 1996-01-18 | 1998-07-07 | Sgs-Thomson Microelectronics S.A. | Method for the production of an error correction parameter associated with the implementation of modular operations according to the montgomery method |
CN101346691A (zh) * | 2005-12-26 | 2009-01-14 | 格姆普拉斯公司 | 包括安全模幂以避免隐蔽通道攻击的加密方法、用于执行所述方法的加密处理器以及相关的芯片卡 |
CN102231102A (zh) * | 2011-06-16 | 2011-11-02 | 天津大学 | 基于余数系统的rsa密码处理方法及协处理器 |
CN102999313A (zh) * | 2012-12-24 | 2013-03-27 | 飞天诚信科技股份有限公司 | 一种基于蒙哥马利模乘的数据处理方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100848412B1 (ko) * | 2000-05-15 | 2008-07-28 | 엠-시스템스 플래쉬 디스크 파이오니어스 리미티드 | 정수연산필드의 범위를 확장하는 장치 및 방법 |
US7194088B2 (en) * | 2001-06-08 | 2007-03-20 | Corrent Corporation | Method and system for a full-adder post processor for modulo arithmetic |
CN100527073C (zh) * | 2006-11-09 | 2009-08-12 | 北京华大信安科技有限公司 | 高效模乘方法及装置 |
US7961877B2 (en) * | 2006-12-14 | 2011-06-14 | Intel Corporation | Factoring based modular exponentiation |
EP2015171A1 (fr) * | 2007-06-29 | 2009-01-14 | Gemplus | Procédé cryptographique comprenant une exponentiation modulaire sécurisée contre les attaques à canaux cachés sans la connaissance de l'exposant public, cryptoprocesseur pour la mise en oeuvre du procédé et carte à puce associée |
JP5097138B2 (ja) * | 2009-01-15 | 2012-12-12 | シャープ株式会社 | モンゴメリ乗算のための演算回路及び暗号回路 |
CN102571342B (zh) * | 2010-12-27 | 2016-01-06 | 北京中电华大电子设计有限责任公司 | 一种rsa算法数字签名方法 |
CN103207770B (zh) * | 2013-04-16 | 2016-09-28 | 飞天诚信科技股份有限公司 | 一种在嵌入式系统中实现大数预计算的方法 |
-
2013
- 2013-04-16 CN CN201310132081.6A patent/CN103207770B/zh active Active
-
2014
- 2014-04-11 US US14/765,423 patent/US9851948B2/en active Active
- 2014-04-11 WO PCT/CN2014/075172 patent/WO2014169783A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5777916A (en) * | 1996-01-18 | 1998-07-07 | Sgs-Thomson Microelectronics S.A. | Method for the production of an error correction parameter associated with the implementation of modular operations according to the montgomery method |
CN101346691A (zh) * | 2005-12-26 | 2009-01-14 | 格姆普拉斯公司 | 包括安全模幂以避免隐蔽通道攻击的加密方法、用于执行所述方法的加密处理器以及相关的芯片卡 |
CN102231102A (zh) * | 2011-06-16 | 2011-11-02 | 天津大学 | 基于余数系统的rsa密码处理方法及协处理器 |
CN102999313A (zh) * | 2012-12-24 | 2013-03-27 | 飞天诚信科技股份有限公司 | 一种基于蒙哥马利模乘的数据处理方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2014169783A1 (zh) | 2014-10-23 |
US20160004511A1 (en) | 2016-01-07 |
CN103207770A (zh) | 2013-07-17 |
US9851948B2 (en) | 2017-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103207770B (zh) | 一种在嵌入式系统中实现大数预计算的方法 | |
CN110457319B (zh) | 区块链状态数据存储方法及装置、电子设备 | |
CN106445471A (zh) | 处理器和用于在处理器上执行矩阵乘运算的方法 | |
CN102999313B (zh) | 一种基于蒙哥马利模乘的数据处理方法 | |
CN101479698A (zh) | 将两数相乘 | |
CN111008201A (zh) | 并行修改和读取状态树的方法和装置 | |
CN105718221B (zh) | 一种数据存储的方法、装置和系统 | |
CN108733324A (zh) | 一种固态硬盘的数据读写方法、装置、设备及存储介质 | |
CN112988761B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN107330094A (zh) | 动态存储键值对的布鲁姆过滤器树结构及键值对存储方法 | |
CN107612523A (zh) | 一种基于软件查表法的fir滤波器实现方法 | |
CN107506310A (zh) | 一种地址查找、关键字存储方法及设备 | |
CN107659498A (zh) | 一种报文转发方法和装置 | |
CN105095212B (zh) | 创建哈希表的方法和设备 | |
CN107315539A (zh) | 一种数据存储方法以及数据提取方法 | |
CN106503260A (zh) | 一种提高数据库的有效存储空间的方法和装置 | |
CN105933120A (zh) | 一种基于Spark平台的口令哈希值恢复方法和装置 | |
CN109189343A (zh) | 一种元数据落盘方法、装置、设备及计算机可读存储介质 | |
CN110362577B (zh) | 一种数据插入方法、装置、设备和储存介质 | |
CN1987824A (zh) | 存储器控制电路及存储器控制方法 | |
CN107368596A (zh) | 一种布隆过滤器查询集合元素的方法及装置 | |
CN112905607B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN112988910B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN112988909B (zh) | 区块链数据存储方法及装置、电子设备 | |
CN115221176A (zh) | 区块链数据存储方法及装置、电子设备 |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230718 Address after: Room 1505, Building B, Huizhi Building, No. 9 Xueqing Road, Haidian District, Beijing, 100085 Patentee after: BEIJING HONGSI ELECTRONIC TECHNOLOGY Co.,Ltd. Address before: 17th floor, building B, Huizhi building, No.9, Xueqing Road, Haidian District, Beijing 100085 Patentee before: Feitian Technologies Co.,Ltd. |
|
TR01 | Transfer of patent right |