CN101764787B - 基于ucps协议中ecc素数特殊性的快速模乘方法 - Google Patents

基于ucps协议中ecc素数特殊性的快速模乘方法 Download PDF

Info

Publication number
CN101764787B
CN101764787B CN 200810044170 CN200810044170A CN101764787B CN 101764787 B CN101764787 B CN 101764787B CN 200810044170 CN200810044170 CN 200810044170 CN 200810044170 A CN200810044170 A CN 200810044170A CN 101764787 B CN101764787 B CN 101764787B
Authority
CN
China
Prior art keywords
centerdot
prime number
ecc
modular multiplication
data
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
Application number
CN 200810044170
Other languages
English (en)
Other versions
CN101764787A (zh
Inventor
袁世强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Huahong Integrated Circuit Co Ltd
Original Assignee
Shanghai Huahong Integrated Circuit Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Huahong Integrated Circuit Co Ltd filed Critical Shanghai Huahong Integrated Circuit Co Ltd
Priority to CN 200810044170 priority Critical patent/CN101764787B/zh
Publication of CN101764787A publication Critical patent/CN101764787A/zh
Application granted granted Critical
Publication of CN101764787B publication Critical patent/CN101764787B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Complex Calculations (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

本发明公开了一种基于UCPS协议中ECC素数特殊性的快速模乘方法,先将192位的ECC素数转换成幂指数形式,然后再将两个192位的模乘数先进行硬乘得到一个384位的数据,通过所述幂指数形式的ECC素数对所述的384位的数据进行化简,得到3个192位整数和1个32位整数,通过对这4个数据求模加得出最终模乘结果。本发明能够有效简化计算的复杂性,提高计算速度。本发明比传统的蒙格马利模乘算法平均快6~7倍,而且从软件来看与蒙格马利模乘相比其代码也较少,容易在实际应用中实现。

Description

基于UCPS协议中ECC素数特殊性的快速模乘方法
技术领域
本发明涉及多媒体领域,特别是涉及一种基于UCPS协议(UnifiedContent Protection System统一数字保护协议)中ECC(EllipticCurve Cryptography椭圆曲线密码体系)素数特殊性的快速模乘方法。
技术背景
UCPS协议是我国提出的具有自主知识产权的数字保护协议,该协议可以用于便携式多媒体设备到高清DTV(数字电视)的各种多媒体设备上。它的提出一方面为绕开HDCP(High-bandwidth Digital ContentProtection高带宽数字内容保护规范)的专利壁垒,另一方面也是为适应中国这个庞大的数字多媒体市场而开发的适合中国国情的数字保护协议。
在UCPS协议中,最耗费运算时间的是数字签名部分,通常源端或者目的端要调用3次以上的椭圆曲线(ECC)标量乘,而影响到标量乘速度的是模乘运算。协议中ECC符合BS ISO/IEC 15946-1-2003、BS ISO/IEC15946-2-2003及BS ISO/IEC 15946-3-2003的规定;其签名体制符合IEEE 1363-2000中7.2.8节的ECSP-DSA(椭圆曲线签名算法DSA版)以及7.2.9节的ECVP-DSA(椭圆曲线验证算法DSA版)的规定;而其中标量乘法运算符合IEEE 1363-2000中的标量乘法规定。在标量乘中包括点加与倍点两种方法,在UCPS协议中计算一次标量乘大约需要200多次点加和倍点运算,因此为了提高执行速度,尽量避免求模逆,一般采用投射坐标系进行运算,这样点加和倍点运算中最基本、最常用的模块就是模乘、模加和模减。1次点加运算需要16次模乘运算,1次倍点运算需要10次模乘运算,而剩余的模加与模减运算相对与模乘运算而言其占用时间可以忽略不记,因此,模乘直接关系到标量乘的运算速度。模乘是乘数与被乘数相乘得出乘积后对某个素数求模运算(即求余数),在一般情况下多采用蒙格马利模乘。但是由于蒙格马利模乘是一种通用模乘方法,软硬件实现成本大,即便是进行优化也会保持原有的框架,实现代价还是不会有很明显的减少,因此,对一些特殊的场合就需要根据素数来确定专有模乘方法,这样实现代价和运算速度就会明显改善。
发明内容
本发明要解决的技术问题是提供一种基于UCPS协议中ECC素数特殊性的快速模乘方法,能够有效简化计算的复杂性,提高计算速度。
为解决上述技术问题,本发明的基于UCPS协议中ECC素数特殊性的快速模乘方法是:先将192位的ECC素数转换成幂指数形式,然后再将两个192位的模乘数先进行硬乘得到一个384位的数据,通过所述幂指数形式的ECC素数对所述的384位的数据进行化简,得到3个192位整数和1个32位整数,通过对这4个数据求模加得出最终模乘结果。
UCPS协议中椭圆曲线密码体系标量乘是整个协议中最耗费时间的部分,而模乘又是其中的基本部分。针对标量乘中的模乘,采用本发明的方法从根本上简化了计算的复杂性,提高了计算速度,比传统的蒙格马利模乘算法平均快6~7倍,而且从软件来看与蒙格马利模乘相比其代码也较少,容易在实际应用中实现。
附图说明
下面结合附图与具体实施方式对本发明作进一步详细的说明:
附图是本发明的模乘算法流程图。
具体实施方式
算法原理
UCPS系统中使用定义在素数域GF(p)上的椭圆曲线,如下式所示:
y2=x3+ax+b    公式(1)
其中素数如下:
p=0xfffffffffffffffffffffffffffffffffffffffffffeffff;以二进制来衡量为192位。
从上述参数可以看出素数p 比较特殊,因此可以化简为幂指数形式,其值为p=2192-216-1,,这样就用3个数字表示一个192位的整数,其中:2192表示24个字节,216表示两个字节,这两个数字都是整字节的。根据这个值的特殊性,可以构造本发明的模乘算法,其流程图参见附图所示。
设C与D分别表示两个192位的素数,其中C=c23c22…c0,D=d23d22…d0,并且C<p,D<p(如果C或D大于p,可以先对p取模,然后再计算),ci与di都表示一个字节(i=0,1…23)。模乘算法计算步骤如下:
首先求C×D的全展开式,
C×D=a23a22…a0b23b22…b0    公式(2)
得到384位数据,其中ai与bi都表示一个字节(i=0,1…23)。
根据公式(2)可得如下推导式:
C × D mod p = a 23 a 22 · · · a 0 b 23 b 22 · · · b 0 mod p
= [ ( a 23 a 22 · · · a 0 ) · 2 192 + b 23 b 22 · · · b 0 ] mod p
= [ ( a 23 a 22 · · · a 0 ) · ( p + 2 16 + 1 ) + b 23 b 22 · · · b 0 ] mod p
= [ ( a 23 a 22 · · · a 0 ) · ( 2 16 + 1 ) + b 23 b 22 · · · b 0 ] mod p
= [ ( a 23 a 22 · · · a 0 ) · 2 16 + a 23 a 22 · · · a 0 + b 23 b 22 · · · b 0 ] mod p
                                公式(3)
= [ ( a 23 a 22 O 21 · · · O 0 ) · 2 16 + a 21 a 20 · · · a 0 O 1 O 0 + a 23 a 22 · · · a 0 + b 23 b 22 · · · b 0 ] mod p
= [ ( a 23 a 22 ) · 2 192 + a 21 a 20 · · · a 0 O 1 O 0 + a 23 a 22 · · · a 0 + b 23 b 22 · · · b 0 ] mod p
= [ ( a 23 a 22 ) · ( p + 2 16 + 1 ) + a 21 a 20 · · · a 0 O 1 O 0 + a 23 a 22 · · · a 0 + b 23 b 22 · · · b 0 ] mod p
= [ ( a 23 a 22 ) · ( 2 16 + 1 ) + a 21 a 20 · · · a 0 O 1 O 0 + a 23 a 22 · · · a 0 + b 23 b 22 · · · b 0 ] mod p
= [ A ~ + A 1 + A + B ] mod p
在求模乘的过程中用素数p将384位的数据化简为4个整数:A、B、A1、
Figure G2008100441704D000411
其中A=a23a22…a0,B=b23b22…b0,A1=a21a20…a00a23a22 A ~ = a 23 a 22 O 1 O 0 , 对于
Figure G2008100441704D000413
O1=O0=0x00,O1、O0分别表示一个字节;其中,3个为192位的整数,1个为32位的整数。数字中的“Oi”表示一个值为“0”的字节(i=0,1…21),这样就可以通过全展开式很快计算出所有的ai与bi,这样就可以分成四个式子(见公式(3)的最后推出的结果),根据这四个式子然后求和就可以很快计算出模乘的结果。
对这种模乘算法需要进行几点说明:
1、在计算模加的过程中采用先计算所有这4个数的和,然后全部计算完之后再求模,这样减少了2次求模时间。
2、由于本发明的算法是先求硬乘然后再简化,因此需要一定的存储空间,UCPS协议的ECC系统是192位,所以所需的额外存储空间不大。
为了很好的说明算法的执行过程,本发明给出如下伪代码(在以下数组表示中,下标为“0”表示最高位,随着数字增大依次降低):
void Simple_Multi(unsigned char first_num[24],unsigned charsecond_num[24],unsigned char result[24])
{
  unsigned char temp_num[48],jingwei=0;//temp_num存放两个数的硬乘结果,jingwei是进位。
  unsigned long temp;//temp是存放在硬乘计算过程中的临时数据。
unsigned char result_num[24],A[24],B[24],A1[24],[24];
//result_num表示在后面模加过程中的中间变量,A表示硬乘后的前24位结果,B表示硬乘后的后24位结果,A1表示A循环左移两个字节后的结果,表示A最高两个字节左移2个字节后的结果。
int i=0,j=0;//i、j表示两个下标变量。
for(i=0;i<48;i++)
    temp_num[i]=0;//初始化temp_num数组。
for(i=23;i>=0;i--)
{
    jingwei=0;//乘数数组中每个数字与整个被乘数数组相乘之前都要初始化jingwei。
    for(j=23;j>=0;j--)
    {
temp=second_num[i]*first_num[j]+temp_num[i+j+1]+jingwei;//乘数数组中每个数字与整个被乘数数组相乘。
    jingwei=temp>>8;//提取进位
        temp_num[i+j+1]=(unsigned char)(temp);//得出结果
    }
    temp_num[i]=jingwei;//最后的进位结果放到数组最高位
}
for(i=0;i<24;i++)
{
A[i]=temp_num[i];//把高24位放入A中
B[i]=temp_num[i+24];//把低24位放入B中
j=(i+2)%24;//临时变量j是为下面循环左移A中的数据做准备
A1[i]=temp_num[j];//把A中的数据循环左移放入到A1中
Figure G2008100441704D00061
[i]=0;//初始化a数组
}
Figure G2008100441704D00062
[20]=temp_num[0];//把a中放入相应的数值
Figure G2008100441704D00063
[21]=temp_num[1];//把a中放入相应的数值
//result_num=A+B;
Module_add(A,B,A1,
Figure G2008100441704D00064
p,result);//求
Figure G2008100441704D00065
的模加
}
在函数中第一个参数first_num表示模乘的被乘数,第二个参数second_num表示乘数,第三个参数result表示模乘结果。在函数的结尾用了三次模加函数,Module_add函数第一个参数表示模加的被加数,第二个参数表示加数,第三个表示取模的素数,第四个表示运算结果。
本发明的算法采用的是以整字节为单位进行运算,但是目前计算机大多是32位系统,因此在实际编程的过程中可以采用32位。
本发明的方法可以进行试验测试,在试验测试过程中,采用蒙格马利模乘和本发明的算法进行对比。对比从两个方面进行,第一方面是给定相同的输入数据,然后对比输出数据是否相同;第二个方面是给定相同的输入和相同的输出数据,然后计算两种算法所需的运算时间。测试环境P4、512M内存,联想启天M4880计算机。为了使对比测试更有代表性,给出五组对比数据:
第一组:
C=0x1234567890abcedf1234567890abcedf1234567890abcedf;
D=0x1234567890abcedf1234567890abcedf1234567890abcedf;
result=0xc3faea676fb8385fabf002053ed8021493e519a30f426eaa;
第二组:
C=0xffffffffffffffffccccccccccccccccdddddddddddddddd;
D=0x1234567890abcedf1234567890abcedf1234567890abcedf;
result=0x567890abcedf0e90452d4089724c0fc6f59bb094f8b11234;
第三组:
C=0xfffeeedddcccbbbaaa999888777666555444333222111000;
D=0xfdecba9876543210 fdecba9876543210 fdecba9876543210;
resul t=0x9865657d1a757e97d53932b9ee42bb6ba27606882902aaca;
第四组:
C=0xfffffffffffffffffffffffffffffffffffffffffffefffe;
D=0xfffffffffffffffffffffffffffffffffffffffffffefffe;
resul t=0x1;
第五组:
C=0xfffffffffffffffffffffffffffffffffffffffffffefffe;
D=0xffffffeeeeeeddddddccccccbbbbbbaaaaaa999999888888;
resul t=0x000000111111222222333333444444555555666666767777;
运算时间对比如下表所示:
  (微秒)     第一组     第二组     第三组     第四组     第五组
  本发明所提出的模乘     17.04     17.16     17.26     17.28     17.52
  蒙格马利模乘     101.12     100.21     107.76     111.21     116.74
根据表中的数据,可以得出两种算法的近似效率比:
101 + 100.2 + 107.76 + 111.21 + 116.74 17.04 + 17.16 + 17.26 + 17.28 + 17.5 = 537.04 86.26 = 6.23 公式(4)
从上述对比测试可以看出,本发明所提出的算法得出的结果与蒙格马利模乘方法得出的结果一致;另外,计算复杂度也大为将低(主要是指编程实现方面),计算时间大为节省,提高了约6~7倍。这说明本发明所提出的算法针对UCPS协议中ECC的素数模型是有效可行的,算法原理也是正确的。本发明的模乘算法中最费时间的是两个数进行硬乘,目前大数硬乘的优化方法有很多,如果采用这些优化方法可以更加完善对本发明的算法,执行效率也会有明显的提高。从原理上来看,本发明的模乘算法有严格的数学证明,并且从测试结果也得到了证明。对于本发明的模乘算法由于避开了反复的求模运算,因此运算速度也大幅度提高,这样就为签名验证算法的快速执行奠定了基础。
以上结合具体实施例对本发明进行了详细的说明,这些并非构成对本发明的限制。在不脱离本发明原理的情况下,本领域的技术人员还可作出许多变形和改进,这些也应属于本发明的保护范围。

Claims (1)

1.一种基于UCPS协议中ECC素数特殊性的快速模乘方法,其特征在于:先将192位的ECC素数转换成幂指数形式,然后再将两个192位的模乘数先进行硬乘得到一个384位的数据,通过所述幂指数形式的ECC素数对所述的384位的数据进行化简,得到3个192位整数和1个32位整数,通过对这4个数据求模加得出最终模乘结果;
简化ECC素数的方法是:在UCPS协议中素数域GF(p)上的椭圆曲线为y2=x3+ax+b,素数为p=0xfffffffffffffffffffffffffffffffffffffffffffeffff,以二进制来衡量为192位,将素数p化简为幂指数形式,其值为p=2192-216-1,这样就用3个数字表示一个192位的整数,其中:2192表示24个字节,216表示两个字节,这两个数字都是整字节的;
得到384位的数据的方法是:设两个192位的整数为C=c23c22…c0、D=d23d22…d0,其中ci、di分别表示一个字节,0≤i<24,并且C<p,D<p;将两个整数C和D进行硬乘,得到384位数据:C×D=a23a22…a0b23b22…b0,其中ai、bi分别表示一个字节,0≤i<24;
384位的数据化简的方法是:在求模乘的过程中用素数p将384位的数据化简为4个整数:A、B、Al、
Figure FSB00000895144000011
其中A=a23a22…a0,B=b23b22…b0,A1=a21a20…a00a23a22
Figure FSB00000895144000012
对于
Figure FSB00000895144000013
O1=O0=0x00,O1、O0分别表示一个字节;其中,3个为192位的整数,1个为32位的整数。
CN 200810044170 2008-12-24 2008-12-24 基于ucps协议中ecc素数特殊性的快速模乘方法 Active CN101764787B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200810044170 CN101764787B (zh) 2008-12-24 2008-12-24 基于ucps协议中ecc素数特殊性的快速模乘方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200810044170 CN101764787B (zh) 2008-12-24 2008-12-24 基于ucps协议中ecc素数特殊性的快速模乘方法

Publications (2)

Publication Number Publication Date
CN101764787A CN101764787A (zh) 2010-06-30
CN101764787B true CN101764787B (zh) 2012-12-05

Family

ID=42495776

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200810044170 Active CN101764787B (zh) 2008-12-24 2008-12-24 基于ucps协议中ecc素数特殊性的快速模乘方法

Country Status (1)

Country Link
CN (1) CN101764787B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108718239A (zh) * 2018-05-14 2018-10-30 河南科技大学 一种改进的椭圆曲线数字签名方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6778666B1 (en) * 1999-03-15 2004-08-17 Lg Electronics Inc. Cryptographic method using construction of elliptic curve cryptosystem
CN1786900A (zh) * 2005-10-28 2006-06-14 清华大学 基于改进的蒙哥马利算法的模乘器
CN101079203A (zh) * 2006-05-22 2007-11-28 北京华大信安科技有限公司 椭圆曲线密码系统和方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6778666B1 (en) * 1999-03-15 2004-08-17 Lg Electronics Inc. Cryptographic method using construction of elliptic curve cryptosystem
CN1786900A (zh) * 2005-10-28 2006-06-14 清华大学 基于改进的蒙哥马利算法的模乘器
CN101079203A (zh) * 2006-05-22 2007-11-28 北京华大信安科技有限公司 椭圆曲线密码系统和方法

Also Published As

Publication number Publication date
CN101764787A (zh) 2010-06-30

Similar Documents

Publication Publication Date Title
Zhao et al. Ultra high-speed SM2 ASIC implementation
CN109145616B (zh) 基于高效模乘的sm2加密、签名和密钥交换的实现方法及系统
WO2010048719A1 (en) Method and apparatus for modulus reduction
CN102571342B (zh) 一种rsa算法数字签名方法
Koppermann et al. 18 seconds to key exchange: Limitations of supersingular isogeny Diffie-Hellman on embedded devices
Paar Implementation of cryptographic schemes 1
CN101764787B (zh) 基于ucps协议中ecc素数特殊性的快速模乘方法
CN113467754A (zh) 一种基于分解约简的格加密模乘运算方法及架构
CN117155572A (zh) 一种基于gpu并行实现密码技术中大整数乘法的方法
CN111897578A (zh) 一种特征为2的椭圆曲线上标量乘的并行处理方法及装置
Keliris et al. Investigating large integer arithmetic on Intel Xeon Phi SIMD extensions
CN112350827A (zh) 一种基于Koblitz曲线的加速标量乘计算的椭圆曲线加解密方法和系统
Vestias et al. Parallel decimal multipliers and squarers using Karatsuba-Ofman's algorithm
Chatterjee et al. Software Implementation of Curve based Cryptography for Constrained Devices
Kudithi et al. Radix-4 interleaved modular multiplication for cryptographic applications
CN111917548B (zh) 基于gpu与cpu异构结构的椭圆曲线数字签名方法
WO2017037729A1 (en) Concurrent architecture of vedic multiplier-an accelerator scheme for high speed computing
Baktır et al. Finite field polynomial multiplication in the frequency domain with application to elliptic curve cryptography
KR102253211B1 (ko) 소수체와 이진체 상의 타원곡선을 지원하는 공개키 암호 시스템의 하드웨어 구현을 위한 연산장치 및 방법
Zhao et al. High-performance unified modular multiplication algorithm and hardware architecture over G (2m)
Pelzl et al. Special hyperelliptic curve cryptosystems of genus two: Efficient arithmetic and fast implementation
CN117992990B (zh) 一种高效的电力数据同态加密方法、处理器及存储介质
Sung et al. A Public-key Cryptography Processor supporting P-224 ECC and 2048-bit RSA
Park et al. A small-area implementation of cryptographic processor for 233-bit elliptic curves over binary field
Kim et al. Efficient Hardware Acceleration of Chinese Remainder Theorem for Fully Homomorphic Encryption

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