CN104254833B - 基于向量和标量的模取幂 - Google Patents

基于向量和标量的模取幂 Download PDF

Info

Publication number
CN104254833B
CN104254833B CN201280072786.7A CN201280072786A CN104254833B CN 104254833 B CN104254833 B CN 104254833B CN 201280072786 A CN201280072786 A CN 201280072786A CN 104254833 B CN104254833 B CN 104254833B
Authority
CN
China
Prior art keywords
digit
instruction
numerical digit
numerical
sum
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.)
Expired - Fee Related
Application number
CN201280072786.7A
Other languages
English (en)
Other versions
CN104254833A (zh
Inventor
S.古伊龙
V.克拉斯诺夫
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN104254833A publication Critical patent/CN104254833A/zh
Application granted granted Critical
Publication of CN104254833B publication Critical patent/CN104254833B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods 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/72Methods 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/723Modular exponentiation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3828Multigauge devices, i.e. capable of handling packed numbers without unpacking them

Landscapes

  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

实施例包括一种用于使用向量和标量指令的混合来计算运算(诸如,模取幂)以加速严重依赖于大数算术运算的各种应用(诸如,加密协议)的方法。实施例需要比更传统的实践少得多的指令来执行运算。这里描述了其它实施例。

Description

基于向量和标量的模取幂
背景技术
加密算法(诸如,RSA2048和支撑安全套接字层(SSL)连接、传输层安全(TLS)连接等的其它基础加密算法)为支持计算装置(例如,服务器)而产生沉重的计算负荷。
RSA的传统软件实现方式是使用算术逻辑单元(ALU)指令(例如,ADD/ADC/MUL)的“标量码”。ADD/ADC/MUL的性能的提高已使标量实现方式在现代处理器上更加高效。单指令多数据(SIMD)或“向量”架构仍然能够在标量码上提供改进。SIMD是这样的架构:单个指令同时计算几个输入的函数。这些输入被称为“元素”并且驻留在将一些输入保存在一起的寄存器中。早期SIMD架构使用在64位SIMD寄存器上操作的指令(例如,MMX)。其它架构(例如,SSE)引入了128位寄存器。再其它架构(例如,高级向量扩展(AVX)、AVX2等)通过例如在256位寄存器上引入非破坏性目的地和浮点运算来在几个方面扩展SSE架构。
许多方法(例如,用在媒体处理中的离散余弦变换(DCT))对多个独立元素进行操作,并且因此固有地适合SIMD架构。然而,考虑到例如由于算术运算(诸如,加法和乘法)期间的进位传送而不独立的多位数的数位,在RSA应用和许多其它应用中重要的大数(例如,多位)算术并不天然地适合向量架构。
附图说明
图1描绘用于进位传送的方法。
图2描绘本发明的实施例中的冗余表示。
图3描绘本发明的实施例中的用于冗余表示转换的方法。
图4提供本发明的实施例中的用于执行算术运算的例子。
图5描绘本发明的实施例中的用于进位传送的方法。
图6描绘本发明的实施例中的用于非约分(Non-Reduced)蒙哥马利(Montgomery)乘法的逐字计算的方法。
图7描绘本发明的实施例中的用于非约分蒙哥马利乘法的计算的方法。
图8描绘本发明的实施例中的用于确定模取幂的方法。
图9描绘本发明的实施例中的用于使用标量和向量指令的混合确定非约分蒙哥马利乘法的方法。
图10描绘本发明的实施例中的用于使用标量和向量指令的混合确定非约分蒙哥马利乘法的优化方法。
图11描绘本发明的实施例中的用于使用标量和向量指令的混合确定非约分蒙哥马利乘法的方法。
图12包括用于与本发明的各种实施例一起使用的***。
具体实施方式
在下面的描述中,阐述了许多特定细节,但可在没有这些特定细节的情况下实施本发明的实施例。公知电路、结构和技术未被详细地示出以避免模糊对本描述的理解。“实施例”、“各种实施例”等指示如此描述的(一个或多个)实施例可包括特定特征、结构或特性,但并非每个实施例都必须包括所述特定特征、结构或特性。一些实施例可具有针对其它实施例描述的特征中的一些特征、全部特征或者不具有针对其它实施例描述的特征。“第一”、“第二”、“第三”等描述共同对象并且指示正在表示相似对象的不同实例。这种形容词并不意味着如此描述的对象必须在时间上、在空间上、在等级上或以任何其它方式处于给定顺序。“连接”可指示元件彼此处于直接物理或电气接触,并且“耦合”可指示元件彼此协作或相互作用,但它们可处于直接物理或电气接触或者可不处于直接物理或电气接触。此外,尽管类似或相同数字可被用于在不同图中指示相同或类似部分,但这样操作并不意味着包括类似或相同数字的所有图构成单个或同一实施例。
实施例包括一种用于使用向量和标量指令的混合来计算模取幂以加速严重依赖于大数算术运算的各种应用(诸如,加密协议)的方法。实施例需要比更传统的实践少得多的指令以执行操作。
实施例包括一种用于使用向量(SIMD)指令计算模取幂的方法,该方法性能优于传统标量(ALU)实现方式。实施例在各种平台(诸如,支持SIMD指令(例如,AVX指令集)的平台)上加速RSA2048协议。实施例适合1024位模取幂,并且需要比传统实现方式(例如,OpenSSL1.0.1实现方式)少得多的指令。这可“加快”RSA2048执行以及其它加密协议的执行。
实施例包括一种用于将SIMD架构用于大数算术(诸如,与模取幂关联的大数算术)的高效方法。实施例高效地计算蒙哥马利乘法(和求平方)(的变型),并且包括SIMD和ALU单元之间的计算工作负荷的平衡。这解决了存在于纯粹SIMD或纯粹ALU实现方式中的瓶颈。
实施例与具有2n位模数的RSA密码***一起使用,N = P x Q,其中P和Q是n位素数。2n位私有指数是d。2n位消息C的解密可需要一个2n位模取幂Cd mod N。为了使用中国余数定理(CRT),预先计算下面的量:d1 = d mod (P-1),d2 = d mod (Q-1)和Qinv = Q-1 modP。然后,计算两个n位模取幂,即M1 = Cd1 mod P和M2 = Cd2 mod Q(M1、M2、d1、d2是n位整数)。通过使用Cd mod N = M2+(Qinv × (M1 - M2) mod P) × Q来重新组合这些结果。使用CRT,2n位RSA解密的计算成本近似为一个n位模取幂的计算成本的两倍。通过(RSA密钥的)构造, 2n-1 < P,Q < 2n
模取幂计算中的组成部件是模乘法或等同物。实施例使用非约分蒙哥马利乘法(NRMM),NRMM是蒙哥马利乘法(MM)的变型。对于MM,M是奇整数(模数),a、b是两个整数,使得0 ≤ a,b < M,并且t是正整数(此后,所有的变量是非负整数)。关于t的a乘以b,模M的MM由MM(a, b) = a×b×2-t mod M定义。对于NRMM,M是奇整数(模数),a、b是两个整数,使得0 ≤a,b < 2M,并且t是正整数,使得2t >4M。关于t的a乘以b,模M的NRMM由下面的等式定义:
2t是蒙哥马利参数。对于非约分蒙哥马利平方,NRMM (a, a) = NRMSQR (a)。
下面的引理(引理1)示出NRMM如何能够类似于MM被用于模取幂的高效计算。假设M是奇模数,a、b是两个整数,使得0 ≤ a,b < 2M,并且t是正整数,使得2t >4M。那么,NRMM(a, b) < 2M并且NRMM(a, 1) < M。为了证明部分a:
为了证明部分b:
最后的不等式根据2t > 4M和a < 2M。因此,NRMM (a, 1)是完全约分的模M。
引理1(部分a)示出NRMM的“稳定性”:一个NRMM的输出能够被用作随后的NRMM的输入。由于NRMM(a, b) mod M = MM(a, b),所以根据引理1中的界限:NRMM(a, b)是MM(a, b)或MM(a, b)+M。假设0 ≤ a,b < 2M,c2 = 22t mod M,a' = NRMM(a, c2),b' = NRMM(b,c2),u' = NRMM(a', b')和u = NRMM(u', 1 )。那么,引理1意味着a'、b' 、u'小于2M,并且u= a×b mod M。
这指示NRMM如何可被用于以与使用MM的方式类似的方式计算模取幂。对于给定模数M,常数c2 = 22t mod M能够被预先计算。然后,ax mod M(对于0≤ a < M和某一整数x)能够通过下述步骤计算:(a)将底数(a)映射到(非约分)蒙哥马利域,a' = NRMM (a, c2);(b)在以NRMM替换模乘法时使用取幂算法,和(c)将结果映射回至余数域,u = NRMM (u', 1)。
实施例使用下面的AVX2向量运算:VPADDQ-来自一个YMM寄存器的四个64位整数值和来自另一YMM寄存器的四个64位值的加法,并且将结果存储在第三YMM寄存器中;VPMULUDQ-来自一个YMM寄存器的四个32位无符号整数值乘以来自另一YMM寄存器的四个32位值,将四个64位乘积产生到第三YMM寄存器中;VPBROADCASTQ-将给定64位值复制四次以(利用该值)产生具有四个相等元素的YMM寄存器;VPERMQ-根据8位立即值排列YMM寄存器里面的64位值;和VPSRLQ/VPSLLQ-将YMM寄存器里面的64位值移位达由8位立即值指定的量。然而,其它实施例不限于这些指令。
SIMD指令被设计为重复对存储在寄存器中的独立元素的相同运算。因此,SIMD指令固有地难以高效地处理与大数算术关联的进位传送。作为例子,(2数位) x (3数位)乘法中的进位传送被图示在图1中。
图1包括整数A (3个数位: a0、a1、a2)和B (2个数位: b0、b1)的乘法期间的传统进位传送的图示。使用A的每个数位乘以B的每个数位的“教科书”方法,并且合适的中间乘积被相应地对齐并求和。由于进位传送,部分和的数位并不彼此独立,并且因此,SIMD架构将会需要一些麻烦的操纵以处理这种流。因此,在图1中,每个“数位” 占用完整64位寄存器/存储器位置。在64位架构中,这是在没有溢出的情况下能够存储的最大标量值。将两个这种数位相乘导致存储在两个分开的64位寄存器中的128位乘积。将两个这种数位相加可导致65位值。在这种情况下,CPU设置“进位标记”以指示存在进位输出。这个进位必须与下一个数位相加,这也可能导致进位,等等。
模取幂能够被转化为一序列NRMM/NRMSQR。实施例使用向量指令优化这些运算。实施例对“小”元素(例如,小于232)进行运算。这允许对两个大数乘积求和,而不会在保存累加器的数位的64位“容器”里面引起溢出。因此能够避免进位传送的麻烦处理。为此,实施例利用长(多位)整数的替代表示进行工作。因此,当m被选择为小于32时,乘积长度是2m位。这意味着64位容器将会具有64-2m个“未使用”顶部位。因此,可发生例如中间乘积的累加,直至那些“未使用”位溢出。这将不会发生,直至至少264-2m次加法之后,因为每次加法将会至多对这些位相加1。
具体地讲,A是n位整数,在基数264中被写为l位整数,其中l = [n/64],并且其中每个64位数位ai满足0 ≤ ai < 264。这种表示是唯一的(在数学意义上)。考虑正数m,使得1<m< 64。A可在基数2m中被写为:
这种表示是唯一的(在数学意义上),并且需要k = [n/m] > l个数位,对于i= 0…k-1,xi满足0 ≤ xi < 2m。例如参见图2。换句话说,在基数264的标准传统中表示每个数时,每个数是唯一的。
当放松要求0 ≤ xi < 2m并且允许数位仅满足不等式0 ≤ xi < 264时,那么以冗余基数2m表示(“冗余表示”)书写A。这种表示不是唯一的(在数学意义上)。冗余表示包括“容器”/存储器单元中的数的嵌入数位,所述“容器”/存储器单元比存储这些数位所需要的大。因此,实施例从规则表示(其中每个数位正好占用一个64位位置并且具有正好64个有效位,期中一些数位仍然可能是0)转换成基数2m中的冗余表示。因此,存在更多数位,每个数位仅具有m位,并且每个数位仍然占用64位容器。
作为例子,图2包括使用9个数位(k = ceil(n/m) = 9)以基数229(m=29)(底行)书写的基数264中的256位整数(n=256,l=4)(顶行)。每个数位在k=9个元素的向量中被存储为64位“元素”。因此,在图2中,底行具有“标准化”冗余表示基数229。该表示被“标准化”,因为顶部35位被调零,并且每个数位正好是29位。将两个这种数字相加将会导致一些数位变为30位,使其称为“非标准化”冗余表示。
返回到以上关于整数A的例子,满足A < 2mxk的在冗余表示中利用k个数位书写的整数A能够被转换成具有相同数量的数位(k)的基数2m表示,如图3中所示。对于图3的方法,当基数2m被“标准化”时,基数2m是冗余表示。该方法解决具有一些数位>m位并且需要被固定以便被用在连续的乘法中的数字的“标准化”。在这个过程之后,每个数位变为正好m位(即,数字再次被“标准化”)。
现在提供另一例子。假设n=1024并且1024位数A = 21024-105。它在基数264中具有l= 16个数位。最低有效数位是0xFFFFFFFFFFFFFF97,并且其它15个数位是0xFFFFFFFFFFFFFFFF。对于m=28,A变为在基数228中具有k = 37个数位的数,最低有效数位是0xFFFFF97,最高有效数位是0xFFFF,并且其余数位是0xFFFFFFF。对于m=29,A变为在基数229中具有k = 36 个数位的数,最低有效数位是0x1FFFFF97,最高有效数位是0x1FF,并且其余数位是0x1FFFFFFF。
对在冗余表示中给出的整数的运算能够如下被“向量化”:假设X和Y是在冗余表示中给出的两个数,使得
,并且。假设t > 0是整数。
对于加法算术运算:如果xi + yi< 264,其中i = 0,1,...,(k-1),则由下面的等式在冗余表示中给出和X + Y:
,并且°
对于乘以常数的算术运算:如果xi × t < 264,其中i = 0,1,...,(k-1),则由并且给出乘积t × X。
图4提供至冗余表示/格式的转换以及包括加法和乘法的算术运算的例子。选择256位的小数, m被选择为29,但其它实施例不限于29。首先,数字A和B具有规则形式(即,不是冗余表示),因为每个数字包括四个64位数位。最高有效数位位于左侧,并且最低有效数位位于右侧(即,从小到大格式)。接下来,A和B被变换为标准化冗余表示=基数229。这导致具有[256/29] = 9个数位的数。每个数位正好是29位,并且占用64位位置(具有多余空间)。A随后被与B相加。左侧的第二数位(0000000016b8f29f)变得大于29位(例如,参见29位数位0000000001e5ee11以进行比较),因此,过大的数位根据图3的方法被标准化,并且再一次,结果是基数229表示。作为另一例子,A和B中的每一个均乘以“t”,t是31位。所有的数位从29位边界溢出,并且因此被标准化为基数229。因此,以上例子示出:在由于溢出而必须将值标准化之前,许多数位可被求和(参见图3)。这与传统方法(诸如,图1的方法)形成对比。
图5提供使用向量化计算的两个整数A和B的乘法期间的进位累加的例子(与图1比较)。假设m=29。A(3个数位)和B(2个数位)首先被转换成基数229中的冗余表示。在这个表示中,它们具有7个数位和5个数位,其中每个数位小于229并且被存储在64位容器(SIMD元素)中。然后,在进位位溢出到64位容器里面的“空的空间”中时(“空的空间”最初是0),中间乘积被累加。最后,根据图3的方法,该结果被“标准化”回至标准2m表示。这个结果能够被馈送给连续乘法,或者被变换回至基数264。因此,在图5中,在转换成冗余表示之后,数位小于64/2位。每个数位中的位的数量被表示为m。因此,两个这种数位的乘积至多是2m。要注意的是,2m<64。将两个2m数相加可至多导致2m+1数位值。因此,选择m,以使得该方法能够连续地将几个数位相加并且仍然使得累加结果<64位(即,避免溢出)。图5图示冗余表示如何帮助将进位传送延迟到乘法的最后阶段。
图6图示如何能够以“逐字”方式计算NRMM。要注意的是,。因此,(a)立即跟随,并且(b)根据引理1。还要注意的是,如果B = 1,则精确地,X mod M = 。在步骤2.5中,由于步骤2.4-2.4和k0的定义,X可被2m除尽。最终结果中的数位的数量保持不变(k),因为结果X<2n+1并且k×m>n+2。在冗余表示中,能够使用向量指令(VPMULUDQ)高效地计算步骤2.1和2.4。能够使用标量指令高效地计算步骤2.2和2.3,因为它们对单个数位进行运算。因此,图6的方法可用于经标量和向量指令的混合计算NRMM。
因此,在图6中,步骤2.1和步骤2.4被分解为标量/向量部分。对X - x0的最低有效数位执行许多资源消耗计算,并且其余的数位依赖于它。因此,在实施例中,在ALU中处理最低有效数位(标量),这对这个最重要的数位执行非常快速的运算。针对对单个数位的运算,SIMD单元可能不理想,并且如果在SIMD单元中处理所有值(例如,包括最低有效数位),则SIMD单元可能停机。因此,实施例如以上所示使用ALU,但还使用SIMD单元对未由ALU处理的数位(例如,除最低有效数位之外的数位)执行乘法和累加。
如以上所指示,标量指令有利于对单个数位执行的彼此不同的一系列串行运算。SIMD指令有利于对许多数位执行相同运算。以上例子中的计算的瓶颈在于x0(x的最低有效数位)。其余数位是乘法-累加运算的结果。因此,实施例在ALU中执行需要的瓶颈运算,并且在SIMD中完成其余的乘法-累加运算。这释放ALU单元以处理瓶颈。这个实施例防止SIMD尝试计算瓶颈运算,SIMD计算瓶颈运算将会不利地影响性能。
图7示出使用标量指令计算X的低数位并且使用向量指令用于其它计算的实施例。为了避免进位溢出,可发起“清除”程序,将X转换成标准化2m表示。
在图7中,计算NRMM(具有参数m)假设以冗余形式表示输入A、B和M,其中每个数位严格地小于2m(我们将其称为“标准化冗余表示”)。实施例可将这种NRMM实现方式集成到“标准”实现方式中(例如,变换来自规则(基数264)表示的输入/将输出转换成规则表示)。这种变换的成本仅为几十个周期,但如果针对每个NRMM执行,则成本能够累计至显著的开销。为了效率,实施例在取幂的开始将输入变换成冗余形式; 在整个取幂期间以冗余形式执行所有运算;并且最后将结果变换回至标准表示。这在保持取幂函数的标准接口(对用户透明)的同时使得来回变换的开销变得可忽略。
实施例允许参数的选择和优化。例如,某些加密协议可受益于n=512、1024、2048(分别针对RSA1024、RSA2048、RSA4096)。在一个实施例中,如果n=512或n=1024,则m=29,并且当n=2048时,m=28。
为了解释参数的这种选择,针对n=1024的m=29大于在图8的方法的步骤1中指定的m的值(即,m=28)。能够利用m的不同选择保持图8的方法的正确性,只要适当地应用“清除”步骤以防止任何超出64位容器所允许的范围的溢出。代价如下:大的m减小操作数的数位的数量,这提高计算的效率。另一方面,大的m需要更频繁的“清除”,因为较少的“备用”位被留下用于累加。
在n=1024的实施例中,选择m=29导致36数位操作数,这导致58位乘积,并且仅留下6个“备用”位用于进位累加。因此,在26=64次累加(即,在图7的方法中的循环(步骤7)的每32次迭代)之后,需要清除。对于n=1024,这个循环重复36次迭代,因此仅需要一次清除。对于m=28,存在37数位操作数和8个“备用”位。因此,循环的每128次迭代需要清除,从而在没有任何清除的情况下允许多达3584位的指数。
在实施例中,清除步骤被优化(仅删除必要的数量的位),并且m=29是优选的参数选择。
因此,实施例选择m,其中m越小,在64位容器的“未使用”位中在没有溢出的情况下能够执行越多的乘法-累加运算。代价是更多的“数位”,因为每个数位变得更小,并且作为结果-更多的运算。实施例可自动地或响应于用户输入选择m=28,并且然后执行28=256次乘法-累加。其中8=64-2*m。选择m=29的实施例仅允许64次累加。利用这个参数,针对1024位NRMM的乘法-累加次数是72=36*2(其中36=n/m)。在这种情况下,执行“清除”,其在计算上是便宜的,可选择较小的值(例如,m=28)以减少清除。M=28将会需要37次迭代。
实施例使用向量SIMD架构,诸如指令的AVX系列(AVX2)。AVX2是能够支持向量化NRMM实现方式的SIMD架构,向量化NRMM实现方式能够性能优于纯粹标量实现方式。这仅是例子,并且其它架构适合于其它实施例。
为了简单,教科书方案被用于对运算和代价进行计数。在冗余表示中计算NRMM需要2×[n/m]2次单精度乘法。类似地,标量实现方式(在基数264中)需要2×[n/64]2次单精度乘法。然而,冗余表示中的NRMM每次乘法仅需要一次单精度加法,而标量实现方式需要三次单精度进位加运算。
例如,使用标量实现方式的1024位NRMM需要大约512次乘法和大约1536次加法。具有m=29的冗余实现方式需要大约2592次乘法和大约2592次加法。针对利用基数264的标量实现方式的乘法和加法的总数为大约2048,并且针对NRMM,指令总数为大约5184个指令。
因此,向量化的代码执行优于纯粹标量实现方式,因为在一个实施例中,代码在SIMD架构上运行,SIMD架构能够执行的单精度运算是传统标量实现方式的2.53倍。换句话说,实施例使用容纳2.53个数位(64位的)的SIMD架构,意味着至少162位的寄存器。因此,实施例可与具有合适的整数指令的256位(4个数位)的寄存器一起工作,并且提供快速向量化执行。
如以上所指示,标量指令有利于对单个数位执行的彼此不同的一系列串行运算。SIMD指令有利于对许多数位执行相同运算。以上例子中计算的瓶颈在于x0(x的最低有效数位)。其余数位是乘法-累加运算的结果。因此,实施例在ALU中执行需要的瓶颈运算,并且在SIMD中完成其余的乘法-累加运算。这释放ALU单元以处理瓶颈。这个实施例防止SIMD尝试计算瓶颈运算,SIMD计算瓶颈运算将会不利地影响性能。
图7示出使用标量指令计算X的低数位并且使用向量指令用于其它计算的实施例。如图9中图示的,执行图7的方法中的实现NRMM。对于图9,小正方形表示ALU寄存器(GPR)中的单个数位。长矩形意味着其余数位位于一个SIMD寄存器/几个SIMD寄存器中。小正方形附近的运算示出在ALU中执行的运算:A0乘以Bi,并且累加到X0中(教科书乘法中的B的下一个数位(图7的步骤7.1)。并行地,实施例将A的其余数位乘以Bi并且累加,如步骤7.2-7.3中所描述的。在ALU中,实施例将X0乘以k0 mod 2m(步骤7.4)。然后,实施例在ALU中将M0乘以y0并且累加到X0中(步骤7.5),并且在SIMD中乘以并累计其余数位(步骤7.6-7.7)。实施例将X0的值移m位,并且其余数被移64位,其中最左边的数位值与X0相加(步骤7.8-7.10)。因此,在一个实施例中,同时操作向量和标量指令。例如,在使用Intel®乱序(out-of-order)架构的实施例中发生这种情况。
关于图9,两个瓶颈可存在于该实现方式中:(1)向量(数位)跨越几个寄存器的昂贵右移;和(2)y0的计算(在图7的步骤7.4中)(其后面是广播至SIMD寄存器)和步骤7.7中的乘法能够开始的时间点之间的等待时间。
为了解决这些瓶颈,实施例使用下面的优化。替代于右移X,实施例使值Aq…A1和Mq…M1保存在存储器中,并且使用具有合适的地址偏移的“未对齐”VPMULUDQ运算。为了正确地实现这一点,以零填充操作数A和M。对于第二瓶颈,实施例先行使用ALU指令计算一些数位以实现ALU和SIMD单元的更好的流水线操作。
这些优化被示意性地图示在图11中。图10包括使用向量和标量指令的组合的优化的NRMSQR代码。
在一个实施例中,模取幂包括NRMM,多数NRMM具有形式NRMM(A,A)。因此实施例加入针对这种情况的专用优化,并且将其称为NRMSQR。与运算交错的NRMM不同,函数NRMSQR(A) 开始于计算A2,后面跟随有蒙哥马利约分。实施例采用大数平方方法,该方法包括:创建A的拷贝,左移1位。在冗余表示中,这个运算包括每个元素左移1位。随后,A的元素和“A<<1”相乘。
对于图11,正方形示出ALU寄存器中的值,并且矩形示出SIMD寄存器中的值。实施例将A的4个低数位加载到GPR中并且将它们保存在那里。在SIMD单元中处理其余数位。所有数位乘以bi,一些在ALU中,一些在SIMD中。从x0计算Y0。M乘以y0并且累加到x中。现在,与图9中不同,实施例不将整个向量右移64位,而是替代地仅将x0右移m位,并且将它与x1相加。现在,有效地,x1变为x0,并且xi+1变为xi
然后,实施例继续以相同方式在ALU中处理三个数位并且在SIMD单元中处理其余数位。再一次,省去向量的移位,并且x1被移位并且与x2相加。现在,x2有效地是x0。实施例继续进行,直至它正好省去向量的4次移64位。4次移64位是1次移256位,并且256是AVX2中的SIMD寄存器的大小。实施例因此根本不必移位,而是移动寄存器(或重新命名它们)。最后的值与以前相同,但实施例省去昂贵的SIMD移位。此外,提高ALU和SIMD之间的负荷平衡,并且两个单元都保持繁忙。
因此,实施例包括一种用于计算模取幂并且加速处理器上的RSA的软件执行的方法。实施例使用SIMD架构以及标量和向量运算之间的平衡。实施例获得显著性能增益。使用以上向量化方法之一的实施例是可调整的,并且能够获得来自广泛SIMD架构的性能。此外,实施例可使用例如AVX/SSE架构和类似物。对于具有AVX/SSE指令和32位ALU单元的处理器(例如,Atom®处理器),这实现显著性能增益。
尽管以上实施例已解决模取幂和基于RSA的加密术,但其它实施例不限于此并且可提出不同的技术和协议。例如,其它实施例可被与基于模取幂的方案(诸如,Diffie-Hellman密钥交换和数字签名算法(DSA)实施例)一起使用。再其它实施例可被用于素域上的椭圆曲线加密术(ECC)等。
如上面提到的,实施例适合于1024位模取幂,并且需要比传统实现方式(例如,OpenSSL 1.0.1实现方式)少得多的指令。这可“加快”RSA2048执行以及其它加密协议的执行。然而,实施例适合于任何大小,并且甚至对于更大的大小变得更好。因此,作为例子提供1024位取幂,仅因为它可被用于RSA2048。
实施例可被实现在许多不同***类型中。现在参照图12,示出根据本发明的实施例的***的方框图,该***可被建立在例如膝上型计算机、笔记本、超级本、智能电话、个人数字助手、桌上型计算机、移动计算装置等中。多处理器***1200是点对点互连***,并且包括经点对点互连1250耦合的第一处理器1270和第二处理器1280。处理器1270和1280中的每一个可以是多核处理器。术语“处理器”可表示处理来自寄存器和/或存储器的电子数据以将该电子数据变换成可被存储在寄存器和/或存储器中的其它电子数据的任何装置或装置的部分。第一处理器1270可包括存储控制器集线器(MCH)和点对点(P-P)接口。类似地,第二处理器1280可包括MCH和P-P接口。MCH可将处理器耦合到相应存储器(即,存储器1232和存储器1234),该存储器可以是在本地附接到相应处理器的主存储器(例如,动态随机存取存储器(DRAM))的部分。第一处理器1270和第二处理器1280可分别经P-P互连耦合到芯片集1290。芯片集1290可包括P-P接口。另外,芯片集1290可经接口被耦合到第一总线1216。各种输入/输出(I/O)装置1214以及总线桥1218可被耦合到第一总线1216,总线桥1218将第一总线1216耦合到第二总线1220。各种装置可被耦合到第二总线1220,包括例如键盘/鼠标1222、通信装置1226和数据存储单元1228(诸如,盘驱动器或其它大容量存储装置),在一个实施例中,数据存储单元1228可包括代码1230。代码可被包括在一个或多个存储器中,所述一个或多个存储器包括存储器1228、1232、1234、经网络耦合到***1200的存储器等。另外,音频I/O 1224可被耦合到第二总线1220。
实施例可被实现成代码并且可被存储在其上存储有指令的至少一个存储介质上,所述指令能够被用于对***进行编程以执行所述指令。(一个或多个)存储介质可包括但不限于任何类型的盘,包括:软盘、光盘、固态驱动器(SSD)、压缩盘只读存储器(CD-ROM)、压缩盘可重写(CD-RW)和磁光盘、半导体装置(诸如,只读存储器(ROM)、随机存取存储器(RAM)(诸如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM))、磁卡或光学卡或者适合于存储电子指令的任何其它类型的介质。
可在这里参照数据(诸如,指令、函数、过程、数据结构、应用程序、结构设置、代码等)描述本发明的实施例。如这里更详细描述的,当由机器访问数据时,机器可通过下述操作来做出响应:执行任务,定义抽象数据类型,建立低级别硬件关联,和/或执行其它操作。数据可被存储在易失性和/或非易失性数据存储装置中。术语“代码”或“程序”覆盖宽范围的组件和构造(包括应用、驱动器、过程、例程、方法、模块和子程序),并且可表示任何指令的集合,当所述指令由处理***执行时,执行预期的一个或多个操作。另外,替代实施例可包括使用比全部公开的操作少的操作的过程、使用另外的操作的过程、以不同顺序使用相同操作的过程和其中这里公开的个体操作被组合、细分或以其它方式改变的过程。在一个实施例中,术语“控制逻辑”的使用包括诸如晶体管、寄存器的硬件或者诸如可编程逻辑装置件 (1235) 的其它硬件。然而,在另一实施例中,逻辑还包括软件或代码(1231)。这种逻辑可与硬件结合,诸如固件或微码(1236)。处理器或控制器可包括旨在表示本领域已知的广泛的各种控制逻辑中的任何的控制逻辑,并且如此可被适宜地实现为微处理器、微控制器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、可编程逻辑装置(PLD)等。
实施例包括一种方法,所述方法包括:将第一和第二整数从第一格式转换成第二格式;其中与在第一格式中相比,第一和第二整数在第二格式中各自均具有更多数位,并且与在第一格式中相比,在第二格式中的每个数位在位大小方面更小;使用标量和向量指令两者执行第一和第二转换的数位之间的算术运算;以及基于算术运算确定模取幂(ME)。实施例包括:基于ME确定加密值。实施例包括所述方法,其中第一格式中的数位被存储在相等大小的第一容器中,该方法包括将第二格式中的数位存储在相等大小的第二容器中,第二容器在大小方面等于第一容器。实施例包括:将使用向量指令产生的进位值存储在第二容器之一的未使用部分中。在实施例中,第一格式包括第一基数值,第二格式包括第二基数值,第二基数值高于第一基数值,并且第二格式是冗余的。在实施例中,使用标量指令的算术运算包括执行算术和逻辑(ALU)指令,并且使用向量指令执行算术运算包括同时执行单指令多数据(SIMD)指令。在实施例中,使用向量指令执行算术运算包括同时对多个第二格式中的数位执行算术运算。在实施例中,第一格式中的第一整数具有第一总数的数位,第一总数的数位扩展到最高有效数位和最低有效数位并且包括最高有效数位和最低有效数位,第二格式中的第一整数具有第二总数的数位,第二总数的数位扩展到最高有效数位和最低有效数位并且包括最高有效数位和最低有效数位,并且第二总数的数位超过第一总数的数位。实施例包括:确定使用向量指令产生的第一和第二中间乘积;针对第一中间乘积确定第一进位值;以及独立于第一进位值对第一和第二中间乘积求和。实施例包括:确定使用向量指令产生的第一和第二中间乘积;分别针对第一和第二中间乘积确定第一和第二进位值;对第一和第二中间乘积求和以确定中间乘积值之和;以及对第一和第二进位值求和以确定进位值之和。实施例包括:基于中间乘积值之和和进位值之和确定累加值;以及以第一格式对累加值进行格式化。实施例包括:使用标量指令对第一和第二转换的数位的最低有效数位执行算术运算;以及使用向量指令对第一和第二转换的数位的最高有效数位执行算术运算。实施例包括至少一个机器可读介质,所述至少一个机器可读介质包括多个指令,响应于在计算装置上执行所述多个指令,使计算装置执行根据这个段落的以上实施例中的任何一个的方法。实施例包括一种通信装置,所述通信装置被布置为执行根据这个段落的以上实施例中的任何一个的方法。实施例包括一种设备,所述设备包括用于执行这个段落的以上实施例中的任何一个的装置。
实施例包括一种设备,所述设备包括:存储器;至少一个处理器,耦合到存储器以执行操作,所述操作包括:将第一和第二整数从第一格式转换成第二格式;其中与在第一格式中相比,第一和第二整数中的各自均在第二格式中具有更多数位,并且与在第一格式中相比,在第二格式中的每个数位在位大小方面更小;使用标量和向量指令二者来执行第一和第二转换的数位之间的算术运算;以及基于算术运算确定模取幂(ME)。在实施例中,第一格式中的数位被存储在相等大小的第一容器中,所述操作包括:将第二格式中的数位存储在相等大小的第二容器中,第二容器在大小方面等于第一容器;以及将使用向量指令产生的进位值存储在第二容器之一的未使用部分中。在实施例中,使用向量指令执行算术运算包括同时对第二格式中的多个数位执行算术运算。实施例包括:确定使用向量指令产生的第一和第二中间乘积;为第一中间乘积确定第一进位值;以及独立于第一进位值对第一和第二中间乘积求和。实施例包括:使用标量指令对第一和第二转换的数位的最低有效数位执行算术运算;以及使用向量指令对第一和第二转换的数位的最高有效数位执行算术运算。
尽管已参照有限数量的实施例描述了本发明,但本领域技术人员将会从其理解许多修改和变化。所附权利要求意图覆盖落在本发明的真正精神和范围内的所有这种修改和变化。

Claims (18)

1.一种由至少一个处理器执行的方法,包括:
将第一和第二整数从第一格式转换成第二格式;其中与在第一格式中相比,第一和第二整数各自在第二格式中具有更多数位,并且与在第一格式中相比,在第二格式中的每个数位在位大小方面更小;
使用标量和向量指令二者执行第一和第二转换的数位之间的算术运算,其中使用标量和向量指令执行所述算术运算包括:同时对第二格式中的多个数位执行算术运算并且同时执行所述标量和向量指令;以及
基于算术运算确定模取幂(ME)。
2.如权利要求1所述的方法,包括:基于ME确定加密值。
3.如权利要求1所述的方法,其中第一格式中的所述数位被存储在相等大小的第一容器中,该方法包括将第二格式中的所述数位存储在相等大小的第二容器中,第二容器在大小方面等于第一容器。
4.如权利要求3所述的方法,包括:将使用向量指令产生的进位值存储在第二容器之一的未使用部分中。
5.如权利要求3所述的方法,其中所述第一格式包括第一基数值,第二格式包括第二基数值,第二基数值高于第一基数值,并且第二格式是冗余的。
6.如权利要求1所述的方法,其中使用标量指令执行所述算术运算包括执行算术和逻辑(ALU)指令,并且使用向量指令执行所述算术运算包括同时执行单指令多数据(SIMD)指令。
7.如权利要求1所述的方法,其中第一格式中的第一整数具有第一总数的数位,第一总数的数位扩展到最高有效数位和最低有效数位并且包括最高有效数位和最低有效数位,第二格式中的第一整数具有第二总数的数位,第二总数的数位扩展到最高有效数位和最低有效数位并且包括最高有效数位和最低有效数位,并且第二总数的数位超过第一总数的数位。
8.如权利要求1所述的方法,包括:
确定使用向量指令产生的第一和第二中间乘积;
针对第一中间乘积确定第一进位值;以及
独立于第一进位值对第一和第二中间乘积求和。
9.如权利要求1所述的方法,包括:
确定使用向量指令产生的第一和第二中间乘积;
针对第一和第二中间乘积分别确定第一和第二进位值;
对第一和第二中间乘积求和以确定中间乘积值之和;以及
对第一和第二进位值求和以确定进位值之和。
10.如权利要求9所述的方法,包括:
基于中间乘积值之和和进位值之和确定累加值;以及
以第一格式对累加值进行格式化。
11.如权利要求1所述的方法,包括:
使用所述标量指令对第一和第二转换的数位的最低有效数位执行算术运算;以及
使用所述向量指令对第一和第二转换的数位的最高有效数位执行算术运算。
12.至少一个机器可读介质,包括多个指令,响应于在计算装置上执行所述多个指令,使计算装置执行如权利要求1至11中任何一项所述的方法。
13.一种通信装置,被布置为执行如权利要求1至11中任何一项所述的方法。
14.一种用于执行算术运算的设备,包括用于执行如权利要求1至11中任何一项的装置。
15.一种用于执行算术运算的设备,包括:
存储器;
至少一个处理器,耦合到存储器以执行操作,所述操作包括:
将第一和第二整数从第一格式转换成第二格式;其中与在第一格式中相比,第一和第二整数各自在第二格式中具有更多数位,并且与在第一格式中相比,在第二格式中的每个数位在位大小方面更小;
使用标量和向量指令二者执行第一和第二转换的数位之间的算术运算,其中使用向量指令执行所述算术运算包括同时对第二格式中的多个数位执行算术运算;以及
基于所述算术运算确定模取幂(ME)。
16.如权利要求15所述的设备,其中第一格式中的所述数位被存储在相等大小的第一容器中,并且所述操作包括:
将第二格式中的所述数位存储在相等大小的第二容器中,第二容器在大小方面等于第一容器;以及
将使用向量指令产生的进位值存储在第二容器之一的未使用部分中。
17.如权利要求15所述的设备,其中所述操作包括:
确定使用向量指令产生的第一和第二中间乘积;
针对第一中间乘积确定第一进位值;以及
独立于第一进位值对第一和第二中间乘积求和。
18.如权利要求15所述的设备,其中所述操作包括:
使用标量指令对第一和第二转换的数位的最低有效数位执行算术运算;以及
使用向量指令对第一和第二转换的数位的最高有效数位执行算术运算。
CN201280072786.7A 2012-05-30 2012-05-30 基于向量和标量的模取幂 Expired - Fee Related CN104254833B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2012/040053 WO2013180712A1 (en) 2012-05-30 2012-05-30 Vector and scalar based modular exponentiation

Publications (2)

Publication Number Publication Date
CN104254833A CN104254833A (zh) 2014-12-31
CN104254833B true CN104254833B (zh) 2018-01-30

Family

ID=49673760

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201280072786.7A Expired - Fee Related CN104254833B (zh) 2012-05-30 2012-05-30 基于向量和标量的模取幂

Country Status (4)

Country Link
US (1) US9268564B2 (zh)
EP (1) EP2856303B1 (zh)
CN (1) CN104254833B (zh)
WO (1) WO2013180712A1 (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013180712A1 (en) * 2012-05-30 2013-12-05 Intel Corporation Vector and scalar based modular exponentiation
US9355068B2 (en) 2012-06-29 2016-05-31 Intel Corporation Vector multiplication with operand base system conversion and re-conversion
US10095516B2 (en) 2012-06-29 2018-10-09 Intel Corporation Vector multiplication with accumulation in large register space
US20160179470A1 (en) * 2014-12-23 2016-06-23 Shay Gueron Method and apparatus for performing big-integer arithmetic operations
EP3264260B1 (en) * 2016-06-30 2019-10-16 Nxp B.V. Lossy arithmetic
CN109710308B (zh) * 2017-10-25 2023-03-31 阿里巴巴集团控股有限公司 任务的处理方法、装置和***
US10970078B2 (en) 2018-04-05 2021-04-06 Apple Inc. Computation engine with upsize/interleave and downsize/deinterleave options
CN109062604B (zh) * 2018-06-26 2021-07-23 飞腾技术(长沙)有限公司 一种面向标量和向量指令混合执行的发射方法及装置
US10831488B1 (en) 2018-08-20 2020-11-10 Apple Inc. Computation engine with extract instructions to minimize memory access
WO2020231353A1 (en) * 2019-05-14 2020-11-19 Sabanci Universitesi A low-latency redundant multiplier and method for the same
US11222554B2 (en) * 2019-08-16 2022-01-11 Informatica Llc Method, apparatus, and computer-readable medium for format preserving encryption of a numerical value

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5838984A (en) * 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
US6202077B1 (en) * 1998-02-24 2001-03-13 Motorola, Inc. SIMD data processing extended precision arithmetic operand format
CN102012802A (zh) * 2010-11-25 2011-04-13 中国人民解放军国防科学技术大学 面向向量处理器数据交换的方法及装置

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6272512B1 (en) * 1998-10-12 2001-08-07 Intel Corporation Data manipulation instruction for enhancing value and efficiency of complex arithmetic
US6292886B1 (en) * 1998-10-12 2001-09-18 Intel Corporation Scalar hardware for performing SIMD operations
US7532720B2 (en) * 2003-10-15 2009-05-12 Microsoft Corporation Utilizing SIMD instructions within montgomery multiplication
US20060059221A1 (en) 2004-09-10 2006-03-16 Cavium Networks Multiply instructions for modular exponentiation
US8670557B2 (en) * 2007-09-10 2014-03-11 Spansion Llc Cryptographic system with modular randomization of exponentiation
CN104115115B (zh) * 2011-12-19 2017-06-13 英特尔公司 用于多精度算术的simd整数乘法累加指令
US11080045B2 (en) * 2011-12-22 2021-08-03 Intel Corporation Addition instructions with independent carry chains
WO2013180712A1 (en) * 2012-05-30 2013-12-05 Intel Corporation Vector and scalar based modular exponentiation
US20130332707A1 (en) * 2012-06-07 2013-12-12 Intel Corporation Speed up big-number multiplication using single instruction multiple data (simd) architectures
US9292297B2 (en) * 2012-09-14 2016-03-22 Intel Corporation Method and apparatus to process 4-operand SIMD integer multiply-accumulate instruction

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5838984A (en) * 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
US6202077B1 (en) * 1998-02-24 2001-03-13 Motorola, Inc. SIMD data processing extended precision arithmetic operand format
CN102012802A (zh) * 2010-11-25 2011-04-13 中国人民解放军国防科学技术大学 面向向量处理器数据交换的方法及装置

Also Published As

Publication number Publication date
US9268564B2 (en) 2016-02-23
EP2856303A1 (en) 2015-04-08
CN104254833A (zh) 2014-12-31
EP2856303B1 (en) 2017-08-02
US20140229716A1 (en) 2014-08-14
WO2013180712A1 (en) 2013-12-05
EP2856303A4 (en) 2016-03-02

Similar Documents

Publication Publication Date Title
CN104254833B (zh) 基于向量和标量的模取幂
JP3636740B2 (ja) モジュラ・乗算を遂行するための超小形電子系装置、および超小形電子系装置を使用する方法
US9753695B2 (en) Datapath circuit for digital signal processors
EP1293891B2 (en) Arithmetic processor accomodating different finite field size
US7805479B2 (en) Scalable, faster method and apparatus for montgomery multiplication
US8898215B2 (en) High-radix multiplier-divider
US20230254145A1 (en) System and method to improve efficiency in multiplicationladder-based cryptographic operations
US6917956B2 (en) Apparatus and method for efficient modular exponentiation
KR101925868B1 (ko) 모듈러 계산 유닛 및 그것을 포함하는 보안 시스템
US20060184594A1 (en) Data processing apparatus and method for determining an initial estimate of a result value of a reciprocal operation
US20090006509A1 (en) High-radix multiplier-divider
JP4621162B2 (ja) 有限可換群演算方法、装置およびそのプログラム
Cardamone et al. Field‐programmable gate arrays and quantum Monte Carlo: Power efficient coprocessing for scalable high‐performance computing
US20140019725A1 (en) Method for fast large-integer arithmetic on ia processors
US7167885B2 (en) Emod a fast modulus calculation for computer systems
US20220076594A1 (en) Efficient squaring with loop equalization in arithmetic logic units
US9612800B2 (en) Implementing a square root operation in a computer system
Rodriguez-Flores et al. A compact FPGA-based microcoded coprocessor for exponentiation in asymmetric encryption
De Dinechin et al. Reconfigurable Arithmetic for High-Performance Computing
Shigemoto et al. Accelerating montgomery modulo multiplication for redundant radix-64k number system on the FPGA using dual-port block RAMs
Tenca Variable Long-Precision Arithmetic (VLPA) for Reconfigurable Coprocessor Architectures
US6256656B1 (en) Apparatus and method for extending computational precision of a computer system having a modular arithmetic processing unit
US20220060315A1 (en) Sign-based partial reduction of modular operations in arithmetic logic units
Andrzejczak An Improved Architecture of a Hardware Accelerator for Factoring Integers with Elliptic Curve Method
de Dinechin et al. Fixed-Point Division

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20180130

Termination date: 20210530

CF01 Termination of patent right due to non-payment of annual fee