CN113273131A - 使用共享的份额的计算设备 - Google Patents

使用共享的份额的计算设备 Download PDF

Info

Publication number
CN113273131A
CN113273131A CN201980080902.1A CN201980080902A CN113273131A CN 113273131 A CN113273131 A CN 113273131A CN 201980080902 A CN201980080902 A CN 201980080902A CN 113273131 A CN113273131 A CN 113273131A
Authority
CN
China
Prior art keywords
share
value
values
shares
shared
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.)
Pending
Application number
CN201980080902.1A
Other languages
English (en)
Inventor
S·J·A·德雷赫
R·里特曼
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 CN113273131A publication Critical patent/CN113273131A/zh
Pending legal-status Critical Current

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/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/085Secret sharing or secret splitting, e.g. threshold schemes
    • 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/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • 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/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0894Escrow, recovery or storing of secret information, e.g. secret key escrow or cryptographic key storage
    • 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/12Details relating to cryptographic hardware or logic circuitry
    • H04L2209/125Parallelization or pipelining, e.g. for accelerating processing of cryptographic 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/16Obfuscation or hiding, e.g. involving white box

Abstract

一些实施例针对一种用于对至少一组值执行计算的计算设备。这些值作为定义所述值的多个份额而被存储在存储器中。可以对一组输入值执行计算的操作以获得输出值。输出值可以由至少一个共享的份额和至少一个计算的份额定义。所述至少一个共享的份额还可以定义另外的值,例如,先前执行的计算的输出或与所述操作并行执行的另一操作的输出。根据所述至少一个共享的份额和所述一组输入值的份额来计算所述至少一个计算的份额。共享的份额中的错误影响所述另外的值,但计算的份额中的错误不影响,使得份额减少攻击复杂化。

Description

使用共享的份额的计算设备
技术领域
本发明涉及计算设备、计算方法和计算机可读介质。
背景技术
涉及敏感数据(例如密码操作)的计算可能会受到各种类型的攻击者的攻击。例如,如果仅了解原语的输入和输出的攻击者无法提升其权限(例如,获取秘密密钥,加密消息,解密消息等),则将密码学原语称为在黑盒模型中是安全的。对于涉及敏感信息的其他类型的计算,例如在建模、机器学习、统计等领域,攻击者无法获取计算中使用的敏感信息也很重要。
但是,实际上,攻击者通常不会在黑盒模型中进行操作,实际上,他们所获得的信息不仅仅是输入和输出。例如,在灰盒模型中,假定攻击者可以访问一些与计算的执行有关的信息。这些额外的信息来源称为“边信道”。例如,边信道包括操作花费的时间或消耗的电量等。在甚至更强大的模型中,即所谓的白盒模型,攻击者可以完全访问计算的所有内部值。即使程序正在运行,攻击者也可能对值进行修改。即使这样,白盒实现方式也旨在防止从计算中提取敏感值。
在已知的白盒实现方式中,例如,如欧洲专利申请EP 3363142 A1中所述,敏感值可以由多个份额(share)表示。份额的使用可以提高针对各种类型的边信道攻击的保护,因为攻击者能够推断出的关于敏感值的一或几个份额的任何信息都不包含关于存储的敏感值的信息。实际上,使用份额允许在实现中引入很多熵,同时使变量保持较小,以确保实现在运行时间和代码大小方面仍然可以接受。遗憾的是,这样的实现方式可能易于遭受各种类型的份额减少(share reduction)和/或份额定位(share localization)攻击,在这种攻击中,攻击者能够减少份额的数量,破坏份额引入的熵,从而降低份额的引入所提供的保护。
因此,需要提供一种用于对值的份额进行计算的设备,其提供更好的保护以防止份额减少和/或份额定位攻击。
发明内容
为了更好地解决上述问题中的一个或多个,提出了如权利要求所限定的计算设备。计算设备对至少一组值执行计算。一组值中的每个值可以作为定义该值的多个份额存储在存储器中。
根据第一方面,可以对一组输入值执行计算的操作以获得输出值。输出值可以由至少一个共享的份额和至少一个计算的份额定义。至少一个共享的份额也可以定义另外的值。可以从所述至少一个共享的份额和所述一组输入值的份额来计算所述至少一个计算的份额。
由于至少一个共享的份额也定义了另外的值,但是至少一个计算的份额没有定义,因此在至少一个共享的份额中引入错误通常以与在至少一个计算的份额中引入错误不同的方式影响计算。例如,共享的份额中的错误可能会使用另外的值影响将来的操作,而计算所得份额中的错误不会使用另外的值影响将来的操作。因此,使得攻击者更加难以确定至少一个共享的份额和至少一个计算的份额都是输出值的份额。这使各种攻击变得复杂,例如,份额减少或份额定位攻击可能变得更加困难。
在一个实施例中,所述计算可以包括对诸如分组密码之类的密码函数的评估。例如,可以将密码函数使用的密码密钥硬编码到计算中,共享的份额的使用使提取此密钥更加困难。
在一个实施例中,输入值和输出值可以不被计算为执行操作的中间结果。由于例如份额减少或份额定位攻击也不能对操作的中间结果发起,因此这可能使攻击进一步复杂。
在一个实施例中,计算至少一个计算的份额可以包括计算多个中间结果的序列,每个中间结果是从至少一个共享的份额来计算的。以此方式,执行该操作的中间结果包括来自至少一个共享的份额的贡献。这可以确保计算至少一个计算的份额的中间结果尽可能独立于输入值。
在一个实施例中,所述另外的值可以独立于输入值,例如不相关。由于在所述至少一个份额中引入错误可能影响所述另外的值,因此选择独立于所述输入值的另外的值可能增加错误的影响的不可预测性。例如,错误发生在计算的不同部分。这可能使攻击更加困难。
在一个实施例中,定义输出值的每个份额也定义另外的值。这样做的优点是可以减小输出值的份额中无效错误的可能性。例如,输出值中的错误可能并不总是会影响计算的整体输出,但是输出值的份额中的每个错误也可能导致所述另外的值中的错误,从而使得计算的总输出更有可能计算受到影响。因此,统计上无效的错误分析类型的攻击变得更加困难。
在一个实施例中,所述另外的值是在所述操作之前执行的计算的先前操作的输出。这允许将所述另外的值的份额重新用作共享的份额,而无需重新计算。
在一个实施例中,所述计算可以包括对另一组输入值的另外的操作以获得另外的值。像输出值一样,所述另外的值可以由至少一个共享的份额并且另外由至少一个另外的计算的份额来定义。所述处理器可从所述至少一个共享的份额和所述一组输入值的份额中计算所述至少一个计算的份额。处理器可以从至少一个共享的份额和另一组输入值的份额中计算至少一个另外的计算的份额。这样可以通过同时执行两个操作来以相对较少的开销获得共享的份额。
在一个实施例中,处理器可以进一步被配置为使用先前执行的操作的输出的至少一个份额作为随机值来计算至少一个共享的份额。这可以确保至少一个共享的份额对于攻击者而言看起来足够随机,而无需外部随机性源。
在一个实施例中,所述操作和所述另外的操作可以是相同的操作。这可能使所述操作和所述另外的操作对于攻击者而言看起来更类似。
在一个实施例中,所述计算可以包括第一和第二并行计算分支。每个计算分支可以计算相同输出的副本。平均计算可以将同一输出的这些多个副本组合为单个输出。所述操作和所述另外的操作可以被包括在不同的并行计算分支中。这样的并行计算分支可以防止各种攻击,并且可以这种方式以相对较少的开销进行组合。
在一个实施例中,第一并行计算分支可以包括混淆计算,之后是混淆计算的逆,接着是功能计算,之后是虚设计算,并且第二并行计算分支包括虚设计算,之后是功能计算,然后进行混淆计算,再进行混淆计算的逆操作。这可能导致在电路中相同深度处的计算,以用于各个并行计算分支在不同的输入上进行计算,从而增加了在各个份额中引入错误的不可预测性。
在一个实施例中,每个并行计算分支可以还包括在功能计算之后的别外的混淆计算。该计算可以还包括在平均计算之后的所述另外的混淆计算的逆。通过确保对看起来独立于计算输出的数据执行平均计算,这可能会使攻击更加复杂。
在一个实施例中,所述计算可以还包括初始混淆计算,其后是初始混淆计算的逆。这些初始计算可以提供可以用作后续操作的共享的份额和/或从中计算共享的份额的份额,而不会影响计算结果。
在一个实施例中,所述值可以是位,并且所述计算可以包括二进制电路。二进制电路可能特别适合于执行各种计算,例如分组密码计算。
在一个实施例中,使用输出值作为输入的(例如,对计算的)另外的操作被交错。这使攻击变得复杂,其中攻击者在使用输出值的一个操作之前但在使用输出值的另一操作之后,在输出值的份额中引入错误。否则,此类攻击可能会削弱所提供的份额减少/份额定位保护。
在一个实施例中,多个份额中的一个份额可以被编码地存储,这使得更难从存储器内容中导出敏感数据。在一个实施例中,一组值中的多个值可以组成组合值,所述组合值被编码存储。通过以与份额不同的粒度应用编码,针对单一粒度的攻击变得更加困难。
根据另一方面,所述计算设备的处理器被配置为重新共享第一值和第二值。为此,处理器可以基于定义第一值的先前份额和定义第二值的先前份额来计算定义第一值和第二值的至少一个新的共享的份额。所述处理器可以还根据至少一个新的共享的份额和定义第一值的先前份额来计算定义所述第一值的至少一个另外的新份额。所述处理器还可以根据至少一个新的共享的份额和定义第二值的先前份额来计算定义第二值的至少一个另外的新份额。这样,可以获得与先前份额无关的第一值和第二值的新份额。这可能使攻击者更难通过计算来追踪值。它还可以使得能够执行其中一些操作与另外的操作成对执行,并且一些其他操作未使用本文描述的各种技术的计算。
另一方面涉及一种被配置为重新共享值的计算设备。所述值可以在重新共享之后通过至少一个共享的份额和至少一个计算的份额来定义。至少一个共享的份额还可以定义在重新共享之前执行的计算的操作的输出。重新共享可以包括根据所述至少一个共享的份额和在重新共享之前定义所述值的份额来计算所述至少一个计算的份额。这提供了另一种在重新共享之前获得与份额无关的值的新份额的方法。此外,它有助于在单个计算中将已执行的操作与另外的操作和未执行的操作结合在一起。
另一方面涉及一种计算方法。根据本发明的方法可以作为计算机实现的方法在计算机上实现,或者可以在专用硬件中实现,或者在两者的组合中实现。根据本发明的方法的可执行代码可以存储在计算机程序产品上。计算机程序产品的示例包括存储器设备、光学存储设备、集成电路、服务器、在线软件等。优选地,计算机程序产品包括存储在计算机可读介质上的非瞬态程序代码,用于在计算机上执行程序产品时执行根据本发明的方法。
在优选实施例中,计算机程序包括计算机程序代码,当计算机程序在计算机上运行时,所述计算机程序代码适于执行根据本发明的方法的所有步骤。优选地,计算机程序被体现在计算机可读介质上。
本发明的另一方面提供了一种使计算机程序可用于下载的方法。当计算机程序被上载到例如苹果的苹果商店(App Store)、谷歌的Play商店或微软的Windows商店以及可从此类商店下载计算机程序时,将使用此方面。
附图说明
将仅通过举例的方式,参考附图来描述本发明的进一步的细节、方面和实施例。为了简单和清楚地示出了图中的元素,并且不一定按比例绘制。在附图中,与已经描述的元件相对应的元件可以具有相同的附图标记。在图中,
图1示意性地示出了计算设备的实施例的示例,
图2示意性地示出了计算设备的实施例的示例,
图3a示意性地示出了计算设备的实施例的示例,
图3b示意性地示出了计算设备的实施例的示例,
图4示意性地示出了计算设备的实施例的示例,
图5示意性地示出了计算设备的实施例的示例,
图6示意性地示出了计算设备的实施例的示例,
图7a示意性地示出了计算设备的实施例的示例,
图7b示意性地示出了计算设备的实施例的示例,
图8a示意性地示出了计算方法的实施例的示例,
图8b示意性地示出了根据实施例的具有包括计算机程序的可写部分的计算机可读介质,
图8c示意性地示出了根据一个实施例的处理器系统的表示。
附图标记列表:
100 计算设备
130 处理器
131 操作单元
140 存储器
141、142 输入值
143 输出值
144 另外的值
141.1、141.2、142.1、142.2、144.2 份额
143.1 计算的份额
143.1=144.1 共享的份额
200 计算设备
230 处理器
231 操作单元
240 存储器
241、243 一组输入值中的输入值
242、244 另一组输入值中的输入值
245 输出值
246 另外的值
241.2、242.2、243.2、244.2、245.2、246.2 份额
241.1=242.1,243.1=244.1,245.1=246.1 共享的份额
300,300’ 计算设备
330、330’ 处理器
340、340’ 存储器
331、332 并行计算分支单元
333、338、339 操作单元
335 平均计算单元
336 混淆计算单元
337 逆混淆计算单元
343 输出值
343.1 共享的份额
400 计算设备
430 处理器
431 第一并行计算分支单元
432 第二并行计算分支单元
433 操作单元
435 平均计算单元
451、454、458、459 混淆计算单元
452、460、461 逆混淆计算单元
453、457 功能计算单元
455、456 虚设计算单元
440 存储器
500 计算设备
530 处理器
531 编码的操作单元
540 存储器
541 输入值
542 输出值
544 另外的值
541.1、541.2、544.1 份额
542.1 计算的份额
542.2=544.2 共享的份额
600 计算设备
630 处理器
631 编码函数单元
640 存储器
641、644 组合值
642、643、645、646 构成组合值的值
700 计算设备
730 处理器
731 重新共享单元
740 存储器
741 第一值
742 第二值
741.1、741.1 定义第一值的先前份额
742.1、742.2 定义第二值的先前份额
741.1’=742.1’ 定义第一值和第二值的新共享的份额
741.2’ 定义第一值的另一新份额
742.2’ 定义第二值的另一新份额
800 计算设备
830 处理器
831 重新共享单元
840 存储器
841 值
841.1、841.2 定义重新共享之前的值的份额
841.1’=844.1 共享的份额
841.2’ 计算的份额
844 在重新共享之前执行的操作的输出
844.2 输出的份额
900 计算方法
910 提供一组值
920 执行操作
921 计算至少一个计算的份额
1000 计算机可读介质
1010 可写部分
1020 计算机程序
1110 集成电路
1120 处理单元
1122 存储器
1124 专用集成电路
1126 通信元件
1130 互连
1140 处理器系统
具体实施方式
尽管本发明可以以许多不同形式实现实施例,但是在附图中示出并且在此将详细描述一个或多个特定实施例,但应理解本公开被认为是本发明原理的示例,并且不旨在将本发明限制于所示出和描述的特定实施例。
在下文中,为了理解,在操作中描述实施例的元件。然而,将显而易见的是,各个元件被布置为执行被描述为由它们执行的功能。
此外,本发明不限于实施例,并且本发明在于在此描述或在互不相同的从属权利要求中叙述的每个新颖特征或特征的组合。
为了介绍本发明,首先,讨论了对白盒实现的若干攻击。在各种白盒实现方式中,敏感变量由多个份额表示。例如,值x可以由n个加性份额(x0,…,xn-1)表示,例如
Figure BDA0003103234870000101
但对于任何
Figure BDA0003103234870000102
i∈S xi是随机的。因此,从值份额的子集推导出的信息可能不包含有关该值的信息,而所有份额的信息都可能包含允许导出该值的信息。通常,熵,例如随机值x0,…,xn-1,有助于抵抗边信道攻击。同时,作为份额存储的变量可能仍然相对较小,因此白盒实现在运行时和代码大小方面仍然可以接受。
遗憾的是,使用份额的白盒实现可能容易受到份额减少攻击。在这种攻击中,攻击者减少了份额数,实际上破坏了份额引入的熵。最终,攻击者可能能够将值的份额数量减少到一,从而完全消除了引入份额的影响。为了发起份额减少攻击,攻击者通常旨在寻找对应于相同值的份额的位置,例如,寻找具有相同值的两个份额。
对份额表示的一种可能的攻击基于以下观察结果:如果{zi}i是表示或定义特定计算中的值z的一组加性份额,则可以将任何zi更改为zi+δ而将表示的值z转换为z+δ。现在,如果计算结果仅取决于表示的值z,则对于zi中引入的每个导致zi+δ的错误δ,计算的输出可能是相同的。现在,假设为攻击者提供了一个包含门C0,…,Cn的计算,其中zi←Ci(xi)表示门i在给定输入xi的情况下评估为zi的动作。然后,对于所有i=1,…,n,攻击者可能会在恒定输入上运行计算,并等待直到评估出门i为止。然后,对于任何δ,攻击者都可以将zi更改为zi+δ并收集相应的输出Oi,δ。如果对于任何δ都认为存在δ'(其中Oi,δ=Oj,δ′),那么攻击者可以推断出门i和j在相同的值上操作。注意,例如当份额被编码存储时,δ可以不同于δ′。
攻击者找到了两个或两个以上在相同的值上操作的份额后,攻击者可能会减少这些份额。例如,如果未对份额进行编码,则攻击者可以通过添加它们来减少份额。如果份额被编码存储,则可以基于附加分析来执行减少份额的操作。例如,在这种情况下,可以观察到对于任何Δ都存在一个Δ',使得
Enc(zj)+Δ=Enc(zj+δ),并且
Enc(zk)+Δ′=Enc(zk-δ)。
使得输出保持不变。这样的对相对于所表示的和可以是等同的,例如,定义相同的值。该集合可以被标记为0。可以从刚创建的集合之外的一对开始重复该过程,例如,直到所有对都被标记为止。可以递归地执行这样的攻击,例如,直到每集合n个份额具有一个标签,例如,大小为单个份额。在执行期间,攻击者然后可以将观察到的n个相应份额的集合替换为标签,所述标签可以看作是表示的值z的单个编码。这可以启用诸如互信息分析(MIA)或差分计算分析(DCA)之类的攻击来提取敏感信息。
本文的各种实施例使得攻击者更加难以发起份额减少和/或份额定位攻击。尽管如此,本文所描述的保护机制就例如所需的份额数量而言并不需要付出高昂的代价。例如,在一些实施例中,以少于五个份额,例如三个份额,四个份额或甚至仅两个份额来存储值。此外,在各种实施例中,线性操作,例如,加法或XOR门,可以作为个体份额上的函数来实现。在各种实施例中,通过允许执行乘法(例如,与门)以及进一步使统计攻击复杂化的重新随机化,进一步提高了安全性。
可以使用本文描述的技术来执行各种各样的计算,例如,由二进制或算术电路指定的计算,或者具有可逆迭代的各种迭代算法。
特别地,本发明的实施例允许执行包括对密码学原语(诸如例如AES算法的分组密码)的评估的计算,并具有针对份额减少/份额定位攻击的增强的保护。下面的一些示例集中于美国联邦信息处理标准出版物197,2001的高级加密标准中描述的AES分组密码。AES是重要的、大量使用的密码学原语。但是,需要强调的是,以下技术也可以应用于其他密码学原语。例如,可以将其他分组密码实施为实施例。特别是,可以毫不费力地针对SLT设计的分组密码(替代/线性变换分组密码,有时也称为替代置换网络(SPN)分组密码)进行调整,例如AES(Rijndael)、3-Way、Kuznyechik、PRESENT、SAFER、SHARK和Square。密码学原语可以是对称原语,例如,其中加密/解密密钥相同,或者是签名/验证密钥。密码学原语也可以是无密钥的,例如哈希函数。保护哈希函数可能很重要,因为它们可能会应用于秘密数据。实际上,哈希函数可能是有密钥的设计的一部分,例如,如果在HMAC中使用了哈希函数。
实现这些改进的发明人的见解之一是共享的份额的使用。相同共享的份额可以定义多个值。例如,两个值x和y可以作为份额(s0,s1,s2)=(r,x-r,y-r)存储在存储器中,其中x=s0+s1并且y=s0+s2。因此,s0是定义x和y的共享的份额。在s0中引入错误可能会同时更改x和y值,而在s1(或分别是s2)中引入错误可能仅会更改x值(分别是y)。因此,由三个份额中的任何一个份额的错误所获得的总体计算输出可能会有所不同。
计算的操作可以导致由共享的份额定义的输出值。除了作为输出值的份额,共享的份额也可以是另外的值的份额。例如,考虑在某个时间点每个值由两个份额表示的计算,其中
Figure BDA0003103234870000121
是在该时间点引入的份额的集合。然后,要计算输入值x,y的份额上的输出值z=f(x,y),可以创建关于输入x0,x1(两者
Figure BDA0003103234870000124
x的份额)和y0,y1(两者都在
Figure BDA0003103234870000122
中,y的份额)的电路,得出输出值的计算的份额z0,例如z0=f(x,y)-sj。输出值的其他份额可以隐式定义为
Figure BDA0003103234870000123
在这里,sj可以是先前执行的操作的输出,例如,存在
Figure BDA0003103234870000125
使得对于某个值v,sj+sk=v。在计算的份额zo之后,我们现在拥有z0+sj=z,因此sj现在为定义了值z和值v的共享的份额。因此,如果攻击者在sj处引入错误,则v和z都可能受到影响,而在z0或sk处引入错误可能仅影响z或u。然而,获得共享的份额的其他方式也是可能的,例如,同时执行的两个操作可能导致定义两个操作的输出的共享的份额。下面提供了结合以上见解的各种详细实施例。
攻击者可能会使用各种其他攻击,这些攻击会主动干扰计算的执行。一种攻击是所谓的差分错误分析(DFA)。在某些DFA攻击中,攻击者会在计算期间引入错误,并且由于该错误而导致的输出变化可能能够获取有关秘密的信息。
攻击者可能会主动干扰算法执行的另一种攻击类型,即所谓的统计无效错误分析(SIFA)。SIFA专注于无效错误,例如,对于某些输入不影响计算的输出但对其他输入影响输出的错误。攻击者可能会发现例如,针对其,错误无效的输入/输出对。错误无效的事实可以用作指示电路中某些内部变量对于这些特定输入不是均匀分布的指示,而如果输入是均匀分布的,则它是均匀分布的。当与输入或输出的相对较小部分以及秘密的一小部分有关的内部变量中出现不均匀性时,可以将其用于提取秘密的这一部分。
作为针对DFA的可能对策,可以在计算中引入冗余。可以通过观察电路冗余部分的输出差异来检测将导致输出改变的错误的引入。例如,所述计算可以被设计为不给出输出或给出无用的输出。如果错误无效,则此类对策可能无效,因此可能不足以抵御SIFA攻击。
通常,为了针对SIFA攻击进行保护,减少无效错误的数量是有益的,尤其是在计算的敏感部分。例如,可以以这样的方式执行计算:对于至少一些计算值,所述值的任何份额中的单个比特翻转可能影响输出。消除这种单比特无效错误可能特别有利,因为攻击者可以相对容易地利用它们。例如,在具有N个操作的计算的一部分中查找无效的单比特翻转可能会花费N阶时间,如果N不太大,这可能是可行的。另一方面,在电路的该同一部分中寻找具有多个(例如k>1)比特翻转的无效错误可能需要N^k阶,因此更加困难。
共享的份额的使用可能有助于减少无效错误的数量和/或使查找错误更加困难。例如,由于定义多个值的共享的份额中的错误可能会影响这些多个值,因此此类错误可能不是无效的,因为它始终会影响输出,或者至少由于不影响输出的计算输入值较少,可能很难检测到该错误是无效的。在各种实施例中,无效的错误变得更加不可能和/或更难检测,因为每个定义操作的输出值的份额也定义了相应的另外的值。换句话说,此值不具有非共享的份额,所述非共享的份额比共享的份额更有可能是无效的。
图1示意性地示出了计算设备100的实施例的示例。计算设备100包括处理器130和存储器140。存储器140可以用于数据和/或指令存储。例如,存储器140可以包括处理器130被配置在其上起作用的软件和/或数据。存储器140还可以存储值141-144。处理器130可以被实现为一个或多个处理器电路,例如,微处理器、ASIC、FPGA等。存储器140可以包括可由处理器130执行的计算机程序指令。根据计算设备的实施例来配置处理器130,可能与存储器140一起。
计算设备100可以用于对至少一组值执行计算。值可以是位、字节、字段元素、环形元素、以给定模数为模的整数,例如质数模等。该计算例如可以包括对比特值进行评估的二进制电路,例如,包括AND和/或XOR操作的二进制电路。该计算可以替代地或附加地包括算术电路,例如,包括加法和/或乘法操作的算术电路。该计算通常包括例如根据本文所述的各种实施例执行的多个操作,也称为门操作。例如,计算可以包括至少100个操作,至少1000个操作,等等。
计算设备100可以有利地执行各种类型的计算,例如密码操作,统计计算,数据分析计算,物理系统的仿真等。例如,在各种实施例中,所述计算可以包括对密码函数的评估,例如,使用对称密钥对输入消息上的分组密码的评估,使用私有签名密钥对输入消息上的数字签名的计算,或使用私有解密密钥解密加密的消息。该组值可以包括各种敏感值。例如,在以上示例中,构成对称密钥和私有密钥的值可能是敏感的,因此取决于它们的计算值可能是中间值。在各种类型的计算中,例如统计/数据分析/模拟计算中,一些输入数据可能是敏感的,例如,它可能是隐私敏感的或商业敏感的。因此,有利的是改进这种数据的保护,例如防止份额减少和/或份额定位攻击。
存储器140可以被配置为存储一组值{zi}。可以至少在该一组值上执行计算。所述一组值中的每个值可以被存储为定义所述值的多个份额si,j,例如秘密份额。例如,在图中显示了四个值z1 141,z2 142,z3 143和z4 144。例如,值z1 141可以存储为份额s1,1 141.1和s1,2 141.2;值z2 142可以存储为份额s2,1 142.1和s2,2 142.2;值z3 143可以被存储为份额s3,1 143.1=144.1和s3,2143.2;值z4 144可以被存储为份额s4,1 143.1=144.1和s4, 2144.2。值的数量和每个值的份额数量两者都是说明性的,例如,至少一个值可以被存储为多于两个份额,例如,三个份额,四个份额,五个份额或更多。值的数量可以是例如至少100或至少1000。
贯穿整个过程,我们说一个或多个份额定义了一个值,前提是该份额包含在该值存储为的多个份额中。将理解的是,这是非限制性的,例如,在多个份额中可以存在另外的份额和/或份额可以定义另外的值。类似地,当我们说某个值由份额“定义”等时,意味着该份额包含在该值存储为的多个份额中,并且可能还有定义了该值的其他份额和/或份额定义的其他值。有时,为了强调这一方面,我们将说“一个值至少部分地由份额定义”,“份额至少部分地定义一个值”,等等。
可以借助于从多个份额计算值的重构函数,由该多个份额定义被存储为多个份额si,j的值zi。相反,可以使用共享函数(例如,秘密共享函数)从非共享值获得定义值的共享,所述共享函数从非共享值计算的份额。
各种共享和重建方法是已知的,并且可以在这里使用。例如,值vi及其份额si,1,…,si,n可以是位,所述值的重构函数定义为份额的异或(XOR)vi=si,1 xor…xor si,n。另一个值vj及其份额vj,1,…,vj,m可以是环形元素,值vj根据其份额定义为份额的总和vj=vj,1+…+vj,m。可以替代或另外使用各种其他类型的份额,例如Shamir份额或复制的秘密份额。份额si,1,…,si,n可以从非共享值vi获得,例如,通过独立于非共享值设置除了一个之外的份额,例如,随机地或将其设置为固定值,然后根据其计算剩余的份额,例如si,1=vixorsi,2 xor…xor si,n
通常,单个份额不能固定所述值。实际上,部分地由份额定义的值在给定所述份额的情况下可能是未定义的,例如,针对所述值的所有可能性都是同等地可能的。例如,对于根据份额s1和s2定义为v=s1+s2的值v,如果通过令s1=V-s2而固定了s2,值v仍可以取任何值V。在某些情况下,即使固定除了一个之外的其所有份额,值甚至仍可以取任何值,例如,如果通过令s1=V-s2-…-s7来固定s2,…,s7,则v=s1+…+s7仍可以取任何值V。结果,将值存储为份额可能已经提供了一定程度的保护,因为无法从份额的子集确定值。
有趣的是,存储在存储器140中的共享的份额143.1=144.1可以部分地定义多个值,例如,第一值143可以被存储为第一多个份额,例如份额143.1=144.1和143.2,第二值144可以存储为第二多个份额,例如份额143.1=144.1和144.2。至少一个共享的份额,例如份额143.1=144.1,可以被包括在第一多个份额和第二多个份额中。具有定义多个值的共享的份额可以允许不同的份额定义不同的值的集合。例如,图中的份额143.1=144.1定义了值143和144,而份额143.2定义了值143,但没有定义值144。这是有利的,因为它有助于减轻对各个值的攻击,例如份额减少和/或份额定位攻击,如所解释的。
具体地,如以下在各种实施例中所例示的,由共享的份额143.1=144.1定义的值143可以是由操作单元131执行计算的操作而获得的输出值。这样的输出值,例如输出值143,可以由至少一个共享的份额(例如,共享的份额143.1=144.1)和至少一个计算的份额(例如,计算的份额143.2)来定义,其中至少一个共享的份额也定义另外的值,例如另外的值144。例如,操作单元131可以对一组输入值(例如输入值141和142)执行操作,其中至少一个计算出的份额(例如计算出的份额143.2)是根据至少一个共享的份额和一组输入值(例如,输入值141的份额141.1、141.2和/或输入值142的份额142.1、142.2)的份额来计算的。在一组值中包括输入值、输出值和另外的值。操作131可以例如是一元操作,例如,“非(NOT)”或取反;二进制操作,例如“与(AND)”,“异或(XOR)”,加法或乘法;三元操作,无效操作或任何其他操作。
作为由操作单元131执行的操作的结果,输出值143可以由至少一个共享的份额(例如也定义了另外的值144的共享的份额143.1=144.1)和由至少一个共享的份额和输入值份额计算得出的至少一个计算的份额(例如,计算的份额143.2)。特别地,计算的份额143.2可以不定义另外的值144本身。这有助于减轻攻击,例如减少对输出值143的份额减少和/或份额定位攻击。
例如,假设输出值143已经由恰好两个份额定义,而这两个份额不定义计算的任何其他值。在计算设备100中不是这种情况。在这种情况下,攻击者可能已经通过观察这两个份额中的错误具有相似的影响来检测到这两个份额是相同值的份额。例如,第一份额的比特翻转和第二份额的比特翻转可能导致所述两个份额仍然定义相同的输出值,并且因此导致仍在相同的一组值上执行计算。结果,计算的总输出可能未受到两个比特翻转的影响。更一般而言,对于添加到第一份额的每个第一错误,可能可以将第二错误添加到第二份额,以使输出值以及因此在其上执行计算的整个一组值仍将一样。例如,这是不希望的,因为这可能使攻击者将两个份额减少(有时也称为坍缩)成一个份额,从而允许攻击者确定或以其他方式了解有关输出值的信息。
然而,在计算设备100中,至少一个共享的份额143.1=144.1也定义了另外的值144。结果,在至少一个共享的份额(例如共享的份额143.1=144.1)中引入错误,通常在至少输出值143和另一个值144中导致错误,并且因此,基于输出值和另外的值两者中的错误,得到整体计算输出。另一方面,在至少一个计算的份额(例如,计算的份额143.2)中引入错误可能不导致另外的值144出现错误。因此,总体计算输出可能基于输出值143的错误,但是不基于另外的值144的错误。因此,攻击者可能无法通过在相应的份额中引入错误并观察到它们得出相同的一组值(例如借助于总体计算输出),来推断出至少一个共享的份额和至少一个计算的份额是相同值的份额。因此,减少了份额减少和/或份额定位攻击。
尽管该图仅示出了定义多个值143、144的一个份额143.1=144.1,但是应当理解,通常,计算设备100的存储器140存储多个份额,每个份额定义多个值。例如,一组输入值中的输入值,例如输入值141或142,或一组输入值的每个输入值141、142,可以由至少一个共享的份额定义,所述共享的份额还定义了各自的另外的值。份额也不必恰好定义一个或两个值,例如,存储器140的份额可以定义至少三个或至少五个值。类似地,不必由恰好一个共享的份额和恰好一个计算的份额定义输出值143,例如,值可以由多个共享的份额和/或多个计算的份额定义。例如,每个共享的份额可以还定义至少一个相应的另外的值。
而且,计算的份额,例如计算的份额143.2,可以定义另外的值;例如,所述计算可以包括另一操作,所述另一操作的输出值至少部分地由份额143.2和另一份额定义,所述另一份额是使用份额143.2作为输入来计算的。然而,一般而言,如果对于至少部分地定义一个值的存储器140中的第一份额和第二份额,由第一份额和第二份额定义的各个值的集合是不同的,则是有利的。在优选的实施例中,所述属性对于至少部分地定义该值的每个第一份额和第二份额都成立。例如,值144位于值143的份额143.1=144.1所定义的一值集合中,但不在值143的份额143.2所定义的值集合中。确实,此属性有助于减轻诸如如前所述的份额减少和/或份额定位攻击之类的攻击。
操作单元131可以采用各种技术来执行该操作,例如,以计算至少一个计算的份额143.1=144.1。下面详细提供各种示例。在优选实施例中,操作单元131不显式地计算出输出值143作为执行操作的中间结果,和/或在执行操作时,输出值143不直接存储在存储器140中,例如,不以非共享形式存储。类似地,操作单元131优选地以避免输入值141、142的显式计算或存储的方式执行操作。这可以进一步帮助基于这种中间数据来进行份额减少/定位以及类似的攻击。
在各种实施例中,操作单元131通过计算多个中间结果的序列来计算至少一个计算的份额143.2。可以根据至少一个共享的份额计算每个中间结果,例如,每个中间结果直接取决于至少一个共享的份额,或者间接取决于依赖于至少一个共享的份额的另一中间结果。由于至少一个共享的份额的值通常与操作的输入值无关,例如不相关或独立,因此中间结果通常也将与输入值无关。因此,中间结果表现出与输入值和/或输出值足够随机的行为,例如,不相关或独立。这使得将计算的份额与输入值关联起来更加困难。例如,中间结果可以是至少一个共享的份额143.1=144.1的函数,例如其值或它取负。中间结果还可以是至少一个共享的份额143.1=144.1和操作131的输入份额的函数。其他中间结果可以通过基于这样的中间结果来被计算而取决于至少一个共享的份额。
在各种实施例中,另外的值144独立于输入值141、142。当值被称为“独立的”时,这通常意味着两者之间没有直接关系,例如,一个值可能不会跟随另一个值,或者甚至可能在统计上与另一个不相关和/或在统计上彼此独立。例如,根据输入的概率分布和/或计算的随机性,另外的值144可能与输入值141、142不相关,例如,其相关系数接近零,例如在-0.25到0.25之间或在-0.1到0.1之间。例如,可以通过实验建立这样的相关性以便选择合适的另外的值144。另外的值144也可以在统计上独立于输入值141、142,例如,另外的值144取特定值的概率可以不在很大程度上取决于输入值具有特定值的概率,例如,另外的值144取特定值的概率与在输入值具有特定值的情况下其取特定值的概率之间的差可以近似相同,例如相差最多0.01或最多0.1。在一些实施例中,当前操作和计算另外的值144的操作具有至少最小距离,例如,就各个操作之间执行的指令的最小数量而言,就用于计算的电路中的操作之间的距离而言,等等。
另外的值144可以例如在编译时在一组值(例如所有值,所有先前计算的值,所有足够独立的值等)中随机选择。类似地,共享的份额143.1=144.1可以在一组份额中随机选择,例如,所有份额,所有先前计算的份额,所有足够独立的值,等等。另外的值144独立于输入值141、142是有利的,因为在共享的份额143.1=144.1中引入的错误可能导致计算的不同部分中的错误,例如,使用输出值143的部分和使用另外的值144的部分,使得攻击者更难识别计算中的操作。
在一些实施例中,每个定义输出值143的份额也定义各自的另外的值。例如,不仅份额143.1=144.1是共享的份额,而且份额143.2是还定义了另一个另外的值(未示出)共享的份额。例如,计算的份额143.2可以在以后的操作中担当共享的份额的角色,例如,输出值143用作该随后的操作的另外的值。
这可以具有以下优点:减小输出值143的份额中的无效错误的可能性和/或使得更难发现无效错误。如果对于某些输入,整体计算输出由于错误而没有发生变化,但是对于某些其他输入,整体计算输出确实发生了变化,诸如份额143.1=144.1或份额143.2之类的份额的错误(例如,比特翻转)可能被认为是无效的。已经发现无效的错误是不希望的,因为它们可能导致某些统计上无效的错误分析攻击。如果计算的份额143.2没有定义另外的值,则它可能是有效错误的特别可能的候选者,因为份额中的错误可能仅直接影响输出值143。但是,如果计算的份额143.2确实定义了相应的另外的值,则这通过改变输出值143和/或相应的另外的值,使得计算的份额143.2中的错误可能更可能影响整体计算输出。例如,计算的份额中的错误更有可能是有效的,例如,对于所有输入,错误更有可能影响输出,或者可能更难以检测到该错误无效,例如,因为存在很少的不影响其输出的输入。
在一些实施例中,对于计算的每个操作或计算的特别敏感部分的每个操作,计算或计算部分的操作的每个输出的每个份额的每个还可以定义各自的另外的值。
对于某些类型的计算,以这种方式可以完全消除无效的错误,或者至少使其不大可能。例如,所述计算可以包括对诸如AES的分组密码的评估。例如,所述计算可以包括编码的替换盒,例如,AES S盒。这样的S盒可以被认为是具有8个输入位和8个输出位的二进制电路,所述二进制电路任选地按字节编码,例如,在组合成字节的8位上。该计算还可以包括例如AES MixColumns操作的编码加法电路。使用按字节编码,所述加法可以被认为是具有16个输入位和8个输出位的电路。使用半字节编码,所述加法可以被认为是具有8个输入位和4个输出位的电路。例如,对于一个或多个这样的子计算的操作,定义输出值的每个份额还定义各自的另外的值。AES相关实施例中的各自的另外的值可以属于AES状态,例如,明文的不同部分的AES状态。通过构造AES函数,可以保证这种共享的份额中的任何错误都将导致修改后的密文。
在各个实施例中,输出值143可以用作多个其他操作(例如,计算的操作)的输入。在一些实施例中,这些其他操作中的一些是交错的。例如,在至少部分交叠的时间间隔期间执行第一另外的操作和第二另外的操作。通常,操作包括多个部分,例如,机器代码指令,源代码指令等。当操作交错时,可以在第一操作的最后一条指令之前执行第二操作的一些指令,而可以在第一操作的最后一条指令之后执行第二操作的一些其他指令。
交错操作可能使某些类型的攻击进一步复杂化。例如,当计算这些份额时,攻击者不仅可以尝试在输出值143的份额中引入错误,还可以稍后在使用它们时引入错误。在计算输出值143的份额时在其中引入错误可能会在随后使用该份额的所有操作中造成内部更改。特别是,如果份额定义了多个值,则错误可能影响这些值中的几个甚至全部。另一方面,在已将其用于第一另外的操作之后但在已将其用于第二另外的操作之前在份额中引入错误可能只影响该第二另外的操作的输出,从而部分逆转了多个值之间的共享的份额的影响。交错所述其他的操作可能使这种攻击更加复杂,因为避免了在单个时间点引入错误影响第一另外的操作但不会影响第二另外的操作的情况。
现在呈现几个详细的实施例,其中上面讨论的用于执行操作的各种技术被有利地组合。
在一些实施例中,操作单元131基于共享的份额143.1=144.1执行该操作,所述共享的份额还定义了在当前操作之前执行的计算的操作的输出144。例如,当执行该先前的操作时,例如,如本文中所描述的,至少一个共享的份额143.1=144.1的值已经由操作单元131计算出。在这种情况下,至少一个共享的份额可能不需要作为当前操作的一部分重新计算和/或修改。操作单元131可以根据先前计算的共享的份额143.1=144.1和操作131的一组输入值的份额来计算至少一个计算的份额143.2。
例如,在一个实施例中,操作单元131可以被配置为执行AND操作。输入值zk,141可以被存储为份额zk=sk,0 xor sk,1,141.1、141.2。输入值zl,142可以被存储为份额zl=sl,0xor sl,1,142.1、142.2。在操作之后,可以将输出值zj=zk和zl、143存储为份额zj=sj,0 xorsj,1,其中sj,0,143.1=144.1是共享的份额,sj,1,143.2是计算的份额。计算该计算的份额可以包括计算第一值的份额和第二值的份额中的一个或多个AND,例如,第一值的份额和第二值的份额中的每对。第一值和第二值的份额也可以被部分地组合,例如,可以计算第一值的多个份额与第二值的一个或多个份额的XOR的AND,行行。然后,计算计算的份额可以还包括将共享的份额与计算的一个或多个AND进行异或。例如,操作单元131可以使用以下步骤来执行AND操作,中间结果由变量ci表示:
1.c0=sk,1and sl,1
2.c4=sj,1xor c0
3.c1=sk,0and sl,1
4.c5=c4xor c1
5.c2=sk,1and sl,0
6.c6=c5xor c2
7.c3=sk,0and sl,0
8.sj,0=c6xor c3
如本例中所示,输入值zk=sk,0xor sk,1和zl=sl,0xor sl,1和输出值zj=sj,0xorsj,1可能不被计算为执行AND操作的中间结果。此外,计算计算的份额sj,0可以包括基于共享的份额sj,1和输入值的一些份额,例如基于份额sk,1和sl,1,来确定中间结果c4,但不是基于其他,例如,不是基于份额sk,0和sl,0。如上所述,这些措施进一步使对操作的攻击复杂化。共享的份额sj,1可以是独立于输入值141和142的另一个值144的份额,例如,共享的份额143.1=144.1可以从一组先前计算的份额中随机选择,和/或另外的值144可以从一组先前计算的值中随机选择的,例如,与输入值充分独立的先前计算的值。
将会理解,上述示例可以以各种方式被适配,同时仍然例如通过改变步骤的顺序和/或交换输入值的份额来实现相同的结果。
将理解的是,用于使用XOR共享来执行AND操作的以上技术可以适于执行类似种类的操作,例如,关于共享的重构操作(例如,XOR)是分布式的操作。例如,上述过程可以适于执行乘法,例如,在整数环对给定模量求模与加性份额进行乘法。例如,为了执行乘法,在上述步骤1-8中,可以执行环乘法来代替AND,可以执行环相加来代替XOR,并且在步骤2中可以取消共享的份额sj,1
在另一个实施例中,操作单元131可以被配置为执行XOR操作。输入值zk,141可以被存储为份额zk=sk,0 xor sk,1,141.1、141.2。输入值zl,142可以被存储为份额zl=sl,0xorsl,1,142.1、142.2。在操作之后,可以将输出值zj=zk xor zl,143存储为份额zj=sj,0 xorsj,1,其中sj,0,143.1=144.1是共享的份额,并且sj,1,143.2是计算的份额。执行XOR操作可以包括计算共享的份额143.1=144.1,输入值的份额141.1、141.2、142.1、142.2,和/或来自计算所述XOR的中间结果。例如,以下步骤可用于执行XOR操作,中间结果由变量ci表示:
1.c0=sj,1xor sk,1
2.c1=c0xor sl,1
3.c2=c1xor sk,0
4.sj,0=c2xor sl,0
同样对于XOR操作,可能不将输入值和输出值计算为执行操作的中间结果。此外,可以确定诸如c0的中间结果,所述中间结果至少不取决于份额sj,0和sk,0,并且其确定可以不需要任何其中不使用共享的份额sj,1的中间结果。因此,对操作的进一步攻击变得更加复杂。如上所述,sj,1定义的另外的值可以独立于输入值141、142。应当理解,用于执行XOR操作的以上技术可以适用于其他种类的计算,例如对加性份额执行加法或减法和/或对上述步骤进行更改,例如交换份额或更改步骤顺序。
图2示意性地示出了计算设备200的实施例的示例。计算设备200用于对至少一组值(例如,值241、242、243、244、245和/或246)执行计算。设备200可以包括被配置为存储值的集合的存储器240。
一组值中的每个值可以存储为定义该值的多个份额。例如,值241可以被存储为份额241.1=242.1和241.2。值242可以被存储为份额241.1=242.1和242.2。值243可以被存储为份额243.1=244.1和243.2。值244可以被存储为份额243.1=244.1和244.2。在该图中,一对值241、242和一对值243、244具有共享的份额,但是至少对于下面讨论的一些实施例来说这不是必需的。值245可以存储为份额245.1=246.1和245.2。值246可以存储为份额245.1=246.1和246.2,例如份额245.1=246.1可以是共享的份额。
计算设备200可以还包括被配置为执行计算的操作的处理器。上面已经提供了这种计算设备200、处理器230和/或存储器240的各种示例,例如,计算设备200、处理器230和/或存储器240可以分别基于计算设备100、处理器130和/或存储器140。
类似于本文中描述的其他计算设备,计算设备200可以包括操作单元231,所述操作单元231被配置为对一组输入值241、243执行计算的操作以获得输出值245。另外,操作单元231可以被配置为以对另一组输入值242、244进行计算的进一步操作以获得另外的输出值246。尽管在图中,各个操作具有两个输入,但这不是必需的:这些操作可以是空值、三进制等。操作也不必具有相同数量的输入。
有趣的是,至少一个共享的份额245.1=246.1定义了输出值245和另外的输出值246。输出值245由至少一个计算的份额245.2进一步定义,并且另外的输出值246由至少一个计算的份额246.2进一步定义。由操作单元231执行的操作典型地彼此不依赖,例如该操作的输入不依赖于进一步操作的输出,反之亦然。因此,这两个操作可以基本上同时地执行,例如以交错的方式。优选地,操作彼此独立,使得共享的份额245.1=246.1影响计算的不相关部分。在一些实施例中,所述操作和另外的操作是相同的操作,但是通常它们被应用于不同的输入。
为了执行操作,操作单元231可以基于共享的份额245.1=246.1来计算至少一个计算的份额245.2和至少一个另外的计算的份额246.2。优选地,至少一个共享的份额的值与相应操作的输入(例如,输入241-244)无关,例如,与它们的相关性低。这可以确保共享的份额245.1=246.1和/或值245、246的其他份额泄漏关于相应的值的尽可能少的信息。
在一些实施例中,共享的份额245.1=246.1还定义了先前值,所述先前值是在该操作之前执行的操作的输出。因此,共享的份额245.1=246.1是计算的至少三个值之间的共享的份额。在这种情况下,操作单元231通常在执行操作时不计算共享的份额245.1=246.1。然后,执行操作包括例如沿着由计算设备100执行的操作131的线,从至少一个共享的份额245.1=246.1和一组输入值中的份额241.1=242.1、241.2、243.1=244.1、243.2来计算出至少一个计算的份额245.2。类似地,执行另外的操作可以包括:例如沿着计算设备100的操作单元131的线,从至少一个共享的份额245.1=246.1和另外的一组输入值中的份额241.1=242.1、242.2、243.1=244.2、244.2计算至少一个计算的份额246.2。在这样的实施例中,值对241、242和243、244不必具有共享的份额。
在其他实施例中,操作单元231计算共享的份额245.1=246.1,作为执行操作的一部分。为了确保输入值241-244的共享的份额的独立性,在各种实施例中,基于随机值确定至少一个共享的份额245.1=246.1。例如,随机值可以是由随机性源或虚设随机数生成器生成的值。但是,在一些攻击场景中,攻击者可能会控制这种随机性源。因此,在一些实施例中,随机值有利地是先前执行的操作的输出的份额。
在已经计算出共享的份额245.1=246.1之后,操作单元231可以通过根据至少一个共享的份额245.1=246.1和一组输入值的份额241.1=242.1、241.2、241.2=243.1=244.1、243.2来计算至少一个计算的份额245.2来继续执行操作。类似地,操作单元231可以根据至少一个共享的份额245.1=246.1和另外的一组输入值中的份额241.1=242.1、242.2、243.1=244.2、244.2来计算至少一个计算的份额246.2。
这些计算都可以沿着上面讨论的计算设备100的操作单元131的线来执行。然而,计算设备200还可以有利地利用以下事实:各个计算的输入在它们之间具有共享的份额,例如,操作的第一输入241和另一操作的第一输入242可以具有共享的份额241.1=242.2,并且类似地对于第二输入243和244。在这种情况下,操作单元231可以基于相应计算的相应输入之间的共享的份额来计算至少一个共享的份额245.1=246.1,例如,还如上所述地使用随机值。然后,所述计算出的至少一个共享的份额245.1=246.1可以用于计算所述计算的份额。
例如,在一个实施例中,这些操作都可以是AND操作。输入值和输出值可以通过XOR共享而被存储为份额。例如,输入值zk,241可以通过对
Figure BDA0003103234870000251
进行XOR共享而被存储为份额rk,241.1=242.1和
Figure BDA0003103234870000252
241.2。将另外的输入值zk′,242可以通过对
Figure BDA0003103234870000253
进行XOR共享而被存储为份额rk,241.1=242.2和
Figure BDA0003103234870000254
Figure BDA0003103234870000255
类似地,输入值zl,243可以通过对
Figure BDA0003103234870000256
进行XOR共享而被存储为份额rl,243.1=244.1和
Figure BDA0003103234870000257
243.2。另外的输入值zl′,244可以通过对
Figure BDA0003103234870000258
进行XOR共享而被存储为份额rl,243.1=244.2和
Figure BDA0003103234870000261
244.2。可以以相同方式共享其他输入值。输出值zj=zk和zl,245可以通过对
Figure BDA0003103234870000262
进行XOR共享而被存储为份额rj,245.1=246.1和
Figure BDA0003103234870000263
245.2。另外的输出值z′j=z′k和zl′,245可以通过对
Figure BDA0003103234870000264
进行XOR共享而被存储为份额rj,245.1=246.2和
Figure BDA0003103234870000265
242.2。
为了执行AND操作,操作单元231可将至少一个共享的份额计算为用随机值掩蔽的各个输入的共享的份额的AND。操作单元231可进一步计算至少一个计算的份额,作为用相同值掩蔽的相应输入的份额的AND的XOR。类似地,操作单元231可以计算至少一个进一步计算出的份额作为用相同的随机值掩蔽的另外的输入的份额的与的AND的组合,例如XOR。用随机值屏蔽输出份额可以改善其与输入值和输出值的独立性。
例如,操作单元231可以使用以下步骤来使用中间值ci和随机值s计算两个AND操作,例如s可以是先前执行的操作的输出的份额。
1.c0=rk and rl
2.rj=c0 xor s
3.
Figure BDA0003103234870000266
4.
Figure BDA0003103234870000267
5.
Figure BDA0003103234870000268
6.c3=rj xor c1
7.
Figure BDA0003103234870000269
8.
Figure BDA00031032348700002610
9.
Figure BDA00031032348700002611
10.
Figure BDA00031032348700002612
11.c3=rj xor c1
12.
Figure BDA00031032348700002613
特别地,如该示例中所示,输入值241和243,另外的输入值242、244,输出值245和/或另外的输出值246可以不被计算为执行操作的中间结果。此外,为了获得计算的份额
Figure BDA0003103234870000271
可以首先将随机值s与c0进行XOR,然后与c1进行XOR,然后与c2进行XOR。因此,可以提高操作的中间值与各个计算的输入和输出之间的独立性,从而使对这些值的攻击变得复杂,如上所述。将理解的是,例如,可以通过对输入值的份额进行重新排序或交换来调整上述步骤。还应该理解,上述步骤可以概括为执行在所使用的共享上分配的任何操作,例如,使用加法共享,例如对给定模量取模,进行环乘法。
在一些实施例中,这些操作可以是XOR操作。如上面针对AND操作所述,可以对输入值和输出值进行XOR共享。为了执行XOR操作,操作单元231可将至少一个共享的份额245.1=246.1计算为各个输入的共享的份额(例如,共享的份额241.1=242.1和共享的份额243.1=244.1)的XOR。操作单元231还可以将至少一个计算的份额(例如份额245.2)计算为各个输入值的份额(例如份额241.2和243.2)的XOR。操作单元231可以还将至少一个另外的份额(例如份额246.2)计算为相应的另外的输入值的份额(例如份额242.2和244.2)的XOR。例如,执行XOR操作可以包括以下步骤或变体,例如,通过重新排序或交换:
1.rj=rk xor rl
2.
Figure BDA0003103234870000272
3.
Figure BDA0003103234870000273
类似地,这些操作可以是与相应常数K1和K2的XOR操作,如上所述,对它们进行XOR共享。例如,根据输入值将输出值计算为与常数K1的XOR,根据另外的输入值将另外的输出值计算为与常数K2的XOR。在这种情况下,输出值和另外的输出值都可以由共享的份额定义,所述共享的份额也定义了所述输入值和所述另外的输入值。所述输出值可以另外由根据所述输入值的份额计算出的计算的份额来定义,并且所述另外的输出值可以由根据所述另外的输入值的份额计算出的所述另外的计算的份额来另外定义。操作单元231可以使用以下步骤来执行这样的XOR操作:
1.
Figure BDA0003103234870000281
2.
Figure BDA0003103234870000282
例如,所述输出值与所述另外的输出值的共享的份额rj是与在所述输入值之间被共享的共享的份额rk相同的份额。根据输入值的份额
Figure BDA0003103234870000283
例如计算的份额,计算输出值的计算的份额
Figure BDA0003103234870000284
根据另外的输入值的份额
Figure BDA0003103234870000285
例如计算的份额,计算出另外的输出值的计算的份额
Figure BDA0003103234870000286
同样,输入值、另外的输入值、输出值和/或另外的输出值可以作为执行操作和另外的操作的中间结果而出现。在XOR操作的情况下,可能不需要单独的随机值
图3a示意性地示出了用于执行对至少一组值的计算的计算设备300’的实施例的示例。计算设备300’可以基于本文所述的各种适当的计算设备,例如计算设备100或200。计算设备300’包括处理器330’和存储器340’,例如处理器130或230以及存储器140或240。
计算设备300’可以包括被配置为执行操作的操作单元338。该操作可以导致至少部分地由至少一个共享的份额343.1定义的输出值343。在本文描述的各种实施例中,操作单元338使用先前由操作单元339执行的操作的输出的份额。例如,操作单元338基于操作单元131。例如,至少一个共享的份额343.1可以自身定义操作单元339的操作的输出,或者使用操作单元339的操作的输出的至少一个份额作为随机值来计算所述至少一个份额343.1。在这种情况下,如果先前执行的操作和/或其份额的输出是随机的并且独立于单元338所执行的操作,例如,先前执行的操作的输出的值与单元338的操作的任何输入的值不相关,则可能是有益的。尽管操作单元338和339在图中被示为分离的单元,但是它们可以组合成单个单元。
有趣的是,计算设备300'可以包括配置为执行初始混淆计算的初始混淆计算单元336。计算设备300'还可以包括逆混淆计算单元337,混淆计算单元337被配置为基于例如来自单元336的输出来计算初始混淆计算的逆。混淆计算单元336和/或逆混淆计算单元337可以在至少部分地使用份额(例如,使用根据本文描述的实施例的操作单元)来进行操作。例如,在一个实施例中,混淆计算单元336不使用份额,而逆混淆计算单元337使用份额。执行混淆计算及其逆操作可能不影响计算的整体输出,但是可以有利地产生可用于如上所述的后续操作的份额。操作单元339可以执行混淆计算单元336或逆混淆计算单元337的操作,所述操作使用份额作为先前执行的操作来执行。
例如,如图所示,操作单元339可以执行逆混淆计算的操作。这可以具有如下优点:单元339的操作的输出和/或其份额的输出是随机的,例如,由于混淆计算已经被应用而独立于计算输入,和/或由于单元339的操作与单元338的操作之间的逆步骤和/或其他步骤的剩余步骤而独立于单元338的操作的输出。如果使用份额(最好在混淆计算的结束附近)执行,则先前执行的操作也可以包含在单元336的混淆计算中。混淆计算及其逆操作可以在整体计算的开始处或附近进行,但是至少在单元338的操作之前进行。
可以应用各种混淆计算。在一个实施例中,混淆计算包括例如具有随机选择的轮密钥的一轮或多轮的分组密码,例如诸如AES的SLT密码。在一个实施例中,混淆计算包括随机线性函数,接着是随机非线性函数,例如,接着再次是随机线性函数和随机非线性函数。在一个实施例中,逆混淆计算可以包括随机非线性函数的逆,接着是随机线性函数的逆,例如,接着再次是随机线性函数的逆和随机线性函数的逆。例如,对于i=0,…,15,可能生成随机非线性双射函数Si:{0,1}8→{0,1}8和随机线性函数L:{0,1}128→{0,1}128。整个计算可以具有128位输入x,其中xb表示其第b个字节,并且xi表示其第i个位,例如,x=x0…x15=x0…x127。函数S:{0,1}128→{0,1}128可以通过S(x)=S0(x0)…S15(x15)来定义。混淆计算可以包括例如使用在输入x上计算y的算术布尔电路来计算y=S(L(S(L(x))))。
在各种实施例中,混淆计算和/或其逆操作可导致计算输入值的份额。例如,操作单元338可以对计算输入值执行其操作。获得共享的计算输入值可以包括:对计算的输入执行混淆计算,以获得混淆的计算输入,例如,不使用份额;将混淆的计算输入转换为存储为份额的混淆的计算输入值;以及对混淆的计算输入值进行混淆计算的逆操作,以获得一组计算输入值的份额。
例如,共享混淆的计算输入值可以导致至少一个共享的份额zj和至少一个计算的份额si,例如作为zj xor si。至少一个共享的份额zi例如可以被选择为混淆计算的中间结果,优选地在混淆计算的结尾附近,例如,上面的计算S(L(x))的结果。所述至少一个共享的份额也可以是另一种混淆的计算输入等。可以从混淆的计算输入值yi和至少一个共享的份额,例如,si=yi xor zj,来计算至少一个计算的份额。因此,有趣的是,混淆计算输入值的份额可以是随机的和/或独立于它们表示的值,例如,借助于至少一个具有随机值的共享的份额,以及至少一个从其计算出的计算的份额。
图3b示意性地示出了计算设备300的实施例的示例。计算设备300包括处理器330,所述处理器330例如基于计算设备100、200和/或300',至少对例如存储在存储器340中的一组值来执行计算。计算设备300可以包括执行计算的第一并行计算分支的并行计算分支单元331和执行计算的第二并行计算分支的并行计算分支单元332。每个并行计算分支,例如单元331和332的分支以及任何其他并行计算分支,可以计算相同输出的副本。计算设备300可以还包括平均计算单元335,所述平均计算单元335被配置为执行将相同输出的这些多个副本组合成单个计算输出的平均计算。
如本领域本身已知的,使用并行计算分支和/或平均计算可能使对计算设备300执行的计算的各种攻击(例如,差分错误分析攻击等)复杂化。例如,这可能是因为在一个并行计算分支而不是另一个并行计算分支中引入了错误和/或在相应的并行计算分支中引入不同的错误可能导致平均计算的随机输出。
在一个实施例中,平均计算单元335可以被布置为在给定两个相等的值作为输入的情况下返回该值,但是否则返回随机值。例如,给定第一并行计算分支单元331的输出W′1和第二并行计算分支单元332的输出W′2,平均计算单元335可以评估关于W′1的随机函数,以及恒等函数减去关于W′2的随机函数,并且将两个结果相加。例如,在128位上使用XOR共享,可以使用可逆线性函数L′:{0,1}128→{0,1}128,使得L2(x)=(L′xor I)(x)=L′(x)xor x也是可逆的,平均计算单元335的输出Z′可计算为Z′=L′(W′1)xor L2(W′2),例如,使用对份额进行评估的二进制电路。例如,可以如针对计算设备100的操作单元131所讨论的那样对平均计算单元335的操作进行评估,或者可以在例如将其提供给平均计算单元335之前重新共享各个并行计算分支的共享值,如针对计算设备800所讨论的。
当计算设备300的计算包括一个操作和另外的操作,其中共享的份额定义了一个操作的输出和另外的操作的输出两者时,使用并行计算分支是特别有利的。例如,计算设备300可以包括被配置为例如基于计算设备200的操作单元231来执行操作的操作单元333。在这种情况下,所述操作可以被包括在第一并行计算分支中,并且另外的操作可以被包括在第二并行计算分支中。因此,在以下意义上并行性可以有效地免费用于免费获取共享的份额:两个并行计算分支为其提供足够独立的计算路径以能够有效使用共享的份额。在一些实施例中,并行计算分支单元331、332计算相似的函数,例如,由相似结构的电路描述的函数。在这种情况下,例如,共享的份额可以定义两个电路的相应操作,从而提供一种特别有效的方式来执行对共享的份额的操作以及另外的操作。
将理解的是,可以应用多于两个的并行计算分支,平均计算单元335相应地被适配。在这样的情况下,可以在来自两个或更多个并行计算分支的值之间共享单个共享的份额,例如,共享的份额可以定义来自每个并行计算分支的值。
图4示意性地示出了计算设备400的实施例的示例。计算设备400包括处理器430,所述处理器430对存储在存储器440中的作为份额的至少一组值进行计算,如本文所讨论的各种实施例中所述。计算设备400可以至少包括第一并行计算分支单元431和第二并行计算分支单元432。每个并行计算分支单元,例如并行计算分支单元431和432,可以计算相同输出的副本,并且计算设备可以还包括平均计算单元435,其将这些多个副本组合成单个输出。例如,计算设备400的单元可以基于计算设备300'的各个单元。
在一个实施例中,第一并行计算分支单元431可以包括执行混淆计算的混淆计算单元451。它的输出可以由逆混淆计算单元452使用,所述逆混淆计算单元452计算混淆计算的逆。单元452的输出可以由执行功能计算的功能计算单元453使用。虚设计算单元455可以使用单元453的输出来执行虚设计算。
第二并行计算分支单元432可以包括被配置为执行虚拟计算的虚设计算单元456。单元456的输出可以由配置为执行功能计算的功能计算单元457使用。单元457的输出可以由配置为执行混淆计算的混淆计算单元459使用。逆混淆计算单元460可以使用单元459的输出,所述逆混淆计算单元460被配置为计算混淆计算的逆。引入混淆和/或虚设计算可以具有的优点是,并行计算分支的各个操作针对不同的值,例如彼此独立或不相关的值进行操作。而且,攻击者可能更难理解计算的结构。例如,由于功能计算单元453、457由于混淆和虚设计算而在各个并行计算分支的不同阶段中操作,因此可能更难以识别功能计算。
优选地,混淆计算、它们的逆操作、虚设计算和/或功能计算包括相似或甚至相同的部分,例如具有相似形状或相同形状的电路。这可能使得不同并行计算分支的对应值的识别更加困难和/或允许分支的操作成对执行,例如,如通过计算设备200的操作单元231那样。例如,混淆计算单元451可以类似地被配置为虚设计算单元456,逆单元452可以被类似地配置为功能计算单元457的初始部分,和/或虚设计算单元455可以被类似地配置为逆单元460,例如,它们计算结构相似的电路。
例如,在一个实施例中,功能计算可以包括多轮可逆迭代计算。可逆迭代计算可以是例如AES的分组密码轮。然而,其他类型的可逆迭代计算也是可能的,例如,用于线性编程的单纯形算法的迭代。例如,可逆迭代计算可以被提供为例如使用合成工具/电路编译器获得的二进制电路。
混淆计算单元451可以被配置为执行迭代计算的两次迭代。逆单元452可以被配置为计算两次迭代的各个逆。可以将功能计算单元453、457分别配置为例如执行多轮可逆迭代计算,例如10、12或14个AES轮。虚设计算单元455可以被配置为计算迭代计算及其逆的迭代。虚设计算单元456可以被配置为计算迭代及其逆。混淆计算单元459可以被配置为计算迭代算法的两次迭代,并且逆单元460可以被配置为计算各个逆。以此方式,各个并行计算分支可以在它们各自的输入上成对执行相似结构的计算。例如,在某个时刻,并行计算分支单元431和并行计算分支单元432可以在不同的点执行相同的计算功能,但是例如在不同的轮次中对不同的数据执行。例如,在第一并行计算分支单元431中,功能计算单元453可以在分支中比第二并行计算分支单元432的对应的功能计算单元457更晚的阶段进行操作。将意识到,实现相同效果的变型可以也可以使用。可以使用本文描述的技术来执行单元451-460的各种操作。例如,可以如针对计算设备100的操作单元131所讨论的那样执行相应计算的一个或多个操作。替代地或此外,第一并行计算分支单元431和第二并行计算分支单元432的一对或多对相应操作可以由类似于计算设备200的操作单元231的操作单元433来执行。例如,操作单元233可以执行混淆计算单元451的操作以及虚设计算单元456的另外的操作,等等。例如,这些操作可以是在电路中相似或相同位置处的操作,用于各个并行计算分支单元431、432的计算。有趣的是,这些操作的各个输入值可以是独立的。为了便于根据各个实施例执行的操作,可以例如通过计算设备700的重新共享单元731对混淆操作单元451和虚设操作单元456的输出执行各种值的重新共享。替代地或附加地,可以例如对虚设操作单元455和逆混淆操作单元460的各个输入执行例如通过计算设备的重新共享单元831的重新共享。
在一个实施例中,操作单元433的操作可以是逆操作单元452或功能计算单元453的操作,操作单元433的另外的操作可以是功能操作单元457或混淆操作单元459的操作。作为一个优点,所述操作和所述另外的操作在其他几个计算之前和之后进行,从而使识别该操作的执行变得更加困难。
在一个实施例中,每个并行计算分支可以还包括在功能计算之后的别外的混淆计算,例如,第一并行计算分支单元431可以包括被配置为执行另外的混淆操作的另外的混淆计算单元454,第二并行的计算分支单元432可以包括被配置为执行另外的混淆操作的另一混淆计算单元458,并且类似地适用任何另外的并行计算分支。如上所述,另外的混淆计算单元454、458优选地与上述单元相似,例如具有相似或相同的电路,例如,混淆操作单元454、458计算一个或多个分组密码轮,例如AES轮,例如,两轮。操作单元433的操作可以被包括在单元454的混淆计算中和/或单元433的另外的操作可以被包括在单元458的混淆计算中。计算设备可以还包括逆混淆计算单元461,其被配置为在平均计算单元435的输出上计算单元454、458的另外的混淆操作的逆。因此,整体计算输出可能不受混淆操作的影响,而由平均计算单元435处理的各个值可能独立于最终值计算输出,使计算设备更加难以攻击。
尽管逆混淆操作单元461可以例如对计算设备100和200所讨论的那样对份额起作用,但是在一个实施例中,逆单元461被配置为对未共享的值起作用,例如未作为多个份额而被存储在存储器中的值。例如,处理器430可以例如通过对输出值的各个份额应用重构函数(例如,XOR或各个份额的相加)来重构平均计算单元435的输出值以获得未共享的输出值。然后,逆混淆计算单元461可以例如通过评估关于未共享值等的二进制电路来对未共享值起作用。例如,逆混淆计算单元461的输出可以是计算的整体输出。
图5示意性地示出了用于对至少一组值执行计算的计算设备500的实施例的示例,每个值被存储为多个份额。计算设备500包括处理器530和存储器540。例如,计算设备500可以基于计算设备100、200、300、300'和/或400。有趣的是,存储在存储器540中的多个份额中的份额,例如值542的份额542.1可以进行编码存储,这使攻击更加复杂,因为在不了解所使用编码的情况下,份额540的值不能直接从存储器中读取。
在一个实施例中,可以通过对份额本身应用编码函数来对存储在存储器中的值的份额进行编码存储。例如,将值存储为多个份额可以包括:获得该值的份额;使用编码函数从所获得的份额中计算编码份额;以及存储编码份额。从存储器获得份额可以包括获得编码份额并且应用编码函数的逆。
例如,计算设备500可以包括被配置为至少对输入值541执行操作以获得输出值542的编码操作单元531。输入值541可以被存储为份额541.1和541.2,其中份额s1,1,541.1可以被存储为编码的值E1(s1,1),并且份额s1,2,541.2存储为编码的值E2(s1,2)。类似地,输出值542可以被存储为份额542.1和542.2=544.2,其中份额s2,1,542.1可以被存储为编码的值E3(s2,1),份额s2,2,542.2=544.2,可以被存储为编码的值E4(s2,2)。例如,份额542.1可以是在执行操作531时计算出的计算的份额,并且份额542.2=544.2可以是还定义另一个值544的共享的份额,例如份额542.2=544.2可以与另一个份额544.1一起定义另一个值544,其可能或可能不以编码方式被存储。例如,编码操作单元531可以基于适于应用编码的操作单元131或231。
Ei可以是编码函数。例如,编码函数Ei可以包括随机非线性可逆函数和/或随机线性函数或其他已知编码。并非所有值都需要存储编码,甚至不是单个值的所有份额都需要存储编码:即使不是所有的份额和/或值都经过编码,攻击也会变得更加困难。例如,敏感值可以以编码方式存储;一些不太敏感的值可能会未经编码存储。可以将不同的编码函数用于不同的值,但是,例如,出于效率方面的考虑,也可以使用相同的编码函数来对多个值进行编码。
例如,在操作单元131的改编中,编码操作单元531可以通过例如使用编码函数的各个反函数从存储在存储器540中的输入值的编码份额计算输入值的一个或多个份额,来从至少一个共享的份额542.2=544.2中计算出操作531的至少一个计算的份额542.1。例如,如图所示,编码操作单元531可以从编码份额E1(s1,1)计算份额
Figure BDA0003103234870000351
和/或从编码份额E2(s1,2)计算份额
Figure BDA0003103234870000352
编码操作单元531可以进一步根据至少一个共享的份额542.2和一组输入值的份额来计算未编码的至少一个计算的份额s2,1,并且根据未编码的至少一个计算出的份额来计算经编码的至少一个计算的份额542.1,例如,E3(s2,1),例如,通过应用相应的编码函数E3。例如,如果至少一个共享的份额542.2=544.2被进行编码存储为例如E4(s2,2)。可以从编码的至少一个共享的份额542.2=544.2,例如,
Figure BDA0003103234870000353
来计算至少一个共享的份额s2,2
例如,如果输入值541和输出值542被相加地共享并且操作531被表示为f,则执行操作531可以包括根据E1(s1,1),E2(s1,2)和E4(s2,2)来计算
Figure BDA0003103234870000354
该计算可以容易地适于其他类型的共享和/或其他数量的输入和输出值。可以使用各种已知技术来实现计算,例如,使用机器代码指令、查找表等。
图6示意性地示出了用于对至少一组值执行计算的计算设备600的实施例的示例,每个值被存储为多个份额。计算设备600包括处理器630和存储器640。例如,计算设备600可以基于计算设备100、200、300、300'和/或400。类似于图5,存储在存储器640中的多个份额中的份额可以被编码存储。特别地,在计算设备600中,一组值中的多个值可以构成被编码存储的组合值。举例来说,所述图示出了构成组合值641的两个值642、643和构成组合值644的两个值645、646。通常,任何数量的值都可以构成组合值。例如,一个组合值可以构成许多位,例如8位或16位,所述组合值是这些位的级联。类似地,值可以是k进制,各个值构成组合值作为k进制表示。
可以使用组合值的任何适当的编码,例如,由一组值641编码的值可以是
Figure BDA0003103234870000361
其中z1是值642,z2是值643,|表示级联,并且E1是编码函数。类似地,由一组值644编码的值可以是
Figure BDA0003103234870000362
其中z3是值645,z4是值646,并且E2是编码函数。编码函数E2可以与编码函数E1相同或不同,并且也可以仅对值组641或仅值组644进行编码存储。
计算设备600可以包括编码函数单元631,所述编码函数单元631被配置为利用构成被编码存储的组合值的输入和/或输出值来执行操作。为此,编码函数单元631可以对包括多个输入值的组合值应用逆编码函数以获得未编码的组合值,例如,计算
Figure BDA0003103234870000363
和/或对包括多个输出值的组合值应用编码函数以获得编码的组合输出值,例如计算
Figure BDA0003103234870000364
其中f是要执行的操作,并且输出值z3和z4由经编码的组合输出值
Figure BDA0003103234870000365
定义。例如,
Figure BDA0003103234870000366
的计算可以包括多个可以使用本文所述的各种技术执行的操作,例如,如针对操作单元131或231所述的操作。
例如,可以将用于对编码的值执行操作的函数(例如
Figure BDA0003103234870000367
)编写为一组拉格朗日插值多项式,这样的插值多项式给出一组输出值644中的输出值的值。编码函数单元631然后可以作为电路评估内插多项式,例如二进制电路。这些内插多项式可能仅在所使用的系数上有所不同。特别地,这种电路的形状可以独立于操作f和/或不同的输出值可以具有类似形状的电路。这可以利用内插多项式特别适合与本文所述的并行计算分支结合使用,其中多个分支执行类似的电路。此外,具有用于不同操作的形状相似的电路可能使操作难以在整体计算中识别。
更一般地,编码的使用使攻击复杂化,因为从存储器中读取计算值变得更加困难。此外,由于可以根据可以使用本文中的技术执行的操作来对编码中的操作f进行表达,因此编码可以有效地实现为本文中所描述的份额计算技术之上的一层,从而继承并进一步改善了其应对份额减少攻击、份额定位攻击等的保护。
图7a示意性地示出了计算设备700的实施例的示例。计算设备700包括被配置为存储一组值的存储器740,所述组值中的每个值被存储为多个份额。例如,在图中显示的是存储为份额
Figure BDA0003103234870000371
741.1和
Figure BDA0003103234870000372
741.2的值
Figure BDA0003103234870000373
742和存储为份额
Figure BDA0003103234870000374
742.1和
Figure BDA0003103234870000375
742.2的
Figure BDA0003103234870000376
742值,例如,使用XOR共享。计算设备700用于至少在一组值上执行计算,例如,计算设备700的处理器730执行该计算。例如,计算设备700可以基于计算设备100、200、300、300',400、500或600。
计算设备700可以包括重新共享单元731,重新共享单元731被配置为重新共享第一值(例如,值741)和第二值(例如,值742)。例如,值741可以是由根据本文描述的实施例的计算设备700执行的操作的输出。例如,值741可以是由操作单元131计算出的输出值143,操作单元231的输出值245或246,等等。例如,份额741.1可以是作为操作的一部分而计算出的计算的份额,和/或份额741.2可以是在重新共享之前定义输出值741以及其他值的共享的份额。类似地,值742可以是由计算设备700执行的操作的输出,例如,份额741.1是计算的份额和/或份额742.2是共享的份额。重新共享可能涉及两个以上的值。
作为重新共享的结果,至少一个新的共享的份额,例如,份额rl,741.1'=742.1',可以定义值741和值742。类似地,至少一个另外的新份额,例如,份额
Figure BDA0003103234870000377
741.2',可以定义第一值741,但不能定义第二值742,和/或至少一个另外的新份额,例如,份额
Figure BDA0003103234870000378
742.2',可以定义第二值742,但不能定义第一值741。例如,值741和742可以是根据本文描述的实施例的操作和另外的操作的相应输入值,例如,第一值741可以是输入值241或243,而第二值742可以是计算设备200的另外的输入值242或244。如果重新共享其他值,则单个共享的份额可以定义要重新共享的每个值。一组值的不同子集也可以具有不同的公共共享的份额。
因此,重新共享可以使得能够在重新共享之前对至少没有通过公共份额在一方中定义的输入值和另外的输入值应用操作和另外的操作。在一个实施例中,可以将这里描述的重新共享应用于计算451和/或456的输出,以用作对相应计算452和457的输入,从而可以对由至少一个共享的份额定义的各个值对执行计算452和457以及可能的后续计算的操作。
为了重新共享第一值741和第二值742,重新共享单元731可以基于定义第一值741的先前份额和定义第二值742的先前份额,例如份额741.1、741.2、742.1和742.2中的一个或多个,来计算定义第一值741和第二值742的至少一个新共享的份额741.1'=742.1'。优选地,使用第一值的至少一个份额和第二值的至少一个份额,使得该共享的份额,并且因此也从其计算出的份额至少取决于两个输入值。例如,共享的份额rl可以包括各个输入值的份额的总和,例如XOR。例如,
Figure BDA0003103234870000381
然后可以基于共享的份额和定义各个值的先前份额来计算各个值的计算的份额。
例如,重新共享单元731可以从至少一个新共享的份额rl,741.1'=742.1'和定义第一值的先前份额
Figure BDA0003103234870000382
741.1,
Figure BDA0003103234870000383
741.2来计算定义第一值741的至少一个另外的新份额
Figure BDA0003103234870000384
741.2’。例如,所述计算可以计算等于第一值与至少一个共享的份额之差的值,例如,
Figure BDA0003103234870000385
有趣的是,所述计算通常不包括计算第一值本身,例如,第一值不作为计算的中间结果出现。
类似地,重新共享单元731可以从至少一个新的共享的份额rl,741.1'=742.1'和定义第二值的先前的份额
Figure BDA0003103234870000386
742.1,
Figure BDA0003103234870000387
742.2,来计算定义第二值的742的至少一个另外的新份额
Figure BDA0003103234870000388
742.2’。例如,所述计算可以计算等于第二值与至少一个共享的份额之差的值,例如,
Figure BDA0003103234870000389
如上所述,有趣的是,所述计算通常不包括计算第二值本身。
图7b示意性地示出了计算设备800的实施例的示例。计算设备800包括被配置为存储一组值的存储器840,所述组值中的每个值被存储为多个份额。
例如,在图中显示的是存储为份额
Figure BDA0003103234870000391
841.1和
Figure BDA0003103234870000392
841.2的值zl,841,例如
Figure BDA0003103234870000393
计算设备800用于至少对一组值执行计算。例如,计算设备800可以基于计算设备100、200、300、300',400、500、600或700。
计算设备800可以包括配置为重新共享例如值841的值的重新共享单元831。例如,值841可以是由根据本文描述的实施例的计算设备800执行的计算的操作的输出。例如,值841可以是操作单元131的输出值143或任何其他输出值。然而,优选地,值841是已经与另外的操作一起执行以获得另外的值的操作的输出值,如本文所述,所述输出值与所述另外的值共享的份额,例如,操作单元231的输出值245或246。例如,份额841.1可以在操作与操作单元231的另外的操作之间共享,并且份额841.2可以从份额841.1或以其他方式计算。
作为重新共享的结果,可以在重新共享之后通过至少一个共享的份额sr,b,841.1’=844.1和至少一个计算的份额wl,841.2’来定义值841。所述至少一个共享的份额还可以定义另外的值844,所述另外的值是在重新共享之前执行的计算的操作的输出,例如,份额841.1’=844.1和844.2可以定义另外的值844。可以类似于计算设备100的另外的值144,例如在先前执行的操作的一组输出中随机地选择另外的值844。
因此,重新共享可能导致由共享的份额定义值841,所述共享的份额也定义了通常与值841本身不相关的值,例如值844。例如,值844不需要是例如在计算设备400中的相应的另外的计算(例如,另一并行计算分支)的值。结果,重新共享进一步使攻击者对程序流的分析变得复杂。在重新共享之后,值841可以是计算设备800的操作的输入,例如,值841可以是计算设备800的操作单元131的值141、142等。
为了重新共享值841,重新共享单元831可以从至少一个共享的份额841.1’=844.1和定义重新共享之前的值的份额841.1、841.2中计算出至少一个计算的份额841.2’。例如,可以计算至少一个计算的份额,以使得其与至少一个共享的份额一起重建为该值,优选地不将值计算为中间结果。例如,如果值841被相加地共享,则计算可以包括确定共享的份额841.1’=844.1取负,并且在重新共享之前添加该值的后续份额,例如份额841.1和841.2。如果该值是XOR共享的,则计算可以类似地包括在重新共享之前将该值的后续份额(例如份额841.1和841.2)与共享的份额841.1’=844.1相加。例如,计算的份额841.2可以被计算为
Figure BDA0003103234870000401
等等。有趣的是,这种计算通常不包括计算值本身,这使攻击者更难获得该值。
现在在用于将AES加密函数计算为包括AND和XOR门的布尔电路的实施例的详细示例中详细阐述前述的各个方面。
步骤1.随机性创建
对于i=0…15,选择随机非线性双射函数Si:{0,1}8→{0,1}8和随机可逆线性函数L:{0,1}128→{0,1}128。对于任何128位值x,令xb表示其第b个字节,而令xi表示其第i个位,如下所示:
x=x0…x15=x0…x127
通过以下方式定义函数S:{0,1}128→{0,1}128
S(x)=S0(x0)…S15(x15)。
可以创建算术布尔电路C0,…,Cn,其在输入x上计算y=S(L(S(L(x)))),例如,可以由初始混淆计算单元336进行计算。令zi表示门Ci的输出。
步骤2.份额引入
假设值zt,…,zn对应于调用函数S之后的值。令
Figure BDA0003103234870000406
为份额的初始集合。然后可以使用接下来的128个操作Cn+1,…,Cn+128引入y的份额:
Figure BDA0003103234870000402
对于i=0,…,127,其中riR[t,n]。将对
Figure BDA0003103234870000403
Figure BDA0003103234870000404
插入
Figure BDA0003103234870000405
步骤3.初始混淆操作的共享输入/逆操作
可以创建布尔操作电路C′0,…,C′n′,在输入y上计算x=L-1(S-1(L-1(S-1(y)))),例如,由逆混淆计算单元337执行。可以例如由操作单元131如下执行布尔算术电路的每个操作(例如,门),例如,对份额的每个操作。
与门
Figure BDA0003103234870000411
的执行方式如下:
(a)
Figure BDA0003103234870000412
(b)
Figure BDA0003103234870000413
(c)
Figure BDA0003103234870000414
(d)
Figure BDA0003103234870000415
(e)c4=c0 xor sr,b(对于通过先前执行的计算操作输出的另外的值的随机索引
Figure BDA0003103234870000416
及其份额b∈[0,1])。
(f)c5=c4 xor c1,
(g)c6=c5 xor c2,
(h)zj=c6 xor c3,
并且包括计算的份额zj和共享的份额的sr,b(sj,0,sj,1)=(zj,sr,b)被添加到
Figure BDA0003103234870000417
中。
XOR门
Figure BDA0003103234870000418
可以按以下方式执行:
(a)
Figure BDA0003103234870000419
(b)c1=c0 xor sr,b(对于通过先前执行的计算操作输出的另外的值的随机索引
Figure BDA00031032348700004110
及其份额b∈[0,1])。
(c)c2=c1 xor sk,0
(d)
Figure BDA00031032348700004111
并且包括计算的份额zj和共享的份额sr,b的sj:=(sj,0,sj,1):=(zj,sr,b)被添加到
Figure BDA00031032348700004112
步骤4.引入两个异步并行计算分支
可以如前一步骤中那样创建和评估份额上的两个布尔电路
Figure BDA00031032348700004113
Figure BDA00031032348700004114
其中
Figure BDA00031032348700004115
(例如由混淆计算单元451执行)计算虚设密钥Kd1和Kd2上的AES的两个反轮次,以及
Figure BDA00031032348700004116
(例如由虚设计算单元456计算)在相同的虚设密钥Kd上分别计算反向AES轮次,然后计算正向AES轮次。
步骤5.份额重组/重新共享
Figure BDA00031032348700004117
表示
Figure BDA00031032348700004118
的共享结果,
Figure BDA00031032348700004119
表示
Figure BDA00031032348700004120
的共享结果。可以创建以下用于
Figure BDA0003103234870000421
的布尔电路,以重组Z1和Z2的份额,例如,由重新共享单元731执行的:
Figure BDA0003103234870000422
Figure BDA0003103234870000423
Figure BDA0003103234870000424
因此,在重新共享之后,第一值和第二值都可以由共享的份额
Figure BDA0003103234870000425
定义,第一值由另外的新份额
Figure BDA0003103234870000426
进一步定义,并且第二值由另外的新份额
Figure BDA0003103234870000427
进一步定义。
Figure BDA0003103234870000428
将三元组
Figure BDA0003103234870000429
添加到
Figure BDA00031032348700004210
中。
步骤6.并行AES轮次
可以创建运行14个正向AES轮次的布尔电路
Figure BDA00031032348700004211
可以将“与”和“异或”门变换为在例如由并行计算分支单元431和432计算出的两个并行共享磁道上操作,如下所述。各个并行共享磁道的操作可以例如由操作单元231执行,如下文详述。
与门
Figure BDA00031032348700004212
可以转换为:
(a)
Figure BDA00031032348700004213
(b)rj=c0 xor s,对于S中的随机位,例如先前执行的操作的输出份额。
(c)
Figure BDA00031032348700004214
(d)
Figure BDA00031032348700004215
(e)
Figure BDA00031032348700004216
(f)c3=rj xor c1,
(g)
Figure BDA00031032348700004217
(h)
Figure BDA00031032348700004218
(i)
Figure BDA00031032348700004219
(j)
Figure BDA0003103234870000431
(k)c3=rj xorc1,
(l)
Figure BDA0003103234870000432
与密钥添加无关的XOR门
Figure BDA0003103234870000433
可以转换为:
(a)
Figure BDA0003103234870000434
(b)
Figure BDA0003103234870000435
(c)
Figure BDA0003103234870000436
与密钥添加有关的XOR门(zj=zk xor K)可以转换为:
(a)
Figure BDA0003103234870000437
(b)
Figure BDA0003103234870000438
其中,在输出值和另外的输出值之间共享的共享的份额rj是在输入值和另外的输入值之间共享的共享的份额rk。可替代地,可以将密钥K1和/或K2存储为份额,并且可以使用与密钥添加无关的XOR门的过程。这可以增加电路的均匀性,从而使得更难于使用密钥作为常数来识别异或门。
将三元项
Figure BDA0003103234870000439
添加到
Figure BDA00031032348700004310
中。在这里,份额
Figure BDA00031032348700004311
可能对应于计算的份额245.2;份额rj可以对应于共享的份额245.1=246.1;份额
Figure BDA00031032348700004312
可以对应于计算的份额246.2。
在Z1上操作的密钥的序列可以是例如由逆混淆计算单元452使用的Kd2,Kd1;或者由功能计算单元453使用的K0,…,K10,,以及例如由混淆计算单元454使用的Kd3,Kd4
关于Z2,所述序列可以是例如由功能计算单元457使用的K0,…,K10;例如由混淆计算单元454使用的Kd3,Kd4;例如由混淆计算单元459使用的Kd5Kd6
虚设密钥Kd3,Kd4,Kd5,Kd6可以被随机地生成。
步骤7.重组份额/重新共享
Figure BDA0003103234870000441
表示
Figure BDA0003103234870000442
的共享组合结果。令[W1]表示第一轨道的共享结果(例如,在输入Z1上执行的
Figure BDA0003103234870000443
),[W2]表示第二轨道的共享结果(例如,在输入[Z2]上执行的
Figure BDA0003103234870000444
)。
可以创建以下针对i=0,…,127的布尔电路,以重组Z的份额,例如,与计算设备800的重新共享单元831的两次重新共享相对应:
Figure BDA0003103234870000445
Figure BDA0003103234870000446
Figure BDA0003103234870000447
Figure BDA0003103234870000448
对于一个随机的
Figure BDA0003103234870000449
并且b1,b2∈[0,1]。
例如,重新共享之前的份额
Figure BDA00031032348700004410
Figure BDA00031032348700004411
可能对应于份额841.1、841.2,重新共享之后的份额sr1,b1,
Figure BDA00031032348700004412
可能分别对应于份额为841.1'=844.1和841.2',并且类似地针对
Figure BDA00031032348700004413
sr2,b2
Figure BDA00031032348700004414
Figure BDA00031032348700004425
Figure BDA00031032348700004415
Figure BDA00031032348700004416
Figure BDA00031032348700004417
添加到
Figure BDA00031032348700004418
中。
步骤8.同步轨道
可以如步骤3中那样关于份额评估两个布尔电路
Figure BDA00031032348700004419
Figure BDA00031032348700004420
其中
Figure BDA00031032348700004421
对虚设密钥Kd计算逆AES轮次和一次正轮次,例如由虚设计算单元455执行,并且
Figure BDA00031032348700004422
使用分别为Kd6和Kd5的虚设密钥分别计算两个逆AES轮次,由例如逆混淆计算单元460执行。
步骤9.组合3
令W′1表示输入W′1
Figure BDA00031032348700004423
的结果,W′2表示输入W2
Figure BDA00031032348700004424
的结果。可以生成满足映射L2(x)=(L′+I)(x)=L′(x)+x也是可逆的可逆线性函数L′:{0,1}128→{0,1}128。可以创建布尔电路,所述布尔电路计算Z′=L′(W′1)+L2(W′2),例如,如步骤3中那样,通过平均计算单元435对份额进行计算。
步骤10.撤消共享
Figure BDA0003103234870000451
表示上一步的结果。共享可以被撤消,例如,可以如下重建值:对于i=0,…,127
Figure BDA0003103234870000452
步骤11.倒回到输出
可以创建布尔电路,所述布尔电路分别例如对虚设密钥Kd4和Kd3计算两个逆AES轮次,例如由逆混淆计算单元461执行,以获得计算输出。
本文描述的计算设备的执行在处理器中实现,其示例在本文中示出。图1-7b示出了可以是处理器的功能单元的功能单元。例如,图1可以用作处理器的可能功能组织的蓝图。例如,图4中所示的功能单元可以全部或部分地以存储在设备400处的计算机指令来实现,例如存储在设备400的电子存储器中,并且可以由设备400的微处理器执行,并且类似地用于其他计算设备。在混合实施例中,功能单元部分地在硬件中实现为例如协处理器,例如密码协处理器,并且部分地在相应设备上存储和执行的软件中实现。
计算设备100、200、300、300',400、500、600、700或800可以具有用户接口,所述用户接口可以包括众所周知的元素,例如一个或多个按钮、键盘、显示器、触摸屏等。用户接口可以被布置为容纳用于在至少一组值上启动计算的用户交互。
典型地,每个计算设备包括微处理器(未单独示出),所述微处理器执行存储在各个设备中的适当软件。例如,所述软件可能已经被下载和/或存储在相应的存储器中,例如,诸如RAM之类的易失性存储器或诸如闪存之类的非易失性存储器(未单独示出)。可替代地,计算设备可以全部或部分地以可编程逻辑来实现,例如,实现为现场可编程门阵列(FPGA)。计算设备可以全部或部分地实现为所谓的专用集成电路(ASIC),例如,针对其特定用途而定制的集成电路(IC)。例如,可以例如使用诸如Verilog、VHDL等的硬件描述语言在CMOS中实现电路。
在一个实施例中,计算设备100包括操作电路131。设备100可以包括附加电路,例如混淆计算电路、平均计算电路等。类似地,计算设备200可以包括操作电路231,计算设备可以包括并行计算分支电路331、332,操作电路333等。计算设备400可以包括操作电路433等。计算设备500可以包括编码操作电路531等。计算设备600可以包括编码函数电路631等。计算设备700可以包括重新共享电路731等。计算设备800可以包括重新共享电路831等。电路实现本文描述的相应的操作和/或计算。所述电路可以是处理器电路和存储电路,所述处理器电路执行在所述存储电路中以电子方式表示的指令。
处理器电路可以以分布式方式实现,例如,实现为多个子处理器电路。存储装置可以分布在多个分布式子存储装置上。存储器的一部分或全部可以是电子存储器、磁存储器等。例如,存储装置可以具有易失性和非易失性部分。存储装置的部分可能是只读的。电路也可以是FPGA、ASIC等。该系统可以包括附加电路,例如,第一并行计算分支电路等;等等;电路实现本文所述的相应操作和/或计算。
图8a示意性地示出了用于对至少一组值执行计算的计算方法900的实施例的示例。计算方法900可以包括提供910一组值,所述组值中的每个值被存储为多个份额。计算方法900可以还包括在一组输入值上执行920计算的操作以获得输出值。输出值可以由至少一个共享的份额和至少一个计算的份额定义。至少一个共享的份额也可以定义另外的值。执行920该操作可以包括从至少一个共享的份额和一组输入值的份额中计算921至少一个计算的份额。
如本领域技术人员将显而易见的,执行该方法的许多不同方式是可能的。例如,步骤的顺序可以改变,或者一些步骤可以并行执行。此外,在步骤之间可以插入其他方法步骤。所插入的步骤可以表示诸如本文所述的方法的改进,或者可以与该方法无关。例如,可以至少部分地并行执行步骤910和920。此外,在开始下一步之前,给定步骤可能尚未完全完成。
可以使用软件来执行根据本发明的方法,所述软件包括用于使处理器系统执行方法900的指令。软件可以仅包括由系统的特定子实体采取的那些步骤。该软件可以存储在合适的存储介质中,例如硬盘、软盘、存储器、光盘等。该软件可以作为信号沿着线、无线或使用数据网络(例如,因特网)发送。可以使该软件可用于服务器上的下载和/或远程使用。可以使用被布置为配置可编程逻辑(例如,现场可编程门阵列(FPGA))的比特流来执行根据本发明的方法,以执行该方法。
应当理解,本发明还扩展到适于将本发明付诸实践的计算机程序,特别是在载体上或载体中的计算机程序。该程序可以是源代码、目标代码、源和目标中间的代码的形式,例如部分编译的形式,或者是适合于在根据本发明的方法的实现中使用的任何其他形式。与计算机程序产品有关的实施例包括与所阐述的方法中的至少一个的每个处理步骤相对应的计算机可执行指令。这些指令可以细分为子例程和/或存储在可以静态或动态链接的一个或多个文件中。与计算机程序产品有关的另一实施例包括与所阐述的系统和/或产品中的至少一个的每个装置相对应的计算机可执行指令。
图8b示出了根据实施例的具有包括计算机程序1020的可写部分1010的计算机可读介质1000,计算机程序1020包括用于使处理器系统对至少一组值执行计算的计算方法的指令。计算机程序1020可以作为物理标记或借助于计算机可读介质1000的磁化而体现在计算机可读介质1000上。然而,也可以想到的任何其他合适的实施例。此外,将理解,尽管计算机可读介质1000在这里被示为光盘,但是计算机可读介质1000可以是任何合适的计算机可读介质,诸如硬盘、固态存储器、闪存等,并且可能是不可记录的或可记录的。计算机程序1020包括用于使处理器系统执行所述计算方法的指令。
图8c以示意图示出根据实施例的处理器系统1140。该处理器系统包括一个或多个集成电路1110。在图8c中示意性地示出了一个或多个集成电路1110的架构。电路1110包括处理单元1120,例如CPU,用于运行计算机程序组件以执行根据实施例的方法和/或实现其模块或单元。电路1110包括用于存储编程代码、数据等的存储器1122。存储器1122的一部分可以是只读的。电路1110可以包括通信元件1126,例如天线、连接器或两者,等等。电路1110可以包括专用集成电路1124,用于执行该方法中定义的部分或全部处理。处理器1120、存储器1122、专用IC 1124和通信元件1126可以经由互连1130(例如,总线)彼此连接。处理器系统1110可以被布置为分别使用天线和/或连接器进行接触和/或无接触通信。
例如,在一个实施例中,计算设备可以包括处理器电路和存储器电路,处理器被布置为执行存储在存储器电路中的软件。例如,处理器电路可以是英特尔酷睿i7处理器、ARMCortex-R8等。在一个实施例中,处理器电路可以是ARM Cortex M0。存储器电路可以是ROM电路或非易失性存储器,例如闪存。存储器电路可以是易失性存储器,例如SRAM存储器。在后一种情况下,设备可以包括非易失性软件接口,例如,硬盘驱动器、网络接口等,其被布置用于提供软件。该软件包括根据实施例的被布置为对一组输入值执行计算的操作的操作指令。
应当注意,上述实施例说明而不是限制本发明,并且本领域技术人员将能够设计许多替代实施例。
在权利要求中,括号之间的任何附图标记都不应被解释为对权利要求的限制。动词“包括”及其词形变化的使用并不排除存在权利要求中未提及的其他元素或步骤。元素前面的词语“一”或“一个”并不排除存在多个这样的元素。本发明可以通过包括几个不同元件的硬件以及通过适当编程的计算机来实现。在列举几个装置的设备权利要求中,这些装置中的几个可以由同一件硬件来体现。尽管特定措施是在互不相同的从属权利要求中记载的,但是这并不意味着不能有利地使用这些措施的组合。
在权利要求书中,括号内的引用指的是示例性实施例的附图中的附图标记或实施例的公式,从而增加了权利要求的可理解性。这些引用不应被解释为对权利要求的限制。

Claims (18)

1.一种用于对至少一组值执行计算的计算设备(100、200),所述计算设备包括:
存储器(140、240),其被配置为存储所述一组值,所述一组值中的每个值被存储为定义所述值的多个份额;
处理器(130、230),其配置为:
对一组输入值执行所述计算的操作以获得输出值(143、245),所述输出值由至少一个共享的份额(143.1、144.1、245.1、246.1)和至少一个计算的份额定义,所述至少一个共享的份额还定义另外的值(144、246),执行所述操作包括:根据所述至少一个共享的份额和所述一组输入值的份额来计算所述至少一个计算的份额。
2.根据权利要求1所述的计算设备,其中,所述计算包括在输入消息上对分组密码的评估。
3.根据前述权利要求中的任一项所述的计算设备,其中,计算所述至少一个计算的份额包括:计算多个中间结果的序列,每个中间结果是根据所述至少一个共享的份额来计算的。
4.根据前述权利要求中的任一项所述的计算设备,其中,所述另外的值独立于所述输入值。
5.根据前述权利要求中的任一项所述的计算设备,其中,定义所述输出值的每个份额还定义相应的另外的值。
6.根据前述权利要求中的任一项所述的计算设备,其中,所述另外的值(144)是在所述操作之前执行的所述计算的先前操作的输出。
7.根据权利要求1-5中的任一项所述的计算设备(200),其中,所述计算包括对另一组输入值的另一操作以获得所述另外的值(246),所述另外的值由所述至少一个共享的份额(245.1,246.1)和至少一个另外的计算的份额定义,所述处理器配置为:
根据所述至少一个共享的份额和所述一组输入值的份额来计算所述至少一个计算的份额;
根据所述至少一个共享的份额和所述另一组输入值的份额来计算所述至少一个另外的计算的份额。
8.根据权利要求7所述的计算设备,其中,所述处理器还被配置为:使用先前执行的操作的输出的至少一个份额作为随机值来计算所述至少一个共享的份额。
9.根据权利要求7或8所述的计算设备,其中,所述计算至少包括:第一并行计算分支和第二并行计算分支,每个计算分支对相同输出的副本进行计算;以及将所述相同输出的所述多个副本组合成单个输出的平均计算,所述操作和所述另外的操作被包括在不同的并行计算分支中。
10.根据前述权利要求中的任一项所述的计算设备,其中,所述计算还包括初始混淆计算,其后是所述初始混淆计算的逆。
11.根据前述权利要求中的任一项所述的计算设备,其中,所述值是比特,所述计算包括二进制电路。
12.根据前述权利要求中的任一项所述的计算设备,其中,使用所述输出值作为输入的另外的操作被交错。
13.根据前述权利要求中的任一项所述的计算设备,其中,所述多个份额中的一个份额被编码地存储。
14.根据权利要求13所述的计算设备,其中,所述一组值中的多个值构成组合值,所述组合值被编码地存储。
15.一种用于对至少一组值执行计算的计算设备(700),所述计算设备包括:
存储器(740),其被配置为存储所述一组值,所述一组值中的每个值被存储为多个份额;
处理器(730),其配置为重新共享第一值(741)和第二值(742),所述重新共享包括:
基于定义所述第一值的先前份额和定义所述第二值的先前份额,计算定义所述第一值和所述第二值两者的至少一个新共享的份额(741.1',742.1');
根据所述至少一个新共享的份额和定义所述第一值的先前份额,计算定义所述第一值的至少一个另外的新份额(741.2');
根据所述至少一个新共享的份额和定义所述第二值的先前份额,计算定义所述第二值的至少一个另外的新份额。
16.一种用于对至少一组值执行计算的计算设备(800),所述计算设备包括:
存储器(840),其被配置为存储所述一组值,所述一组值中的每个值被存储为多个份额;
处理器(830),其被配置为重新共享值(841),所述值在重新共享之后由至少一个共享的份额(841.1',844.1)和至少一个计算的份额(841.2')定义,所述至少一个共享的份额还定义在所述重新共享之前执行的计算的操作的输出,所述重新共享包括根据所述至少一个共享的份额和定义在所述重新共享之前的所述值的份额来计算所述至少一个计算的份额。
17.一种用于对至少一组值执行计算的计算方法(900),所述计算方法包括:
提供(910)一组值,所述一组值中的每个值被存储为多个份额;
对一组输入值执行(920)所述计算的操作以获得输出值,所述输出值由至少一个共享的份额和至少一个计算的份额定义,所述至少一个共享的份额还定义另外的值,执行所述操作包括根据所述至少一个共享的份额和所述一组输入值的份额来计算(921)至少一个计算的份额。
18.一种包括瞬态或非瞬态数据(1020)的计算机可读介质(1000),所述瞬态或非瞬态数据表示使处理器系统执行根据权利要求17所述的方法的指令。
CN201980080902.1A 2018-12-07 2019-12-03 使用共享的份额的计算设备 Pending CN113273131A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP18211183.1 2018-12-07
EP18211183.1A EP3664359A1 (en) 2018-12-07 2018-12-07 A computation device using shared shares
PCT/EP2019/083390 WO2020114999A1 (en) 2018-12-07 2019-12-03 A computation device using shared shares

Publications (1)

Publication Number Publication Date
CN113273131A true CN113273131A (zh) 2021-08-17

Family

ID=64664590

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980080902.1A Pending CN113273131A (zh) 2018-12-07 2019-12-03 使用共享的份额的计算设备

Country Status (4)

Country Link
US (1) US20210367766A1 (zh)
EP (2) EP3664359A1 (zh)
CN (1) CN113273131A (zh)
WO (1) WO2020114999A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3672139A1 (en) 2018-12-19 2020-06-24 Koninklijke Philips N.V. A circuit compiling device and circuit evaluation device
DE102021101697B3 (de) * 2021-01-26 2022-02-17 Infineon Technologies Ag Datenverarbeitungsvorrichtung und verfahren zum verarbeiten geheimer daten
WO2023081222A1 (en) * 2021-11-03 2023-05-11 Arris Enterprises Llc White-box processing for encoding with large integer values

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8612888B2 (en) * 2008-04-01 2013-12-17 Litl, Llc Method and apparatus for managing digital media content
US8666826B2 (en) * 2010-02-12 2014-03-04 Microsoft Corporation Social network media sharing with client library
EP2458548A1 (en) * 2010-11-30 2012-05-30 France Telecom System and method for implementing dynamic access control rules to personal cloud information
US20130145028A1 (en) * 2011-12-05 2013-06-06 Google Inc. Access Control List
NL2015599B1 (en) * 2015-10-12 2017-05-02 Koninklijke Philips Nv A cryptographic device and an encoding device.
NL2015745B1 (en) * 2015-11-09 2017-05-26 Koninklijke Philips Nv A cryptographic device arranged to compute a target block cipher.
EP3407528A1 (en) * 2017-05-24 2018-11-28 Koninklijke Philips N.V. Cryptographic device and method
EP3413500A1 (en) * 2017-06-09 2018-12-12 Koninklijke Philips N.V. Device and method to compute a block cipher

Also Published As

Publication number Publication date
US20210367766A1 (en) 2021-11-25
WO2020114999A1 (en) 2020-06-11
EP3664359A1 (en) 2020-06-10
EP3891925A1 (en) 2021-10-13
EP3891925B1 (en) 2022-06-22

Similar Documents

Publication Publication Date Title
US11362802B2 (en) Cryptographic device arranged to compute a target block cipher
CN109661792B (zh) 计算分组密码的设备和方法
JP7065888B6 (ja) 暗号装置及び方法
RU2692419C1 (ru) Криптографическое устройство и кодирующее устройство
CN106487499B (zh) Rijndael算法的保护
CN113273131A (zh) 使用共享的份额的计算设备
CN109726565B (zh) 在抗泄漏原语中使用白盒
JP2020515093A (ja) 符号化加算のための計算デバイス
JP6890589B2 (ja) 計算デバイス及び方法
CN113475034B (zh) 电路编译设备和电路评估设备

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