(58)【調査した分野】(Int.Cl.,DB名)
n個の入力変数をm個の出力変数に写像するデータ関数を評価する計算デバイスであって、前記データ関数が選択関数及び評価関数を含む計算として前記計算デバイスにおいて構成され、前記入力変数が1つ又は複数の選択変数及び1つ又は複数の評価変数に区分され、前記選択変数(υ)の特定の値の組合せごとに、対応する選択関数(Qυ)及び評価関数(Pυ)が定義され、
前記計算デバイスが、
前記1つ又は複数の選択変数を受け取り、受け取られた前記選択変数について前記選択関数を評価する選択メカニズムであって、選択関数が前記選択変数を入力として受け取り、前記選択関数の出力が、前記選択関数において受け取られた前記選択変数が、前記選択関数に対応する前記特定の値の組合せに等しいか否かを示す、選択メカニズムと、
前記1つ又は複数の評価変数を受け取り、受け取られた前記評価変数について前記評価関数を評価する評価メカニズムであって、評価関数が前記評価変数を入力として受け取り、前記評価関数の出力が、前記評価変数と、前記評価関数に対応する前記選択変数の前記特定の値の組合せとの和集合を入力とする前記データ関数の出力を表す、評価メカニズムと、
前記選択メカニズム及び前記評価メカニズムの前記出力を、前記入力変数に対する前記データ関数の前記出力に結合する結合メカニズムであって、同一の特定の値の組合せに対応する選択関数(Qυ)及び評価関数(Pυ)の積の総和(ΣvQυPυ)をとり、前記総和が前記選択変数(υ)の全ての値の組合せに対するものである、結合メカニズムとを備え、
前記選択メカニズム、評価メカニズム及び/又は前記結合メカニズムがテーブルネットワークとして実装される、計算デバイス。
前記選択メカニズムが前記選択関数を実装する複数の選択ユニットを備え、且つ/又は前記評価メカニズムが前記評価関数を実装する複数の評価ユニットを備える、請求項1に記載の計算デバイス。
前記選択変数が、複数の選択変数のグループにさらに区分され、選択関数が、前記複数の選択変数のグループの中のグループにそれぞれが対応する複数のサブ選択関数の積として前記計算デバイスにおいて構成され、サブ選択関数が、前記グループ内の前記選択変数を入力として受け取り、前記サブ選択関数の出力が、受け取られた前記選択変数が、前記選択関数に対応する前記グループ内の特定の値の組合せと等しいか否かを示す、請求項1又は2に記載の計算デバイス。
前記入力変数の数(n)が前記出力変数の数(m)よりも大きく、前記評価変数の数が前記出力変数の数に等しい、請求項1乃至6のいずれか一項に記載の計算デバイス。
符号化された前記入力変数が複数のシェアとして符号化され、詳細には、前記符号化された入力変数が、複数の符号化済みシェアとして符号化され、より詳細には、前記複数のシェアが複数のステートと共に符号化される、請求項8に記載の計算デバイス。
【発明を実施するための形態】
【0023】
本発明は多くの異なる形式の実施形態が可能であるが、図面に示され、本明細書で詳細に説明されるのは1つ又は複数の特定の実施形態であって、本開示が本発明の原理の例示と見なされるべきであり、本発明を図示及び説明される特定の実施形態に限定するものではないという了解の下でのものである。
【0024】
以下では、理解のために、動作中の実施形態の要素が説明される。しかしながら、それぞれの要素が、それらによって実施されるように記載された機能を実施するように構成されることは明らかであろう。
【0025】
さらに、本発明は実施形態に限定されず、本発明は上述の、又は相異なる従属請求項に記載された各々の新規の特徴又は特徴の組合せの中にある。
【0026】
図6aは、FIPS46−3からコピーされたものであるが、特にDESブロック暗号を示し、一般にはブロック暗号を示す。ブロック暗号は、ブロック暗号ラウンドのシーケンスが作用するブロック暗号入力610を受信し、DESの場合は16ラウンドが存在し、トリプルDESでは48である。第1のブロック暗号ラウンドはブロック暗号入力610に作用し、次のラウンドのそれぞれは前のラウンドの出力に作用する。ブロック暗号ラウンドでは、ラウンド関数fが前のラウンドの出力の一部に適用される。ブロック暗号入力は、DESの場合、64ビットのデータサイズを有する。各ブロック暗号ラウンドは、そのブロック暗号ラウンド入力を修正して、ブロック暗号ラウンド出力を生成する。全てのブロック暗号ラウンド入力及び出力は同一のデータサイズを有する。DESはブロック暗号の最初及び最後に初期転置及び逆初期転置を有することに留意されたい。これらは鍵に依存しないので、暗号に関する重要性はない。
【0027】
データ暗号化規格には、64ビットブロックの鍵付きブロック符号化が記述されている。この鍵は公式には64ビットであるが、実際にはそのうちの56ビットのみが暗号化で使用される。暗号化及び復号は、ラウンドと呼ばれる16回の反復を使用する。1≦r≦16のラウンドrにおいて、48ビットのラウンド鍵K
rが使用され、そのビットは56個の鍵ビットの(ラウンド依存の)サブセットである。
【0028】
DESラウンド関数fが
図6bに示されており、
【数1】
によって与えられる。ここで、Pは32ビットの転置であり、Eは拡大写像(expansion map)であって、ビットの半分を複製することによって長さ32のビット列を長さ48のビット列に写像するものである。SボックスSは、6ビットの部分列にグループ単位で作用して、長さ48のビット列を長さ32のビット列に写像し、
S(b
1b
2b
3・・・b
48)=S
1(b
1・・・b
6)||S
2(b
7・・・b
12)||・・・||S
8(b
43・・・b
48)
ここで、各SボックスS
iは長さ6のビット列を長さ4のビット列に写像し、||は連結を表す。
図6bでは、sボックスS
1の入力は参照611を有し、出力は参照612を有する。
【0029】
Sボックス(置換ボックス)は、ブロック暗号のシャノンの撹乱(Shannon confusion)を増加させるためにブロック暗号でよく使用される。Sボックスは、一実施形態によるデータ関数として符号化されるのに特に適している。復号は逆方向に、すなわち、下から上へ行くことによって実行される。逆ラウンド関数は、
【数2】
によって与えられる。
【0030】
DESはわずか56ビットの鍵しか使用しないので、完全な鍵空間検索が実行可能であるが、特にソフトウェア実装での差分故障攻撃を使用した鍵回復は桁違いに速くなる。トリプルDESは3つの56ビット鍵(K
(1)、K
(2)、K
(3))を使用し、最初に鍵K
(1)によるDES暗号化を実施し、続いて鍵K
(2)によるDES復号、続いて鍵K
(3)によるDES暗号化を実施して暗号化する。
【0031】
本明細書では、ブロック暗号の主要な例としてDESが使用され、データ関数の主要な例としてDESのSボックスが使用される。実際に、DESに基づく実施形態が広範にテストされており、以下にさらに示されるように、DESのホワイトボックス符号化が一実施形態ではかなり小さいことが分かった。DESの結果はただちにトリプルDESに渡り、その理由は、SボックスがDESと同一であるためである。他の実施形態は他のブロック暗号に、たとえば、AESに、特にそのsボックスに適用される。AESはDESのようにFeistel型ではないが、置換転置ネットワーク(SPN:substitution−permutation network)ブロック暗号である。SボックスDESは入力の方が出力よりも多いが(6対4)、AESのSボックスは入力及び出力の数が等しい。
【0032】
一般に、以下に説明されるシステムの実施形態は、たとえば安全な実装を必要とする他の関数にも使用される。たとえば、ハッシュ又はメッセージ認証コードなどのセキュリティプリミティブが、一実施形態を使用して実装される。
【0033】
図1は、データ関数100の一例を概略的に示す。データ関数Sは、n個の入力変数110をm個の出力変数120に写像する。たとえば、データ関数はSボックス、たとえば、DESのSボックスである。データ関数100の入力はビットであり、たとえば、DESのSボックスの場合、6個の入力ビット及び4個の出力ビットが存在する。AESのSボックスの場合、8個の入力及び出力ビットが存在する。ビット数は異なってもよく、たとえば、8個の入力ビット及び4個の出力ビットなどでもよい。
【0034】
以下では、データ関数100を
【数3】
の形式の関数として表す。これは、2
nの元を有する数学の体から、2
mの元を有する体へのものである。たとえば、AESのSボックスのように、n=mとしてもよい。m<nの実施形態は、より小さい体F
2mで全ての計算を行うことができるので特に有利であり、m<nの関数を「ファンネル(funnel)」関数と呼ぶことにし、その理由は、範囲がドメインよりも真に小さいためである。ビットではなく、たとえば、3つ以上の異なる値をとる変数が使用される場合、それに応じてより大きい体を使用して計算を実行する。
【0035】
図2aは、計算デバイス200の一実施形態の一例を概略的に示す。
図1のデータ関数を実現するには、特に入力及び/又は出力の符号化が使用される場合、多くのストレージが必要となる。たとえば、ホワイトボックス実装では、
図1のデータ関数はモノリシックテーブルとして実装される。しかしながら、DESのSボックスの場合でも、そのようなテーブルのデータ量は急速に増加する。たとえば、各ビットが16個のシェアとして符号化され、各シェアがステートビットをさらに有し、計16ステートビットとなる場合(可能な符号化のさらなる情報については以下を参照)、Sボックスの入力サイズは32×6=192ビットに膨らむ。これは、モノリシックテーブルが途方もなく大きくなり、2
192個のエントリを有することを意味する。したがって、ホワイトボックスにおいて安全に符号化され得るが、記憶スペースはより少なくて済むデータ関数を符号化する異なる手法が望まれている。
【0036】
計算デバイス200は、入力211を受け取るように構成される。入力211は、データ関数100の入力と同様である。入力は符号化される。入力211は複数のビットである。また、入力211はビットの代わりに、ある他の体、たとえば、F
4(4つの元を有する体)からも取得される。入力変数は、1つ又は複数の選択変数と、1つ又は複数の評価変数とに区分される。原理的には、任意の区分が可能であるが、異なる選択肢には異なるトレードオフがある。一般的に言えば、選択ビットの数を増加させると実装サイズが小さくなるが、より少ない選択ビットを選択すると実装が高速になる。実装サイズとは、実装のストレージサイズ、特にホワイトボックス実装で使用されるテーブルサイズの合計を指す。テーブルが大きいとキャッシュミスが発生し、ひいては実行も遅くなる。
【0037】
データ関数100は、選択関数及び評価関数を含む計算として計算デバイス200において構成される。選択変数(υ)の特定の値の組合せごとに、対応する選択関数δ
υ及び評価関数S
υが定義される。混乱を避けるために、評価関数S
υは必ずしもDESのSボックスのいずれかに関連する必要はなく、また、インデックスυはここでは選択変数を指すことに留意されたい。
【0038】
計算デバイス200は、選択メカニズム220を備える。選択メカニズム220は、1つ又は複数の選択変数222を受け取るように構成される。選択変数である入力変数211の中の入力変数は、222で示されている。選択メカニズム222は、受け取られた選択変数について選択関数δ
υを評価するように構成される。たとえば、選択メカニズム220は、選択変数について選択変数(υ)の特定の値の組合せごとに各選択関数δ
υを評価する。選択関数δ
υは選択変数を入力として受け取り、選択関数の出力は、選択関数で受け取られた選択変数が選択関数に対応する特定の値の組合せ(ν)と等しいか否かを示す。選択メカニズムの出力は224で示されている。
【0039】
選択関数は、複数の入力を有することを除いて、クロネッカーのデルタ関数である。数学的表記では、δ
i(j)は、
【数4】
を表す。
【0040】
上記の例では、i及びjは、たとえば、全ての選択変数について、複数の入力を表す。さらに、選択関数は必ずしも出力0及び1を、便利ではあるが、返す必要はなく、他の値を使用してもよく、原理的には任意の2つの異なる値が使用され、計算デバイス200の他の場所に収容される。
【0041】
計算デバイス200は、評価メカニズム210を備える。評価メカニズム210は、1つ又は複数の評価変数212を受け取り、受け取られた評価変数について評価関数を評価するように構成される。評価変数である入力変数211の中の入力変数は、212で示されている。
【0042】
評価関数は入力として評価変数を受け取り、評価関数の出力は、評価変数と、評価関数に対応する選択変数の特定の値の組合せとの和集合を入力とするデータ関数の出力を表す。換言すれば、評価関数は、データ関数が評価変数を、評価関数が対応する選択変数の特定の値と共に入力として受け取っていたならば、データ関数が与えていたであろう結果を与える。
【0043】
実施形態におけるアイデアは、選択関数が入力に存在する選択変数の特定の値の組合せを選択すること、ある意味では正しい評価関数を選択することである。選択関数は非常に実装が容易な関数である。選択関数は選択ビットの数のみに依存し、異なるデータ関数に対して同一である。したがって、選択関数は、同一の計算デバイスにおいて異なるデータ関数に対して再利用される。
【0044】
評価メカニズム及び選択メカニズムは、評価ユニット及び選択ユニットとも呼ばれる。
【0045】
計算デバイス200は、選択メカニズム及び評価メカニズムの出力を、入力変数に対するデータ関数の出力に結合するように構成される結合メカニズムを備える。たとえば、結合メカニズムは、同一の特定の値の組合せに対応する選択関数(δ
υ)及び評価関数(S
υ)の積の総和(Σ
vδ
υS
υ)をとる。選択関数が値0及び1を与える場合、これは正しい評価関数を正確に特定する。選択関数が0及び1以外のある他の値を与える場合、選択関数の何らかの他の線形結合が使用される。
【0046】
一実施形態では、総和は、選択変数(υ)の全ての値の組合せにわたるものである。このようにして、データ関数は、全ての入力変数に対して正しくエミュレートされる。しかしながら、選択変数のある組合せが発生しないことが分かっている場合、選択変数の可能な組合せにわたって総和をとるだけでよい。これにより、計算デバイスのサイズがさらに削減される。
【0047】
以下、一実施形態の数学的説明が、さらなる明確化及び例示のために与えられる。
【0048】
検討されるデータ関数は、関数
【数5】
であり、m<nとしてもよいことに留意されたい。入力位置(又は変数)の集合{1,...,n}から選択変数として位置i
1,...,i
n−mを選択し、m個の残りの位置をp
1,...,p
mとし、評価変数を含む。ここで、各
【数6】
について、関数
【数7】
を、S
ν(x
1・・・x
m)=S(y
1・・・y
n)とすることによって定義し、ここで、j=1,...,n−mについて、
【数8】
であり、j=1,...,mについて、
【数9】
である。換言すれば、各
【数10】
について、入力のn−mの選択をνで指定される値に設定することによって、関数S
νがSから得られる。S(x)を計算するために、n−m個の選択された位置における入力xの値を考え、その値がνである場合、関数S
νを残りの入力シンボルに適用する。
【0049】
S(x)の安全な、ホワイトボックスなどの評価において、選択メカニズムは
【数11】
を選択し、次いで、入力x及び出力S(x)の両方に関する情報を明かすことなく、結果
【数12】
を返す。結合メカニズム230は、以下の恒等式
【数13】
を使用し、ここで、δ
i(j)は、
【数14】
を満たす。
【0050】
図2bは、評価メカニズム210の一実施形態の一例を概略的に示す。評価メカニズム210は、評価関数を実装する複数の評価ユニットを備え、図示されているのは評価ユニット215及び216である。評価ユニットはテーブル、たとえば、ルックアップテーブル、又はテーブルネットワークとして実装される。たとえば、
図2bの評価メカニズムは、評価メカニズム210で受け取られた評価変数に対して関数215及び216を含む評価関数のそれぞれを評価する。選択関数の可能な値の組合せごとの評価関数が含まれる場合、正しい結果が評価関数に含まれることになる。複数の評価関数の複数の結果の中から正しい結果を選択することは、選択メカニズムによって実行される。
【0051】
図2cは、選択メカニズム220の一実施形態の一例を概略的に示す。選択メカニズム220は、選択関数を実装する複数の選択ユニットを備え、図示されているのは選択ユニット225及び226である。選択ユニットはテーブル、たとえば、ルックアップテーブル、又はテーブルネットワークとして実装される。
【0052】
図2dは、選択メカニズム220の一実施形態の一例を概略的に示す。一実施形態では、選択変数は、複数の選択変数のグループにさらに区分される。次いで、選択関数は、複数の選択変数のグループの中のグループにそれぞれが対応する複数のサブ選択関数の積として計算デバイス200において構成され得、サブ選択関数はグループ内の選択変数を入力として受け取り、サブ選択関数の出力は、受け取られた選択変数が、選択関数に対応するグループ内の特定の値の組合せと等しいか否かを示す。
【0053】
たとえば、
図2dの選択メカニズム220において、選択ユニット225.1及び選択ユニット226.1は、第1のグループの選択変数を受け取り、選択ユニット225.2及び選択ユニット226.2は、第2のグループの選択変数を受け取る。3つ以上のグループがあってもよい。必要に応じて、選択変数及びダミー変数の数がグループ数の倍数になるまで、いくつかの選択変数がダミー変数、たとえば0でパディングされ、後者の場合、選択ユニットにおける入力の数は同一である。結合ユニット227は、同一の値の組合せに対応する選択ユニットの出力を結合するように構成される。たとえば、結合ユニット227は、結合ユニット225.1及び225.2の出力を、たとえば、乗算又は論理積演算によって結合する。
【0054】
たとえば、一実施形態では、データ関数はファンネル関数であり、n個の入力変数及びm個の出力変数を有する(m<n)。この実施形態では、評価変数の数はmとして選択され、選択変数の数はn−mとして選択される。選択変数のグループ数は、
【数15】
として選択される。これらの選択により、全ての計算を
【数16】
において行うことが可能となり、後者により、複数の異なる体において計算が必要とされる場合よりも、符号化された乗算及び加算テーブルのさらなる再利用が可能になる。たとえば、n=8及びm=3の場合、1つのパディングビットを有する2つのグループの選択ビットが使用される。
【0055】
以下、一実施形態の数学的記述が、さらなる明確化及び例示のために与えられる。より小さい出力体
【数17】
のみにわたる計算を保証するために、選択ビット
【数18】
をmビットのチャンクに分割し、たとえば、
【数19】
とし、ここで、
【数20】
であり、各
【数21】
である。n−mがmで割り切れない場合、選択ビットを先行ゼロでパディングすることを、結果のビット数がmで割り切れるまで行った後、分割を行う。ビットの代わりにq値の変数が使用される場合、上記の2
mはq
mに置き換えられる。
【0056】
(i
1,i
2)=(x
1,x
2)から、i
1=x
1且つi
2=x
2の場合に限り、
【数22】
となる。
【0057】
後者の結果は加算としても示され、論理比較
【数23】
となる。この式では、「=」演算は、たとえば、等しくない場合は0を、等しい場合は1を返すクロネッカーデルタのような論理演算として解釈される。論理比較も、符号化済み変数に対してテーブルネットワークを使用して実行される。3つ以上のグループが使用される場合、式中の「2」はグループ数で置き換えられる。
【0058】
一実施形態では、
図2dの選択メカニズム220は、複数の選択変数のグループのそれぞれについて全ての値の組合せに対する選択関数を含む。たとえば、選択変数の2つのグループA及びBに分割された8つの選択変数が存在する場合、選択メカニズム220は、グループAの全ての可能な値の組合せに対する選択関数と、グループBの全ての可能な値の組合せに対する選択関数とを含む。選択関数の完全なセットに対して特定の値の組合せに対する選択関数をエミュレートするために、結合ユニット227は、グループA及びグループBから正しい選択関数を結合するように構成される。変数のグループに対する選択関数は、一致の有無を示すために0及び1を出力することもできる。これらの値は、乗算又は加算などで簡単に結合することができる。
【0059】
選択メカニズムは、選択関数を実装する複数の選択ユニットを備え、たとえば、複数の選択ユニットは、選択関数を直接表し、又は選択変数のグループに対する選択関数を表す。
【0060】
選択ユニット及び/又は評価ユニットは、テーブル又はテーブルネットワークとして実装される。
【0061】
一実施形態では、入力変数の数(n)は出力変数の数(m)よりも大きく、評価変数の数は出力変数の数と等しい。選択変数の数は、入力変数の数と出力変数の数との差(n−m)と等しい。これにより、たとえば、体
【数24】
において、より少数の変数を使用して、全ての計算を行うことが可能になる。
【0062】
変数wを符号化するいくつかの手法が存在する。変数wは選択変数又は評価変数に直接対応する。しかしながら、変数wはいくつかの変数を一緒にまとめることもできる。たとえば、計算デバイス200は、複数の変数に一緒に演算を行うように構成される。たとえば、一実施形態では、選択変数、評価変数、及び出力変数は、単一ビットを表すビット変数である。一実施形態では、複数のビット変数はより大きい変数へと結合される。
【0063】
たとえば、一実施形態では、変数310は、2つ又は4つの選択変数又は評価変数を表す。たとえば、ファンネル関数の場合、より大きい変数が出力変数と同一のビット数(m)を有する。(n−m)個の選択変数は、それぞれがより大きい変数で表される、(m個の)変数の1つ又は複数のグループにまとめられる。
【0064】
たとえば、DESのsボックスは、4つの出力ビット変数と、6つの入力ビット変数とを有する。この場合、より大きい変数wは4ビットを表す。入力ビットは、単一のより大きい4ビット変数によって表される4つの評価ビットと、同様に単一の(より大きい)4ビット変数によって表される2つの選択変数とに区分される。
【0065】
たとえば、AESのsボックスは、8つの出力ビット変数と、8つの入力ビット変数とを有する。この場合、より大きい変数wは同様に4ビットを表す。入力ビットは、単一のより大きい4ビット変数によって表される4つの評価ビットと、同様に単一のより大きい4ビット変数によって表される4つの選択変数とに区分される。出力は、2つのより大きい4ビット変数によって表される。以下、ビット変数かより大きい変数かに関わらず、変数wが表現される手法が説明される。
【0066】
変数wは、写像Enc(w)を介して符号化される。符号化は暗号化の符号化であり、ランダムに選択されてもよく、又は秘密鍵を使用した暗号化などでもよい。使用される符号化は攻撃者には未知である。変数wが処理される場合、符号化はデバイス内で暗黙的に想定される。また、変数はステート変数sと共に符号化されるEnc(w,s)であり、これはwと符号化との関係をさらに撹乱する。より安全な符号化は、変数を複数のシェアに分割し、各シェアを、好ましくはステート変数と共に符号化する。後者のタイプの符号化は最も安全であるが、特にこのタイプの符号化では、テーブルネットワークとしてのデータ関数の表現と組み合わせることが難しい。
【0067】
図3は複数のシェアを使用する変数wを符号化する手法を示す。
図3は変数310、wを示し、wの衝突が回避されるように、暗号化デバイス200などの暗号化デバイスでの使用のためにwが符号化される手法を示す。変数310、wは複数のシェアw
jに分散される。wのビットサイズをkと呼ぶことにする。一実施形態では、シェアw
jのビットサイズはwのビットサイズに等しい。異なる変数は異なるビットサイズを有し得る。たとえば、kは1,2,4以上である。一実施形態では、k=1,2,3,4、5、6、7、8又はそれ以上である。図示されているのはシェア321、322及び323である。
【0068】
シェアは、
【数25】
となるように選択される。一実施形態では、この総和はXOR関数を使用して総和をとるが、他の選択肢も可能である。たとえば、総和は、算術加算モジュロ2
kを使用する。
【0069】
より一般的には、シェア(w
j)を変数(w)に写像する結合関数(d(w
1,...,w
n−1)=w)が定義される。結合関数は上述のXOR又は算術加算である。結合関数は、任意の単一のシェア(w
k)から変数(w)への写像であって、他のシェア(w
1,...,w
k−1,w
k+1,...,w
n−1)の値を固定することによって得られる写像が全単射であるという特性を有する。すなわち、関数
【数26】
は全単射であり、要素
【数27】
は固定値を表す。この特性は、wに関する情報を与えるシェアのサブセットが存在しないことを保証する。多数のそのような結合関数が存在する。たとえば、dはシェアの任意の線形結合
【数28】
であり、ここで係数αjは奇数であり、総和は算術加算モジュロ2
kを使用する。結合関数は多項式である。
【0070】
図3は複数のステートs
jをさらに示す。図示されているのはステート331、332及び333である。シェア321〜323の数はステート331〜333の数と同一である。ステートは変数の符号化に冗長性を導入する冗長データである。シェアのそれぞれはステートの1つと共に並べられ、符号化済みシェアx
j=Enc
j(w
j,s
j)に符号化される。一実施形態では、符号化Enc
jは異なる。たとえば、符号化Enc
jはコンパイル時にランダムに選択される。符号化は、w
jに関して可逆である限り、すなわち、Enc
j及びx
jが既知であればシェアw
jが回復され得る限り、全単射であることは厳密には必須ではない。それにもかかわらず、実施形態では、符号化Enc
jは全単射である。後者は実装においてより現実的な選択肢であり、解析を簡素化する。どの変数がどの符号化によってどの時点で符号化されるかが決定されると、テーブルは符号化を考慮に入れるように単純に適合される。ステートの使用は任意選択であるが、同一のデータ値に対して複数の表現が可能であるため、ステートが難読化が高まるので好ましい。
【0071】
図3は、シェア321及びステート331が符号化361を介して符号化済みシェア341へと符号化されることを示す。また、シェア322及びステート332は符号化362を介して符号化済みシェア342へと符号化され、シェア323及びステート333は符号化363を介して符号化済みシェア343へと符号化される。変数wを表すために共に符号化されるステート及びシェアを、その変数に対応するものとして参照することにする。
【0072】
複数の符号化済みシェアが結果であり、そのうち、符号化済みシェア341、342、及び343が図示されている。一実施形態では、変数wは暗号化デバイス200において複数の符号化済みシェアとして表される。未符号化シェア321〜323もステート331〜333も暗号化デバイス内に存在してはならない。
【0073】
ステートは、最初はランダムに選択され、その後、変数wを更新する同一のプロセスによって更新される。一実施形態では、同一の変数wに対応する複数のステートs
jは、入力メッセージM 310から複数のステートへ、Σと表される単射写像352が存在するように選択される(Σ(M)=(s
0,...,s
n−1)。単射写像は、M=M’の場合にのみΣ(M)=Σ(M’)となる特性を有する。特に、Σは全単射となるように選択され、その理由は、このより厳しい条件が単射性を含意するためである。
図3は、複数のステート331〜333が入力メッセージ300、M及び単射写像Σ、352にどのように依存するかを示す。たとえば、入力メッセージ300は、入力メッセージ610である。入力メッセージ300は、たとえば、外部デバイス200から受け取られる入力メッセージ、たとえば、ブロック暗号への入力である。ステートが入力メッセージM、300を符号化する場合、異なるMは異なる符号化済み変数x
0,...,x
n−1につながる。
【0074】
写像352は、大部分又は全ての変数について暗号化関数の実装において明示的である必要はない。たとえば、符号化済み変数が入力メッセージとの必要な単射関係を有すると、符号化済み変数のシェア部分w
jに実施される演算は、単射関係を保存するステート部分に対して冗長な演算を同時に実施する。符号化済み領域で計算が行われるので、ステートへの計算はシェアへの計算から分離することができない。
【0075】
たとえば、第1及び第2の変数w
1及びw
2の両方が上記のように複数の符号化済みシェア
【数29】
及び
【数30】
として符号化されることを考える。w
1及びw
2への演算gが第3の変数w
3=g(w
1,w
2)を計算すると仮定する。変数w
3は符号化済みシェア
【数31】
と表される。一実施形態では、
【数32】
に符号化されたステートは、
【数33】
又は
【数34】
に符号化されたステートに等しい。この場合、入力が入力メッセージMとの必要な関係を有する場合は、出力w
3も同様になる。このようにして、必要な関係はその計算全体にわたって保存される。その演算は、その演算を実施するためのテーブルネットワークとして実装され、このテーブルネットワークは暗号化関数を実装するテーブルネットワークのサブネットワークである。
【0076】
初期変数、たとえば、入力メッセージから直接得られるものは、暗号デバイス200によって正しい符号化された形式で受け取られる。或いは、デバイス200は、入力を符号化するように構成される符号化デバイスを備える。
【0077】
変数wをステート及び/又は複数のシェアと共に符号化することにより、暗号化関数の実行中に符号化された値に衝突が生じにくくなる。したがって、この時点では衝突攻撃は不可能である。
【0078】
実際的な一実施形態では、符号化済みシェアによる表現以外のwの表現はない。さらに、より多くの機密変数がこのように保護される場合、保護はより効果的である。鍵及び入力メッセージの両方に依存する全ての変数は保護されることが好ましい。衝突攻撃を防止するために、鍵による演算が実施される前に、入力メッセージが符号化済みシェアとして表される必要はない。しかしながら、単射写像が存在し維持されることを保証することは、鍵が使用される前であっても、入力メッセージを複数組の符号化済みシェアとして符号化させることによって単純化される。
【0079】
テーブルネットワークは、ホワイトボックス暗号自体から知られている。たとえば、Chowらによる「White−box cryptography and an AES implementation」を参照されたい。テーブルネットワーク420の一例が
図4aに示されており、この場合、外積を計算するためのテーブルネットワークである。
【0080】
テーブルネットワークは、1つ又は複数の入力、たとえば入力410を受信し、1つ又は複数の出力、たとえば出力430を生成する。テーブルネットワーク420には、複数のルックアップテーブルが示されており、図示されているのはテーブル421〜424である。テーブルは、入力410から直接的に、及び/又は他のテーブルの出力から入力を受け取る。テーブルは、1つの入力、2つの入力、又は3つ以上の入力を受け取る。
【0081】
未符号化変数wへの計算を複数のシェアとして符号化された変数wへの計算に変換する便利な手法が、Carletらによる「Higher−Order Masking Schemes for S−boxes」に提供されている。この論文は、衝突攻撃も、ステートと併せた符号化も論じていない。この論文はさらにCarletと呼ばれる。Carletは、複数のシェアとして符号化された変数の衝突を防がない。
【0082】
以下、たとえば関数値D(w)を計算するための変数wへの計算が、複数のシェアに符号化された変数wへの計算に変換される手法が説明される。関数Dはデータ関数であるが、暗号化関数の計算の任意の内部ステップ、たとえば、加算、乗算などに同一の方法が使用される。シェアのD(w)を計算するテーブルネットワークを構築する手法を示す。まず、ここではDが単一の入力wを有する場合を考える。複数のステートが同様に扱われ得る。また、最初はステートを無視し、後でステートが追加され得る手法を示す。
【0083】
wがn個のシェアw
0,...,w
n−1で表される場合、その結果の変数にwと同一の保護を与えるために、D(w)もn個のシェアによって表すようにしたい。これは以下の事実を利用することによって、任意の関数に対して可能である。
【0084】
説明のために、まず、値D(w)もwのようにkビットの数であると仮定する。kビットの数は有限のガロア体
【数35】
の要素であり、関数Dは
【数36】
上の関数であると考えられ得る。有限体の全ての関数は多項式であるため、
【数37】
上の任意の関数Dに対して、係数
【数38】
が存在し、これは任意のwについて、
【数39】
が成立するものである。
【0085】
また、データ関数S(x)は多変量多項式
【数40】
として表され、ここで、{P
ν}
νは、
【数41】
上の評価関数S
νを表す多項式の集合を表し、{Q
ν}
νは選択多項式、すなわち、
【数42】
上のデルタ{δ
i}
iを表す多項式の集合を表す。
【0086】
多項式D並びに多項式Q
υ及びP
υは同様に、以下のようなシェアへの計算として表される。シェアがX=(x
0,...,x
n−1)及びY=(y
0,...,y
n−1)によって与えられるとする。簡単のため、シェアの和が未符号化変数と等しいと仮定する。X及びYの和はシェアx
i+y
iで符号化され得る。スカラー倍αXはシェアαx
iで符号化される。最後に、ZをX及びYの積とする。0≦i<j≦n−1について、値r
i,j及びr
j,iを定義する。
【0087】
たとえば、ランダムなkビット列を選択することにより、r
i,jに対して、
【数43】
のランダムな要素をとる。一実施形態では、r
i,jについての乱数は、コンパイル時に入力メッセージMから
【数44】
へのランダム化関数R
i,jを選択し、r
i,j=R
i,j(M)を設定することによって得られる。後者は実行時に乱数発生器への依存が回避されるという利点を有する。コンパイル時と呼ばれる、テーブルネットワークが構築されるときにのみ、ランダム性のソースが必要とされる。Carletは実行中にランダム性に依存することに留意されたい。これは実行中の乱数源の操作までCarletを開放する。具体的には、乱数発生器は傍受され定数値に置き換えられる。
【0088】
r
j,i=(x
iy
j+r
i,j)+x
jy
iをとり、ここでの計算の順序は重要であり、括弧で示されている。ここで、0≦i≦n−1について、
【数45】
をとる。
【0089】
外積テーブルサブネットワークはr
j,iを計算する。これらのテーブルは2つの外積x
iy
j及びx
jy
iを計算する。
【0090】
一実施形態では、r
i,jを計算するためにランダム化関数R
i,jは、入力メッセージを入力とするテーブルネットワークとして実装される。これは実行中に乱数源が必要となるのを回避する。
【0091】
シェアz
iはこのときX及びYの積を表す。加算、スカラー乗算及び乗算演算を使用して、Sの多項式表現はシェアへの演算として表される。次いで、シェアへの演算は、1つ又は複数のシェア及び/又は乱数を入力とするルックアップテーブルとして実装される。
【0092】
r
j,iを計算するための可能なテーブルネットワーク420が
図4aに示されている。テーブル421〜424は協力してr
j,iを計算する。テーブルネットワーク420への入力は、参照符号410に示されている。テーブルネットワーク420の出力は、参照符号430に示されている。
【0093】
たとえば、テーブル421及び422はそれらの入力を乗算するように構成され、テーブル423及び424はそれらの入力を加算するように構成される。各テーブルが異なる符号化を使用し得ることに留意されたい。
【0094】
図4bは乗算テーブルネットワーク440の一実施形態の一例を概略的に示す。乗算テーブルネットワーク440は、上記で与えられた式を使用してZ=(z
0,...,z
n−1)を計算するように構築される。乗算テーブルネットワーク440は、たとえばそのデータストアの計算デバイス200に第1の複数の符号化済みシェア(x
j)として表される変数Xと、第2の複数の符号化済みシェア(y
j)として表される第2の変数Yとを乗算するように構成される。乗算テーブルネットワークは、第1及び第2の複数の符号化済みシェア(x
j、y
j)に作用し、第1及び第2の変数の積を表す第3の複数の符号化済みシェア(z
j)を取得する。ここでは、上付き添字はシェアを指し、指数ではないことに留意されたい。乗算テーブルネットワーク440は、暗号化関数を計算するためのテーブルネットワークの一部である。
【0095】
乗算テーブルネットワーク440は、外積x
iy
jを計算するための外積テーブルサブネットワークを含む。一実施形態では、外積は2つ一組、x
iy
j+x
jyで計算される
i。たとえば、乗算テーブルネットワーク440はテーブルネットワーク420を含む。乗算テーブルネットワーク440は、1つ又は複数のランダム化関数R
i,jを計算するためのテーブルネットワーク450をさらに含む。
図4bにおいて、テーブルネットワーク450は入力メッセージ110に依存する。この依存性は破線で示されており、これはデータストアに記憶された変数などの中間物を介して依存性が得られることを示す。テーブルネットワーク440はその入力を取得し、その出力を計算デバイス200のデータストアに記憶する。
【0096】
シェアに作用するテーブルは、符号化済みシェアに作用するテーブルに変換される。符号化済みシェアxについて、Enc(t(x),s(x))=xとなるようにs及びtを定義する。関数s及びtは、xからそれぞれステート及びシェアを取得する。t(x)に対するテーブルTを定義する。次いで、Enc’(T(t(x)),P(s(x)))は、xのシェア部分のテーブルTとステート部分の関数Pとを実装するxのテーブルを定義する。関数Pは冗長であり、コンパイル時などにテーブルネットワークを作成する場合に選択される。たとえば、Pは恒等関数である。複数の入力に対して同様の構成が可能である。ここで使用される符号化Encは入力符号化とも呼ばれる。符号化Enc’は出力符号化と呼ばれる。テーブルの出力に使用される出力符号化が、前記出力を入力として使用する次のテーブルの入力符号化と同一である限り、テーブルの入力及び出力符号化は同一である必要はない。
【0097】
図2eは、データストア242及びテーブルストア244を備える、たとえば、
図2aに関して説明されたような計算デバイス200の一実施形態を示す。データストア242は、計算デバイス200が作用する変数を記憶するように構成される。具体的には、データストア242は、複数の符号化済みシェアなどの符号化済み変数を記憶する。テーブルストア244は、選択メカニズム220及び評価メカニズム230を実装するための1つ又は複数のテーブルネットワークを記憶するように構成される。データストア242及びテーブルストア244は電子メモリである。それらは同一のメモリの2つの部分である。テーブルストア244は不揮発性ストレージである。データストア242は揮発性ストレージである。
【0098】
計算デバイス200は、テーブルストア244の複数のルックアップテーブルをデータストア242に表現された変数に適用することによって、データ関数をブロック暗号の一部などとして入力メッセージなどに適用するように構成される制御ユニット243を備える。たとえば、テーブルストア244は、テーブルがどの順番でどの変数に適用されるかを示す命令をさらに含む。
【0099】
計算デバイス200はネットワークインタフェース250を備える。ネットワークインタフェース250は、コンピュータネットワークを介して符号化されたデータを受信するように構成される。たとえば、計算デバイス200は、暗号化されたデータ、たとえば、暗号化されたコンテンツを受信し、これは暗号化デバイス200によって復号される。ネットワークインタフェース250を介して受信された入力は、たとえば上述したように、符号化済みシェアとして表される。これは、符号化がデバイス200の内部で行われるので、必須ではない。
【0100】
典型的には、デバイス200は、デバイス200に記憶された適切なソフトウェアを実行するマイクロプロセッサ(別個に図示せず)を備え、たとえば、そのソフトウェアは対応するメモリ、たとえばRAMなどの揮発性メモリ、又はフラッシュなどの不揮発性メモリ(別個に図示せず)にダウンロード及び/又は記憶される。或いは、デバイス200は、たとえばフィールドプログラマブルゲートアレイ(FPGA)として、プログラマブルロジックに全体的又は部分的に実装される。デバイス200は、いわゆる特定用途向け集積回路(ASIC)、すなわち、それらの特定の用途向けにカスタマイズされた集積回路(IC)として、全体的又は部分的に実装される。たとえば、回路は、たとえば、Verilog、VHDLなどのハードウェア記述言語を使用して、CMOSで実装される。
【0101】
一実施形態では、デバイス200は、選択回路、評価回路、及び結合回路を備える。デバイス200は追加の回路、たとえば、選択変数のグループ用の選択回路などを備えてもよい。回路は、本明細書に記載された対応するユニット及びメカニズムを実装する。回路はプロセッサ回路及び記憶回路であり、プロセッサ回路は記憶回路内で電子的に表される命令を実行する。回路もFPGA、ASICなどである。
【0102】
以下、選択ビット及び評価ビットへの上記の区分に続くDESのSボックスのコードサイズへの影響が論じられる。Goubinらによる「Higher−Order Masking Schemes for S−Boxes」に開示され、さらにGoubinと呼ばれる方法、及び、Coronらによる「Fast evaluation of polynomials over binary finite fields and application to side−channel countermeasures」に開示され、さらにCoronと呼ばれる方法との比較が行われる。
【0103】
表1に3つの方法、すなわち、
【数46】
上のGoubinの単純なCyclotomicの方法、
【数47】
上のCoronのCRVの方法、及び、
【数48】
上の、2つの選択ビットを使用した一実施形態による解決策をリスト化している。ここで、kは変数を表すために使用されるシェアの数を表す。
【0105】
表2において、DESに適用された場合の3つの方法に使用されるバイト数がカウントされ、ここでk=16であり、各nビットのシェアには4ビットのステートが付随し、すなわち、
【数49】
上の各変数はビットサイズn+4の16個のシェアによって表される。したがって、加算及び乗算用のテーブルのサイズは(n+4)ビットの2
2(n+4)個のエントリを有する。テーブル参照ごとに異なる符号化に基づいて異なるテーブルが使用されるDES実装と、テーブル及び符号化が再利用される実装との両方の結果を与える。ここでは、Goubin及びCoronの手法ではn=6であるが、6ビットの入力を2つの選択ビットと4つの評価ビットとに分割する一実施形態によればn=4である。
【0107】
一実施形態による解決策は、他の解決策に比べて10%未満のメモリしか必要としないことに留意されたい。一番下の行の結果は上記の議論から得られ、以下では、一般的な理論がどのようにDESに適用され得るかについて詳述される。
【0108】
データ暗号化標準は、6ビット入力を4ビット出力に写像する8つのSボックス(S
1,...,S
8)を有する。以下、各DESのSボックスを評価するための
【数50】
上の算術回路を作成する手法を示す。そして、この算術回路は、上述のシェア演算によって評価することができる。νがサイズ6−4=2ビットを有することに留意されたい。したがって、
【数51】
の単一の元で表すことができ、[ν]と表される。
【数52】
上の異なる値の数は、2
2=4である。パディング後、これらは、
[0]=(0,0,0,0)
[1]=(0,0,0,1)
[2]=(0,0,1,0)
[3]=(0,0,1,1)
となる。
【数53】
上の4つの選択多項式Q
iは、以下のように計算される。
【数54】
上のQ
0、Q
1、Q
2、Q
3を、
Q
0=LagrangeInterpolate({[0],[1]},{[1],[0]},{[2],[0]},{[3],[0]})
Q
1=LagrangeInterpolate({[0],[0]},{[1],[1]},{[2],[0]},{[3],[0]})
Q
2=LagrangeInterpolate({[0],[0]},{[1],[0]},{[2],[1]},{[3],[0]})
Q
3=LagrangeInterpolate({[0],[0]},{[1],[0]},{[2],[0]},{[3],[1]})
によって計算する。
【0109】
そして、各SボックスS
iについて、νを定義するための選択変数として最初及び最後の入力ビットを選択し、すなわち、入力x=x
0,...,x
5について、ν=x
0,x
5を定義する。次いで、評価多項式
【数55】
を以下のように計算する。
for ν∈{0,1,2,3} do
Z=Φ
for
【数56】
do
Z=Z∪{x,(S
i)
ν(x)}
end for
【数57】
end for
return
【数58】
【0110】
最後に、S
i(x)を安全に計算するために、式
【数59】
【0111】
が評価され、ここで、各多項式がシェアに対して評価される。ここで、l={l
1,...,l
k}はx
0,x
5を表し、r={r
1,...,r
k}はx
1,x
2,x
3,x
4を表し、s={s
1,...,s
k}は結果S
i(x)を表す。
【0112】
この解決策は、Cyclotomicの方法を使用して
【数60】
に必要なrの全てのべき乗を計算するための
【数61】
上での4回の乗算と、次数3の多項式Q
0,Q
1,Q
2,Q
3を評価するために必要なlのべき乗を計算するための1回の乗算とを必要とする。そして、積
【数62】
を計算するために、4回の乗算が必要である。結論として、この解決策は、
【数63】
上での9回の乗算を必要とする。多項式
【数64】
はそれぞれ15回の加算を必要とし、多項式Q
jはそれぞれ3回の加算を必要とする。したがって、我々の解決策は4*15+4*3+3=75回の加算を必要とする。
【0113】
図5aは、計算方法500のフローチャートを概略的に示す。計算方法500は、n個の入力変数をm個の出力変数に写像するデータ関数(S)を評価し、データ関数が選択関数及び評価関数を含む計算として計算方法において構成され、入力変数が1つ又は複数の選択変数及び1つ又は複数の評価変数に区分され、選択変数(υ)の特定の値の組合せごとに、対応する選択関数(Q
υ)及び評価関数(P
υ)が定義される。計算方法500は、
− 1つ又は複数の選択変数を受け取ることと、
− 受け取られた選択変数について選択関数を評価することであって、選択関数が選択変数を入力として受け取り、選択関数の出力が、選択関数において受け取られた選択変数が、選択関数に対応する特定の値の組合せに等しいか否かを示す、評価することと
を含む、選択部分510と、
− 1つ又は複数の評価変数を受け取ることと、
− 受け取られた評価変数について評価関数を評価することであって、評価関数が評価変数を入力として受け取り、評価関数の出力が、評価変数と、評価関数に対応する選択変数の特定の値の組合せとの和集合を入力とするデータ関数の出力を表す、評価することと
を含む、評価部分520と、
選択メカニズム及び評価メカニズムの出力を、入力変数に対するデータ関数の出力に結合する結合部分530と
を有する。
【0114】
計算方法550のさらなる実施形態は、
− 複数の符号化済みシェアとして符号化されることが好ましい入力変数を受け取ること560と、
− 受け取られた入力変数の中の実際に受け取られた選択変数を入力として、選択変数の値の組合せごとに選択多項式を評価すること570と、
− 受け取られた入力変数の中の実際に受け取られた評価変数を入力として、選択変数の値の組合せごとに評価多項式を評価すること580と、
− たとえば、選択多項式の結果と、対応する評価多項式の結果とを乗算し、乗算の結果を加算することによって、選択多項式及び評価多項式の結合を計算すること590と
を有する。
【0115】
評価570及び580並びに計算590は、符号化済み変数に演算を行うテーブルネットワークによって実施される。
【0116】
当業者には明らかであるように、方法500及び550を実行する多くの異なる手法が可能である。たとえば、ステップの順序は変更され得て、又はいくつかのステップは並行して実行される。さらに、ステップの間に、他の方法のステップが挿入される。挿入されたステップは、本明細書に記載されるような方法の改良を表し、又は方法と無関係である。たとえば、ステップ570及び580は、少なくとも部分的に並列に実行される。さらに、所与のステップは、次のステップが開始される前に完全に終了していない。
【0117】
本発明による方法は、プロセッサシステムに方法500及び/又は550を実施させる命令を含むソフトウェアを使用して実行される。ソフトウェアは、システムの特定のサブエンティティによってとられるステップのみを含む。ソフトウェアは、ハードディスク、フロッピー、メモリ、光ディスクなどの適切な記憶媒体に記憶される。ソフトウェアは信号としてワイヤに沿って、若しくは無線で、又はインターネットなどのデータネットワークを使用して送信される。ソフトウェアは、ダウンロード及び/又はサーバ上でのリモート使用が可能にされる。本発明による方法は、方法を実施するためにフィールドプログラマブルゲートアレイ(FPGA)などのプログラマブルロジックを構成するようになされるビットストリームを使用して実行される。
【0118】
本発明が、本発明を実施するように適合されたコンピュータプログラム、特に、キャリア上又は内のコンピュータプログラムにも拡張されることは理解されよう。プログラムは、ソースコード、オブジェクトコード、コード中間ソース、及びオブジェクトコード、たとえば部分的にコンパイルされた形式、又は本発明による方法の実施での使用に適した任意の他の形式のものである。コンピュータプログラム製品に関する一実施形態は、記載された方法のうちの少なくとも1つの処理ステップのそれぞれに対応するコンピュータ実行可能命令を含む。これらの命令はサブルーチンに細分され、及び/又は静的若しくは動的にリンクされる1つ又は複数のファイルに記憶される。コンピュータプログラム製品に関する別の実施形態は、記載されたシステム及び/又は製品のうちの少なくとも1つの手段のそれぞれに対応するコンピュータ実行可能命令を含む。
【0119】
図7aはコンピュータプログラム1020を含む書き込み可能部分1010を有するコンピュータ可読媒体1000を示し、コンピュータプログラム1020は、プロセッサシステムに一実施形態による計算の方法を実施させるための命令を含む。コンピュータプログラム1020は、コンピュータ可読媒体1000上に物理的なマークとして、又はコンピュータ可読媒体1000の磁化によって具現化される。しかしながら、任意の他の適切な実施形態も考えられる。さらに、コンピュータ可読媒体1000はここでは光ディスクとして示されているが、コンピュータ可読媒体1000は、ハードディスク、ソリッドステートメモリ、フラッシュメモリなどの任意の適切なコンピュータ可読媒体であり、記録不可能又は記録可能であることは理解されよう。コンピュータプログラム1020は、プロセッサシステムに前記計算の方法を実施させるための命令を含む。
【0120】
図7bは一実施形態によるプロセッサシステム1140の概略図を示す。プロセッサシステムは1つ又は複数の集積回路1110を備える。1つ又は複数の集積回路1110のアーキテクチャは
図7bに概略的に示されている。回路1110は、一実施形態による方法を実行し、及び/又はそのモジュール若しくはユニットを実装するためのコンピュータプログラムコンポーネントを動作させるための、CPUなどの処理ユニット1120を備える。回路1110は、プログラミングコード、データなどを記憶するためのメモリ1122を備える。メモリ1122の一部は読み出し専用である。回路1110は通信素子1126、たとえば、アンテナ、コネクタ又はその両方などを備える。回路1110は、本方法で定義された処理の一部又は全部を実施するための専用集積回路1124を備える。プロセッサ1120、メモリ1122、専用IC1124及び通信素子1126は相互接続1130、たとえばバスを介して互いに接続される。プロセッサシステム1110は、アンテナ及び/又はコネクタを使用して、それぞれ接触及び/又は非接触通信用に構成される。
【0121】
上記の実施形態は本発明を限定するものではなく例示するものであり、当業者は多くの代替的実施形態を考案できることに留意されたい。
【0122】
特許請求の範囲において、括弧内に置かれた任意の参照符号は、特許請求の範囲を限定するものとして解釈されるべきではない。「備える」という動詞及びその活用形の使用は、請求項に記述された以外の要素又はステップの存在を排除するものではない。要素に先行する冠詞「a」又は「an」は、複数のそのような要素の存在を排除するものではない。本発明は、いくつかの個別の素子を含むハードウェアによって、及び適切にプログラムされたコンピュータによって実装される。いくつかの手段を列挙したデバイスの請求項において、これらの手段のいくつかは、同一のハードウェア項目によって具現化される。特定の対策が相異なる従属請求項に列挙されているという単なる事実は、これらの対策の組合せが有利に使用できないことを示すものではない。
【0123】
特許請求の範囲において、括弧内の参照は、実施形態の図面における参照符号又は実施形態の式を参照して、請求項の明瞭性を高めている。これらの参照は請求項を限定するものとして解釈されるべきではない。