CN101000538A - 椭圆曲线密码体制协处理器的实现方法 - Google Patents
椭圆曲线密码体制协处理器的实现方法 Download PDFInfo
- Publication number
- CN101000538A CN101000538A CN 200710019231 CN200710019231A CN101000538A CN 101000538 A CN101000538 A CN 101000538A CN 200710019231 CN200710019231 CN 200710019231 CN 200710019231 A CN200710019231 A CN 200710019231A CN 101000538 A CN101000538 A CN 101000538A
- Authority
- CN
- China
- Prior art keywords
- coprocessor
- data
- shift register
- carrier store
- elliptic curve
- 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
Images
Landscapes
- Complex Calculations (AREA)
Abstract
椭圆曲线密码体制协处理器的实现方法是一种信息安全中的密码体制的硬件协处理器,采用自顶向下的设计思路,结合自底向上的实现步骤,借助Altra公司的Quartus开发环境,使用VHDL语言编写和数字电路模块搭建同时进行的方式,完成ECC协处理器的设计。在设计时,首先对整个协处理器进行功能划分,细化为各个底层模块;而在实现时,先实现各个底层模块并分别进行测试,最后整合为完整的ECC协处理器。解决ECC计算中点乘问题的256位通用协处理器,包括该协处理器的硬件构架、指令集设计以及使用规则的设计。
Description
技术领域
本发明是一种信息安全中的密码体制的硬件协处理器,涉及公钥密码系统技术领域。
背景技术
公钥密码体制:1976年,斯坦福大学的研究员Whitfield Diffie和MartinHellman共同开发了能够解决密钥安全交换问题的公钥密码技术。公钥加密是非对称的,它使用两个反向关联的密钥:公钥和私钥。公钥自由公开,私钥则由用户个人秘密保存。用公钥对消息加密,只有相应的私钥才能解密,反之亦然。通信双方都有自己的公钥和私钥。为安全发送消息,发送方使用接收方的公钥对消息加密;收到消息后,接收方用自己的私钥解密。因为只有接收者知道自己的私钥,所以其他人无法识别这条消息,这就实现了消息的保密性。对于安全的“公钥算法”,其最突出的特点是:从公钥推导出私钥在计算上是不可行的。尽管公钥和私钥在数学上是相关的,但要从公钥推导出私钥,需花费可观的时间和计算资源,这使得推导私钥成为不切实际的一件事情。没有正确的密钥,外部实体就无法参与通信。整个过程的安全性基于对私钥的保密,一旦第三者获得私钥,这个安全系统就会崩溃。
每个使用者都拥有相应的公钥和私钥,称作一个密钥对。公钥和私钥都可以用来对消息加密或者解密。例如,如果一个客户使用某个商家的公钥加密一条消息,只有该商家才能使用自己的私钥来对其解密。所以,商家的身份得到了验证,因为只有商家自己才知道私钥。不过,商家没有办法验证客户的身份,因为客户使用的加密密钥是公开的。
如果用来加密的是发送者的私钥,用来解密的是发送者的公钥,就可以验证发送者的身份。例如,假定客户用自己的私钥加密发送给商家的一条信息,商家再用客户的公钥对其进行解密,那么商家就能验证客户的身份。然而,虽然能验证发送者的身份,但却不能保证消息的机密性,因为任何人都能使用发送者的公钥对其进行解密。不过,只要商家能够保证用于解密的公钥是属于客户的,而不是属于一个冒充者的,这个系统就是有效的。公钥的有效性现在一般是通过基于公钥证书的PKI(公钥基础设施)来保证的。
下面我们具体的阐述一下公钥和私钥的应用。假设通信双方A和B,他们各自有自己的密钥对分别为(Ka,Pa)和(Kb,Pb),其中K代表公钥,P代表私钥。
当传输秘密信息时,待传输的信息称作明文M。A先使用B的公钥Kb对明文M加密,得到密文M’,然后发送出去。而接受的时候只有B的私钥Pb可以解开M’,恢复明文M,从而保证了数据的安全性。
当收端B需要验证发送者A的身份时,我们依然将待传输的信息称作明文M。A先使用自己的私钥Pa对明文M加密,得到密文M”,然后发送出去。而接受的时候,B使用A的公钥Ka可以解开M”,恢复明文M。由于只有A拥有私钥Pa,而所有持有公钥Ka的人都可以解开该消息,因此这样的做法可以证明该消息M是由A发出的。
一般情况下,这2种手段是结合起来使用的,即既保证数据的秘密性,同时又确定传输者的身份。也就是说,当A向B传输数据时,他首先使用B的公钥Kb对明文M进行加密,得到密文M1;然后使用自己的私钥Pa对M1进行加密来确保自己的身份,得到密文M2。B在接受到M2后,首先使用A的公钥Ka对M2解密,还原出M1,同时也验证了消息确实来自A;接着他使用自己的私钥Pb对M1进行解密,还原出明文M,最后得到信息。
同理,B再向A回复数据的时候,也采用类似的手法。如此一来,A和B之间就建立了一条安全的传输信道,并且A和B可以互相信任对方的身份。
椭圆曲线密码体制:椭圆曲线密码体制(Elliptic Curve Cryptosystem,以下简称ECC)是一种公钥密码体制,凭借自身良好的性能,ECC已成为密码学界和产业界关注的热点。国际上自上个世纪90年代末以来有关ECC的各种相关技术标准层出不穷,在国内目前ECC数字签名技术也已被无线局域网国家标准(GB15629.11-2003)安全部分的WAPI标准所采纳,ECC密码技术已经进入大规模的应用期。
80年代中期Koblitz和Miller首先提出了利用椭圆曲线上的点构成的Abel加法群构造离散对数问题,从而引入了基于椭圆曲线的公钥密码体制。此后,椭圆曲线密码体制获得了广泛的关注,其理论分析、实现和应用已成为当前密码学研究领域的一个热点。
椭圆曲线理论早在18世纪即已开始研究,一直被认为是纯理论学科,有着广泛的应用:在大整数分解和素性检测的研究方面,椭圆曲线是一个强有力的工具;椭圆曲线的相关理论还被用于著名的费玛大定理的证明;特别地,以椭圆曲线上的点构成的Abel群为背景结构,实现各种密码体制已成为公钥密码学领域的一个重要课题。ECC的优势在于在安全性相当的条件下,可以使用更短的密钥,例如一般认为ECC 160比特长的密钥所具有的安全性和密钥长度为1024比特的RSA(RSA是另一种目前已广泛采用的公钥密码体制)所具有的安全性相当。短密钥意味着小的带宽和存储要求,这在某些资源受限的设备中可能是决定性的因素。
安全性是任何密码体制的关键因素,目前针对ECC的安全性分析,成果并不丰硕,还没有找到有效的攻击方法,一般认为其时间复杂度是幂指数级的,因而对于ECC,只要选取适当的安全域参数,现有的攻击方法很难将其攻破。
发明内容
技术问题:本发明的目的是椭圆曲线密码体制协处理器的实现方法,解决ECC计算中点乘问题的256位通用协处理器,包括该协处理器的硬件构架、指令集设计以及使用规则的设计。
技术方案:采用自顶向下的设计思路,结合自底向上的实现步骤,借助Altra公司的Quartus开发环境,使用VHDL语言编写和数字电路模块搭建同时进行的方式,完成ECC协处理器的设计。在设计时,首先对整个协处理器进行功能划分,细化为各个底层模块;而在实现时,先实现各个底层模块并分别进行测试,最后整合为完整的ECC协处理器。
本发明的椭圆曲线密码体制协处理器的实现方法的实现方法为以下步骤:外部CPU与协处理器的通信:
步骤1):外部CPU将需要计算的点P(Xp,Yp)、乘数k存入协处理器数据存储器中,Xp、Yp和k为256比特二进制数,如果不足256比特,左侧补0至256位;P是满足椭圆曲线方程y2+xy=x3+ax2+b的点,Xp、Yp是它的横坐标和纵坐标;
步骤2):外部CPU将椭圆曲线方程常数a、b和既约多项式的二进制形式M存入协处理器数据存储器中,a、b和M为256比特二进制数,且a、b是椭圆曲线方程y2+xy=x3+ax2+b的系数;
步骤3):外部CPU将点乘指令集存入协处理器指令存储器中,该指令集中每条指令为16比特,协处理器将从指令集中读指令逐步执行,完成协处理器工作;
步骤4):外部CPU给协处理器使能信号,使协处理器开始工作;协处理器初始化:
步骤5):协处理器从数据存储器中取出点P(Xp,Yp)到寄存器中,提供给各个运算模块使用;
步骤6):协处理器从数据存储器中取出椭圆曲线方程常数到a和b到寄存器中;
步骤7):协处理器从数据存储器中取出既约多项式M,存入既约多项式寄存器,同时根据既约多项式最高次数设置相关计算模块的最高次数;
步骤8):协处理器根据输入的点P(Xp,Yp),通过平方和加法计算后初始化两个计算用的变量点:P1(X1,Z1)和P2(X2,Z2);其中:
X1=Xp,Z1=1,X2=Xp4+b,Z2=Xp2,它们是256比特的二进制数,X1、Z1和X2、Z2分别代表点P1和P2的仿射坐标的X轴和Z轴坐标;在这里为了方便之后的计算,通过引入P1和P2将点P的二维投射坐标扩展为三维的仿射坐标;
步骤9):协处理器从数据存储器中取出乘数k,存入移位寄存器中,并且对该寄存器进行初始化,将其左移直到首位为1;
协处理器根据移位寄存器当前最高位判定之后流程:
步骤10):下面的流程将循环更新变量点P1和变量点P2的值直到移位寄存器中k的比特数移完。协处理器通过读移位寄存器当前最高位判定跳转,若为0,执行步骤11);若为1,跳转至步骤14);
移位寄存器最高位为0时协处理器分支跳转步骤:
步骤11):利用点加算法计算P3=P1+P1和P4=P1+P2,之后将P3和P4的值再分别赋给P1和P2;其中,P3和P4是中间变量点,它们也满足椭圆曲线方程,并且坐标定义域和P1、P2相同;
步骤12):判定移位寄存器中是否还有剩余的比特数,若全部移完,跳至步骤17),否则继续下面的步骤;
步骤13):将移位寄存器左移1位,跳至步骤10;
移位寄存器最高位为1时协处理器分支跳转步骤:
步骤14):利用点加算法计算P3=P1+P2和P4=P2+P2,之后将P3和P4的值再分别赋给P1和P2;
步骤15):判定移位寄存器中是否还有剩余的比特数,若全部移完,跳至步骤17),否则继续下面的步骤;
步骤16):将移位寄存器左移1位,跳至步骤10;
根据最后的P1和P2计算最终点乘结果Pk(Xk,Yk):
Pk也是满足椭圆曲线方程的点,点乘计算的目的就是求Pk=k·P
步骤17):读当前的P1坐标:X1和Z1;P2坐标:X2和Z2,它们是位宽位256比特的二进制数;
步骤18):读出点P的横坐标Xp,存入寄存器中,令x=Xp,因此x也为256比特的二进制数;
步骤19):计算Xk=X1/Z1,将Xk存入数据存储器,此为点Pk的横坐标;
步骤20):计算temp1=Xk+x,temp2=X2/Z2+x,temp1和temp2是256比特的临时变量;
步骤21):利用temp1和temp2通过下面的公式计算得到Yk,将Yk存入数据存储器,此为点Pk的纵坐标;
协处理器计算完毕:
步骤22):协处理器发出中断信号通知外部CPU计算完成;
步骤23):外部CPU读取协处理器数据存储器中的Pk的值,即Xk和Yk。之后撤除协处理器的使能信号。
有益效果:本协处理器能够进行高效率的点乘计算,帮助外部CPU进行关于椭圆曲线公钥密码术的加密工作。特点是处理速度比软件方式快、并且大幅度提高外部CPU工作效率、计算时不占用外部资源。本专利包含了解决ECC计算中点乘问题的256位通用协处理器设计;包括该协处理器的硬件构架、指令集设计以及使用规则的设计。优点在于:
a、以通用CPU设计思路设计完成了ECC协处理器,采用了14条16比特的指令进行流程控制,使用完善的指令机制控制时序流程,速度快;
b、使用Montgomery算法结合投射坐标的方式进行简化了的点乘计算;
c、针对乘法计算设计了2条指令,分别对应于进行模约简和不进行模约简的情况,可扩展性强;
d、移位寄存器的设计引入了计数器和比较器,并限定了移位寄存器初始化指令的格式,方便了点乘之前的移位寄存器初始化工作。这种16进制的软件移位结合硬件比特移位的初始化方式为独创。
附图说明
图1是ECC协处理器硬件结构的整体框架;
图2是ECC协处理器中乘法模块硬件结构;
图3是ECC协处理器中除法模块硬件结构;
图4是ECC协处理器协处理器工作流程;
图5是ECC协处理器点乘计算子流程。
具体实施方式
1)参考标准
本实现方法主要参考的国际标准是[ANSI X9.62]、[IEEE P1363]、[SEC1]、[SEC2]以及SUN公司的协处理器设计思路。
2)硬件结构
我们借鉴了通用计算机处理器的思路,结合ECC背景域的运算方式,设计了二元域上ECC协处理器。
该协处理器由2片双端存储器、2条256位内部总线、16个256寄存器、移位寄存器、控制器以及二元域底层运算模块组成;其中,二元域底层运算模块为异或模块、乘法模块和除法模块。ECC协处理器的核心模块为控制器部分,负责从指令存储器中读取指令和解析指令,之后按照指令要求进行数据的读取、处理、存储以及指令跳转等工作。
a、存储器和总线
指令存储器和数据存储器都使用双端RAM(double port RAM),一端供外部总线使用,另一端供协处理器内部使用。
指令存储器(I_Ram)只用来存储汇编指令,存储器外部总线端只写,控制器端只读,两端的数据宽度都为16比特。存储器容量为4096个16比特单元,最多即可存储4096条汇编指令,使用11比特的地址线寻址。
指令存储器的地址输入端前有一指针寄存器,称为Pc(Point Count)寄存器,用于存放下一条将执行的指令所在的地址。一般在一条指令执行的最后,会使Pc的值加1,但跳转指令除外。
数据存储器(D_Ram)只用来存储待处理的加密数据,存储器的两端都可以进行读写,外部总线端的数据宽度为16比特(可以根据CPU和具体外部总线宽度进行调整,此处暂定为16比特),内部总线端的数据宽度为256比特。存储器容量为4096个16比特单元,外部使用11比特的地址线寻址,内部使用8比特地址线寻址。
内部数据总线分为A和B两根,位宽都是256比特。内部总线A向数据存储器写数据,内部总线B从数据存储器读出数据。此外,所有的寄存器和底层运算模块都挂接在这2根总线上。寄存器的挂接方向与数据存储器相反,其他模块的挂接方向与数据存储器一致。内部总线和其上所挂接的模块之间使用三态门分隔。
外部总线直接对指令存储器和数据存储器进行操作;数据总线部分位宽是16比特,地址总线位宽13比特,其中11比特是实际对指令存储器和数据存储器的寻址,1比特是作为指令存储器和数据存储器的片选信号,另1比特作为整个协处理器的片选信号。
b、指令集
我们设计的协处理器指令长度为16比特,其高4位比特为操作码(opcode),剩余12比特为寻址或者操作标识。指令总共分为4类:存储指令、运算指令、跳转指令和操作指令。指令数由操作码决定,最多不会超过21=16条。
存储指令(Load、Save):
操作码 | 数据存储器地址 | 寄存器地址 |
运算指令(Xor、Mul_512、Mul_256、Divide):
操作码 | 寄存器地址 | 寄存器地址 | 寄存器地址 |
跳转指令(Jmpz_shreg、Jmpnz_shreg、Jmpz_mib、Jmpnz_mib):
操作码 | 指令存储器地址 |
操作指令(Setpoly、Shreg_Init、Shift、End):
操作码 | 操作标识 |
c、控制器
控制器负责协调各个模块运行顺序以及总线数据流,是协处理器至关重要的部分。它由指令解析模块、微指令输出模块以及微指令ROM存储器三部分构成。
控制器对输入的指令经过解析,判定其微指令地址,然后从微指令存储ROM中读出微指令控制码,控制各个模块的工作。
ECC协处理器的工作过程为:取指令、解析指令、执行指令、取下条指令、解析指令……一条指令的执行往往是由多条被称作微指令的子操作组合完成的。例如,当执行Load这样的指令的时候,协处理器分以下几个步骤完成:a、从数据存储器中读出数据到内部总线B上,微指令指针加1;b、将数据放入寄存器中、微指令指针加1;c、Pc指针加1、微指令指针加1;d、回到取指令步骤。这些步骤以使能信号的形式出现,通过每次打开一个模块或者几个模块的使能,完成该周期相应的操作,被称为微指令。
指令解析模块负责读入指令,结合目前的协处理器状态,判定指令需要完成的工作并给出微指令的入口地址。仍然以Load指令为例:协处理器首先取指令,此时微指令指针为0x00,表示此时开始取指周期;一个周期后微指令指针跳到0x01,指令解析模块开始工作,判定读入的指令操作码是0001,为Load指令,确定Load指令的微指令代码段入口地址是0x0b;一个周期后微指令指针跳到0x02,该处微指令是跳转命令;然后微指令指针变为0x0b,正式进入Load指令的微操作代码段。
微指令跳转模块的作用是在每个时钟周期给出微指令存储器ROM模块寻址信号。以Load指令为例,Load指令的微指令码段入口地址为0x0b。一方面,微指令跳转模块通过改变输出的微指令地址来控制输出的微指令内容;另一方面,输出的微指令控制信号中又包含了控制微指令跳转模块的信号。二者互相作用,完成了协处理器的取指、解析指令、执行指令、再取指……的工作循环。
表1 Load指令的微指令跳转
周期 | en | 微指令地址 | 微指令内容 |
0 | 0 | 0x00 | 空操作 |
1 | 1 | 0x01 | 取指令,add1←1 |
2 | 1 | 0x02 | 解析指令,add1←1 |
3 | 1 | 0x03 | load←1(微指令跳转) |
4 | 1 | 0x0b | 进入Load的微指令代码段,add1←1 |
5 | 1 | 0x0c | Load微操作,add1←1 |
................................................. | |||
7 | 1 | 0x0e | Load微操作最后一步,reset←1 |
8 | 1 | 0x01 | 取指令,add1←1 |
................................................. |
d、底层模块
ECC协处理器的底层模块负责二元域上的加减乘除和求模运算,模块构造与各自算法相关。
该协处理器的实现方法为以下步骤:
外部CPU与协处理器的通信:
步骤1):外部CPU将需要计算的点P(Xp,Yp)、乘数k存入协处理器数据存储器中,Xp、Yp和k为256比特二进制数,如果不足256比特,左侧补0至256位;P是满足椭圆曲线方程y2+xy=x3+ax2+b的点,Xp、Yp是它的横坐标和纵坐标;
步骤2):外部CPU将椭圆曲线方程常数a、b和既约多项式的二进制形式M存入协处理器数据存储器中,a、b和M为256比特二进制数,且a、b是椭圆曲线方程y2+xy=x3+ax2+b的系数;
步骤3):外部CPU将点乘指令集存入协处理器指令存储器中,该指令集中每条指令为16比特,协处理器将从指令集中读指令逐步执行,完成协处理器工作;
步骤4):外部CPU给协处理器使能信号,使协处理器开始工作;
协处理器初始化:
步骤5):协处理器从数据存储器中取出点P(Xp,Yp)到寄存器中,提供给各个运算模块使用;
步骤6):协处理器从数据存储器中取出椭圆曲线方程常数到a和b到寄存器中;
步骤7):协处理器从数据存储器中取出既约多项式M,存入既约多项式寄存器,同时根据既约多项式最高次数设置相关计算模块的最高次数;
步骤8):协处理器根据输入的点P(Xp,Yp),通过平方和加法计算后初始化两个计算用的变量点:P1(X1,Z1)和P2(X2,Z2);其中:
X1=Xp,Z1=1,X2=Xp4+b,Z2=Xp2,它们是256比特的二进制数,X1、Z1和X2、Z2分别代表点P1和P2的仿射坐标的X轴和Z轴坐标;在这里为了方便之后的计算,通过引入P1和P2将点P的二维投射坐标扩展为三维的仿射坐标;
步骤9):协处理器从数据存储器中取出乘数k,存入移位寄存器中,并且对该寄存器进行初始化,将其左移直到首位为1;
协处理器根据移位寄存器当前最高位判定之后流程:
步骤10):下面的流程将循环更新变量点P1和变量点P2的值直到移位寄存器中k的比特数移完。协处理器通过读移位寄存器当前最高位判定跳转,若为0,执行步骤11);若为1,跳转至步骤14);
移位寄存器最高位为0时协处理器分支跳转步骤:
步骤11):利用点加算法计算P3=P1+P1和P4=P1+P2,之后将P3和P4的值再分别赋给P1和P2;其中,P3和P4是中间变量点,它们也满足椭圆曲线方程,并且坐标定义域和P1、P2相同;
步骤12):判定移位寄存器中是否还有剩余的比特数,若全部移完,跳至步骤17),否则继续下面的步骤;
步骤13):将移位寄存器左移1位,跳至步骤10;
移位寄存器最高位为1时协处理器分支跳转步骤:
步骤14):利用点加算法计算P3=P1+P2和P4=P2+P2,之后将P3和P4的值再分别赋给P1和P2;
步骤15):判定移位寄存器中是否还有剩余的比特数,若全部移完,跳至步骤17),否则继续下面的步骤;
步骤16):将移位寄存器左移1位,跳至步骤10;
根据最后的P1和P2计算最终点乘结果Pk(Xk,Yk):
Pk也是满足椭圆曲线方程的点,点乘计算的目的就是求Pk=k·P
步骤17):读当前的P1坐标:X1和Z1;P2坐标:X2和Z2,它们是位宽位256比特的二进制数;
步骤18):读出点P的横坐标Xp,存入寄存器中,令x=Xp,因此x也为256比特的二进制数;
步骤19):计算Xk=X1/Z1,将Xk存入数据存储器,此为点Pk的横坐标;
步骤20):计算temp1=Xk+x,temp2=X2/Z2+x,temp1和temp2是256比特的临时变量;
步骤21):利用temp1和temp2通过下面的公式计算得到Yk,将Yk存入数据存储器,此为点Pk的纵坐标;
协处理器计算完毕:
步骤22):协处理器发出中断信号通知外部CPU计算完成;
步骤23):外部CPU读取协处理器数据存储器中的Pk的值,即Xk和Yk。之后撤除协处理器的使能信号。
计算点乘时,首先将待处理数据通过外部总线写入D_Ram,之后将伪汇编代码转化的二进制机器指令写入I_Ram,最后给ECC协处理器一个使能信号,触发ECC协处理器开始工作(一般为点乘计算)。ECC协处理器在计算完成后,将通过一个中断信号(End指令中输出的微指令最高位)向外部CPU汇报工作完成,通知CPU从D_Ram中读取数据。
以最高次为233的二元域上曲线为例,下面给出点乘的指令使用。CPU首先向数据寄存器Dram中按以下地址写入相应的值(256位比特二进制数):
Dram_0:x(点P的横坐标)
Dram_1:1
Dram_2:
0x20000000000000000000000000000000000000004000000000000000001(代表既约多项式M(t)=t233+t74+1)
Dram_3:k的二进制展开以及k的位数(具体设置参见移位寄存器有关章节)
Dram_8:y(点P的纵坐标)
Dram_9:b(椭圆曲线方程常参数)
并且,得到的结果将对应存入Dram_a,Dram_b,Dram_c,Dram_d
表2点乘伪汇编指令及其对应十六进制码
地址 | 指令 | 十六进制 | 作用和注释 | |
0 | Load Dram_0,R0 | 1000 | R0=X1=x | P1初始化 |
1 | Load Dram_1,R1 | 1011 | R1=Z1=1 | |
2 | Load Dram_0,R8 | 1008 | R8=x | 计算过程中的常数初始化 |
3 | Load Dram_9,R9 | 1099 | R9=b | |
4 | Load Dram_2,Rm | 102f | 设置乘法和除法所需要的既约多项式 | |
5 | Setpoly 233 | 3008 | ||
6 | Mul_256 R8,R8,R3 | 5883 | R3=Z2=x2 | P2初始化 |
7 | Mul_256 R3,R3,R2 | 5332 | ||
8 | Xor R2,R9,R2 | 5292 | R2=X2=x1+b | |
9 | Shreg_Init Dram_3 | 7030 | Shreg=k | 移位寄存器初始化 |
a | Jmpnz_Mib Iram_d | c00d | 移位寄存器首位归1 | |
b | Shift | 8000 | ||
c | Jmpz_Mib Iram_b | b00b | ||
d | Shift | 8000 | 首位移去/递归开始 | |
e | Jmpz_Shreg Iram_2e | 902e | 判别是否结束 | |
f | Jmpnz_Mib Iram_1f | c01f | ki=1则跳 | |
10 | Mul_256 R1,R2,R2 | 5122 | R2=X2×Z1 | ki=0的处理开始 |
11 | Mul_256 R1,R1,R1 | 5111 | R1=Z1 2 | |
12 | Mul_256 R0,R3,R4 | 5034 | R4=X1×Z2 | |
13 | Mul_256 R0,R0,R0 | 5000 | R0=X1 2 |
14 | Xor R2,R4,R3 | 2243 | R3=X2Z1+X1Z2 | |
15 | Mul_256 R2,R4,R2 | 5242 | R2=X2×Z1×X1×Z2 | |
16 | Mul_256 R1,R1,R4 | 5114 | R4=Z1 4 | |
17 | Mul_256 R0,R1,R1 | 5011 | R1=X1 2×Z1 2 | 得到Z1’ |
18 | Mul_256 R3,R3,R3 | 5333 | R3=(X2Z1+X1Z2)2 | 得到Z2’ |
19 | Mul_256 R4,R9,R4 | 5494 | R1=b×Z1 4 | |
1a | Mul_256 R0,R0,R0 | 5000 | R0=X1 4 | |
1b | Mul_256 R3,R8,R5 | 5385 | R5=x×(X2Z1+X1Z2)2 | |
1c | Xor R0,R4,R0 | 2040 | R0=X1 4+bZ1 4 | 得到X1’ |
1d | Xor R2,R5,R2 | 2252 | R2=xZ2’+X1Z2X2Z1 | 得到X2’ |
1e | Jmpnz_Shreg Iram_d | a00d | 跳转至下次递归 | |
1f | Mul_256 R0,R3,R0 | 5030 | R0=X1×Z2 | ki=1的处理开始 |
20 | Mul_256 R3,R3,R3 | 5333 | R3=Z2 2 | |
21 | Mul_256 R1,R2,R4 | 5124 | R4=X2×Z1 | |
22 | Mul_256 R2,R2,R2 | 5222 | R2=X2 2 | |
23 | Xor R0,R4,R1 | 2041 | R1=X1Z2+X2Z1 | |
24 | Mul_256 R0,R4,R0 | 5040 | R0=X1×Z2×X2×Z1 | |
25 | Mul_256 R3,R3,R1 | 5334 | R4=Z2 4 | |
26 | Mul_256 R2,R3,R3 | 5233 | R3=X2 2×Z2 2 | 得到Z2’ |
27 | Mul_256 R1,R1,R1 | 5111 | R1=(X1Z2+X2Z1)2 | 得到Z1’ |
28 | Mul_256 R4,R9,R4 | 5494 | R4=b×Z2 4 | |
29 | Mul_256 R2,R2,R2 | 5222 | R2=X2 4 | |
2a | Mul_256 R1,R8,R5 | 5185 | R5=x(X1Z2+X2Z1)2 | |
2b | Xor R2,R4,R2 | 2242 | R2=X2 4+bZ2 4 | 得到X2’ |
2c | Xor R0,R5,R0 | 2050 | R0=xZ1’+X1Z2X2Z1 | 得到X1’ |
2d | Jmpnz_Shreg Iram_d | a00d | 跳转至下次递归 | |
2e | Store R0,mem_a | 000a | 存入X1,0 | |
2f | Store R1,mem_b | 010b | 存入Z1,0 | |
30 | Store R2,mem_c | 020c | 存入X2,0 | |
31 | Store R3,mem_d | 030d | 存入Z2,0 |
32 | End | f000 | 结束 | |
以下代码段为投射坐标转为仿射坐标得到点乘结果的代码,需由软件判断Z1,0和Z2,0不为0后,方进行下述代码使用(若与以上代码段配合使用,则上述代码段的存储部分以及下述代码段的读取部分可以省略) | ||||
Load mem_a,R0 | 10a0 | 读入X1,0 | ||
Load mem_b,R1 | 10b1 | 读入Z1,0 | ||
Load mem_c,R2 | 10c2 | 读入X2,0 | ||
Load mem_d,R3 | 10d3 | 读入Z2,0 | ||
Load mem_0,R8 | 1008 | R8=x | 读入x | |
Load mem_8,R9 | 1089 | R9=y | 读入y | |
Divide R0,R1,R0 | 6010 | R0=X1,0/Z1,0 | 得到Xkp | |
Divide R2,R3,R2 | 6232 | R2=X2,0/Z2,0 | ||
Xor R0,R8,R3 | 2083 | R3=(X1,0/Z1,0+x)=A | ||
Xor R2,R8,R2 | 2282 | R2=(X2,0/Z2,0+x) | ||
Mul_256 R8,R8,R1 | 5881 | R1=x2 | ||
Mul_256 R2,R3,R2 | 5232 | R2=(X2,0/Z2,0+x)(X1,0/Z1,0+x) | ||
Xor R1,R2,R1 | 2121 | R1=(X2,0/Z2,0+x)(X1,0/Z1,0+x)+x2 | ||
Xor R1,R9,R1 | 2191 | R1=(X2,0/Z2,0+x)(X1,0/Z1,0+x)+x2+y | ||
Divide R1,R8,R1 | 6181 | R1=((X2,0/Z2,0+x)(X1,0/Z1,0+x)+x2+y)/x=B | ||
Mul_256 R1,R3,R1 | 5131 | R1=A×B | ||
Xor R1,R9,R1 | 2191 | R1=A×B+y | 得到Ykp | |
之后应该还有相应的存储工作,在此省略…… |
该伪汇编代码首先按照顺序初始化寄存器:R0=X1、R1=Z1、R2=X2、R3=Z2、R8=x、R9=b,之后根据算法需要,对移位寄存器中的数据进行移位初始化,使k的首位为1。随后,代码进入移位、判别、计算流程的循环过程中,直到k移位结束。
Claims (1)
1.一种椭圆曲线密码体制协处理器的实现方法,其特征在于该协处理器的实现方法为以下步骤:
外部CPU与协处理器的通信:
步骤1):外部CPU将需要计算的点P(Xp,Yp)、乘数k存入协处理器数据存储器中,Xp、Yp和k为256比特二进制数,如果不足256比特,左侧补0至256位;P是满足椭圆曲线方程y2+xy=x3+ax2+b的点,Xp、Yp是它的横坐标和纵坐标;
步骤2):外部CPU将椭圆曲线方程常数a、b和既约多项式的二进制形式M存入协处理器数据存储器中,a、b和M为256比特二进制数,且a、b是椭圆曲线方程y2+xy=x3+ax2+b的系数;
步骤3):外部CPU将点乘指令集存入协处理器指令存储器中,该指令集中每条指令为16比特,协处理器将从指令集中读指令逐步执行,完成协处理器工作;
步骤4):外部CPU给协处理器使能信号,使协处理器开始工作;协处理器初始化:
步骤5):协处理器从数据存储器中取出点P(Xp,Yp)到寄存器中,提供给各个运算模块使用;
步骤6):协处理器从数据存储器中取出椭圆曲线方程常数到a和b到寄存器中;
步骤7):协处理器从数据存储器中取出既约多项式M,存入既约多项式寄存器,同时根据既约多项式最高次数设置相关计算模块的最高次数;
步骤8):协处理器根据输入的点P(Xp,Yp),通过平方和加法计算后初始化两个计算用的变量点:P1(X1,Z1)和P2(X2,Z2);其中:
X1=Xp,Z1=1,X2=Xp4+b,Z2=Xp2,它们是256比特的二进制数,X1、Z1和X2、Z2分别代表点P1和P2的仿射坐标的X轴和Z轴坐标;在这里为了方便之后的计算,通过引入P1和P2将点P的二维投射坐标扩展为三维的仿射坐标;
步骤9):协处理器从数据存储器中取出乘数k,存入移位寄存器中,并且对该寄存器进行初始化,将其左移直到首位为1;
协处理器根据移位寄存器当前最高位判定之后流程:
步骤10):下面的流程将循环更新变量点P1和变量点P2的值直到移位寄存器中k的比特数移完。协处理器通过读移位寄存器当前最高位判定跳转,若为0,执行步骤11);若为1,跳转至步骤14);
移位寄存器最高位为0时协处理器分支跳转步骤:
步骤11):利用点加算法计算P3=P1+P1和P4=P1+P2,之后将P3和P4的值再分别赋给P1和P2;其中,P3和P4是中间变量点,它们也满足椭圆曲线方程,并且坐标定义域和P1、P2相同;
步骤12):判定移位寄存器中是否还有剩余的比特数,若全部移完,跳至步骤17),否则继续下面的步骤;
步骤13):将移位寄存器左移1位,跳至步骤10;
移位寄存器最高位为1时协处理器分支跳转步骤:
步骤14):利用点加算法计算P3=P1+P2和P4=P2+P2,之后将P3和P4的值再分别赋给P1和P2;
步骤15):判定移位寄存器中是否还有剩余的比特数,若全部移完,跳至步骤17),否则继续下面的步骤;
步骤16):将移位寄存器左移1位,跳至步骤10;
根据最后的P1和P2计算最终点乘结果Pk(Xk,Yk):
Pk也是满足椭圆曲线方程的点,点乘计算的目的就是求Pk=k·P
步骤17):读当前的P1坐标:X1和Z1;P2坐标:X2和Z2,它们是位宽位256比特的二进制数;
步骤18):读出点P的横坐标Xp,存入寄存器中,令x=Xp,因此x也为256比特的二进制数;
步骤19):计算Xk=X1/Z1,将Xk存入数据存储器,此为点Pk的横坐标;
步骤20):计算temp1=Xk+x,temp2=X2/Z2+x,temp1和temp2是256比特的临时变量;
步骤21):利用temp1和temp2通过下面的公式计算得到Yk,将Yk存入数据存储器,此为点Pk的纵坐标;
协处理器计算完毕:
步骤22):协处理器发出中断信号通知外部CPU计算完成;
步骤23):外部CPU读取协处理器数据存储器中的Pk的值,即Xk和Yk。之后撤除协处理器的使能信号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100192317A CN100428140C (zh) | 2007-01-05 | 2007-01-05 | 椭圆曲线密码体制协处理器的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100192317A CN100428140C (zh) | 2007-01-05 | 2007-01-05 | 椭圆曲线密码体制协处理器的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101000538A true CN101000538A (zh) | 2007-07-18 |
CN100428140C CN100428140C (zh) | 2008-10-22 |
Family
ID=38692528
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100192317A Expired - Fee Related CN100428140C (zh) | 2007-01-05 | 2007-01-05 | 椭圆曲线密码体制协处理器的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100428140C (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010124549A1 (zh) * | 2009-04-29 | 2010-11-04 | 华为技术有限公司 | 获取公钥的方法、装置和系统 |
CN102104482A (zh) * | 2009-12-21 | 2011-06-22 | 上海华虹集成电路有限责任公司 | 椭圆曲线密码体制中无穷远点在仿射坐标系下的表示方法 |
CN101640785B (zh) * | 2008-07-30 | 2011-08-17 | 航天信息股份有限公司 | 交互式网络电视的加/解密系统和加/解密方法 |
CN101488958B (zh) * | 2009-02-20 | 2011-09-07 | 东南大学 | 一种使用椭圆曲线进行的大集群安全实时通讯方法 |
CN102307090A (zh) * | 2011-06-21 | 2012-01-04 | 西安电子科技大学 | 基于ⅱ型最优正规基的椭圆曲线密码协处理器 |
CN102521535A (zh) * | 2011-12-05 | 2012-06-27 | 苏州希图视鼎微电子有限公司 | 通过特定指令集来进行相关运算的信息安全协处理器 |
CN101547089B (zh) * | 2008-03-28 | 2012-07-25 | 上海爱信诺航芯电子科技有限公司 | 集成电路中素数域椭圆曲线密码算法的实现方法 |
CN103699357A (zh) * | 2013-12-05 | 2014-04-02 | 西安交通大学 | 一种用于模乘和模平方的快速模约简算法电路 |
CN107294719A (zh) * | 2017-06-19 | 2017-10-24 | 北京万协通信息技术有限公司 | 一种双线性对运算的加解密协处理器 |
CN108259179A (zh) * | 2016-12-29 | 2018-07-06 | 航天信息股份有限公司 | 一种基于sm9标识密码算法的加解密协处理器及其运算方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5982895A (en) * | 1997-12-24 | 1999-11-09 | Motorola, Inc. | Finite field inverse circuit for use in an elliptic curve processor |
US6199086B1 (en) * | 1997-12-24 | 2001-03-06 | Motorola, Inc. | Circuit and method for decompressing compressed elliptic curve points |
CN100536390C (zh) * | 2005-05-18 | 2009-09-02 | 上海迪申电子科技有限责任公司 | 一种椭圆曲线密码协处理器 |
-
2007
- 2007-01-05 CN CNB2007100192317A patent/CN100428140C/zh not_active Expired - Fee Related
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101547089B (zh) * | 2008-03-28 | 2012-07-25 | 上海爱信诺航芯电子科技有限公司 | 集成电路中素数域椭圆曲线密码算法的实现方法 |
CN101640785B (zh) * | 2008-07-30 | 2011-08-17 | 航天信息股份有限公司 | 交互式网络电视的加/解密系统和加/解密方法 |
CN101488958B (zh) * | 2009-02-20 | 2011-09-07 | 东南大学 | 一种使用椭圆曲线进行的大集群安全实时通讯方法 |
WO2010124549A1 (zh) * | 2009-04-29 | 2010-11-04 | 华为技术有限公司 | 获取公钥的方法、装置和系统 |
CN102104482A (zh) * | 2009-12-21 | 2011-06-22 | 上海华虹集成电路有限责任公司 | 椭圆曲线密码体制中无穷远点在仿射坐标系下的表示方法 |
CN102307090A (zh) * | 2011-06-21 | 2012-01-04 | 西安电子科技大学 | 基于ⅱ型最优正规基的椭圆曲线密码协处理器 |
CN102307090B (zh) * | 2011-06-21 | 2014-04-02 | 西安电子科技大学 | 基于ⅱ型最优正规基的椭圆曲线密码协处理器 |
CN102521535A (zh) * | 2011-12-05 | 2012-06-27 | 苏州希图视鼎微电子有限公司 | 通过特定指令集来进行相关运算的信息安全协处理器 |
CN103699357A (zh) * | 2013-12-05 | 2014-04-02 | 西安交通大学 | 一种用于模乘和模平方的快速模约简算法电路 |
CN103699357B (zh) * | 2013-12-05 | 2016-11-23 | 西安交通大学 | 一种用于模乘和模平方的快速模约简算法电路 |
CN108259179A (zh) * | 2016-12-29 | 2018-07-06 | 航天信息股份有限公司 | 一种基于sm9标识密码算法的加解密协处理器及其运算方法 |
CN108259179B (zh) * | 2016-12-29 | 2021-03-02 | 航天信息股份有限公司 | 一种基于sm9标识密码算法的加解密协处理器及其运算方法 |
CN107294719A (zh) * | 2017-06-19 | 2017-10-24 | 北京万协通信息技术有限公司 | 一种双线性对运算的加解密协处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN100428140C (zh) | 2008-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100428140C (zh) | 椭圆曲线密码体制协处理器的实现方法 | |
Amara et al. | Elliptic curve cryptography and its applications | |
CN106850221B (zh) | 信息加密、解密方法及装置 | |
CN106100844B (zh) | 基于点盲化方法的优化自动双线性对加密方法及装置 | |
CN103067165B (zh) | 公钥密码体制中的外包计算方法、设备和服务器 | |
US7027597B1 (en) | Pre-computation and dual-pass modular arithmetic operation approach to implement encryption protocols efficiently in electronic integrated circuits | |
CN103903047A (zh) | 一种适用于rfid安全通信的椭圆曲线加密协处理器 | |
Kim et al. | New hybrid method for isogeny-based cryptosystems using Edwards curves | |
US6480606B1 (en) | Elliptic curve encryption method and system | |
CN112653546A (zh) | 一种基于功耗分析的故障攻击检测方法 | |
Rafik et al. | The impact of ECC's scalar multiplication on wireless sensor networks | |
Ma et al. | Attribute-based blind signature scheme based on elliptic curve cryptography | |
Genç et al. | Implementation of new message encryption using elliptic curve cryptography over finite fields | |
Liu et al. | An efficient and privacy-preserving data aggregation scheme supporting arbitrary statistical functions in IoT | |
Kaleel Rahuman et al. | Reconfigurable architecture for elliptic curve cryptography using fpga | |
Vijayakumar et al. | Comparative study of hyperelliptic curve cryptosystem over prime field and its survey | |
Rashid et al. | A Flexible Architecture for Cryptographic Applications: ECC and PRESENT | |
Jaiswal et al. | Hardware implementation of text encryption using elliptic curve cryptography over 192 bit prime field | |
CN101567783B (zh) | 一种基于ⅱ型高斯基域的椭圆曲线加解密方法和装置 | |
Seo et al. | Performance enhancement of TinyECC based on multiplication optimizations | |
Wei et al. | Privacy-preserving Computational Geometry. | |
Sundararajan et al. | A comprehensive survey on lightweight asymmetric key cryptographic algorithm for resource constrained devices | |
Bhardwaj et al. | Implementation of elliptic curve cryptography in c | |
CN201039199Y (zh) | 一种抗功耗攻击的字节替换电路 | |
Li et al. | A novel algorithm for scalar multiplication in ECDSA |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20081022 Termination date: 20120105 |