CN113475034B - 电路编译设备和电路评估设备 - Google Patents

电路编译设备和电路评估设备 Download PDF

Info

Publication number
CN113475034B
CN113475034B CN201980092169.5A CN201980092169A CN113475034B CN 113475034 B CN113475034 B CN 113475034B CN 201980092169 A CN201980092169 A CN 201980092169A CN 113475034 B CN113475034 B CN 113475034B
Authority
CN
China
Prior art keywords
circuit
function
interpolation
binary
term
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
CN201980092169.5A
Other languages
English (en)
Other versions
CN113475034A (zh
Inventor
R·里特曼
S·J·A·德雷赫
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.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips NV
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 Koninklijke Philips NV filed Critical Koninklijke Philips NV
Publication of CN113475034A publication Critical patent/CN113475034A/zh
Application granted granted Critical
Publication of CN113475034B publication Critical patent/CN113475034B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/004Countermeasures against attacks on cryptographic mechanisms for fault attacks

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)
  • Storage Device Security (AREA)

Abstract

一些实施例涉及用于将函数编译到二进制电路中的电路编译设备和用于使用这样的二进制电路来评估函数的函数评估设备。所述二进制电路包括合取子电路和异或子电路,每个合取子电路计算函数输入位的合取,每个异或子电路计算函数输出位。每个函数输出位可以被表示为内插项的总和,所述多个函数输入位以及所述一个或多个函数输出位的所述内插项一起形成多个内插项。合取子电路将内插项计算为两个内插项的合取。异或子电路将函数输出位计算为内插项的异或。由此,第一内插项和第二内插项也被使用在异或子电路中,因此所述二进制电路具有较小的无效故障的数量或可能性。

Description

电路编译设备和电路评估设备
技术领域
本发明涉及电路编译设备、电路编译方法、二进制电路、函数评估设备、函数评估方法和计算机可读介质。
背景技术
涉及敏感数据的计算(例如,加密计算)可能会受到各种攻击者的攻击。例如,如果仅了解原语的输入和输出的攻击者无法提升其权利(例如,获得秘密密钥、加密消息、解密消息等),则称在黑盒模型中加密原语是安全的。一个示例是利用密钥对明文消息进行对称加密,从而给出密文。任何知道密钥的人都能够解密密文以获得明文。因此,将密钥对所有人保密是很重要的,当然消息的预期接收者除外。这个示例中的黑盒安全意味着有很多明文-密文对,找到密钥应该是不可行的。对于(例如在建模、机器学习、统计等领域中)涉及敏感信息的其他类型的计算,也需要攻击者无法获得在计算中使用的敏感信息。
然而,在实践中,攻击者通常不会在黑盒模型中进行操作,实际上他们拥有的信息不仅仅是输入和输出。例如,在灰盒模型中,假设攻击者可以访问与函数的实施方式有关的一些信息。这些额外的信息源被称为“边信道”。例如,边信道包括操作所花费的时间量或消耗的功率量等。已经发现这样的边信道可以用于从计算中提取敏感信息。
在更强大的模型(即,所谓的白盒模型)中,攻击者可以完全访问计算的所有内部值。即使计算正在运行,攻击者也可能会修改值。即便如此,白盒实施方式旨在防止从计算中提取敏感值。一类已知的白盒攻击是差分故障分析(DFA)。在一些DFA攻击中,攻击者可能会在计算过程中引发故障并根据该故障导致的输出变化来推断出关于正在处理的敏感信息的信息。作为抵御DFA的可能对策,可以在计算中引入冗余。可以通过观察电路的冗余部分的输出的差异来检测会改变输出的故障的引入。例如,计算可以被设计为不给出输出或者给出无用的输出。
另一类白盒攻击是统计无效故障分析(SIFA)。SIFA类型的攻击依赖于在不影响计算输出的计算中引发故障的可能性。一些SIFA攻击利用这样一个事实,即,引起不受影响的计算输出的中间值可能是非均匀分布的。例如,对无效故障的观察结果和引入故障的中间值之间可能存在某种依赖性。在AES的背景下,已经表明能够使用SIFA来攻击软件实施方式和硬件实施方式。
不幸的是,现有的抵御DFA和相关类型攻击的对策隐含地假设不受故障影响的计算输出的释放不会泄漏敏感信息,因此无法防止SIFA类型的攻击。有必要纠正这种情况。
参考Hassan Eldib、Meng Wu和Chao Wang的文章“Synthesis of Fault-AttackCountermeasures for Cryptographic Circuits”。
发明内容
为了使SIFA攻击更加困难,减少无效故障(例如,确实影响针对一些输入的计算输出但不影响针对其他输入的计算输出的故障)的数量是有帮助的。发明人认识到减少或甚至消除单个位无效故障(例如,在个体位中引入故障)是特别有用的。这样的单个位故障可以被相对容易地利用,而涉及更多个位的故障可能更难被发现和/或利用。
为了更好地解决上述问题中的一个或多个问题,提出了根据权利要求所述的电路编译设备和函数评估设备。
本发明的一个方面涉及一种用于将函数编译到二进制电路中的电路编译设备。这样的函数可以根据多个函数输入位来计算一个或多个函数输出位。为了在某种意义上(例如对大小、电路深度等)优化函数而编译二进制电路是个已知的问题。这样的编译电路可以是硬件电路,例如包括通过物理线路连接的物理门,但是也可以是软件电路,例如,软件指令作为门并且存储位置作为线路。
由所述设备编译的所述二进制电路可以包括电路线路,所述电路线路包括与所述多个函数输入位相对应的多条电路输入线路和与所述一个或多个函数输出位相对应的一条或多条电路输出线路,所述二进制电路还可以包括一个或多个合取子电路和一个或多个异或子电路,每个合取子电路计算至少两个函数输入位的合取,每个异或子电路计算函数输出位。
为了编译所述二进制电路,所述电路编译设备可以将每个函数输出位表示为内插项的总和,内插项可以是零个或多个函数输入位的乘积。所述多个函数输入位以及所述一个或多个函数输出位的所述内插项可以一起形成多个内插项。应当理解,并非多个内插项中的所有内插项都需要是内插公式的项,例如,函数输入位就可以不是内插公式的项。内插项也可以被称为可用项。
为了编译用于当前内插项的合取子电路,可以从所述多个内插项中选择第一内插项和第二内插项,使得所述当前内插项能被计算为所述第一内插项与所述第二内插项的乘积。所述合取子电路可以计算所述第一内插项与所述第二内插项的合取。如果没有第一内插项和第二内插项能够被选择,则用信号通知选择错误。用于函数输出位的异或子电路可以是函数输出位是其总和的内插项的异或。
电路编译设备的优点在于,它编译的二进制电路具有降低的无效故障(例如,单个位无效故障)的概率和/或数量。发明人认识到使用异或子电路来计算函数输出位是有益的,因为在异或子电路的线路中引入的故障总是影响至少一个函数输出位,因此它们不是无效的。发明人还认识到,当计算用作针对异或子电路的输入的内插项时,如果将内插项计算为两个其他内插项的乘积,则会是有益的。这样的其他内插项通常用作针对异或子电路的输入,因此引入其中的故障会以这种方式影响函数输出位。这会使它们不太可能是无效的,下文对此进行了更详细的解释。如果无法选择这样的其他内插项,则会用信号通知选择错误,使得避免产生具有这样的无效故障的二进制电路。虽然不能保证由电路编译设备编译的二进制电路没有无效故障,但是至少降低了无效故障的数量和/或降低了二进制电路具有无效故障的概率,从而提高了SIFA保护。
在实施例中,在所述二进制电路的至少一个异或子电路中可以使用与当前内插项相对应的每条提供的电路线路。这会增加线路中的故障影响函数输出位的可能性。
在实施例中,所述电路编译设备可以确定所述二进制电路是否具有无效故障,并且如果所述二进制电路具有无效故障,则至少重复对一个或多个当前内插项的所述选择和所述编译。以这种方式,可以尝试构建二进制电路的各种可能性,并且增加了找到具有很少或没有无效故障的电路的机会。在实施例中,如果电路线路的位翻转影响针对多条电路输入线路的第一实例化的至少一条电路输出线路并且该位翻转不影响针对多条电路输入线路的第二实例化的电路输出线路,则二进制电路可以具有无效故障,例如,该故障可以是单个位无效故障。
在实施例中,确定所述二进制电路是否具有无效故障可以包括:对于所述多条电路输入线路的多个实例化的每个实例化,确定所述电路线路的以下子集:在所述子集中,位翻转影响至少一条电路输出线路;并且如果电路线路被包括在所述电路线路的以下子集中,则确定所述二进制电路具有无效故障:所述子集用于所述多个实例化的第一实例化但不用于所述多个实例化的第二实例化。以这种方式,可以相对高效地找到单个位无效故障。
在实施例中,所述电路编译设备可以被配置为:选择双射函数;用所述双射函数来构成所述函数;并且将针对所构成的函数所编译的二进制电路与用于所述双射函数的反函数的二进制电路进行组合。以这种方式,如果很难或不可能直接编译对该函数具有提高的SIFA保护的二进制电路,仍然可以间接获得这样的电路。例如,如果选择错误被用信号通知,则所述设备可以重复对所述双射函数的所述选择、用所述双射函数对所述函数的所述构成以及对所构成的函数的所述编译。通过这样的方式,最终可以找到具有提高的SIFA保护的电路。在实施例中,双射函数是仿射映射。这种选择是有益的,因为没有针对双射函数的无效故障的电路可以进行高效的构建。
在实施例中,合取子电路可以包括第一电路线路的第一否定、第二电路线路的第二否定、第一否定与第二否定的析取以及所述析取的否定。这可以允许构建不可能或不希望使用与门的电路,并且/或者可以允许引起较小电路的整体电路优化。
在实施例中,所述函数可以包括对称密钥算法的替换框。对称密钥替换框是针对白盒攻击的一个有吸引力的目标,并且发明人已经发现本文描述的技术对于这种类型的函数是有效的。在实施例中,所述函数是单射的。发明人已经发现本文描述的合取/异或结构对于单射函数特别有效;特别地,在函数输入位上的故障可能总是影响输出。
在实施例中,至多一条电路线路可以对应于每个内插项。避免重新计算内插项(例如增加线路的重复使用)可以增加这样的线路中的故障影响计算输出并因此使故障有效的机会。
在实施例中,当前内插项可以等于第一内插项与第二内插项的乘积。对于各种类型的函数,对第一内插项和第二内插项的这种选择可以增加以没有无效故障的电路结束的最终概率和/或平均减少无效故障的数量。
另外的方面涉及一种用于评估函数的函数评估设备。所述函数根据多个函数输入位来计算一个或多个函数输出位。每个函数输出位能被表示为内插项的总和。内插项可以是零个或多个函数输入位的乘积。所述多个函数输入位以及所述一个或多个函数输出位的所述内插项一起形成多个内插项。
所述函数评估设备可以被配置为存储用于所述函数的二进制电路,例如,由如上面所讨论的电路编译设备编译的二进制电路。所述二进制电路可以包括电路线路,所述电路线路包括与所述多个函数输入位相对应的多条电路输入线路和与所述一个或多个函数输出位相对应的一条或多条电路输出线路。所述二进制电路还可以包括一个或多个合取子电路,每个合取子电路计算至少两个函数输入位的合取。合取子电路可以将与当前内插项相对应的电路线路提供为与第一内插项相对应的第一电路线路和与第二内插项相对应的第二电路线路的合取。所述二进制电路还可以包括一个或多个异或子电路,每个异或子电路计算函数输出位。由当前异或子电路计算的所述函数输出位能被表示为当前内插项的总和。所述当前异或子电路可以将与所述函数输出位相对应的电路输出线路提供为与所述当前内插项相对应的线路的异或。在实施例中,所述二进制电路能够没有无效故障。
函数评估设备可以获得多个输入位并且通过评估二进制电路来评估在多个输入位上的函数。因此,如上面所讨论的,函数评估设备可以评估具有减少的SIFA类型攻击的攻击面的函数。
本发明的另外的方面涉及电路编译方法和函数评估方法。该方法的实施例可以作为计算机实施的方法被实施在计算机上,或者被实施在专用硬件中,或者被实施在这两者的组合中。用于该方法的实施例的可执行代码可以被存储在计算机程序产品上。计算机程序产品的示例包括存储器设备、光学存储设备、集成电路、服务器、在线路软件等。优选地,计算机程序产品包括被存储在计算机可读介质上的非瞬态程序代码,当所述程序产品在计算机上运行时,所述非瞬态程序代码用于执行所述方法的实施例。在实施例中,所述计算机程序包括计算机程序代码,当所述计算机程序在计算机上运行时,所述计算机程序代码适于执行所述方法的实施例的所有步骤。优选地,所述计算机程序被实施在计算机可读介质上。本发明的另外的方面涉及使用电路编译方法编译的二进制电路,例如,包括物理门和线路的硬件电路或包括关于存储器地址的指令的软件电路。
本发明的另一方面提供了一种使计算机程序可供下载的方法。当计算机程序被上传到例如Apple的App Store、Google的Play Store或Microsoft的Windows Store时以及当计算机程序可从这样的商店下载时,将使用这方面。
附图说明
将参考附图并仅通过示例的方式描述本发明的进一步的细节、方面和实施例。附图中的元件是为了简单和清楚的目的而图示的且并不一定是按比例绘制的。在附图中,对应于已经描述过的元件的元件可以具有相同的附图标记。在附图中:
图1a示意性地示出了二进制电路的实施例的示例,
图1b示意性地示出了二进制电路的实施例的示例,
图1c示意性地示出了二进制电路的实施例的示例,
图2示意性地示出了电路编译设备的实施例的示例,
图3示意性地示出了电路编译设备的实施例的示例,
图4示意性地示出了电路编译设备的实施例的示例,
图5示意性地示出了函数评估设备的实施例的示例,
图6a示意性地示出了电路编译方法的实施例的示例,
图6b示意性地示出了电路编译方法的实施例的示例,
图6c示意性地示出了电路编译方法的实施例的示例,
图6d示意性地示出了函数评估方法的实施例的示例,
图7a示意性地示出了根据实施例的具有包括计算机程序的可写部分的计算机可读介质,
图7b示意性地示出了根据实施例的处理器系统的表示。
附图标记列表
100、100'、100” 二进制电路
110 多条电路输入线路
111-114 电路输入线路
160 一个或多个合取子电路
161-164 合取子电路
170 一个或多个异或子电路
171-172 异或子电路
180 一条或多条电路输出线路
181-182 电路输出线路
190-193 内部线路
200 电路编译器
230 处理器
231 内插单元
232 合取编译器单元
233 信号通知单元
234 异或编译器单元
241 函数
242 二进制电路
250 多个内插项
251-258 内插项
260 一个或多个合取子电路
261-264 合取子电路
270 一个或多个异或子电路
271-272 异或子电路
300 电路编译设备
330 处理器
331 内插单元
332 合取编译器单元
333 信号通知单元
334 异或编译器单元
335 无效性检查单元
341 函数
342 二进制电路
350 多个内插项
351-358 内插项
360 一个或多个合取子电路
361-364 合取子电路
370 一个或多个异或子电路
371-372 异或子电路
380 多个无效性计数器
400 电路编译设备
430 处理器
431 双射单元
432 电路编译单元
433 信号通知单元
434 组合器单元
440 存储器
441 函数
442 二进制电路
443 双射函数
500 函数评估设备
530 处理器
531 电路评估单元
540 存储器
542 二进制电路
543 多个输入位
544 一个或多个输出位
600 电路编译方法
610 表示函数输出位
620 选择内插项
630 信号通知选择错误
640 编译合取子电路
650 编译异或子电路
700 电路编译方法
710 表示函数输出位
720 选择内插项
730 信号通知选择错误
740 编译合取子电路
750 编译异或子电路
760 确定无效故障
800 电路编译方法
810 选择双射函数
820 用双射函数来构成函数
830 针对所构成的函数编译二进制电路
831 信号通知选择错误
840 组合二进制电路
900 函数评估方法
910 获得二进制电路
920 获得多个输入位
930 评估函数
1000 计算机可读介质
1010 可写部分
1020 计算机程序
1110 (一个或多个)集成电路
1120 处理单元
1122 存储器
1124 专用集成电路
1126 通信元件
1130 互连
1140 处理器系统
具体实施方式
虽然本发明易于获得多种不同形式的实施例,但是在附图中示出了并且将在本文中详细描述一个或多个具体实施例,应当理解,本公开内容将被视为本发明的原理的示例且并不旨在将本发明限制于所示和所描述的具体实施例。
下面,为了理解起见,在操作中描述了实施例的元件。然而,很明显,各个元件被布置为执行被描述为由它们执行的功能。
另外,本发明不限于这些实施例,并且本发明在于本文描述的或在相互不同的从属权利要求中记载的每一个新颖特征或特征的组合。
为了更好地解释各个方面,现在讨论对计算的几种攻击。正如所讨论的,一些攻击依赖于泄漏关于计算的内部信息的边信道,例如,定时边信道、功率使用边信道等。依赖于这样的边信道的攻击可以是被动的,例如,它们可以只要求在执行其计算时观察实施方式。然而,在各种攻击中,攻击者能够主动干扰算法的运行,从而为攻击者提取敏感信息提供了额外的可能性。一个这种类型的攻击是差分故障分析(DFA)。在一些DFA攻击中,攻击者可以在计算期间引发故障,并且根据因该故障导致的输出变化来推断出关于正在处理的敏感信息的信息。作为抵御DFA的可能对策,可以在计算中引入冗余。可以通过观察电路的冗余部分的输出的差异来检测会改变输出的故障的引入。例如,计算可以被设计为不给出输出或者给出无用的输出。
另一类攻击是统计无效故障分析(SIFA)。一些SIFA类型的攻击依赖于无效故障。无效故障能够是对一个或多个输入的计算的总输出没有影响但对一个或多个其他输入的计算的总输出有影响的故障。攻击者可以发现故障无效的输入/输出对。在这样的攻击中,故障的无效性可以有效地用作以下内容的指示物:计算的中间值对于这些特定输入不是均匀分布的,而如果输入是均匀分布的,则计算的中间值是均匀分布的。如果在与输入或输出的相对较小部分以及相对少量的敏感数据有关的内部变量中出现非均匀性,则有可能推导出关于该敏感数据的信息。
例如,在各种硬件类型的攻击(例如,基于激光或时钟差错的攻击)中,计算的中间值保持不受故障影响的概率可能至少部分取决于该中间值本身。因此,观察这样的故障是否有影响能够泄漏信息。在白盒设置中,攻击者能够例如通过根据中间值引入故障(例如,位翻转)来模拟这样的故障。编码值可能无法阻止这一点,因为攻击者仍然能够选择根据编码来引入故障。
不幸的是,如果输出不改变,则现有的各种对策(例如,为反抗DFA引入冗余)可能不会产生效果,因此不能充分保护不受SIFA类型的攻击。
通常,为了保护不受SIFA攻击,减少无效故障的数量是有益的,尤其是在计算的敏感部分中。例如,计算可以以这样的方式执行,即,对于计算的至少一些值,值的任何份额中的单个位翻转可能影响输出。消除这样的单个位无效故障可能是特别有利的,因为攻击者可以相对容易地利用它们。例如,在具有N次操作的计算的部分中寻找无效的单个位翻转会需要N阶时间,如果N不是太大,则这可以是可行的。另一方面,在电路的同一部分中寻找具有多个(例如,k>1)位翻转的无效故障会取N^k阶,因此更加困难。
在各种实施例中,以降低的可能性和/或无效故障(例如,单个位无效故障)的数量来编译和/或评估电路,从而使得SIFA攻击更加困难。
实施例可以应用于各种类型的函数。一般而言,实施例涉及根据多个函数输入位来计算一个或多个函数输出位的函数f。函数f可以是更大计算的部分,例如,特别容易受到SIFA类型攻击的计算的部分和/或处理特别敏感信息的计算的部分。在实施例中,函数f是单射的或甚至双射的,或者至少小比例的输入对(例如,小于10%或1%的对)被映射到相同的输出。发明人已经发现,对于单射函数或双射函数,本文描述的二进制电路特别适合用于SIFA保护,例如,具有无效故障的可能性特别低。
在各种实施例中,函数f是加密函数或者是加密函数的部分:对于这样的函数,保护不受SIFA类型的攻击是特别相关的,因为它们通常处理需要保护的敏感信息,例如,密钥材料。例如,函数f可以是分组密码评估的部分,例如,基于分组密码的使用硬编码密钥的加密或解密。在实施例中,该函数包括对称密钥算法的替换框,例如,AES S框。例如,替换框可以应用于编码的输入和/或输出。在AES的情况下,发明人已经发现将本文描述的技术应用于具有至多8位输入的AES计算的部分已经提供了显著的SIFA保护。例如,虽然AES包含使用超过8位的MixColumns操作,但是这是一种加法操作,因此可能不太容易受到SIFA类型分析的影响,如下面所解释的那样。此外,不影响AES路径的计算可能不需要被保护,因为对这样的计算的SIFA分析可能不提供关于AES计算内部的信息。
虽然上面以AES为例,但是下面的技术也能够应用于其他加密原语。例如,其他分组密码可以被实施为实施例。特别是SLT设计的分组密码(替代/线性变换分组密码,有时也被称为替代置换网络(SPN)分组密码)(例如,AES(Rijndael)、3-Way、Kuznyechik、PRESENT、SAFER、SHARK和Square)能够毫不费力地得到调整。加密函数f可以是对称原语(例如,其中,加密/解密密钥是相同的)或签名/验证密钥。加密原语也可以是无密钥的,例如,散列函数。保护散列函数可能很重要,因为它们可能被应用于秘密数据。事实上,散列函数可能是键控设计的部分,例如在HMAC中使用散列函数的情况下。
各种实施例依赖于发明人的观察结果,在给定要由二进制电路实施的函数的情况下,将有许多不同的二进制电路实现该函数,但是除非以特殊方式构造这样的二进制电路,否则它将非常可能包含无效故障。然而,发明人认识到如果使用具有特殊结构的电路,则能够大大降低无效故障的数量和/或可能性。现在将提供这样的特殊结构的示例。令f是取k位为输入并给出l位作为输出的函数:
(y1,…,yl)=f(x1,…,xk)
例如,在许多情况下,k=l,但是这不是必须的。
例如,f可以是更大计算的部分,例如,函数可以是AES计算中的单个S框,例如,在这种情况下,k=l=8。对于AES S框,已知用于AES的二进制电路针对各种参数(例如,电路深度、与门的数量等)进行了优化。例如,J.Boyar和RenéPeralta的“A depth-16 circuitfor the AES S-box”(IACR eprint 2011/322)提供了具有深度16和127个门的电路。不幸的是,发明人发现该电路具有许多单个位无效故障。
为了找到具有较少无效故障(例如,较少的单个位无效故障)的电路,输出位yj=fj(x1,x2,…,xk)可以被扩展为输入的多项式,其中,每个输入位都具有0或1的幂,例如,
系数Cj(m1,m2,…,mk)可以由下式给出:
在各种实施例中,基于表达式(1)来构建实施f的二进制电路。例如,这样的电路可以包括其中可以计算内插项(例如,位积的合取子电路。这样的电路还可以包括其中可以(例如通过对系数Cj(m1,m2,…,mk)=1的位积/>进行异或运算来)计算函数输出位的异或子电路。
有趣的是,发明人认识到,在上述类型的电路中,如果在二进制电路中没有计算出所有系数Cj(m1,m2,…,mk)(j∈{1,…,l})都等于0的位积则有益于SIFA保护。作为为什么避免计算这样的位积是有益的示例,假设k=l=4并且对于1≤j≤4保持有Cj(1,1,0,0)=0。现在假设:变量P12=x1x2是在合取子电路中计算的,并且它在各种合取子电路中仅重复使用一次以将P124=x1x2x4计算为P124=P12x4,并且至少一个Cj(1,1,0,1)等于1。在这个示例中,攻击者可以在P12被写入之后但在计算P124之前翻转P12。然后,如果x4=1,则可以翻转任何Cj(1,1,0,1)=1的输出位yj,但是如果x4=0,则输出可以不受位翻转的影响。因此,攻击者能够找到针对这些输入的无效故障。虽然避免计算这样的乘积通常不能保证结果得到的电路没有无效故障,但是构建避免计算这些乘积的电路至少可以降低无效故障的可能性和/或数量。此外,至少对于基于表达式(1)计算的电路,避免计算这样的乘积就不会不必要地限制可供选择的可用的二进制电路的数量,因为对于没有无效故障的电路来说,避免该计算可以是必要的。
基于上述观察结果,在各种实施例中,用于给定内插项的合取子电路将内插项计算为与第一内插项相对应的第一电路线路和与第二内插项相对应的第二电路线路的合取。例如,内插项(例如,至少一个系数Cj(m1,m2,…,mk)=1的位积可以被计算为与内插项/>相对应的线路的合取:
例如,可以选择第一内插项和第二内插项,使得:
mi=m′i∨m″i对于1≤i≤k
例如以便保证内插项确实评估为与第一内插项和第二内插项的乘积相同的值。也可以选择内插项,使得汉明权重满足:
并且/>例如,可以根据从较少输入位计算的内插项来计算内插项。有趣的是,可以选择第一内插项,使得针对至少一个j∈{1,…,l},系数Cj(m′1,m′2,…,m′k)=1,例如,在异或子电路中使用内插项。类似地,可以选择第二内插项,使得针对至少一个j,系数Cj(m″1,m″2,…,m″k)=1。内插项也可以对应于函数输入位,例如,函数输入位不是作为电路的部分计算的,因此即使函数输入位不被用作异或子电路的输入,在乘积中使用函数输入位也不会引起问题。例如,在异或子电路中使用的函数输入位和内插项可以一起形成多个内插项,例如,与可以用作针对合取子电路的输入线路的线路相对应的项。需要注意的是,电路的“异或”部分中的单个位翻转可以总是有效的。因此,为了找到几乎没有或根本没有无效故障的二进制电路,电路的“与”部分可以有所不同。
因此,编译和/或使用具有上述结构的二进制电路(例如包括合取子电路和/或异或子电路和/或在也被用作输入异或子电路的合取子电路中使用内插项)具有以下优点:例如与构建二进制电路时没有特别注意具有Cj(m′1,m′2,…,m′k)=0(所有j都没有被用作中间结果)的项相比,无效故障的数量和/或可能性降低了。即使无效故障的数量不为零,仍然可以获得与SIFA保护有关的优点。例如,无效故障越少,就越难找到一个无效故障来发起攻击。而且,一方可以根据上述结构生成许多电路作为给另一方的服务,然后另一方可以验证这些电路中的哪些电路实际上提供了很少的无效故障或者没有提供无效故障;能够执行概率检查以降低无效故障的可能性;能够执行抽查以消除具有概率故障的电路等。因此,本文描述的二进制电路提供了各种SIFA保护改进。
图1a示意性地示出了二进制电路100(例如,硬件电路或软件电路)的实施例的示例。发明人认识到具有类似于二进制电路100的结构的二进制电路特别适合用于提高SIFA保护,如稍后更详细地讨论的那样。可以使用根据实施例的电路编译方法来编译二进制电路100。二进制电路100可以包括多条线路和多个门。门可以根据门的零条或多条输入线路来计算门的一条或多条输出线路。
在一些实施例中,二进制电路100可以是硬件电路。硬件电路的门可以是物理门,而线路可以是从门引出或引入门的物理线路。例如,硬件电路可以(例如使用诸如Verilog、VHDL等硬件描述语言)被实施在CMOS中。
在其他实施例中,二进制电路100可以是软件电路。在这样的情况下,门可以对应于操作,而线路可以对应于这样的操作的输入和/或输出。例如,门被表示为操作类型的标识或用于执行该操作的一组指令。线路可以是这样的输入或输出(例如,变量名称、存储器位置等)的标识符。虽然二进制电路100在图1a中以图形方式示出,但是它也可以在存储器中以各种方式表示,例如在下面讨论的图1b和图1c中所示的那样。也可以例如使用硬件描述语言(例如,Verilog、VHDL等)来表示电路。
门可以根据门的零条或多条输入线路来计算门的一条或多条输出线路。例如,众所周知的门包括与门、或门、异或门、非门等。门也可以是常数门,它总是为其输出线路提供相同的值,例如,零或一。门可以有零条、一条、两条或两条以上的输入线路。门可以有一条或一条以上的输出线路。
二进制电路100可以包括多条电路输入线路110。在该特定示例中,示出了四条电路输入线路111、112、113和114,但是应当理解,能够使用任意数量k>1(例如,2、3,至多或至少8,至多或至少16等)的电路输入线路。电路输入线路可以用于向二进制电路提供输入。电路输入线路可以是到电路的一个或多个门的输入线路。二进制电路100还可以包括一条或多条电路输出线路180。电路输出线路可以用于获得二进制电路的输出。例如,在附图中,示出了电路输出线路181、182。能够使用任何数量l≥1(例如,1、2,至多或至少8,至多或至少16等)的电路输出线路。电路输出线路也可以是到电路的一个或多个门的输入线路。电路输出线路可以是电路输入线路。在实施例中,电路输出线路的数量与电路输入线路的数量相同,但是这并不是必须的。
除了电路输入线路110和电路输出线路180之外,二进制电路100通常包括内部线路。内部线路通常是二进制电路的门的输出线路,其充当到二进制电路的一个或多个其他门的输入线路。例如,图1a的线路190-193是内部线路,但是二进制电路100通常还包括额外的内部线路,例如下面讨论的异或子电路171、172的内部线路。二进制电路100通常不包括回路,例如,没有门的输出线路被直接地或通过其他门被间接地连接到门的输入线路。内部线路的数量可以是例如至多或至少1000条或至多或至少10000条。
二进制电路100可以用于计算函数f。函数f可以根据多个函数输入位来计算一个或多个函数输出位,例如,f可以是二进制函数f:{0,1}k→{0,1}l。例如,电路输入线路110可以对应于函数输入位,例如,线路111-114可以对应于相应的函数输入x1,x2,x3,x4。电路输出线路180可以对应于函数输出位,例如,线路181-182可以对应于相应的函数输出y1,y2,其中,(y1,…,yl)=f(x1,…,xk)。通常,当我们说二进制电路100的线路“对应于”函数输入位x1,…,xk的函数f′(x1,…,xk):{0,1}k→{0,1}时,我们的意思是,当电路100的电路输入线路110被设置为针对相应的函数输入位的相应值x′1,…,x′k时,评估二进制电路100将得到在该线路上的值f′(x′1,…,x′k)。例如,函数f′可以是函数输出位、计算f的中间结果或函数输入位本身。例如,利用值x1∈{0,1},…,xk∈{0,1}评估在电路输入线路110上的二进制电路100可以得到具有值y1∈{0,1},…,yl∈{0,1}的电路输出线路180,使得(y1,…,yl)=f(x1,…,xk)。
二进制电路100可以将函数输出位yi计算为函数输入位xi的合取中的一个或多个(例如,乘积/与)的异或。例如,二进制电路100可以包括一个或多个合取子电路160,每个合取子电路计算至少两个函数输入位的合取。二进制电路100还可以包括一个或多个异或子电路170,每个异或子电路将函数输出位计算为与合取相对应的线路(例如,合取子电路的输出位、电路输入线路和/或恒定门的输出线路)的异或。
二进制电路100可以基于将函数f的每个函数输出位表示为内插项的总和。内插项可以是零个或多个函数输入位的乘积。例如,每个函数输出位都能用代数范式来表示。众所周知,二进制函数通常允许这样的表示。作为示例,是将函数f表示为函数输入位的乘积的异或。请注意,函数f也可以具有其他表示形式,例如,它的第一分量可以被表示为/>或者f可以在各个阶段处被表示为表格等。一个或多个函数输出位和多个函数输入位x1,x2,x3,x4的内插项可以一起形成多个内插项,例如,在以上示例中,多个内插项可以是{x1,x1x2,x1x2x3,x2x3,x2x3x4,x2,x3,x4}。
每一个合取子电路160可以计算至少两个函数输入位的合取。这样的合取子电路可以提供与当前内插项相对应的电路线路,例如,在上述示例中,二进制电路100可以包括用于x1x2的合取子电路、用于x1x2x3的合取子电路、用于x2x3的合取子电路和用于x2x3x4的合取子电路。有趣的是,该电路线路可以被提供为与第一内插项相对应的第一电路线路和与第二内插项相对应的第二电路线路的合取,这两个内插项例如都来自多个内插项。例如,第一电路线路可以是另一合取子电路的输出、电路输入线路或恒定门的输出,对于第二电路线路也是类似情况。将内插项计算为其他内插项的合取有利于提高SIFA保护,如在别处更详细地讨论的那样。
例如,附图中示出的是计算电路输入线路x1,111和x2,112的合取x1x2(例如,AND)的合取子电路161。例如,合取子电路161可以包括AND门,该AND门将其输出线路计算为电路输入线路的AND。类似地,该示例中的合取子电路162计算电路输入线路x2,112和x3,113的合取x2x3。在该示例中,另外的合取子电路163计算电路输入线路x1,x2,x3的合取x1x2x3,在这种情况下,通过计算与x1x2相对应的合取子电路161的输出线路和与x2x3相对应的合取子电路162的输出线路的合取来实现这一点。在这个示例中,另一合取子电路164计算电路输入线路x2,x3,x4的合取x2x3x4,在这种情况下,通过计算与x2x3相对应的合取子电路162的输出线路与电路输入线路x4,164的合取来实现这一点。
通常,为了使合取子电路基于第一内插项和第二内插项来计算当前内插项,当前内插项的函数输入位的集合可以是第一内插项的函数输入位的集合与第二内插项的函数输入位的集合的并集。例如,合取子电路161根据x1和x2来计算x1x2等。在一些实施例中,一些或所有当前内插项可以是它们相应的第一内插项与第二内插项的乘积。例如,对于合取子电路161,x1x2可以是x1与x2的乘积。然而,这并不是必须的。例如,对于合取子电路163,x1x2x3可以不是x1x2与x2x3的乘积,但是由于在x2是一个位的情况下因此内插项x1x2x3仍然取与x1x2和x2x3的乘积/>相同的值。如在别处更详细地讨论的那样,作为第一内插项与第二内插项的乘积的内插项可以降低二进制电路具有无效故障的可能性。
一些或所有内插子电路可以通过AND门根据第一电路线路和第二电路线路来计算它们的输出线路,例如,内插子电路可以仅包括这个AND门。这可以使内插子电路的大小最小化。在其他实施例中,例如基于已知的NAND或NOR构造,使用AND门的逻辑等效物来根据第一电路线路和第二电路线路计算输出线路。在实施例中,至少一个合取子电路包括第一电路线路的第一否定、第二电路线路的第二否定、第一否定与第二否定的析取以及所述析取的否定。在实施例中,至少一个合取子电路包括在第一电路线路和第二电路线路上操作的第一NAND门和第二NAND门(这两条输入线路都对应于第一NAND门的输出线路)。在实施例中,至少一个合取子电路包括第一NOR门(这两条输入线路都对应于第一电路线路)、第二NOR门(这两条线路都对应于第一电路线路)以及第三NOR门(输入线路对应于第一NOR门和第二NOR门的输出)。合取子电路的这样的实施方式可以是有益的,例如,在AND门不可用的情况下和/或在允许基于各种形式的各种电路优化的情况下,这能够使得电路更小和/或能够更高效地评估电路。
在一些实施例中,如果在计算中多次(k>1)使用内插项,则能够有少于k个计算内插项的合取子电路161-164。在实施例中,至多一条电路线路对应于每个内插项,例如,至多一个合取子电路计算内插项。这是优选的,因为一般而言,用于将内插项表示为用于下面讨论的异或子电路170的输入的不同线路越少,重复使用的线路就越多。故障的这种传播可以降低无效故障的可能性,从而提供更好的SIFA保护。通常,不同的异或子电路中的内插项的任何重复使用可以至少部分地提供这种优点,例如在与对出现它的每个异或子电路重新计算内插项相比时。例如,在总和中出现的所有内插项中,至少两个函数输出位(超过80%或超过90%)至多可以计算一次或两次。优选地,针对当前内插项提供的每条电路线路用在二进制电路的至少一个异或子电路中。例如,相同的内插项可以由多条电路线路来计算,但是如果每个都发生在异或子电路中,那么任一个中的故障仍然可以影响总体计算输出,从而提高这样的故障有效的可能性。
二进制电路100的每个异或子电路可以计算函数输出位,例如,异或子电路171可以提供计算函数输出位y1的电路输出线路181,而异或子电路172可以提供计算函数输出位y2的电路输出线路182。针对能被表示为内插项的总和的函数输出位,相应的异或子电路可以将其电路输出线路提供为与这些内插项相对应的输入线路的异或。例如,内插项可以包括常数项1,在这种情况下,与该项相对应的输入线路可以由具有产生常数1的输出线路的常数门来计算。内插项还可以包括函数输入位,在这种情况下,输入线路可以是电路输入线路。内插项还可以包括至少两个函数输入位的乘积,在这种情况下,输入线路可以是合取子电路160的输出线路。
一些函数输出位能由仅一个内插项的总和来表示,在这种情况下,异或子电路将其输入线路提供为输出线路,可以经由一个或多个不修改输入线路的门(例如,与1的OR)来实现这一点。一些函数输出位也可以与零相同,在这种情况下,异或子电路能够是提供零的常数门、常数0和常数1的AND等。然而,一般而言,异或子电路171-172中的至少一个具有与多个内插项相对应的多条输入线路。
例如,附图中的异或子电路171可以计算电路输出线路181,电路输出线路181计算函数输出位作为电路输入线路x1,111、计算x1x2的合取子电路161的输出线路和/或计算x1x2x3的合取子电路163的输出线路的异或。类似地,附图中的异或子电路172可以计算电路输出线路182,电路输出线路182计算函数输出位 作为计算为计算x1x2x3的合取子电路163的输出线路、计算x2x3的合取子电路162的输出线路和/或计算x2x3x4的合取子电路164的输出线路的异或。
异或子电路171可以以各种方式计算其输入线路w1,…,wn的异或。例如,异或子电路171可以包括一个或多个异或门,每个异或门计算异或子电路的输入线路的异或或者异或子电路的其他异或门的输出的异或。例如,可以将四条输入线路w1,w2,w3,w4的异或计算为/>等。异或门也可以借助于其他门来计算,例如使用来自NAND门或NOR门的异或门的已知构造来计算。
如所讨论的,从SIFA保护的角度来看,特别需要诸如二进制电路100之类的电路。例如,上述形状的电路可以具有降低的无效故障的数量和/或具有降低的无效故障的概率。作为特定示例,发明人已经发现如上所述的二进制电路对于具有8个函数输入位和8个输出位的随机双射特别有效,但是本发明决不限于这种情况。例如,发明人已经发现,对于大多数8位双射,根据所描述的结构生成电路会导致在所有情况中至少有0.1%的情况产生根本没有无效故障的电路,这对于许多应用来说可以是足够的,例如,生成约1000个电路通常足以使至少一个电路没有无效故障。
图1b示意性地示出了二进制电路100'的实施例的示例。图1b示出了二进制电路100可以如何在存储器中被表示为软件电路的示例。例如,二进制电路100'的数据表示可以包括门条目的列表,门条目包括门的类型和门的输入线路和/或输出线路的标识符。例如,在该附图中,使用了Stefan Tillich和Nigel Smart的“Circuits of Basic FunctionsSuitable For MPC and FHE”(可在https://homes.esat.kuleuven.be/~nsmart/MPC/处获得)的电路表示格式。在该表示中,第一行可以包括二进制电路的门的总数和线路的数量。第二行可以包括第一方的多条电路输入线路、第二方的多条电路输入线路(这里未使用)和多条电路输出线路。接下来的几行可以表示门,该表示包括输入线路的数量、输出线路的数量、输入线路和输出线路的线路编号以及门的类型的标识符。例如,二进制电路100的线路111、112、113、114、190、191、192、193、181和182可以分别被编号为0、1、2、3、4、5、6、7、10和11。在该附图中分别示出了以下各项的表示:AND门161、162、163和164、异或子电路171的两个异或门,以及异或子电路172的两个异或门。
图1c示意性地示出了二进制电路100”的实施例的示例。图1c示出了二进制电路100可以如何在存储器中被表示为软件电路的示例。例如,二进制电路100”的数据表示可以包括用于该二进制电路的每个门的一条指令或一组指令。该组指令可以用于根据门的零个或多个输入值来计算门的一个或多个输出值,这些值对应于电路的线路。例如,电路线路可以是变量、存储器地址等。在附图中示出了用于评估二进制电路100的类似C语言的程序,取输入线路i1,111;i2,112;i3,113和i4,114并引用输出线路o1,181;o2,182作为参数并且计算内部线路v1,190;v2,191;v3,192;v4,193作为程序的变量的值。
图2示意性地示出了用于将函数241编译到二进制电路242中的电路编译设备200的实施例的示例。电路编译设备200可以包括处理器230和/或存储器240。存储器240可以用于数据和/或指令存储。例如,存储器240可以包括处理器230被配置为作用于其上的软件和/或数据。存储器240还可以存储二进制电路242。处理器230可以被实施为一个或多个处理器电路,例如,微处理器、ASIC、FPGA等。存储器240可以包括能由处理器230运行的计算机程序指令。处理器230(可能与存储器240一起)根据电路编译器设备的实施例进行配置。
函数f,241可以根据多个(例如,k>2)函数输入位来计算一个或多个(例如,l≥1)函数输出位,例如,(y1,…,yl)=f(x1,…,xk)。处理器230可以被配置为获得函数f。例如,函数f可以由用户,由设备200的另一单元(例如,本文所述的双射单元)或由另一方来提供。可以以多种形式获得函数f,使得处理器230能够在给定能由处理器230运行的指令运行的函数输入位(例如以表格的形式)的情况下获得函数输出位,该函数输出位可以作为一个或多个多项式,作为远程过程调用等。可以以内插项250的形式获得(例如,接收)函数f。如上面所讨论的,函数f优选是单射的,例如,函数f可以是双射的。发明人已经发现本文描述的技术对于单射/双射函数特别有效。例如,该函数可以包括对称密钥算法的替换框。
电路编译设备将函数231编译到二进制电路242中。二进制电路242可以以各种方式表示,例如,如关于图1a-图1c所解释的那样表示。二进制电路242可以包括电路线路。电路242的电路线路可以包括与多个函数输入位相对应的多条电路输入线路。电路242的电路线路还可以包括与一个或多个函数输出位相对应的一条或多条电路输出线路。电路242还可以包括一个或多个合取子电路260,每个合取子电路计算至少两个函数输入位的合取。电路242还可以包括一个或多个异或子电路270,每个异或子电路计算函数输出位。例如,二进制电路242可以是电路100、100'或100”。
电路编译设备200可以包括被配置为将每个函数输出位表示为内插项的总和的内插单元231。这样的内插项可以是零个或多个函数输入位的乘积。一个或多个函数输出位的内插项可以与多个函数输入位一起形成多个内插项250。在一些实施例中,内插单元231获得(例如,接收)内插项250作为获得函数241的部分。在其他实施例中,内插单元231基于函数241来计算多个内插项250。针对多项式内插的各种技术是已知的并且可以应用于内插单元231中。例如,计算内插项250可以包括:确定与函数输入位相对于函数输出位的多项式相对应的内插系数,并且针对至少一个函数输出位选择具有非零内插系数的内插项。例如,输出位yj=fj(x1,x2,…,xk)可以被扩展为输入的多项式,其中,每个输入位都具有0或1的幂,例如:
多个内插项中的内插项(例如有Cj(m1,m2,…,mk)=1)可以是零个函数输入位的乘积(例如,对应于常数内插项1的(m1,…,mk)=(0,…,0));一个函数输入位的乘积xj(例如,正好是一个mj=1);或多个函数输入位的乘积(例如,多个mj是一)。
内插单元231可以通过基于系数计算一组点中的输出位并计算其总和来确定关于输出位的内插项的内插系数Cj(m1,m2,…,mk),例如:
例如,内插单元231可以获得函数 并确定:
C1(1,0,0,0)=C1(1,1,0,0)=C1(1,1,1,0)=1;
C2(1,1,1,0)=C2(0,1,1,0)=C2(0,1,1,1)=1;
而对于其他j,m1,m2,m3,m4,Cj(m1,m2,m3,m4)=0。
因此,在该示例中,内插单元231可以将函数241的第一函数输出位表示为内插项x1,251;x1x2,252和x1x2x3,253的总和,例如,类似地,内插单元231可以将函数241的第二函数输出位表示为内插项x1x2x3,253;x2x3,254和x2x3x4,255的总和,例如,/>有趣的是,在一些实施例中,函数输出位的内插项重叠,例如,内插项(例如,x1x2x3,253)出现在第一函数输出位y1和第二函数输出位y2的总和中。这可以使得能够在多个异或子电路中重复使用与这些内插项相对应的线路,这可以改善整个计算中引入的故障的传播,例如降低无效故障的可能性。
多个内插项250还可以包括不作为函数输出位的总和中的被加数出现的函数输入位,例如,附图中示出的是函数输入位x2,256;x3,257和x4,258。这样的内插项可以用在合取子电路中,即使它们不出现在函数输出位的总和中也是如此,因为它们可以不是二进制电路的中间结果,因此上述SIFA类型的攻击中的一些攻击可能不适用于它们。
电路编译设备200还可以包括合取编译器单元232。合取编译器单元232可以针对作为多个函数输入位的乘积的多个250个内插项中的每个内插项编译合取子电路。例如,在图2所示的示例中,电路编译设备200可以编译用于内插项252的合取子电路261、用于内插项253的合取子电路262、用于内插项254的合取子电路263和/或用于内插项255的合取子电路263。每个编译的合取子电路261-264可以计算相应的内插项252-255。优选地,合取编译器单元232针对每个内插项仅编译一个合取子电路,例如,一条电路线路对应于每个内插项。虽然如上面所讨论的那样可以针对内插项编译多个合取子电路,但是这会提高无效故障的数量和/或概率。
在实施例中,电路编译设备200按照提高对应内插项的程度(例如提高包括内插项的函数输入位的数量)的顺序编译合取子电路。这可以很方便,因为用于较高程度的内插项的电路可以使用用于较低程度的内插项的电路的线路。然而,这并不是必须的,通常,能够以任何顺序编译合取子电路。
由合取编译器单元232编译的用于当前内插项的合取子电路可以将当前内插项计算为均来自多个内插项250的第一内插项和第二内插项的乘积。如在别处更详细地讨论的那样,这可以帮助提高SIFA保护,因为第一内插项和第二内插项也可以由二进制电路242的异或子电路用来计算函数输出位和/或计算其他内插项。因此,用于计算当前内插项的输入可以使得故障更有可能影响总体计算结果,例如降低无效故障的数量和/或概率。
合取编译器单元232可以被配置为从多个内插项250中选择这个第一内插项和第二内插项,使得当前内插项能被计算为第一内插项与第二内插项的乘积。例如,其乘积组成当前内插项的这组函数输入位可以是其乘积组成第一内插项的这组函数输入位与其乘积组成第二内插项的这组函数输入位的并集。第一内插项和/或第二内插项通常是至少一个函数输入位的乘积,例如,它们可以是单个输入位或者可以是多个输入位的乘积。
例如,合取编译器单元232可以针对当前内插项x1x2,252选择第一内插项x1,251和第二内插项x2,256。合取编译器单元232可以针对当前内插项x2x3,253选择第一内插项x2,256和第二内插项x3,257。合取编译器单元232可以针对当前内插项x1x2x3,254选择第一内插项x1x2,252和第二内插项x2x3,253。合取编译器单元232可以针对当前内插项x2x3x4,255选择第一内插项x2x3,253和第二内插项x4,258。例如,这些选择可以得到如上面所讨论的二进制电路100。
通常,针对至少一些当前内插项,合取编译器单元232能够在第一内插项和第二内插项的多个组合之间进行选择。例如,内插项x1x2x3,254可以被计算为内插x1x2,252与内插项x2x3,253的合取,因为针对所有位x1,x2,x3,内插项x1x2x3等于内插项254也可以被计算为内插项x1,251与合取子电路253的输出x2x3的乘积。特别是针对更加复杂的和/或具有更多输出位的函数,合取编译器单元232在内插项的多个组合之间进行选择会是常见的。
合取编译器单元232可以以许多不同的方式在第一内插项和第二内插项的多种可能组合之间进行选择。例如,合取编译器单元232可以从一组可能的组合中随机选取组合。这可以相对高效地实施,例如,不执行簿记。
合取编译器单元232也可以系统性选取组合,例如,如果合取编译器单元232被重复调用以如别处所讨论的那样针对相同的当前内插项选择第一内插项和第二内插项,则合取编译器单元232可以选择不是先前选择的组合,或者合取编译器单元232可以选择不是先前选择的组合以及针对其他当前内插项选择的组合。这样的系统性方法可以具有以下优点:每个组合最终都会被试用,例如,如果存在引起抗SIFA电路的选择,则它最终会被试用。合取编译器单元232还可以采用各种试探法,例如,偏爱或不偏爱少数内插项的乘积,偏爱或不偏爱第一内插项与第二内插项之间的重叠等。
在实施例中,合取编译器单元232可以选择第一内插项和第二内插项,使得当前内插项等于第一内插项与第二内插项的乘积。例如,合取编译器单元232可以针对内插项x2x3x4,255选择内插项x2x3,253和内插项x4,258。在这样的实施例中,合取编译器单元232可以不针对内插项x1x2x3,254选择第一内插项x1x2,252并选择第二内插项x2x3,253。虽然选择当前内插项作为乘积降低了可能组合的数量,但是对于某些类型和大小的电路来说,它可以产生有益的电路,例如,它具有较低数量/概率的无效故障。合取编译器单元232还可以组合不同的策略,例如,在第一阶段,尝试使用乘积来编译二进制电路,并且如果这没有产生期望的电路,则应用第二阶段,其中,利用不一定被计算为乘积的内插项来编译二进制电路。
在一些情况下,合取编译器单元可能无法选择第一内插项和第二内插项而使得当前内插项能被计算为第一内插项与第二内插项的乘积。例如,可能不存在这样的内插项,例如,多个内插项可以包括乘积x1x3x4,但是不包括乘积x1x3、x1x4或x3x4。也可以已经针对所有当前内插项尝试了第一内插项与第二内插项的所有组合,但是对于较大的电路来说,这种情况的可能性相对较小。
有趣的是,电路编译设备200包括信号通知单元233,在这样的情况下,信号通知单元233用信号通知选择错误。通常,用信号通知选择错误会使得中止对当前电路的编译。例如,电路编译设备200不编译以不同于作为两个内插项的乘积的方式计算当前内插项的子电路。这可以具有以下优点:在由电路编译器200输出的电路中,作为多个函数输入位的乘积的当前内插项总是被计算为内插项的乘积,因此,由电路编译器200输出的电路可以具有较低的无效故障的概率和/或较低的无效故障的数量。
针对信号通知单元233用信号通知选择错误可能有各种反应。例如,可以选择新的用于编译到二进制电路中的函数,例如,如果该函数是利用随机密钥进行的加密,则可以选取不同的随机密钥;如果该函数对利用随机编码进行编码的值进行操作,则可以选取不同的编码等。也可以调整该函数,例如通过根据本文描述的各种实施例用不同函数构成该函数来调整该函数。例如,电路编译器函数也可以被配置为:尝试针对获得的多个函数编译二进制电路,并且仅输出用于没有触发选择错误的那些函数的二进制电路。
在已经选择了第一内插项和第二内插项之后,如果没有选择错误被用信号通知,则合取编译器单元232可以编译计算当前内插项的二进制电路的合取子电路。例如,合取编译器单元232可以将与当前内插项相对应的电路线路提供为与第一内插项相对应的第一电路线路和与第二内插项相对应的第二电路线路的合取。合取编译器单元232可以将结果得到的子电路存储在存储器240中。
例如,合取子电路261可以将内插项x1x2,252计算为与x1相对应的电路输入线路和与x2相对应的电路输入线路的合取。合取子电路262可以将内插项x2x3,253计算为与x2相对应的电路输入线路和与x3相对应的电路输入线路的合取。合取子电路263可以将内插项x1x2x3,254计算为合取子电路261的输出线路与合取子电路262的输出线路的合取。合取子电路264可以将内插项x2x3x4,255计算为合取子电路262的输出线路和与x4相对应的电路输入线路的合取。
在一些实施例中,经编译的合取子电路包括以第一电路线路和第二电路线路作为输入并且以与当前内插项相对应的电路线路作为输出的AND门。这可以使当前合取子电路的大小最小化。然而,其他电路也是可能的,例如,针对AND门的逻辑等效物,如关于二进制电路100的合取子电路所讨论的那样。例如,在实施例中,合取子电路包括第一电路线路的第一否定、第二电路线路的第二否定、第一否定与第二否定的析取以及所述析取的否定。
电路编译设备200还可以包括异或编译器单元234,异或编译器单元234被配置为编译二进制电路242的一个或多个异或子电路270。例如,异或编译器单元234可以针对函数241的每个函数输出位编译异或子电路。通过举例的方式,附图中示出的是异或子电路271和异或子电路272。针对被表示为当前内插项的总和的当前函数输出位,由异或编译器单元234输出的异或子电路可以将与当前函数输出位相对应的电路输出线路提供为与这些当前内插项相对应的线路的异或。异或编译器单元234可以将结果得到的子电路存储在存储器240中。
例如,内插单元231可以已经将函数241的第一函数输出位表示为内插项x1,251;x1x2,252和x1x2x3,253的总和,例如, 异或编译器单元234然后可以将其输出线路提供为函数输入线路x1、与内插项x1x2,252相对应的合取子电路261的输出线路和与内插项x1x2x3,253相对应的合取子电路262的输出线路的异或。类似地,内插单元231可以已经将函数241的第二函数输出位表示为内插项x1x2x3,253;x2x3,254和x2x3x4,255的总和,例如,/>异或编译器单元234然后可以将其输出线路提供为与内插项x1x2x3,253相对应的合取子电路262的输出线路、与内插项x2x3,254相对应的合取子电路263的输出线路和与内插项x2x3x4,255相对应的合取子电路264的输出线路的异或。如关于二进制电路100的异或子电路170所讨论的,异或子电路可以包括异或门或其逻辑等效物,并且可以以各种顺序计算异或,例如,子电路272可以计算 等。
对合取子电路260和异或子电路270的编译的结果可以是计算函数241的二进制电路242。二进制电路242可以被存储在存储器240中。二进制电路242的表示可以包括与子电路要被评估的顺序相对应的合取子电路和/或异或子电路的排序或者与门要被评估的顺序相对应的所有子电路的门的排序。对多个子电路的门的评估可以交错进行,例如在第一合取子电路的第一门和第二门之间交错进行,可以评估另一合取子电路的门。例如,二进制电路242的排序可以对应于单元232和234已经生成相应子电路的顺序。处理器230还可以额外地被配置为修改门的排序,例如根据在用于计算其输入的任何门之后计算门这一约束来随机改变门被评估的顺序。由于门的排序可以影响无效故障的存在和/或数量,因此重新排序门(例如随机排序门)可以具有降低无效故障的数量和/或概率的优点,或者至少存在获得抗SIFA二进制电路242的额外可能性。
电路编译设备200能够生成非常大的一组电路,每个电路都实施相同的函数241。如果该组电路包含没有无效故障的电路,则电路编译设备200可以以随机方式从该组电路中找到没有无效故障的电路。特别地,针对每个具有汉明权重k的内插项,可以有O(3k)种方法来根据两个具有较低汉明权重的内插项计算该内插项;如果要计算所有内插项,则数量可以是(3k-2k+1+1)/2,并且如果不计算一些内插项,则数量可以更少。因此,不同组的合取子电路的数量可以非常大:对于n=8和双射函数f,241,计算具有汉明权重2,…,7的所有内插项,二进制电路242的合取(例如,“AND”)部分的实现方式的数量可以近似为:
该估计结果并不考虑计算内插项的顺序:例如,可以以任意顺序计算具有相同汉明权重的所有内插项等。如果将内插项选择为相应的第一内插项和第二内插项的乘积,例如,前述条件mi=m′i∨m″i被替换为mi=m′i+m″i,因此,如果1)mi=1,或者2)m′i或m″i=1,但不是1)和2)这两者,则该组电路中的电路的数量可以更少。例如,上面的数量(3k-2k+1+1)/2可以变为2k-1-1,并且“AND”部分的实现方式的最大数量可以约为7.76·10208。在实践中,这仍然是足够的,例如足以找到没有无效故障的二进制电路。
图3示意性地示出了电路编译设备300的实施例的示例。电路编译设备300用于将函数341编译到二进制电路342中。电路编译设备可以包括处理器330和/或存储器340。存储器340可以用于数据和/或指令存储。例如,存储器340可以包括处理器330被配置为作用于其上的软件和/或数据。存储器340还可以存储二进制电路342。处理器330可以被实施为一个或多个处理器电路,例如,微处理器、ASIC、FPGA等。存储器340可以包括能由处理器330运行的计算机程序指令。处理器330(可能与存储器340一起)根据电路编译器设备的实施例进行配置。例如,电路编译设备300可以基于电路编译器设备200,电路编译器设备200的单元基于设备200的相应单元。
电路编译设备300可以包括内插单元331,内插单元331被配置为将每个函数输出位表示为内插项的总和,多个函数输入位以及一个或多个函数输出位的内插项一起形成多个内插项350。例如,附图中示出的是内插项351-358。内插单元331可以基于内插单元231。
电路编译设备300可以包括合取编译器单元332,合取编译器单元332被配置为针对多个内插项350中的每个当前内插项编译合取子电路360。例如,附图中示出的是针对内插项352编译的合取子电路361、针对内插项353编译的合取子电路362、针对内插项354编译的合取子电路363以及针对内插项355编译的合取子电路364。为了编译合取子电路,合取编译器单元332可以选择第一内插项和第二内插项,使得当前内插项能被计算为第一内插项与第二内插项的乘积。如果没有第一内插项和第二内插项能够被选择,则信号通知单元333可以用信号通知选择错误。例如,合取编译器单元332可以基于合取编译器单元232并且/或者信号通知单元333可以基于信号通知单元233。
电路编译设备300还可以包括异或编译器单元334,异或编译器单元334被配置为编译二进制电路的一个或多个异或子电路370,例如,异或子电路371和异或子电路372。例如,异或编译器单元334可以基于异或编译器单元234。
有趣的是,电路编译设备300还包括无效性检查单元335。无效性检查单元335可以被配置为确定经编译的二进制电路342是否具有无效故障。例如,无效性检查单元335可以以100%的置信度确定经编译的二进制电路342没有无效故障,这可以具有防止二进制电路342具有无效故障的优点,或者至少使二进制电路342没有无效故障的置信度最小(例如,至少50%或至少90%),这可以具有降低无效故障的概率和/或数量的优点。
在实施例中,如果电路线路的位翻转(例如,单个位故障)影响用于二进制电路的多条电路输入线路的第一实例化的至少一条电路输出线路并且该位翻转不影响用于多条电路输入线路的第二个实例化的电路输出线路,则二进制电路452可以具有无效故障。例如,无效性检查单元335可以检查单个位无效故障。位翻转可以指的是特定线路上的值在为0时被改变为1以及在为1时被改变为0。这样的位翻转可以发生在线路已经被设置之后的任何时间,例如,在线路被第一次使用之前,在线路被第二次使用之前等。
例如,AND门的输出线路的位翻转可以用两个数字m和r来表征。数字可以指示表示位积/>的电路线路。数字r可以指示线路何时被翻转,例如,r=0可以指示线路在被计算之后立即被翻转,而正值可以指示线路在第r次被用作针对另一门的输入之后被翻转。为了检查电路是否存在无效故障,如上面所讨论的,检查AND门的输出线路就足够了。因此,无效性检查单元335可以通过以下操作来检查二进制电路342是否具有无效故障:针对所有(m,r)和(例如由电路评估单元531评估的)所有可能的2k个输入对电路进行评估并检查故障(m,r)是否无效(例如它是否影响针对一些输入的输出而不影响针对其他输入的输出)。
如果二进制电路342具有无效故障,则电路编译设备300可以针对函数341编译新的二进制电路。例如,可以重复对新的二进制电路的检查和编译,直到确定二进制电路342没有无效故障和/或直到已经达到最大尝试次数,直到已经花费了最大量的资源等。编译新的二进制电路可以包括至少使合取编译器单元332针对一个或多个当前内插项(例如针对所有内插项361-364)重复进行选择和编译。
合取编译器单元332对新的第一内插项和第二内插项的任何选择可以将二进制电路342从具有无效故障改变为没有无效故障。例如,在针对多个当前内插项中的一个内插项重复进行选择和编译之后,无效性检查单元335可以检查特定无效故障是否已经消失,如果没有消失,则针对相同或额外的当前内插项执行更多的选择和编译。在特定无效故障已经被补救之后,无效性检查单元335可以任选地检查二进制电路342是否根本没有无效故障。
在实施例中,无效性检查单元335可以通过针对多条电路输入线路的多个实例化的每个实例化确定其中位翻转影响至少一条电路输出线路的电路线路的子集来确定二进制电路342是否具有无效故障。多个实例化可以包括电路输入线路的所有可能实例化,但是这并不是必须的,例如,可以执行概率检查(其中,并不是所有输入都要检查),或者如果已经找到无效故障,则无效性检查单元335可以停止。
存储器340可以包括用于每条电路线路的无效性计数器380,并且如果位翻转影响输出线路,则无效性检查单元335可以增加用于电路线路的无效性计数器。如果电路线路被包括在用于所述多个实例化的第一实例化但不用于所述多个实例化的第二个实例化的电路线路的所述子集中(例如如果用于电路线路的无效性计数器380不等于0或者不等于对其确定了子集的输入的实例化的数量),则无效性检查单元335可以确定二进制电路342具有无效故障。
例如,无效性检查单元335可以采用诸如以下内容的流程来确定电路342是否具有无效故障:针对多条电路输入线路的特定实例化,评估二进制电路342以获得针对电路的每条线路的值。电路线路可以被分析如下:
1.所有电路输出线路都是有效的。
2.未读的输出线路都是无效的。
3.所有其他线路暂时被设置为无效。
4.以相反的顺序分析:针对输出线路v=operator(a、b)或NOT(a)
a.如果v无效,则什么都不做
b.如果v有效,则
i.如果operator是NOT:将a设置为有效
ii.如果operator是XOR:将a、b设置为有效
iii.如果operator是AND:
1.如果value(a)==1,则将b设置为有效
2.如果value(b)==1,则将a设置为有效
相反的顺序被定义为二进制电路342的operator被评估的顺序的相反顺序。可以重复该分析,例如针对输入线路的K个随机实例化重复该分析。计数器380可以维持关于每条线路v有效的频率和/或每条线路无效的频率。有效>1和无效>1的线路v可以被认为是无效的。
作为示例,发明人已经通过实验观察到,当函数f,341是8位的随机双射时,通常在少于1000次随机尝试编译二进制电路后会找到没有无效故障的二进制电路342。如果随机尝试的次数增加,那么成功的机会也会增加。
图4示意性地示出了电路编译设备400的实施例的示例。电路编译设备400用于将函数441编译到二进制电路442中。电路编译设备400可以包括处理器430和/或存储器440。存储器440可以用于数据和/或指令存储。例如,存储器440可以包括处理器430被配置为作用于其上的软件和/或数据。存储器440还可以存储二进制电路442。处理器430可以被实施为一个或多个处理器电路,例如,微处理器、ASIC、FPGA等。存储器440可以包括能由处理器430运行的计算机程序指令。处理器430(可能与存储器440一起)根据电路编译器设备的实施例进行配置。例如,电路编译设备400可以基于电路编译器设备200或300。
电路编译设备400可以包括电路编译单元432,电路编译单元432被配置为将函数441编译到二进制电路442中。例如,电路编译单元432可以包括内插单元231、合取编译器单元232、信号通知单元233和/或异或编译器单元234。或者,电路编译单元432可以包括内插单元331、合取编译器单元332、信号通知单元333、异或编译器单元334和/或无效性检查单元335。如图所示,电路编译单元432可以特别包括信号通知单元433,该信号通知单元433被配置为:如上面所讨论的那样,如果没有第一内插项和第二内插项能够被选择用于函数441的当前内插项,则用信号通知选择错误。
有趣的是,电路编译设备400还可以包括双射单元431。双射单元431可以选择双射函数R,443并且用双射函数R,443来构成函数f,441,例如,或/>电路编译单元432然后可以针对所构成的函数/>或/>441来编译二进制电路442。电路编译设备400还可以包括组合器单元434,该组合器单元434被配置为将针对所构成的函数441所编译的二进制电路442与用于双射函数443的反函数R-1的二进制电路进行组合,例如,/>或/>结果,所组合的二进制电路442可以再次是用于函数441的二进制电路。有趣的是,由于电路编译单元432被应用于所构成的函数441,因此,如果针对原始函数编译二进制电路是有问题的,尽管如此,针对所构成的函数441编译二进制电路也会成功,并且通过与用于反函数R-1的二进制电路进行组合,得出用于原始函数f的二进制电路。
在一些实施例中,电路编译单元432首先针对原始函数f,441来编译二进制电路。这可能会失败,例如,信号通知单元433可以用信号通知选择错误和/或电路编译单元432的无效性检查单元可以检测无效故障。例如,即使在至少将对电路编译单元432的合取编译器单元的选择和编译重复了固定次数或者甚至重复了针对电路编译单元432的合取编译器单元进行的所有可能选择之后,无效性检查单元也可以检测无效故障。如果针对原始函数编译电路失败了,则双射单元431可以选择双射函数,用双射函数来构成函数,并且/或者电路编译器单元432可以尝试编译所构成的函数。如果该操作成功(例如得到经编译的电路),则组合器单元434可以将经编译的电路与用于双射函数的反函数的电路进行组合。该流程可以重复多次,例如直到成功创建二进制电路和/或直到已经达到最大尝试次数等为止。也可以跳过对未经修改的函数f的初始编译并如本文所述的那样基于双射来直接开始针对f编译二进制电路。在任何情况下,已经通过实验发现,用双射函数构成函数是降低甚至几乎消除无法找到函数的SIFA投影的二进制电路的可能性的有效方法。
双射单元431可以以各种方式选择双射函数443,例如,双射函数443可以是随机生成的,从硬编码列表中(例如随机地或顺序地)选择的等。能够使用各种类型的双射函数R,443,例如,能够针对每个可能的输入选择随机图像。用双射函数来构成函数可以包括例如根据所构成的函数和双射函数的描述来构建针对所述函数的输入/输出表,例如本身被提供为输入/输出表。在一些实施例中,双射函数443是仿射映射,例如,映射其中,M是线路性变换并且b是向量。例如,M可以是具有行列式一的位矩阵。仿射映射可以具有以下优点:映射本身及其逆映射都能被高效地实施在二进制电路中,例如,实施仿射映射或其逆映射的二进制电路可以仅包括异或门。如上所述,使用异或门可以对SIFA保护特别有益,因为它们通常不会引入无效故障,例如,用于利用异或门实施的仿射映射的逆映射的二进制电路可以没有无效故障。
双射单元431可以以各种方式生成用于双射函数443的反函数的二进制电路。例如,电路编译单元432可以用于将反函数编译到二进制电路中。如上面所讨论的,如果双射函数443是仿射映射,则反函数也可以是仿射映射,在这种情况下,生成用于反函数的二进制电路可以包括生成与上述映射相对应的异或门。将用于所构成的函数的经编译的二进制电路与用于双射函数的反函数的二进制电路进行组合可以包括将用于所构成的函数的二进制电路的输入线路与用于反函数的电路的输出线路进行连接或者将用于所构成的函数的二进制电路的输出线路与用于反函数的电路的输入线路进行连接,具体取决于这两个函数的组合方式。
图5示意性地示出了函数评估设备500的实施例的示例。函数评估设备500用于评估函数。函数评估设备500可以包括处理器530和/或存储器540。存储器540可以用于数据和/或指令存储。例如,存储器540可以包括处理器530被配置为作用于其上的软件和/或数据。处理器530可以被实施为一个或多个处理器电路,例如,微处理器、ASIC、FPGA等。存储器540可以包括能由处理器530运行的计算机程序指令。处理器530(可能与存储器540一起)根据函数评估设备的实施例进行配置。
存储器540可以被配置为存储用于要被评估的函数的二进制电路542。该函数可以根据多个函数输入位来计算一个或多个函数输出位。每个函数输出位能被表示为内插项的总和。内插项可以是零个或多个函数输入位的乘积。多个函数输入位以及一个或多个函数输出位的内插项可以一起形成多个内插项。二进制电路542可以包括:
电路线路,其包括与多个函数输入位相对应的多条电路输入线路和/或与一个或多个函数输出位相对应的一条或多条电路输出线路;
一个或多个合取子电路,每个合取子电路计算至少两个函数输入位的合取。合取子电路可以将与当前内插项相对应的电路线路提供为与第一内插项相对应的第一电路线路和与第二内插项相对应的第二电路线路的合取;和/或
一个或多个异或子电路,每个异或子电路计算函数输出位。由当前异或子电路计算的函数输出位能被表示为当前内插项的总和。当前异或子电路可以将与函数输出位相对应的电路输出线路提供为与所述当前内插项相对应的线路的异或。
例如,二进制电路542可以是上述二进制电路100、100'或100”。二进制电路可以以各种方式在存储器540中表示,例如被表示为门或子电路的显式列表或者被表示为要由处理器540或能由处理器540运行的解释器执行的一组指令。在一些实施例中,二进制电路542包括二进制电路542的门和/或子电路的至少部分排序,该部分排序定义了电路被评估的顺序。
有趣的是,这里描述的二进制电路具有降低的无效故障的机会和/或数量,从而允许函数评估设备500评估由对SIFA类攻击的易感性降低的二进制电路542计算的函数。在一些实施例中,二进制电路542没有无效故障,从而进一步提高了SIFA保护。
处理器530可以被配置为获得多个输入位,例如获得针对多个输入位中的每个输入位的值。这些值可以由设备的另一单元来提供,由用户经由函数评估设备500的用户接口来提供,由另一设备来提供等。函数评估设备500可以包括电路评估单元531,电路评估单元531被配置为评估在多个输入位上的函数。可以使用本身已知的用于评估二进制电路的技术。电路评估单元531可以根据所提供的部分排序或如上所述的排序来评估二进制电路。评估二进制电路可以得出一个或多个输出位的值。例如,可以将这些值提供给函数评估设备500的另一单元、另一设备或者经由函数评估设备500的用户接口来提供给用户。
在一些实施例中,本文描述的用于将函数编译到二进制电路242、342、442中和/或通过评估二进制电路542来计算函数的技术有益地结合用于将函数编译到份额上的计算中和/或计算基于份额的函数的技术。例如,二进制电路可以是总体计算的第一部分。该第一部分可以被编译到二进制电路(例如,如针对电路编译设备200、300、400所描述的二进制电路)中和/或被评估为二进制电路(例如,如针对函数评估设备500所描述的二进制电路)。第二部分可以被编译到对份额执行的计算中和/或对份额进行评估的计算中,如下所述。
将二进制电路与份额进行组合可以具有以下优点,即,本文描述的基于二进制电路的技术可以应用于它们工作良好的计算部分,例如,电路编译设备200、300、400能够在其上构建更抗SIFA的电路的函数。下面描述的基于份额的技术可以应用于其他计算部分,例如,电路编译设备200、300、400不能在其上找到或不期望能有效地构建更抗SIFA的电路的计算部分。例如,第一部分可以是双射函数,例如,经编码的AES S框或上述各种其他示例。第二部分可以是例如非双射函数,例如,AES加法电路。因此,能够在可能的情况下使用高效的基于二进制电路的技术,而在需要时能够使用效率较低的基于份额的技术。
例如,函数评估设备500可以通过对至少一组值执行第二计算部分来评估关于份额的第二计算部分,其中,存储器540存储该组值。这些值中的每个值都可以被存储为定义该值的多个份额。处理器530可以被配置为对该组值的一组输入值执行计算的操作以获得该组值的输出值。例如,计算可以被给出为二进制电路,其中,处理器530根据二进制电路的门来执行计算的操作。输出值可以由至少一个共享份额和至少一个计算份额来定义。至少一个共享份额还可以定义另外的值,例如,在该操作之前执行的计算的先前操作的输出。执行该操作可以包括根据至少一个共享份额和该组输入值的份额来计算至少一个计算份额。
被存储多个份额si,j的值zi为可以由该多个份额借助于根据多个份额计算该值的重建函数来定义。例如,值vi及其份额si,1,…,si,n可以是位,针对该值的重建函数被定义为份额的异或(XOR)vi=si,1xor…xor si,n
该操作可以基于共享份额来执行,该共享份额还定义了在当前操作之前执行的计算的操作的输出。作为当前操作的部分,可以不需要重新计算和/或修改至少一个共享份额。可以根据先前计算的该操作的该组输入值的一个或多个份额来计算至少一个计算份额。
例如,该操作可以是AND操作。输入值zk可以被存储为份额zk=sk,0 xor sk,1。输入值zl可以被存储为份额zl=sl,0 xor sl,1。在该操作后的输出值zj=zk and zl可以被存储为份额zj=sj,0 xor sj,1,其中,sj,0是共享份额,并且sj,1是计算份额。计算所计算的份额可以包括计算第一值的份额和第二值的份额的一个或多个AND,例如,第一值的份额和第二值的份额的每个对。第一值和第二值的份额也可以被部分组合,例如,可以计算第一值的多个份额与第二值的一个或多个份额的异或的AND等。计算所计算的份额然后还可以包括将共享份额与所计算的一个或多个AND进行异或操作。
例如,处理器530可以使用以下步骤来执行AND操作,中间结果由变量ci表示:
1.c0=sk,1 and sl,1
2.c4=sj,1 xor c0
3.c1=sk,0 and sl,1
4.c5=c4 xor c1
5.c2=sk,1 and sl,0
6.c6=c5 xor c2
7.c3=sk,0 and sl,0
8.sj,0=c6 xor c3
如将理解的,可以以各种方式(例如通过改变步骤的顺序和/或交换输入值的份额)调整以上示例并同时仍然实现相同的结果。
对份额执行的操作也可以是异或操作。输入值zk可以被存储为份额zk=sk,0 xorsk,1。输入值zl可以被存储为份额zl=sl,0 xor sl,1。在该操作后的输出值zj=zk xor zl可以被存储为份额zj=sj,0 xor sj,1,其中,sj,0是共享份额,并且sj,1是计算份额。执行异或运算可以包括计算共享份额、输入值的份额的多个异或和/或计算所述异或所得到的中间结果。例如,以下步骤可以用于执行异或操作,中间结果由变量ci表示:
1.c0=sj,1 xor sk,1
2.c1=c0 xor sl,1
3.c2=c1 xor sk,0
4.sj,0=c2 xor sl,0
有趣的是,定义输出值的每个份额也可以定义相应的另外的值。例如,不仅共享上述共享份额,而且还共享计算份额。例如,计算份额可以在稍后的操作中扮演共享份额的角色,例如,输出值充当针对该稍后操作的另外的值。
这可以具有以下优点:也在基于份额的计算中,输出值的份额中的无效故障的可能性降低和/或使发现无效故障变得更加困难。如果计算份额没有定义另外的值,则它可以是针对有效故障的特别可能的候选物,因为份额中的故障可以仅直接影响当前输出值。然而,如果计算份额确实定义了相应的另外的值,则这可以通过改变输出值和/或相应的另外的值而使得计算份额中的故障影响总体计算输出的可能性更大。例如,计算份额中的故障更有可能是有效的,例如,更可能的是,对于所有输入,故障影响输出,或者可能的是,更难检测到故障是无效的,例如因为有很少不影响输出的输入。
在一些实施例中,针对计算的每个操作或计算的特别敏感部分的每个操作,计算或计算部分的操作的每个输出的每个份额也可以定义相应的另外的值。优选地,针对总体计算的任何输入,可以选取相应的另外的值而使得翻转输出值和对应的另外的值这两者都改变总体计算的输出,并且/或者在该操作之后使用另外的值的份额。可以在对份额的伪计算(例如,对AES轮及其具有随机轮密钥的逆轮的计算)之前和/或之后进行该计算的敏感部分,以便确保有敏感部分的操作能够与之共享份额的足够的另外的值。
针对某些类型的计算,通过这种方式,可以从对份额进行操作的计算的敏感部分中完全消除无效故障,或者至少使其不太可能发生。例如,计算可以包括对诸如AES之类的分组密码的评估。例如,计算可以包括经编码的替换框,例如,AES S框。这样的S框可以被认为是具有8个输入位和8个输出位的二进制电路,它们任选地是逐字节编码的,例如在组合成一个字节的8个位上逐字节编码。该计算可以替代地或额外地包括经编码的加法电路,例如,AES MixColumns操作的经编码的加法电路。通过使用逐字节编码,可以将加法视为具有16个输入位和8个输出位的电路。使用半字节编码,可以将加法视为具有8个输入位和4个输出位的电路。例如,针对这样的子计算的一个或多个子计算的操作,定义输出值的每个份额还定义相应的另外的值。AES相关实施例中的相应的另外的值可以属于AES状态,例如,明文的不同部分的AES状态。通过构建AES函数,这可以保证这样的共享份额中的任何故障都会引起经修改的密文。
评估关于份额的第二计算部分还可以包括获得一个或多个值的份额(例如,第二计算部分的输入)和/或根据它们的份额来重建值(例如,第二计算部分的输出)。将值共享到其份额中通常包括使用一个或多个随机化输入(例如,值或其他份额或其他中间值)根据该值来计算该值的份额。例如,随机化输入可以有助于确保没有单个份额,或者有时甚至没有严格的份额子集,具体以可预测的方式取决于该值。各种共享(例如,秘密共享值的方式是已知的,例如使用k-1个随机化输入位r1,…,rk-1来实现这一点,位V可以被共享为等。重建可以包括将重建函数应用于表示相应值的相应的多个份额。例如,重建可以包括计算份额的异或等。
如上面所讨论的,各种电路编译设备(例如,设备200、300或400)可以被配置为将第二部分编译到对份额执行的计算中。编译可以包括生成指令以使处理器系统对份额执行第二计算部分。第二计算部分可以在至少一组值上进行。存储器240、340、440可以被配置为存储针对该组值的寻址信息。该组值中的每个值可以是由多个份额表示的共享值。针对共享值的寻址信息可以包括针对共享值的多个份额的份额地址。
处理器230、330、430可以被配置为生成一组指令来执行计算的操作。该操作可以对一组输入值来进行以获得如上所述的输出值。输入值和输出值可以是共享值。例如,处理器可以选择与输入值不同的另外的共享值的份额的共享地址,这个另外的值是第二计算部分的先前操作的输出。处理器可以生成用于根据一组输入值的至少一个或多个共享份额来计算至少一个计算的份额的指令。
电路编译设备的存储器可以被配置为存储寻址空间中的针对该值的寻址信息。这些值可以是共享份额。针对共享值的寻址信息可以包括针对该值的多个份额的共享地址。例如,共享地址可以包括该份额的存储器地址、阵列索引和变量名称中的一项或多项。例如,由电路编译设备生成的指令可以包括加载指令,该加载指令例如用于从存储器地址处的存储器进行读取,用于在阵列索引处读取阵列,或者用于读取变量。由电路编译设备生成的指令还可以包括存储指令,例如,用于写入存储器地址处的存储器的指令、用于写入阵列处的阵列的指令或用于写入变量的指令。
电路编译设备的处理器可以生成一组指令以执行要执行的计算的操作。例如,处理器可以将结果得到的指令存储在电路编译设备的存储器中。处理器可以针对例如来自第二计算部分的电路的多个操作(例如,第二计算部分的每个操作)生成这样的指令。
为了生成该组指令,处理器可以被配置为选择与输入值不同的另外的值的份额的共享地址。例如,处理器可以在先前已经生成了用于将该份额计算为(例如第二计算部分的)另一操作的输出值的份额的指令。共享地址可以是其他操作的输出值的地址。上面已经讨论了用于选择另外的份额的各种考量,例如,优选地,对于总体计算的任何输入,可以选取相应的另外的值而使得翻转输出值和对应的另外的值这两者能够改变总体计算的输出,并且/或者在操作之后使用另外的值的份额。
有趣的是,可以确保,针对第二计算部分的每个操作或第二计算部分的特别敏感部分的每个操作,计算或计算部分的操作的每个输出的每个份额也可以定义相应的另外的值。例如,处理器可以生成用于执行伪计算的指令(例如,使用随机密钥的AES轮及其逆运算),伪计算要在第二计算部分或敏感部分之前或之后执行,伪计算与第二计算部分或敏感部分共享份额,以便确保操作的每个输出的每个份额还定义了另外的值。
处理器可以被配置为使用共享地址来生成指令。该指令可以用于根据一组输入值的至少一个或多个共享份额来计算至少一个计算的份额。例如,指令可以是汇编代码或编程语言(例如,诸如C语言之类的编译语言或诸如Python之类的解释语言)中的指令。指令通常包括用于获得操作输入值的份额和/或另外的共享值的份额的加载指令。指令通常还包括用于存储操作输出值的份额的存储指令。
处理器还可以被配置为将所生成的用于各种操作(例如用于如上面所讨论的计算和/或额外操作的操作)的指令收集到总的一组指令以使处理器系统执行第二计算部分。处理器还可以将二进制电路表示为用于执行第一计算部分的另外的一组指令和/或将该总的一组指令与另外的一组指令进行组合以获得用于执行总体计算的一组指令。
本文描述的各种设备的运行可以被实施在处理器(例如,处理器电路)中,在本文中示出了其示例。图2-5示出了功能单元,其可以是处理器的功能单元。例如,图2-5中的每幅图都可以用作处理器的可能的功能组织形式的蓝图。例如,图2-5中示出的功能单元可以全部或部分地以被存储在相应设备处(例如被存储在相应设备200、300、400、500的电子存储器中)的计算机指令来实施并且能由设备的微处理器来运行。在混合式实施例中,功能单元部分地以硬件来实施(例如被实施为协处理器,例如,加密协处理器)并且部分地以在设备200、300、400、500上存储和运行的软件来实施。
电路编译设备和函数评估设备可以具有用户接口,该用户接口可以包括众所周知的元件,例如,一个或多个按钮、键盘、显示器、触摸屏等。用户接口可以被布置用于容纳用户交互以用于将函数编译到二进制电路中或者评估作为二进制电路的函数。
存储器240、340、440、540可以被实施为电子存储器(例如,闪存存储器)或磁性存储器(例如,硬盘)等。存储器可以包括一起构成存储器的多个离散存储器,例如,存储器可以分布在多个分布式子存储器上。存储器也可以是临时存储器,例如,RAM。在临时存储器的情况下,存储器包含一些用于在使用前获得数据(例如通过任选的网络连接(未示出)获得数据)的模块。存储器可以具有易失性部分和非易失性部分。存储器中的部分存储器可以是只读的。存储器240、340、440、540可以是存储装置。
通常,设备200、300、400、500均包括微处理器,该微处理器运行被存储在相应设备中的适当软件;例如,该软件可以已经被下载和/或已经被存储在对应的存储器中,该存储器例如为诸如RAM之类的易失性存储器或诸如闪存存储器之类的非易失性存储器。备选地,设备可以全部或部分地以可编程逻辑单元来实施,例如被实施为现场可编程门阵列(FPGA)。设备可以全部或部分地被实施为所谓的专用集成电路(ASIC),例如,为它们的特定用途而定制的集成电路(IC)。例如,电路可以(例如使用硬件描述语言(例如,Verilog、VHDL等))以CMOS来实施。
在实施例中,电路编译设备包括内插电路、合取编译器电路、信号通知电路和/或异或编译器电路。电路编译设备可以包括额外的电路,例如,无效性检查电路、双射电路和/或组合器电路。在实施例中,函数评估设备包括电路评估电路。电路实施了本文描述的对应单元。电路可以是处理器电路和存储电路,处理器电路运行在存储电路中以电子方式表示的指令。处理器电路可以以分布式方式来实施,例如被实施为多个子处理器电路。电路也可以是FPGA、ASIC等。
图6a示意性地示出了电路编译方法600的实施例的示例。电路编译方法600可以用于将函数编译到二进制电路中。该函数可以根据多个函数输入位来计算一个或多个函数输出位。二进制电路可以包括电路线路,该电路线路包括与多个函数输入位相对应的多条电路输入线路和与一个或多个函数输出位相对应的一条或多条电路输出线路。二进制电路还可以包括一个或多个合取子电路和一个或多个异或子电路,每个合取子电路计算至少两个函数输入位的合取,每个异或子电路计算函数输出位。
电路编译方法600可以包括将每个函数输出位表示610为内插项的总和。内插项可以是零个或多个函数输入位的乘积。多个函数输入位以及一个或多个函数输出位的内插项可以一起形成多个内插项。
电路编译方法600还可以包括:针对多个内插项中的每个当前内插项,如果当前内插项是多个函数输入位的乘积,则从多个内插项中选择620第一内插项和第二内插项。当前内插项能被计算为第一内插项与第二内插项的乘积。如果没有第一内插项和第二内插项能够被选择,则选择620可以包括用信号通知630选择错误。
电路编译方法600还可以包括编译640计算当前内插项的二进制电路的合取子电路,包括将与当前内插项相对应的电路线路提供为与第一内插项相对应的第一电路线路和与第二内插项相对应的第二电路线路的合取。
电路编译方法600还可以包括编译二进制电路的一个或多个异或子电路。由当前异或子电路计算的函数输出位可以被表示为当前内插项的总和。编译650当前异或子电路可以包括将与函数输出位相对应的电路输出线路提供为与所述当前内插项相对应的线路的异或。
图6b示意性地示出了电路编译方法700的实施例的示例。电路编译方法700可以基于电路编译方法600,例如,电路编译方法700可以包括:表示710函数输出位,选择720第一内插项和第二内插项,用信号通知730选择错误,编译740合取子电路,和/或编译750当前异或子电路,这些操作类似于电路编译方法600的对应步骤。
有趣的是,电路编译方法700还可以包括确定760二进制电路是否具有无效故障,并且如果二进制电路具有无效故障,则至少重复对一个或多个当前内插项的选择720和编译740。因此,SIFA保护可以如关于电路编译设备300所讨论的那样得到提高。
图6c示意性地示出了电路编译方法800的实施例的示例。电路编译方法800可以包括选择810双射函数。电路编译方法800还可以包括用双射函数来构成820该函数。电路编译方法800还可以包括针对所构成的函数来编译830二进制电路。编译830可以包括用信号通知831选择错误。例如,编译830可以包括电路编译方法600或700。电路编译方法800还可以包括:如果选择错误被信号通知,则重复选择810、构成820和编译830。电路编译方法800还可以包括将针对所构成的函数所编译的二进制电路与用于双射函数的反函数的二进制电路进行组合840。在实施例中,电路编译方法以编译830原始函数开始,并且如果编译原始函数未能产生二进制电路,例如未能产生没有无效故障的电路,则仅执行选择810、构成820和/或组合840。
图6d示意性地示出了函数评估方法900的实施例的示例。函数评估方法900可以用于评估函数。该函数可以根据多个函数输入位来计算一个或多个函数输出位。每个函数输出位能被表示为内插项的总和。内插项可以是零个或多个函数输入位的乘积。多个函数输入位以及一个或多个函数输出位的内插项可以一起形成多个内插项。
函数评估方法900可以包括获得910针对函数的二进制电路。二进制电路可以包括:
电路线路,其包括与多个函数输入位相对应的多条电路输入线路和/或与一个或多个函数输出位相对应的一条或多条电路输出线路;
一个或多个合取子电路,每个合取子电路计算至少两个函数输入位的合取。合取子电路可以将与当前内插项相对应的电路线路提供为与第一内插项相对应的第一电路线路和与第二内插项相对应的第二电路线路的合取;和/或
一个或多个异或子电路,每个异或子电路计算函数输出位。由当前异或子电路计算的函数输出位能被表示为当前内插项的总和。当前异或子电路可以将与函数输出位相对应的电路输出线路提供为与所述当前内插项相对应的线路的异或。
函数评估方法900还可以包括获得920多个输入位。函数评估方法900还可以包括通过评估二进制电路来评估930在多个输入位上的函数。
可以有许多不同方式来运行这些方法,这对于本领域技术人员来说是显而易见的。例如,能够改变步骤的顺序或者可以并行运行一些步骤。此外,在步骤之间可以插入其他方法步骤。插入的步骤可以表示(例如本文所述的)方法的细化,也可以与该方法无关。例如,可以至少部分地并行运行步骤640和650。此外,在开始下一步骤之前,可能尚未完全完成给定的步骤。
可以使用软件来运行方法的实施例,该软件包括用于使处理器系统执行方法600、700、800和/或900的指令。软件可以只包括由系统的特定子实体采用的那些步骤。软件可以被存储在合适的存储介质(例如,硬盘、软盘、存储器、光盘等)中。软件可以作为信号沿着有线或无线或使用数据网络(例如,互联网)来发送。该软件可以在服务器上下载和/或远程使用。可以使用被布置为配置可编程逻辑单元(例如,现场可编程门阵列(FPGA))的位流来运行该方法的实施例以执行该方法。
应当理解,本发明还扩展到计算机程序,特别是在载体上或在载体中的计算机程序,该计算机程序适于将本发明付诸实践。该程序可以是源代码、目标代码、代码中间源和目标代码的形式(例如,部分编译的形式)或者适合用于实施该方法的实施例的任何其他形式。涉及计算机程序产品的实施例包括与所阐述的方法中的至少一种方法的处理步骤中的每个处理步骤相对应的计算机可执行指令。这些指令可以被细分成子例程和/或被存储在一个或多个可以静态或动态链接的文件中。涉及计算机程序产品的另一实施例包括与所阐述的系统和/或产品中的至少一项的模块中的每个模块相对应的计算机可执行指令。
图7a示出了根据实施例的具有包括计算机程序1020的可写部分1010的计算机可读介质1000,计算机程序1020包括用于使处理器系统执行电路编译方法和/或函数评估方法的指令。计算机程序1020可以作为物理标记或借助于计算机可读介质1000的磁化而被实施在计算机可读介质1000上。然而,任何其他合适的实施例也是可以想到的。此外,应当理解,虽然计算机可读介质1000在这里被示为光盘,但是计算机可读介质1000也可以是任何合适的计算机可读介质,例如,硬盘、固态存储器、闪存存储器等,并且可以是不可记录的或可记录的。计算机程序1020包括用于使处理器系统执行所述电路编译方法和/或函数评估方法的指令。
图7b示出了根据实施例的处理器系统1140的示意性表示。处理器系统包括一个或多个集成电路1110。图7b示意性地示出了一个或多个集成电路1110的架构。电路1110包括处理单元1120,例如,CPU,其用于运行计算机程序部件以运行根据实施例的方法和/或实施其模块或单元。电路1110包括用于存储编程代码、数据等的存储器1122。存储器1122的部分可以是只读的。电路1110可以包括通信元件1126,例如,天线、连接器或这两者等。电路1110可以包括专用集成电路1124,其用于执行在该方法中定义的部分或全部处理。处理器1120、存储器1122、专用IC1124和通信元件1126可以经由互连1130(例如,总线)而彼此连接。处理器系统1110可以被布置用于分别使用天线和/或连接器的接触式通信和/或非接触式通信。
例如,在实施例中,处理器系统1140(例如,电路编译设备200、300、400或函数评估设备500)可以包括处理器电路和存储器电路,处理器被布置为运行被存储在存储器电路中的软件。例如,处理器电路可以是Intel Core i7处理器、ARM Cortex-R8等。在实施例中,处理器电路可以是ARM Cortex M0。存储器电路可以是ROM电路或非易失性存储器(例如,闪存存储器)。存储器电路也可以是易失性存储器(例如,SRAM存储器)。在后一种情况下,该设备可以包括被布置用于提供软件的非易失性软件接口(例如,硬盘驱动器、网络接口等)。
需要注意,上面提到的实施例是对本发明的说明而非限制,本领域技术人员将能够设计出许多替代实施例。
在权利要求中,置于括号内的任何附图标记均不应被解读为对权利要求的限制。动词“包括”及其词性变化的使用不排除权利要求中记载的那些以外的其他元件或步骤的存在。元件前的词语“一”或“一个”不排除多个这样的元件的存在。本发明可以借助于包括若干不同元件的硬件,以及借助于被适当编程的计算机来实施。在列举了若干单元的装置型权利要求中,这些单元中的若干可以由同一项硬件来实施。某些措施被记载在互不相同的从属权利要求中的事实并不指示不能有利地使用这些措施的组合。
在权利要求中,括号内的附图标记指代示例性实施例的附图中的附图标记或实施例的公式,由此提高了权利要求的可理解性。这些附图标记不应被解释为限制权利要求。

Claims (15)

1.一种用于将函数编译到二进制电路中的电路编译设备(200),所述函数根据多个函数输入位来计算一个或多个函数输出位,所述二进制电路包括电路线路,所述电路线路包括与所述多个函数输入位相对应的多条电路输入线路和与所述一个或多个函数输出位相对应的一条或多条电路输出线路,所述二进制电路还包括一个或多个合取子电路和一个或多个异或子电路,每个合取子电路计算至少两个函数输入位的合取,每个异或子电路计算函数输出位,所述电路编译设备包括:
存储器(240),其被配置为存储所述二进制电路;
处理器(230),其被配置为:
将每个函数输出位表示为内插项的总和,内插项是零个或多个函数输入位的乘积,所述多个函数输入位以及所述一个或多个函数输出位的所述内插项一起形成多个内插项;
对于所述多个内插项中的每个当前内插项,如果所述当前内插项是多个函数输入位的乘积,则进行以下操作:
从所述多个内插项中选择第一内插项和第二内插项,所述当前内插项能被计算为所述第一内插项与所述第二内插项的乘积,包括在没有第一内插项和第二内插项能够被选择的情况下用信号通知选择错误;并且
编译计算所述当前内插项的所述二进制电路的合取子电路,包括将与所述当前内插项相对应的电路线路提供为与所述第一内插项相对应的第一电路线路和与所述第二内插项相对应的第二电路线路的合取;并且
编译所述二进制电路的一个或多个异或子电路,由当前异或子电路计算的所述函数输出位被表示为当前内插项的总和,编译所述当前异或子电路包括将与所述函数输出位相对应的电路输出线路提供为与所述当前内插项相对应的线路的异或。
2.根据权利要求1所述的电路编译设备,其中,在所述二进制电路的至少一个异或子电路中使用与当前内插项相对应的每条提供的电路线路。
3.根据前述权利要求中的任一项所述的电路编译设备(300),其中,所述处理器还被配置为:确定所述二进制电路是否具有无效故障,并且如果所述二进制电路具有无效故障,则至少重复对一个或多个当前内插项的所述选择和所述编译。
4.根据权利要求3所述的电路编译设备,其中,确定所述二进制电路是否具有无效故障包括:
对于所述多条电路输入线路的多个实例化的每个实例化,确定所述电路线路的以下子集:在所述子集中,位翻转影响至少一条电路输出线路;
如果电路线路被包括在所述电路线路的以下子集中,则确定所述二进制电路具有无效故障:所述子集用于所述多个实例化的第一实例化但不用于所述多个实例化的第二实例化。
5.根据前述权利要求中的任一项所述的电路编译设备(400),其中,所述处理器还被配置为:
选择双射函数并且用所述双射函数来构成所述函数;
将针对所构成的函数所编译的二进制电路与用于所述双射函数的反函数的二进制电路进行组合。
6.根据权利要求5所述的电路编译设备,其中,所述处理器被配置为:如果选择错误被用信号通知,则重复对所述双射函数的所述选择、用所述双射函数对所述函数的所述构成以及对所构成的函数的所述编译。
7.根据前述权利要求中的任一项所述的电路编译设备,其中,所述函数包括对称密钥算法的替换框。
8.根据前述权利要求中的任一项所述的电路编译设备,其中,所述函数是单射的。
9.根据前述权利要求中的任一项所述的电路编译设备,其中,至多一条电路线路对应于每个内插项。
10.一种用于将函数编译到二进制电路中的电路编译方法(600),所述函数根据多个函数输入位来计算一个或多个函数输出位,所述二进制电路包括电路线路,所述电路线路包括与所述多个函数输入位相对应的多条电路输入线路和与所述一个或多个函数输出位相对应的一条或多条电路输出线路,所述二进制电路还包括一个或多个合取子电路和一个或多个异或子电路,每个合取子电路计算至少两个函数输入位的合取,每个异或子电路计算函数输出位,所述电路的编译方法包括:
将每个函数输出位表示为内插项的总和,内插项是零个或多个函数输入位的乘积,所述多个函数输入位以及所述一个或多个函数输出位的所述内插项一起形成多个内插项;
对于所述多个内插项中的每个当前内插项,如果所述当前内插项是多个函数输入位的乘积,则进行以下操作:
从所述多个内插项中选择第一内插项和第二内插项,所述当前内插项能被计算为所述第一内插项与所述第二内插项的乘积,包括在没有第一内插项和第二内插项能够被选择的情况下用信号通知选择错误;并且
编译计算所述当前内插项的所述二进制电路的合取子电路,包括将与所述当前内插项相对应的电路线路提供为与所述第一内插项相对应的第一电路线路和与所述第二内插项相对应的第二电路线路的合取;并且
编译所述二进制电路的一个或多个异或子电路,由当前异或子电路计算的所述函数输出位被表示为当前内插项的总和,编译所述当前异或子电路包括将与所述函数输出位相对应的电路输出线路提供为与所述当前内插项相对应的线路的异或。
11.一种用于使用根据权利要求10所述的电路编译方法编译的函数的二进制电路。
12.一种用于评估函数的函数评估设备(500),所述函数根据多个函数输入位来计算一个或多个函数输出位,每个函数输出位能被表示为内插项的总和,内插项是零个或多个函数输入位的乘积,所述多个函数输入位以及所述一个或多个函数输出位的所述内插项一起形成多个内插项,所述函数评估设备包括:
存储器(540),其被配置为存储用于所述函数的二进制电路,所述二进制电路包括:
电路线路,其包括与所述多个函数输入位相对应的多条电路输入线路和与所述一个或多个函数输出位相对应的一条或多条电路输出线路;
一个或多个合取子电路,每个合取子电路计算至少两个函数输入位的合取,合取子电路将与当前内插项相对应的电路线路提供为与第一内插项相对应的第一电路线路和与第二内插项相对应的第二电路线路的合取;并且
一个或多个异或子电路,每个异或子电路计算函数输出位,由当前异或子电路计算的所述函数输出位能被表示为当前内插项的总和,所述当前异或子电路将与所述函数输出位相对应的电路输出线路提供为与所述当前内插项相对应的线路的异或;以及
处理器(530),其被配置为:获得所述多个输入位,并且通过评估所述二进制电路来评估在所述多个输入位上的所述函数。
13.根据权利要求12所述的函数评估设备,其中,所述二进制电路没有无效故障。
14.一种用于评估函数的函数评估方法(900),所述函数根据多个函数输入位来计算一个或多个函数输出位,每个函数输出位能被表示为内插项的总和,内插项是零个或多个函数输入位的乘积,所述多个函数输入位以及所述一个或多个函数输出位的所述内插项一起形成多个内插项,所述函数评估方法包括:
获得用于所述函数的二进制电路,所述二进制电路包括:
电路线路,其包括与所述多个函数输入位相对应的多条电路输入线路和与所述一个或多个函数输出位相对应的一条或多条电路输出线路;
一个或多个合取子电路,每个合取子电路计算至少两个函数输入位的合取,合取子电路将与当前内插项相对应的电路线路提供为与第一内插项相对应的第一电路线路和与第二内插项相对应的第二电路线路的合取;并且
一个或多个异或子电路,每个异或子电路计算函数输出位,由当前异或子电路计算的所述函数输出位能被表示为当前内插项的总和,所述当前异或子电路将与所述函数输出位相对应的电路输出线路提供为与所述当前内插项相对应的线路的异或;
获得所述多个输入位;并且
通过评估所述二进制电路来评估在所述多个输入位上的所述函数。
15.一种包括表示指令(1020)的数据的瞬态或非瞬态计算机可读介质(1000),所述指令使处理器系统执行根据权利要求10和/或权利要求14所述的方法。
CN201980092169.5A 2018-12-19 2019-12-13 电路编译设备和电路评估设备 Active CN113475034B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP18213936.0 2018-12-19
EP18213936.0A EP3672139A1 (en) 2018-12-19 2018-12-19 A circuit compiling device and circuit evaluation device
PCT/EP2019/085000 WO2020126863A1 (en) 2018-12-19 2019-12-13 A circuit compiling device and circuit evaluation device

Publications (2)

Publication Number Publication Date
CN113475034A CN113475034A (zh) 2021-10-01
CN113475034B true CN113475034B (zh) 2023-10-17

Family

ID=65009536

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980092169.5A Active CN113475034B (zh) 2018-12-19 2019-12-13 电路编译设备和电路评估设备

Country Status (4)

Country Link
US (1) US11968290B2 (zh)
EP (2) EP3672139A1 (zh)
CN (1) CN113475034B (zh)
WO (1) WO2020126863A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113821826A (zh) * 2021-09-30 2021-12-21 支付宝(杭州)信息技术有限公司 实现异或分片输入输出的布尔电路、方法和系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5499191A (en) * 1992-06-15 1996-03-12 Minc Incorporated Multi-level logic optimization in programmable logic devices
JP2001034162A (ja) * 1999-07-19 2001-02-09 Nippon Telegr & Teleph Corp <Ntt> 暗号アルゴリズムの強度評価に用いるデータ変化探索装置及び方法、この方法を記録した記録媒体
US7187769B1 (en) * 1998-06-02 2007-03-06 Nippon Telegraph And Telephone Public Corporation Method and apparatus for evaluating the strength of an encryption
EP2940677A1 (en) * 2014-04-28 2015-11-04 Nxp B.V. Method for including an implicit integrity or authenticity check into a white-box implementation
CN107273724A (zh) * 2016-03-30 2017-10-20 恩智浦有限公司 为白盒实施方案的输入和输出加水印

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003063060A2 (en) * 2002-01-24 2003-07-31 Broadcom Corporation Asymmetric digital subscriber line modem apparatus and methods therefor
EP1706946A4 (en) * 2003-12-01 2006-10-18 Digital Fountain Inc PROCESSING DATA AGAINST ERASURES USING SUB-SYMBOL CODES
US8593175B2 (en) * 2011-12-15 2013-11-26 Micron Technology, Inc. Boolean logic in a state machine lattice
US9665699B2 (en) * 2015-03-13 2017-05-30 Nxp B.V. Implementing padding in a white-box implementation
US10685587B2 (en) * 2015-04-30 2020-06-16 Koninklijke Philips N.V. Cryptographic device for calculating a block cipher
NL2015745B1 (en) 2015-11-09 2017-05-26 Koninklijke Philips Nv A cryptographic device arranged to compute a target block cipher.
EP3664359A1 (en) 2018-12-07 2020-06-10 Koninklijke Philips N.V. A computation device using shared shares

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5499191A (en) * 1992-06-15 1996-03-12 Minc Incorporated Multi-level logic optimization in programmable logic devices
US7187769B1 (en) * 1998-06-02 2007-03-06 Nippon Telegraph And Telephone Public Corporation Method and apparatus for evaluating the strength of an encryption
JP2001034162A (ja) * 1999-07-19 2001-02-09 Nippon Telegr & Teleph Corp <Ntt> 暗号アルゴリズムの強度評価に用いるデータ変化探索装置及び方法、この方法を記録した記録媒体
EP2940677A1 (en) * 2014-04-28 2015-11-04 Nxp B.V. Method for including an implicit integrity or authenticity check into a white-box implementation
CN107273724A (zh) * 2016-03-30 2017-10-20 恩智浦有限公司 为白盒实施方案的输入和输出加水印

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
一种保护芯片设计的多变量加密及其电路结构;赵险峰;李宁;邓艺;;电子学报(06);全文 *

Also Published As

Publication number Publication date
US11968290B2 (en) 2024-04-23
EP3900255B1 (en) 2022-06-29
EP3900255A1 (en) 2021-10-27
WO2020126863A1 (en) 2020-06-25
CN113475034A (zh) 2021-10-01
EP3672139A1 (en) 2020-06-24
US20220029781A1 (en) 2022-01-27

Similar Documents

Publication Publication Date Title
Saarinen HILA5: On reliability, reconciliation, and error correction for Ring-LWE encryption
US11362802B2 (en) Cryptographic device arranged to compute a target block cipher
JP5851074B2 (ja) 関数の計算のためのルックアップテーブルを記憶した計算装置
JP7065888B6 (ja) 暗号装置及び方法
CN109661792B (zh) 计算分组密码的设备和方法
JPWO2007126049A1 (ja) プログラム難読化システム、プログラム難読化装置及びプログラム難読化方法
JP5426540B2 (ja) 公開行列に基づき、誤り訂正符号の復号を用いて認証を行う方法
US20200097256A1 (en) A calculation device for encoded addition
WO2017063986A1 (en) A cryptographic device and an encoding device
EP3891925B1 (en) A computation device using shared shares
Guimarães et al. Optimized implementation of QC‐MDPC code‐based cryptography
EP3078154B1 (en) A computing device for iterative application of table networks
CN113475034B (zh) 电路编译设备和电路评估设备
RU2710670C2 (ru) Криптографическая система и способ
JP6890589B2 (ja) 計算デバイス及び方法
Mars et al. Digitally Mutating NV-FPGAs into Physically Clone-Resistant Units
Southern The side-channel resistance of error correcting codes for post quantum cryptography
Nilsson Decryption Failure Attacks on Post-Quantum Cryptography
WO2024086243A1 (en) Protection of polynomial cryptographic operations against side-channel attacks with change-of-variable transformations
CN117278195A (zh) 一种攻击模型的验证方法及装置
JP2003302901A (ja) セルラーオートマタを適用したハッシュ値算出処理方法およびデータ処理装置
Medwed Protecting security-aware devices against implementation attacks

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