但是該預(yù)定的尋址方式由ARU 102在隨機(jī)數(shù)生成 器104的幫助下而隨機(jī)化。
[0057] 針對向?qū)懭氪鎯ζ鲄^(qū)域的寫入置換,ARU 102采用已經(jīng)用于從讀出存儲器區(qū)域讀 出字節(jié)的相同索引。
[0058] 示例件實施例:將AES MixColumns橾作隨機(jī)化
[0059] AES MixColumns操作可以使用對特定數(shù)據(jù)(AES狀態(tài)列)的操作的特定序列。下 列公式描述了對單個列的AES MixColumns操作。
[0060] b〇= 2 · a 〇+3 · a^az+a^
[0061] Id1= a 0+2 · ap · a2+a3
[0062] b2= a g+ai+2 · a2+3 · a3
[0063] b3= 3 · a o+ai+a〗+〗· a3
[0064] 注意到,乘法2 · \和3 · a x表示在GF (2 s)中的乘法,而加法表示逐位異或操作 (XOR)。因此,被異或組合的各個操作量的次序?qū)τ贏ES MixColumns操作的結(jié)果不是決定 性的。
[0065] 此外,操作可以將16字節(jié)的臨時狀態(tài)變量"TEMP"用于存儲中間結(jié)果。
[0066] 下列類Verilog的描述示出了 ARU 102的當(dāng)被配置用于這類AES MixColumns操 作時的示例性功能:
[0067]
[0068] 初始地,在ARU中的隨機(jī)置換生成器
(RPG)被里置為零,即,從0全15的所有值對 于選擇可用(行2)。然后,生成隨機(jī)置換的第一值(i)(行3)。
[0069] 取決于RAM訪問的類型,而生成輸出地址y。如果生成讀出訪問(行6),那么ARU 基于由軟件提供的隨機(jī)值i和源地址X、而生成用于特定字節(jié)的地址。因此,隨機(jī)值i [3:2] 確定當(dāng)前列,源地址X [1:0]確定當(dāng)前列的當(dāng)前字節(jié),而隨機(jī)值i [1:0]確定當(dāng)前列的輸出字 節(jié)地址。軟件可以確保:原地址被正確地生成,并且當(dāng)前列的所有4個字節(jié)一起正確地被相 乘并且被XOR運(yùn)算,以計算所得字節(jié)。
[0070] 在寫入訪問的情況下,ARU生成輸出地址y,該輸出地址y等于當(dāng)前隨機(jī)值i (行 8)。同時,生成新的隨機(jī)值(行10)。
[0071] 當(dāng)所有16個值都已經(jīng)被選擇時,操作完成。
[0072] 示例件實施例:對來自存儲器的共享倌的隨機(jī)讀出
[0073] 最后,ARU的用于執(zhí)行對來自存儲器的共享值的隨機(jī)讀出的功能,可對應(yīng)于AES S-box操作。差異可以由軟件所提供的對于來自存儲器的數(shù)據(jù)的在該數(shù)據(jù)被寫入回之前的 操作來確定。
[0074] 本文所提出的各個示例可以特別地基于下列方案中的至少一個。具體地,下列特 征的組合可以用于達(dá)到期望結(jié)果。方法的特征可以與設(shè)備、裝置或系統(tǒng)的任何一個或多個 特征組合,或者反之亦然。
[0075] 提出了一種用于存儲器訪問的設(shè)備,該設(shè)備包括:
[0076] -用于進(jìn)行對存儲器的操作的第一部件,
[0077] -用于按隨機(jī)化的方式訪問存儲器的第二部件,
[0078] -其中第一部件經(jīng)由第二部件進(jìn)行操作的至少部分。
[0079] 因此,全部操作在兩個單元(即,第一和第二部件)之間分配。這些可以被布置在 相同的裸片、電路或硅片上。備選地,它們可以被布置在不同的這類裸片、電路或硅片上。通 過允許將用于操作(例如可以并行地進(jìn)行的操作)的部分的存儲器訪問隨機(jī)化,攻擊者面 臨額外的困難:一些存儲器訪問是(或者可能呈現(xiàn)為是)隨機(jī)的。因此,通過僅僅對第一部 件進(jìn)行探測,攻擊者不能容易地確定哪個數(shù)據(jù)在何時被處理。這就增加了設(shè)備的安全性。
[0080] 特別地可選地,在第一部件與第二部件之間的通信具有針對篡改和/或監(jiān)看的至 少一些保護(hù)。
[0081] 另外地可選地,第一部件和第二部件是彼此在其間具有通信鏈路的分離的物理元 件。
[0082] 注意到,"隨機(jī)化的方式"可以基于隨機(jī)值。本文提及的隨機(jī)值可以是真隨機(jī)值或 偽隨機(jī)值。
[0083] 在一個實施例中,設(shè)備進(jìn)一步包括隨機(jī)數(shù)生成器,用于向第二部件提供隨機(jī)值,以 便按隨機(jī)化的方式來訪問存儲器。
[0084] 在一個實施例中,第二部件通過下列各項,按隨機(jī)化的方式訪問存儲器:
[0085] -基于由第一部件提供的地址和隨機(jī)值來確定映射的地址;
[0086] -將該映射的地址用于訪問存儲器。
[0087] 因此,操作的部分的結(jié)果可以被存儲在存儲器中,在由第一部件確定的存儲器區(qū) 域中。然而,訪問存儲器的隊列經(jīng)由第二部件被隨機(jī)化,即,可能與在第一部件上運(yùn)行的軟 件不同的額外的一件硬件。
[0088] 在一個實施例中,第二部件包括隨機(jī)生成器,用于向第二部件提供隨機(jī)值,以便按 隨機(jī)化的方式來訪問存儲器。
[0089] 在一個實施例中,第二部件通過下列各項,按隨機(jī)化的方式來訪問存儲器:
[0090] -基于由第一部件提供的地址和隨機(jī)值,來確定映射的地址;
[0091] -將該映射的地址用于訪問存儲器。
[0092] 在一個實施例中,第一部件是處理器或控制器。
[0093] 在一個實施例中,第二部件是經(jīng)由第一部件被配置的地址隨機(jī)化單元。
[0094] 在一個實施例中,第二部件經(jīng)由第一部件通過進(jìn)行下列各項中的至少一項而被配 置:
[0095] -用于隨機(jī)化的地址范圍的下閾值,
[0096] -用于隨機(jī)化的地址范圍的上閾值,
[0097] -隨機(jī)化的分配或類型。
[0098] 因此,配置可以確定存儲器的地址范圍,該地址范圍將由第二部件使用。操作的部 分在該地址范圍上進(jìn)行,其中第二部件提供隨機(jī)化的訪問。
[0099] 可選地,由第二部件進(jìn)行的隨機(jī)化的訪問可以被置換。
[0100] 在一個實施例中,操作的部分是可以并行地進(jìn)行的操作。
[0101] 在一個實施例中,操作的部分包括下列各項中的至少一項:
[0102] -將對查找表的訪問的順序隨機(jī)化;特別地:將AES S-box查找操作的順序隨機(jī) 化;
[0103] -將在可交換組操作中的操作的順序隨機(jī)化;
[0104] -將在關(guān)聯(lián)組操作中的操作的順序隨機(jī)化;
[0105] -將條目的求和或求積的累積的順序隨機(jī)化;
[0106] -將條目的計算標(biāo)積的累積的順序隨機(jī)化;
[0107] -將對中間值的按矢量或矩陣求積的計算的順序隨機(jī)化;特別是:將對AES混合列 操作的計算中的步驟的順序隨機(jī)化;
[0108] -將對按秘密共享模式的共享值的操作的順序隨機(jī)化;
[0109] -將在讀取來自存儲器的秘密秘鑰的組份或共享量時的訪問的順序隨機(jī)化;
[0110] -將在對稱加密算法中的操作的順序隨機(jī)化;
[0111] -將在非對稱加密算法中的操作的順序隨機(jī)化;
[0112] -將在加密哈希算法中的操作的順序隨機(jī)化。
[0113] 在一個實施例中,第二部件包括經(jīng)由由第一部件提供的配置而更新的內(nèi)部狀態(tài)。
[0114] 在一個實施例中,內(nèi)部狀態(tài)通過經(jīng)由第二部件而進(jìn)行的對第一部件的讀出或?qū)懭?操作而被設(shè)定。
[0115] 在一個實施例中,第二部件按隨機(jī)化的方式來訪問存儲器,其中第二部件的對存 儲器的隨機(jī)化訪問基于下列各項中的至少一項而確定:
[0116] -第二部件的配置,
[0117] -由第一部件提供的訪問類型,
[0118] -由第一部件提供的輸入地址,
[0119] -隨機(jī)值,
[0120] -第二部件的內(nèi)部狀態(tài)。
[0121] 設(shè)置第二部件,該第二部件被布置用于:
[0122] -從第一部件接收關(guān)于存儲器訪問的信息,
[0123] -基于該信息并且基于隨機(jī)值,來以隨機(jī)化的方式訪問存儲器。
[0124] 在一個實施例中,該信息被用于由第一部件經(jīng)由第二部件進(jìn)行的操作的部分。
[0125] 提出了一種用于訪問存儲器的方法,該方法包括:
[0126] -由第二部件按隨機(jī)化的方式來訪問存儲器,其中第一部件經(jīng)由第二部件進(jìn)行操 作的至少部分。
[0127] 因此,上文描述的特征適用于這類方法。
[0128] 在一個實施例中,方法進(jìn)一步包括:
[0129] -通過基于由第一部件提供的地址和隨機(jī)值,并且通過使用映射地址訪問存儲器, 按隨機(jī)化的方式來訪問存儲器。
[0130] 在一個實施例中,方法進(jìn)一步包括:
[0131] -經(jīng)由第一部件來配置第二部件,其中這類配置可以包括下列各項中的至少一 項:
[0132] -用于隨機(jī)化的地址范圍的下閾值,
[0133] -用于隨機(jī)化