CN107004084B - 用于加密操作的乘法掩码 - Google Patents

用于加密操作的乘法掩码 Download PDF

Info

Publication number
CN107004084B
CN107004084B CN201580066084.1A CN201580066084A CN107004084B CN 107004084 B CN107004084 B CN 107004084B CN 201580066084 A CN201580066084 A CN 201580066084A CN 107004084 B CN107004084 B CN 107004084B
Authority
CN
China
Prior art keywords
value
input
mask
modulo
bit
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
CN201580066084.1A
Other languages
English (en)
Other versions
CN107004084A (zh
Inventor
M·腾斯托尔
F·杜尔瓦奥克斯
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.)
Cryptography Research Inc
Original Assignee
Cryptography Research Inc
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 Cryptography Research Inc filed Critical Cryptography Research Inc
Publication of CN107004084A publication Critical patent/CN107004084A/zh
Application granted granted Critical
Publication of CN107004084B publication Critical patent/CN107004084B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • H04L9/003Countermeasures against attacks on cryptographic mechanisms for power analysis, e.g. differential power analysis [DPA] or simple power analysis [SPA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/04Masking or blinding
    • H04L2209/046Masking or blinding of operations, operands or results of the operations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/08Randomization, e.g. dummy operations or using noise

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Storage Device Security (AREA)
  • Noise Elimination (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

可以接收与加密操作的输入相对应的值。该值可以通过将该值与以质数取模后的第一数相乘来被掩码。随后,可以对掩码值执行加密操作。

Description

用于加密操作的乘法掩码
附图说明
从下文给出的具体实施方式和本公开的各种实现方式的附图会更全面地理解本公开。
图1图示了根据一些实施例的使用用于加密操作的乘法掩码部件的示例设备。
图2是按照本公开的一些实施例的执行用于加密操作的乘法掩码的示例方法的流程图。
图3是根据一些实施例的提供用于加密操作的乘法掩码的乘法掩码部件的框图。
图4是根据一些实施例的执行与加密操作相关联的输入的乘法掩码的示例方法的流程图。
图5是根据一些实施例的执行输入的乘法掩码以允许与加密操作相关联的逐位操作的示例方法的流程图。
图6是根据一些实施例的使用具有乘法掩码的输入执行加密操作中的逻辑XOR操作的示例方法的流程图。
图7是根据一些实施例的使用具有乘法掩码的输入执行加密操作中的逻辑AND操作的示例方法的流程图。
图8图示了其中本公开的一些实施例可以操作的计算机***的实施例的框图。
具体实施方式
本公开的各方面涉及用于加密操作的乘法掩码。集成电路可以执行可能导致集成电路对侧信道攻击的易感性的加密操作,其中,集成电路的攻击者可以在执行加密操作时获得信息。侧信道攻击的示例包括但不限于差分功率分析(DPA),其中,寻求获得加密操作中使用的密钥的攻击者可以研究在执行加密操作时集成电路的功耗差异。攻击者可能是未经授权的实体,其可以通过分析一段时间内的集成电路的功耗测量值来获得加密操作的输入。因而,当发送者经由加密操作通过编码明文来向接收器传送密文时,攻击者可以通过观察在执行加密操作来将明文编码成密文时集成电路的功耗来取回用于将明文加密为密文的密钥。例如,在集成电路执行加密操作时,攻击者可以发现用于加密明文的密码(例如,秘密或私有)密钥。
掩码可以用于使用随机数据模糊或隐藏加密操作的输入,然后加密操作可以用掩码输入来执行。当集成电路的攻击者观察到执行加密操作时的集成电路的功耗时,这种掩码可以使得加密操作的中间状态与随机数据不可区分。例如,在加密操作将明文编码成密文之前,明文可以使用随机值进行异或(XOR)操作。然而,明文和随机值之间的XOR操作可能导致一些DPA泄漏(例如,攻击者从可观察到的功耗差异中标识信息),使得攻击者仍然可以获得在加密操作中使用的秘密密钥。
乘法掩码可以应用于加密操作的明文输入。例如,加密操作的明文输入可以乘以随机值。然而,执行使用乘法掩码的加密操作的集成电路仍然可能易于受到观察加密操作的中间状态值为零的攻击者的DPA攻击的影响。因此,如果明文输入乘以随机值零,则所得到的零值可能导致DPA泄漏。
因此,可以在集成电路中实现避免与零数据值相乘的加密操作的乘法掩码,以防止允许攻击者取回对加密操作的输入的DPA泄漏。在一些实施例中,这种乘法掩码可以将明文输入的位乘以基于以质数取模后的随机数相乘的值的加密操作。使用模乘法提供了对加密操作的输入的乘法掩码,其可以防止为掩码输入生成零数据值,并且因此在它正在通过集成电路执行时,可以防止与加密操作相关联的DPA泄漏。
图1图示了包括乘法掩码部件的示例设备。一般而言,设备100可以包括集成电路,其与乘法掩码部件111、存储器112和各种设备部件113相关联。集成电路的乘法掩码部件111可以将掩码应用于输入(例如,明文),以在由设备部件113执行的加密操作中使用。
如图1所示,设备100可以包括乘法掩码部件111。在一些实施例中,乘法掩码部件111可以将掩码应用输入或于输入的各部分。例如,乘法掩码部件111可以接收输入(例如,从存储器112),并且可以将输入或输入的位与以质数取模后的随机数相乘的结果相乘。设备部件113随后可以在加密操作中使用掩码输入。这种加密操作的示例包括但不限于:生成消息的签名,其中,消息可以用于允许访问设备100的特定功能性或允许设备100执行特定操作。因而,乘法掩码部件111可以修改输入以生成对设备部件113的掩码输入。此外,设备部件113的部件可以基于掩码输入来执行加密操作,以生成消息的签名或可以用于确定是否可以允许与签名相对应的消息的发送者访问设备100(例如,各种设备部件113)的功能性的其他信息,或者是否可以允许设备100响应于消息而执行操作。
与设备相关联的功能性或操作的示例包括但不限于访问设备的某些硬件能力(例如,启用或禁用设备100的某些硬件能力)、访问设备的调试或诊断状态、以及对与设备相关联的存储器的写入、调整设备100的性能设置或其他值、加密密钥以供设备100使用、修改设备100的存储器112等等。
当来自发送者的消息伴随着由加密操作生成的有效签名时,可以允许消息的发送者访问设备100的功能性或操作。这种加密操作的示例包括但不限于:生成与高级加密标准(AES)和数据加密标准(DES)算法相关联的签名,其中,签名在公共-私人密钥密码***中使用。在一些实施例中,加密操作可以使用掩码输入来生成签名。在一些实施例中,掩码输入可以对应于具有附加值(例如,为‘1’的值)的输入的一部分(例如,输入的一半)与以质数取模后的随机数相乘的结果相乘。在相同实施例或备选实施例中,随机数可以是被除数,质数可以是模数操作的除数。
图2是执行加密操作的乘法掩码的示例方法200的流程图。一般而言,方法200可以通过处理逻辑来执行,该处理逻辑可以包括硬件(例如,处理设备、电路、专用逻辑、可编程逻辑、微代码、设备的硬件、集成电路等)、软件(例如,在处理设备上运行或执行的指令)或其组合。在一些实施例中,方法200可以通过图1的乘法掩码部件111来执行。
如图2所示,方法200可以从接收输入的处理逻辑开始(框210)。例如,可以接收要被编码为密文的明文。处理逻辑还可以通过将输入的各部分乘以基于与以质数取模后的随机数的相乘的值来生成掩码输入(框220)。例如,输入可以乘以r mod p的结果,其中,r是随机数,而p是质数。在一些实施例中,如关于图4进一步所描述的,输入(例如,明文)可以被划分为前半部分和后半部分,并且可以将乘法掩码应用于每个半部分。例如,已经接收到的输入的半部分可以被加上一值‘1’,并且结果可以乘以质数取模后的随机数。在备选实施例中,乘法掩码可以应用于结合图5所描述的输入的每个位。例如,每个位的表示可以已经改变并且每个位写入单独的计算机字,其中,该位然后乘以以质数取模后的随机数(例如,这种表示的改变的一个示例是将位的值映射到正随机数或与随机数相同的绝对值的负随机数)。尽管本文中描述了输入的半部分,但是输入可以被划分为或分割为任何数目个部分。处理逻辑还可以基于掩码输入来执行加密操作(框230)。在一些实施例中,加密操作可以通过使用经修改的逻辑操作集合来执行。例如,掩码输入可以与要被编码为密文的明文相对应。在一些实施例中,密文可以与签名和/或秘密密钥相对应。
图3是提供加密操作的乘法掩码的乘法掩码部件300的框图。一般而言,乘法掩码部件300可以与图1的乘法掩码部件111相对应。乘法掩码部件300可以通过处理逻辑来实现或者在处理逻辑中来实现,该处理逻辑可以包括硬件(例如,处理设备、电路、专用逻辑、可编程逻辑、微代码、集成电路、设备的硬件等)、软件(例如,在处理设备上运行或执行的指令)或其组合。在一些实施例中,乘法掩码部件300可以包括输入分割模块310、随机数生成器模块320、加法操作模块330、模数操作模块340、乘法模块350以及加密操作模块360。在备选实施例中,子模块中的一个或多个子模块的功能性可以被组合或分割。
如图3所示,乘法掩码部件300可以包括输入分割模块310。在一些实施例中,输入分割模块310可以接收输入并且可以将输入划分为部分。例如,输入可以与明文相对应,并且输入分割模块310可以将明文输入分割为或划分为第一半部分和第二半部分。在一些实施例中,输入可以与总共八个位相对应,并且输入分割模块310可以将八位输入分割为或划分为四位的第一半部分和四位的第二半部分。可替代地,如下面进一步详细所描述的,输入分割模块310可以单独地处理输入的每个位。
随机数生成器模块320可以生成随机数。在一些实施例中,由随机数生成器模块320生成的随机数可以在应用到输入或输入的部分的乘法掩码中使用。例如,所生成的随机数可以用于掩码输入的半部分,或者可以用于掩码输入的每个位。在相同实施例或备选实施例中,随机数生成器模块320可以生成多个随机数。例如,可以生成第一随机数,以在第一模数操作中使用,其中,质数是除数,并且还可以生成第二随机数以在第二模数操作中使用,其中,数是第二模数操作的除数,该数是质数的倍数。
加法操作模块330可以对输入或输入的一部分执行加法操作。例如,加法操作模块330可以将值‘1’加到输入的每个半部分。因此,输入可以划分为第一半部分和第二半部分,并且可以将值‘1’加到第一半部分和第二半部分中的每个半部分。在一些实施例中,当输入被分割为半部分(例如,与AES密码算法相对应)时,可以应用这种加法操作,并且当输入被分割为单独位时(例如,与逐位DES密码算法相对应),不能应用这种加法操作。
模数操作模块340可以执行模数操作(还被称为模数约减),以在应用于输入或输入的一部分的乘法掩码中使用。在一些实施例中,模数操作可以是算术操作,其可以找出一个数除以另一个数的余数。例如,模数操作可以在将第一数除以第二数之后返回余数。第一数a可以是模数操作中的被除数,第二数n可以是模数操作中的除数。这种关系可以被称为模n(或缩写为mod n)。作为示例,因为17除以3的商为5并且余数为2,所以与17mod 3相对应的模数操作可以返回值2。此外,因为9除以3的商为3并且余数为0,与9mod 3相对应的模数操作可以返回值0。因此,当被除数是除数的倍数时,模数操作可以返回值0(例如,因为存在余数为0),但是如果被除数不是除数的倍数,则模数操作可能返回非零值。此外,如果除数是质数(例如,除1以外没有正除数的大于1的数),并且被除数值不为0,以及在1到质数之间的范围之间,则因为质数本身不具有除值1之外的任何其他正除数,所以模数操作可能永远不会返回值零。
乘法操作模块350可以在输入或输入的一部分与模数操作的结果之间执行乘法操作。例如,如关于图4进一步所描述的,由于模数操作,所以乘法操作模块350可以将输入的半部分与加上‘1’后的值相乘,该模数操作基于随机数和质数。
加密操作模块360可以对掩码输入执行加密操作。例如,加密操作可以基于但不限于AES或DES算法来将明文输入加密为密文。
图4是执行与加密操作相关联的输入的乘法掩码的示例方法400的流程图。一般而言,方法400可以通过处理逻辑执行,该处理逻辑可以包括硬件(例如,处理设备、电路、专用逻辑、可编程逻辑、微代码、设备的硬件、集成电路等)、软件(例如,在处理设备上运行或执行的指令)或其组合。在一些实施例中,方法400可以通过图1的乘法掩码部件111或图3的乘法掩码部件300来执行。
方法400可以提供不基于逐位操作(例如,基于AES的加密操作)的加密操作的乘法掩码。方法400可以从接收输入的处理逻辑开始(框410)。例如,可以接收对应于与设备的操作相关联的签名的明文输入。处理逻辑还可以将输入分割为第一半部分和第二半部分(框420)。例如,所接收的输入可以是与AES加密操作相对应的八位数据。因此,处理逻辑可以将八位输入划分为两个四位半部分(例如,四位的第一半部分和四位的第二半部分)。此外,处理逻辑可以将值‘1’加到第一半部分和第二半部分中的每个半部分(框430)。处理逻辑可以基于以质数取模后的随机数的结果来附加地计算每个半部分的操作(框440)。例如,模数操作的余数可以乘以已经增加值‘1’的每个半部分,其中,质数是除数,而随机数是被除数。处理逻辑还可以计算第一半部分和第二半部分中的每个上的操作以生成第一半部分结果和第二半部分结果(框450)。这样的第二操作可以产生值零,并且可以用于提供附加的功耗,而不会对第一所计算的操作的值产生影响。此外,处理逻辑可以组合第一半部分结果和第二半部分结果(框460)。
在一些实施例中,方法400可能需要诸如逐位XOR操作之类的操作的计算。这样的操作可以采用允许将计算机字映射到具有小位长度的一系列字(例如,将字节映射到两个四位字)的预计算表的形式。还可以生成预计算表以将两个四位字映射到表示两个输入值的XOR的四位字。然后,其他预计算表可以用于将所得到的四位字映射到计算机字(例如,将两个四位字映射到字节)。在一些实施例中,这些表的所有输入值和输出值可以用如本文中所描述的乘法掩码技术来掩码。
图5是执行输入的乘法掩码以允许与加密操作相关联的逐位操作的示例方法500的流程图。一般而言,方法500可以通过处理逻辑执行,该处理逻辑可以包括硬件(例如,处理设备、电路、专用逻辑、可编程逻辑、微代码、设备硬件、集成电路等)、软件(例如,在处理设备上运行或执行的指令)或其组合。在一些实施例中,方法500可以通过图1的乘法掩码部件111或图3的乘法掩码300来执行。
当加密算法(例如,DES)基于逐位操作时,可以使用方法500。方法500可以用于将位值从‘0’或‘1’变换到或掩码到与正数和负数(例如,1和-1)相对应的值。从‘0’到‘1’值和从‘1’到‘-1’的变换可以允许使用逐位操作(例如,XOR)以在加密操作中使用掩码输入数据。在一些实施例中,方法500可以基于以下等式来执行乘法掩码:
xo=(R1mod p)+R2·p mod p2
x1=(-R1mod p)+R2·p mod p2
在一些实施例中,x0可以是指用于当该位值为‘0’时为输入位提供乘法掩码的等式,并且xi可以是指用于当位值为‘1’时为输入位提供乘法掩码的等式。此外,R1可以表示第一随机数,R2可以表示第二随机数,p可以表示质数,并且p2可以表示质数p的倍数。在一些实施例中,随机数R1和/或-R1可以小于质数p的值(例如,值R1在1到p-1的范围内)。此外,在一些实施例中,R1和-R1的绝对值相同。附加地,如先前关于图4所描述的,R2与p的相乘可以产生与p2相同的值,或者可以产生p2的倍数,使得R2和p与p2的相乘之间的模数操作产生值为0。
如图5所示,方法500可以开始于处理逻辑接收加密操作的输入的位(框510)。例如,输入的位可以是与要由密码算法(例如,DES)编码为密文的输入(例如,明文)相对应的多个位中的一个位。处理逻辑还可以确定所接收的位值是否为‘0’(框520)。在520中测试的值可以被设置为‘1’或者可以被随机地选择为‘0’或‘1’。例如,处理逻辑可以标识输入的位值是为‘0’还是为‘1’。如果该位值为‘0’,则处理逻辑可以计算以质数取模后的正随机数的操作(框530)。此外,处理逻辑可以随后将以质数的固定倍数取模后的质数的随机倍数加到第一计算值(框540)。附加地,处理逻辑可以计算值分配给值为‘0’的位(框550)。例如,可以将位的值从值‘0’转换或替换为计算结果。然而,如果处理逻辑确定该位值不是‘0’,取而代之为‘1’,则处理逻辑可以计算以质数取模后的负随机数的操作(与正随机数相比,如果位值为‘0’)(框560)。类似地,处理逻辑可以随后将以质数的固定倍数取模后的质数的随机倍数加到计算(框570)。附加地,处理逻辑可以将该计算值分配给值为‘1’值的位(框580)。例如,该位的值可以被从值‘1’变换或替换为计算结果(例如,负值)。
如上文所描述的,可以将负值(例如,基于使用负随机数的计算)分配给位值‘1’并且正值(例如,基于使用正随机数的计算)被分配给位值‘0’。在备选实施例中,可以将负值分配给位值‘0’,并且将正值分配给位值‘1’。此外,处理逻辑可以在值‘0’和‘1’的第一变换与值‘0’和‘1’的第二变换之间随机选择。例如,在接收到输入之后,处理逻辑可以在将负值分配给位值‘1’并且将正值分配给位值‘0’的第一变换和将负值分配给位值‘0’并且将正值分配给位值‘1’的第二变换之间随机选择。在一些实施例中,处理逻辑可以在每个输入基础上来在第一变换和第二变换之间进行选择(例如,输入的每个位可以与已经为输入选择的相同的第一变换或第二变换的使用相对应)。第一变换和第二变换之间的选择可以是随机的(例如,值为‘0’的位可以被随机选择为负值或正值中的一个,并且值为‘1’的位可以是未被选择以变换值为‘0’的位的负值或正值中的另一个。
图6是使用具有乘法掩码的输入执行加密操作中的逻辑XOR操作的示例方法600的流程图。一般而言,方法600可以通过处理逻辑执行,该处理逻辑可以包括硬件(例如,处理设备、电路、专用逻辑、可编程逻辑、微代码、设备的硬件、集成电路等)、软件(例如,在处理设备上运行或执行的指令)或其组合。在一些实施例中,方法600可以通过图1的乘法掩码部件111或图3的乘法掩码部件300来执行。
方法600可以用于执行在使用具有乘法掩码的输入的加密操作期间使用的逻辑异或(XOR)操作。例如,方法600可以用于执行如关于图3的框230所描述的逻辑XOR操作。如先前所描述的,这种加密操作的示例可以是AES、DES或其他这样的加密、解密、生成签名或验证签名的操作。在一些实施例中,方法600可以用于执行与第一输入位和第二输入位之间的XOR操作相对应的逐位操作。
方法600可以以接收已经被掩码的第一输入的处理逻辑开始(框610)。例如,可以接收已经被乘法掩码的第一输入位。处理逻辑还可以接收已经被掩码的第二输入(框620)。第二输入可以是已经被乘法掩码的第二输入位。如结合图5所描述的,第一输入位和第二输入位可以被乘法掩码并且变换为正数和负。例如,可以经由掩码将值为‘0’的位变换为负值(例如,负掩码值),并且可以将值为‘1’的位变换为正值(例如,正掩码值),其中,负掩码值和正掩码值具有相同的绝对数。处理逻辑还可以执行第一掩码输入与第二掩码输入之间的乘法操作(框630)。例如,在每个对应的输入位已被变换或被掩码之后(例如,从‘0’到负掩码值或从‘1’到正掩码值),可以在第一输入位和第二输入位之间执行乘法操作。处理逻辑可以进一步将乘法操作的结果乘以基于正掩码值的值的倒数,以生成中间值(框640)。例如,如先前所描述的,位值为‘1’的输入可以被掩码为正掩码值。如此,乘法操作的结果可以乘以正掩码值的倒数以生成中间值,其与值为‘1’的输入位所变换为的值相对应。处理逻辑还可以执行与以质数取模后的中间值相对应的操作(框650)。在一些实施例中,如结合图5所描述的,质数可以与用于掩码输入位的质数相对应。
在一些实施例中,当值为‘0’的输入位被变换为负掩码值并且值为‘1’的输入位被变换为正掩码值时,方法600可以基于以下等式来执行逻辑XOR操作:
XOR的结果=xym-1mod p
在一些实施例中,x可以与第一掩码输入位相对应,y可以与第二掩码输入位相对应,m可以与正掩码值相对应,并且p可以与质数相对应。当执行逻辑XOR操作时,还可以使用上述等式,其中,值为‘0’的输入位被变换为正掩码值,并且值为‘1’的输入位被变换为负掩码值。
图7是使用具有乘法掩码的输入执行加密操作的逻辑AND操作的示例方法700的流程图。一般而言,方法700可以通过处理逻辑执行,该处理逻辑可以包括硬件(例如,处理设备、电路、专用逻辑、可编程逻辑、微代码、设备的硬件、集成电路等)、软件(例如,在处理设备上运行或执行的指令)或其组合。在一些实施例中,方法700可以通过图1的乘法掩码部件111或图3的乘法掩码部件300来执行。
方法700可以用于执行在使用具有乘法掩码的输入的加密操作期间使用的逻辑AND操作。例如,方法700可以用于执行如关于图2的框230所描述的逻辑AND操作。如先前所描述的,这种加密操作的示例可以是AES、DES或其他这样的加密、解密、生成签名或验证签名的操作。在一些实施例中,方法700可以用于执行与第一输入位和第二输入位之间的AND操作相对应的逐位操作。
方法700可以从处理逻辑接收第一掩码输入或输入位、以及第二掩码输入或输入位(框710)开始。进一步地,处理逻辑可以将如关于图6所描述的正掩码值加到第一输入和第二输入中的每个输入(框720)。此外,处理逻辑可以将正掩码值和第一输入的组合乘以正掩码值和第二输入的组合以生成中间值(框730)。此外,处理逻辑可以将中间值乘以正掩码值的倒数并且乘以2的倒数(框740)。随后,处理逻辑可以从结果中减去与以质数取模后的正掩码值相对应的值(框750)。例如,在第一输入和第二输入的掩码中使用的与以质数取模后的正掩码值相对应的值可以从中间值乘以正掩码值的倒数并且乘以2的倒数的结果中减去。
在一些实施例中,当值为‘0’的输入位被变换为负掩码值并且值为‘1’的输入位被变换为正掩码值时,方法700可以基于以下等式执行逻辑AND操作:
AND的结果=2-1m-1(x+m)(y+m)-m mod p
在一些实施例中,x可以与第一掩码输入位相对应,y可以与第二掩码输入位相对应,m可以与正掩码值相对应,并且p可以与质数相对应。在备选实施例中,当执行逻辑AND操作时,其中,值为‘0’的输入位被变换为正掩码值并且值为‘1’的输入位被变换为负掩码值,则下列等式可以用于执行逻辑AND操作:
AND的结果=2-1m-1(x-m)(y-m)+m mod p
如此,当执行逻辑AND操作时,其中,值为‘0’的输入位被变换为正掩码值并且值为‘1’输入位被变换为负掩码值,第一输入位和第二输入位可以被减去正掩码值的值,而不是如图7中的框720所描述的那样加上正掩码值的值。
进一步地,当值为‘0’的输入位被变换为与1mod 5相对应的正掩码值时并且值为‘1’的输入位被变换为与-1mod 5相对应的负掩码值时,逻辑AND操作和逻辑AND操作的执行可以基于由以下操作表示的约减模255方程:
z←x+5r*
z←(zΛ255)+(z/28)
在一些实施例中,z可以与约减模255的输出相对应,x可以与第一输入位相对应,并且r可以与16位随机生成的值相对应。如此,约减模255方程可以包括第一步骤,其将与随机生成的值相乘的掩码值相关联的质数加到输入位以生成第一结果。此外,第一结果与对应于255的值进行XOR操作,并且该结果加上除以2的8次幂的第一结果。约减模255可以用于执行如下的XOR操作:
z←ReductionModulo255(yr,r*)
z←ReductionModulo255(xz,r*)
z←ReductionModulo255(xr',r*)
z←ReductionModulo255(z,r*)
在一些实施例中,ReduModulo255可以与如之前使用各种第一输入和第二输入描述的约减模255方程的调用或执行相对应,该第二输入是随机16位数。此外,x可以与第一输入位相对应,y可以与第二输入位相对应,z可以与输出相对应,r可以与1到254之间的随机数相对应,r'可以与(mr)-1(mod 5)相对应,并且r可以与16位随机数相对应。如此,XOR操作可以通过迭代地执行缩减模255四次来执行。
此外,约减模255可以用于执行如下的NOT操作:
z←4((xΛ63)+r)+((x/26)+r)
z←ReductionModulo255(z,r*)
附加地,可以执行如下的AND操作:
z←ReductionModulo255(r((x+r")+4(m+r"),r*)
z←ReductionModulo255(z,r*)
z←ReductionModulo255(z((y+r'")+4(m+r'")),r*)
z←ReductionModulo255(r'z,r*)
z←ReductionModulo255(2(z+r")+(m+3r"),r*)
在一些实施例中,z的初始值可以与值‘0’相对应,r可以是1至254之间的随机值,r'与值(mr)-1(mod 5)相对应,r*是1到65,535(即,216-1)之间的16位随机数,并且其中,r"和r'"中的每个是1和254之间不同的8位随机数。因此,AND操作可以通过迭代计算约减模255等式五次来执行。
图8图示了在其内可以执行用于使机器执行本文中所讨论的方法中的任一种或多种方法的指令集合的计算机***800的示例机器。在备选实现方式中,机器可以连接(例如,联网)到LAN、内联网、外联网和/或互联网中的其他机器。该机器可以作为客户端-服务器网络环境中的服务器或客户端机器来操作,作为点对等(或分布式)网络环境中的对等机器来操作,或作为云计算基础设施或环境中的服务器或客户端机器来操作。
机器可以是个人计算机(PC)、平板电脑、机顶盒(STB)、个人数字助理(PDA)、蜂窝电话、网络设备、服务器、网络路由器、开关或桥接器、或能够执行指定该机器要采取的动作的指令集合(顺序或其他方式)的任何机器。进一步地,当说明单个机器时,术语“机器”还应当被视为包括单独或共同执行一指令集合(或多个指令集合)以执行本文中所讨论的方法中的任一种或多种方法的机器的任何集合。
示例计算机***800包括处理设备802、主存储器804(例如,只读存储器(ROM))、闪速存储器、诸如同步DRAM(SDRAM)或Rambus DRAM(RDRAM)之类的动态随机存取存储器(DRAM)等等)、静态存储器806(例如,闪速存储器、静态随机存取存储器(SRAM)等等)、以及经由总线830相互通信的数据存储设备818。
处理设备802表示一个或多个通用处理设备,诸如微处理器、中央处理单元等。更具体地,处理设备可以是复杂指令集计算(CISC)微处理器、精简指令集计算(RISC)微处理器、非常长指令字(VIJW)微处理器、或实现其他指令集的处理器、或实现指令集的组合的处理器。处理设备802还可以是一个或多个专用处理设备,诸如专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、网络处理器等。处理设备802被配置成执行用于执行本文中所讨论的操作和步骤的指令826。
计算机***800还可以包括网络接口设备808,以通过网络820进行通信。计算机***800还可以包括视频显示单元810(例如,液晶显示器(LCD)或阴极射线管(CRT))、字母数字输入设备812(例如,键盘)、光标控制设备814(例如,鼠标)、图形处理单元822、信号发生设备816(例如,扬声器)、图形处理单元822、视频处理单元828和音频处理单元832。
数据存储设备818可以包括机器可读存储介质824(也被称为计算机可读介质),在该机器可读存储介质上存储了一个或多个指令或软件826集合,其实现了本文中所描述的方法或功能中的任一种或多种方法或功能。指令826还可以完全地或至少部分地驻留在主存储器804内和/或处理设备802内,在其由计算机***800执行期间,主存储器804和处理设备802也构成机器可读存储介质。
在一个实现方式中,指令826包括实现与乘法掩码部件(例如,图1的乘法掩码部件111或图3的乘法掩码部件300)相对应的功能性的指令。虽然机器可读存储介质824在示例实现方式中被示为单个介质,但是术语“机器可读存储介质”应当被认为包括单个介质或多个介质(例如,集中式数据库或分布式数据库,以及/或相关联的高速缓存和服务器),其存储一个或多个指令集合。术语“机器可读存储介质”还应被视为包括能够存储或编码指令集合以供机器执行并且使机器执行本公开的方法中的任一种或多种方法的任何介质。因此,术语“机器可读存储介质”应被认为包括但不限于固态存储器、光学介质和磁性介质。
依据对计算机存储器内的数据位的操作的算法和符号表示来呈现前述详细描述的一些部分。这些算法描述和表示是由数据处理领域的技术人员最有效地将其工作的实质传达给本领域技术人员的方式。算法在这里并且通常被认为是导致期望结果的自我一致的操作序列。这些操作是需要物理量的物理操纵的操作。通常,尽管不一定,但是这些数量采用能够被存储、组合、比较和以其他方式操纵的电信号或磁信号的形式。原则上,由于通常使用的原因,已经证明称这些信号为位、数值、元素、符号、字符、术语、数字等是方便的。
然而,应该记住,所有这些和类似的术语都应该与适当的物理量相关联,并且仅仅是适用于这些量的方便的标签。除非另有明确说明,否则从上述讨论中可以明显看出,应当领会,在整个说明书中,例如诸如“标识”或“确定”或“执行”或“进行”或“收集”或“创建”或“发送”等之类的术语是指计算机***或类似的电子计算设备的动作和过程,其操纵并且将表示为计算机***的寄存器和存储器内的物理(电子)量的数据变换为类似地表示为计算机***的存储器或寄存器或其他这样的信息存储设备内的物理量的其他数据。
本公开还涉及一种用于执行本文中的操作的装置。该装置可以为预期目的而特别构造,或者其可以包括由存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。这样的计算机程序可以存储在计算机可读存储介质中,诸如但不限于包括软盘、光盘、CD-ROM和磁光盘在内的任何类型的盘、只读存储器(ROM)、随机存取存储器(RAM)、EPROM、EEPROM、磁卡或光卡、或适合于存储电子指令的任何类型的介质,每个均耦合至计算机***总线。
本文中所呈现的算法和显示器并非固有地与任何特定计算机或其他装置有关。各种通用***可以按照本文中的教导与程序一起使用,或者可以证明构造更专用装置来执行该方法是方便的。如在下文的描述中所阐述的,多种这些***的结构将出现。另外,本公开不参考任何特定的编程语言来描述。应当领会,多种编程语言可以用于实现本文中所描述的本公开的教导。
本公开可以被提供作为计算机程序产品或软件,其可以包括其上存储有指令的机器可读介质,该机器可读介质可以用于对计算机***(或其他电子设备)进行编程以执行根据本公开的过程。机器可读介质包括用于存储可由机器(例如,计算机)读取的形式的信息的任何机构。例如,机器可读(例如,计算机可读)介质包括机器(例如,计算机)可读存储介质,诸如只读存储器(“ROM”)、随机存取存储器(“RAM”)、磁盘存储介质、光存储介质、闪速存储器设备等。
在前面的说明书中,已经参照本发明的具体示例实现方式来描述本公开的实现方式。显而易见的是,在不背离如所附权利要求中阐述的本公开的实现方式的更广泛的精神和范围的情况下,可以对其进行各种修改。因而,说明书和附图被认为是说明性的而非限制性的。

Claims (26)

1.一种用于加密操作的方法,包括:
接收用于所述加密操作的输入值;
通过增加用于所述加密操作的所述输入值的至少一部分来获得增加值;
基于与质数相关联的值的范围生成第一数;
由处理设备通过将所述增加值乘以以所述质数取模后的所述第一数来获得掩码值;以及
基于所述掩码值来执行所述加密操作,
其中,所述加密操作与逻辑与AND操作相关联,所述逻辑与AND操作在所述掩码值和对应于第二输入的第二掩码值之间被执行,并且其中,所述逻辑与AND操作通过以下各项来执行:
向所述掩码值和所述第二掩码值中的每个掩码值添加另一值,所述另一值在对所述加密操作的输入的所述掩码中用于生成中间值;
将在对所述加密操作的输入的所述掩码中使用的所述另一值的倒数和二的倒数与所述中间值相乘;以及
从所述相乘的结果中减去与在以所述质数取模后的输入的所述掩码中使用的所述另一值相对应的值。
2.根据权利要求1所述的方法,其中,获得所述增加值包括增加用于所述加密操作的所述输入值的半部分。
3.根据权利要求1所述的方法,其中,所述第一数是值小于所述质数的随机生成的数。
4.根据权利要求1所述的方法,其中,所述输入值的所增加的部分是一位值,并且其中获得所述增加值包括:
如果所述一位值为0,则将所述一位值增加正数或负数中的一个,或者
如果所述一位值为1,则将所述一位值增加所述正数或所述负数中的另一个。
5.根据权利要求4所述的方法,其中,所述正数是随机选择的正数,并且所述负数具有与所述正数相同的绝对值。
6.根据权利要求1所述的方法,还包括:
响应于获得所述掩码值,执行第二模数操作,所述第二模数操作返回零值。
7.根据权利要求6所述的方法,其中,所述模数操作和所述第二模数操作与功耗相关联以减少差分功率分析(DPA)泄漏的易感性。
8.根据权利要求1所述的方法,其中,所述质数是模数操作的除数,并且所述模数操作的被除数至少部分地基于所述第一数,并且其中,所述模数操作返回非零值。
9.根据权利要求1所述的方法,其中,所述加密操作与在所述掩码值和与第二输入相对应的第二掩码值之间执行的逻辑异或XOR操作相关联,并且其中,所述逻辑异或XOR操作通过以下各项执行:
将所述掩码值和所述第二掩码值的组合乘以另一值的倒数,所述另一值的在对所述加密操作的输入的所述掩码中用于生成中间值;以及
执行与以所述质数取模后的所述中间值相对应的操作。
10.一种用于加密操作的***,包括:
存储器;以及
处理设备,被可操作地耦合至所述存储器并且用于
接收用于所述加密操作的输入值;
通过增加用于所述加密操作的所述输入值的至少一部分来获得增加值;
基于与质数相关联的值的范围生成第一数;
通过将所述增加值乘以以所述质数取模后的所述第一数来获得掩码值;以及
基于所述掩码值来执行所述加密操作,
其中,所述加密操作与逻辑与AND操作相关联,所述逻辑与AND操作在所述掩码值和对应于第二输入的第二掩码值之间被执行,并且其中,所述逻辑与AND操作通过以下各项来执行:
向所述掩码值和所述第二掩码值中的每个掩码值添加另一值,所述另一值在对所述加密操作的输入的所述掩码中用于生成中间值;
将在对所述加密操作的输入的所述掩码中使用的所述另一值的倒数和二的倒数与所述中间值相乘;以及
从所述相乘的结果中减去与在以所述质数取模后的输入的所述掩码中使用的所述另一值相对应的值。
11.根据权利要求10所述的***,其中,为了获得所述增加值,所述处理设备增加用于所述加密操作的所述输入值的半部分。
12.根据权利要求10所述的***,其中,所述第一数是值小于所述质数的随机生成的数。
13.根据权利要求10所述的***,其中,所述输入值的所增加的部分是一位值,并且其中,为了获得所述增加值,所述处理设备用于:
如果所述一位值为0,则将所述一位值增加正数或负数中的一个,或者
如果所述一位值为1,则将所述一位值增加所述正数或所述负数中的另一个。
14.根据权利要求13所述的***,其中,所述正数是随机选择的正数,并且所述负数具有与所述正数相同的绝对值。
15.根据权利要求10所述的***,其中,所述处理设备还用于:
响应于获得所述掩码值,执行第二模数操作,所述第二模数操作返回零值。
16.根据权利要求15所述的***,其中,所述模数操作和所述第二模数操作与功耗相关联以减少差分功率分析(DPA)泄漏的易感性。
17.根据权利要求10所述的***,其中,所述质数是模数操作的除数,并且所述模数操作的被除数至少部分地基于所述第一数,并且其中,所述模数操作返回非零值。
18.根据权利要求10所述的***,其中,所述加密操作与在所述掩码值和与第二输入相对应的第二掩码值之间执行的逻辑异或XOR操作相关联,并且其中,所述逻辑异或XOR操作通过以下各项执行:
将所述掩码值和所述第二掩码值的组合乘以另一值的倒数,所述另一值在对所述加密操作的输入的掩码中用于生成中间值;以及
执行与以所述质数取模后的所述中间值相对应的操作。
19.一种非暂态计算机可读介质,包括数据,所述数据当由处理设备访问时使所述处理设备执行操作的数据,所述操作包括:
接收用于加密操作的输入值;
通过增加用于所述加密操作的所述输入值的至少一部分来获得增加值;
基于与质数相关联的值的范围生成第一数;
通过将所述增加值乘以以所述质数取模后的所述第一数来获得掩码值;以及
基于所述掩码值来执行所述加密操作,其中,所述加密操作与逻辑与AND操作相关联,所述逻辑与AND操作在所述掩码值和对应于第二输入的第二掩码值之间被执行,并且其中,所述逻辑与AND操作通过以下各项来执行:
向所述掩码值和所述第二掩码值中的每个掩码值添加另一值,所述另一值在对所述加密操作的输入的所述掩码中用于生成中间值;
将在对所述加密操作的输入的所述掩码中使用的所述另一值的倒数和二的倒数与所述中间值相乘;以及
从所述相乘的结果中减去与在以所述质数取模后的输入的所述掩码中使用的所述另一值相对应的值。
20.根据权利要求19所述的非暂态计算机可读介质,其中,获得所述增加值包括增加用于所述加密操作的所述输入值的半部分。
21.根据权利要求19所述的非暂态计算机可读介质,其中,所述输入值的所增加的部分是一位值,并且其中获得所述增加值包括:
如果所述一位值为0,则将所述一位值增加正数或负数中的一个,或者
如果所述一位值为1,则将所述一位值增加所述正数或所述负数中的另一个。
22.根据权利要求21所述的非暂态计算机可读介质,其中,所述正数是随机选择的正数,并且所述负数具有与所述正数相同的绝对值。
23.根据权利要求19所述的非暂态计算机可读介质,其中,所述操作还包括:
响应于获得所述掩码值,执行第二模数操作,所述第二模数操作返回零值。
24.根据权利要求23所述的非暂态计算机可读介质,其中,所述模数操作和所述第二模数操作与功耗相关联以减少差分功率分析(DPA)泄漏的易感性。
25.根据权利要求19所述的非暂态计算机可读介质,其中,所述质数是模数操作的除数,并且所述模数操作的被除数至少部分地基于所述第一数,并且其中,所述模数操作返回非零值。
26.根据权利要求19所述的非暂态计算机可读介质,其中,所述加密操作与在所述掩码值和与第二输入相对应的第二掩码值之间执行的逻辑异或XOR操作相关联,并且其中,所述逻辑异或XOR操作通过以下各项执行:
将所述掩码值和所述第二掩码值的组合乘以另一值的倒数,所述另一值在对所述加密操作的输入的所述掩码中用于生成中间值;以及
执行与以所述质数取模后的所述中间值相对应的操作。
CN201580066084.1A 2014-12-08 2015-12-03 用于加密操作的乘法掩码 Active CN107004084B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201462089092P 2014-12-08 2014-12-08
US62/089,092 2014-12-08
US201562262251P 2015-12-02 2015-12-02
US62/262,251 2015-12-02
PCT/US2015/063812 WO2016094195A2 (en) 2014-12-08 2015-12-03 Multiplicative masking for cryptographic operations

Publications (2)

Publication Number Publication Date
CN107004084A CN107004084A (zh) 2017-08-01
CN107004084B true CN107004084B (zh) 2021-08-10

Family

ID=56108349

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580066084.1A Active CN107004084B (zh) 2014-12-08 2015-12-03 用于加密操作的乘法掩码

Country Status (4)

Country Link
US (2) US11626970B2 (zh)
EP (1) EP3230921B1 (zh)
CN (1) CN107004084B (zh)
WO (1) WO2016094195A2 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102017002153A1 (de) * 2017-03-06 2018-09-06 Giesecke+Devrient Mobile Security Gmbh Übergang von einer booleschen Maskierung zu einer arithmetischen Maskierung
TWI652683B (zh) * 2017-10-13 2019-03-01 力旺電子股份有限公司 用於記憶體的電壓驅動器
DE102018107114A1 (de) * 2018-03-26 2019-09-26 Infineon Technologies Ag Seitenkanalgehärtete Operation
KR102510077B1 (ko) * 2018-04-24 2023-03-14 삼성에스디에스 주식회사 부채널 공격에 안전한 연산 장치 및 방법
CN108769056B (zh) * 2018-06-15 2021-03-23 中国人民解放军战略支援部队信息工程大学 一种单点登录方法、装置及***
CN109165531B (zh) * 2018-09-11 2020-04-07 网御安全技术(深圳)有限公司 一种aes掩码方法、电子设备及存储介质
EP3935543A4 (en) * 2019-03-05 2022-05-11 Cryptography Research, Inc. SIDE CHANNEL ATTACK RESISTANT MEMORY ACCESS TO EMBEDDED CENTRAL PROCESSING UNITS
US11507699B2 (en) * 2019-09-27 2022-11-22 Intel Corporation Processor with private pipeline
JP7314108B2 (ja) * 2020-08-27 2023-07-25 株式会社東芝 暗号処理装置、暗号処理方法およびプログラム

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060029224A1 (en) * 2004-08-06 2006-02-09 Yoo-Jin Baek System and recording medium for securing data and methods thereof
CN102468956A (zh) * 2010-11-11 2012-05-23 上海华虹集成电路有限责任公司 适用于rsa模幂计算的方法
US20130039486A1 (en) * 2010-03-31 2013-02-14 Fujitsu Limited Cryptographic processing device and cryptographic processing method
US20130182839A1 (en) * 2011-11-28 2013-07-18 Renesas Electronics Corporation Semiconductor device and ic card
CN104067217A (zh) * 2011-12-15 2014-09-24 英赛瑟库尔公司 生成被验证适用于芯片卡的素数的方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4316055A (en) * 1976-12-30 1982-02-16 International Business Machines Corporation Stream/block cipher crytographic system
US5717760A (en) * 1994-11-09 1998-02-10 Channel One Communications, Inc. Message protection system and method
US6779111B1 (en) * 1999-05-10 2004-08-17 Telefonaktiebolaget Lm Ericsson (Publ) Indirect public-key encryption
US20060026224A1 (en) * 2004-07-30 2006-02-02 Merkli Patrick P Method and circuit for combined multiplication and division
US7970129B2 (en) 2007-04-19 2011-06-28 Spansion Llc Selection of a lookup table with data masked with a combination of an additive and multiplicative mask
CA2701855C (en) 2007-11-02 2016-10-11 Certicom Corp. Signed montgomery arithmetic
CN101996065B (zh) * 2009-08-26 2015-08-05 索尼株式会社 随机数发生器和随机数生成方法
FR2949886B1 (fr) 2009-09-04 2013-01-04 Oberthur Technologies Procede de traitement cryptographique de donnees
WO2011047035A2 (en) * 2009-10-14 2011-04-21 Chaologix, Inc. High utilization universal logic array with variable circuit topology and logistic map circuit to realize a variety of logic gates with constant power signatures
CN103905462B (zh) * 2014-04-16 2017-05-17 深圳国微技术有限公司 可抵御差分功耗分析攻击的加密处理装置及方法
US9912886B2 (en) * 2014-12-17 2018-03-06 Canon Kabushiki Kaisha Image capturing apparatus and driving method of image sensor

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060029224A1 (en) * 2004-08-06 2006-02-09 Yoo-Jin Baek System and recording medium for securing data and methods thereof
US20130039486A1 (en) * 2010-03-31 2013-02-14 Fujitsu Limited Cryptographic processing device and cryptographic processing method
CN102468956A (zh) * 2010-11-11 2012-05-23 上海华虹集成电路有限责任公司 适用于rsa模幂计算的方法
US20130182839A1 (en) * 2011-11-28 2013-07-18 Renesas Electronics Corporation Semiconductor device and ic card
CN104067217A (zh) * 2011-12-15 2014-09-24 英赛瑟库尔公司 生成被验证适用于芯片卡的素数的方法

Also Published As

Publication number Publication date
EP3230921A2 (en) 2017-10-18
US20230379133A1 (en) 2023-11-23
US20180351729A1 (en) 2018-12-06
EP3230921A4 (en) 2018-07-25
US11626970B2 (en) 2023-04-11
WO2016094195A2 (en) 2016-06-16
CN107004084A (zh) 2017-08-01
WO2016094195A3 (en) 2016-08-11
EP3230921B1 (en) 2022-02-23

Similar Documents

Publication Publication Date Title
CN107004084B (zh) 用于加密操作的乘法掩码
US11620109B2 (en) Converting a boolean masked value to an arithmetically masked value for cryptographic operations
US11251935B2 (en) Multiplicative blinding for cryptographic operations
US11658799B2 (en) Exponent splitting for cryptographic operations
US11822704B2 (en) Constant time secure arithmetic-to-Boolean mask conversion
US11902432B2 (en) System and method to optimize generation of coprime numbers in cryptographic applications
US11418334B2 (en) Protecting modular inversion operation from external monitoring attacks
US11101981B2 (en) Generating a pseudorandom number based on a portion of shares used in a cryptographic operation
CN111712816B (zh) 使用密码蒙蔽以用于高效地使用蒙哥马利乘法
WO2024086243A1 (en) Protection of polynomial cryptographic operations against side-channel attacks with change-of-variable transformations

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant