(57)【特許請求の範囲】
【請求項１】
関数入力値に関するデータ関数を計算するためのコンピューティングデバイスであって、前記コンピューティングデバイスは前記データ関数のために構成された第１のテーブルネットワークを記憶する電子ストレージを含み、
前記コンピューティングデバイスは、前記電子ストレージに結合された電子プロセッサを含み、前記電子プロセッサは、前記関数入力値を含む、前記第１のテーブルネットワークのための複数の第１のテーブル入力を取得し、前記複数の第１のテーブル入力に前記第１のテーブルネットワークを適用することによって前記データ関数を計算して、複数の第１のテーブル出力を生成し、前記複数の第１のテーブル出力は関数出力値を含み、前記関数出力値は前記関数入力値に対する前記データ関数の適用の結果に対応し、
前記電子ストレージは、更に、前記第１のテーブルネットワークに対してなされる変更に前記第１のテーブルネットワークと協力して対抗する第２のテーブルネットワークを記憶し、前記電子プロセッサは、前記複数の第１のテーブル出力を含み、少なくとも１つの入力を前記複数の第１のテーブル入力と共有する、前記第２のテーブルネットワークのための複数の第２のテーブル入力を取得して、前記複数の第２のテーブル入力に前記第２のテーブルネットワークを適用し、前記第２のテーブルネットワークは、前記複数の第１のテーブル出力のうちの少なくとも特定の１つに関して、未変更の第１のテーブルネットワークが前記複数の第１のテーブル入力のうちの前記与えられた少なくとも１つから前記複数の第１のテーブル出力のうちの前記特定の１つを取得することができたか否かを検証し、
前記第２のテーブルネットワークは、保護された関数出力を含む第２のテーブル出力を生成し、前記検証が成功の場合、前記保護された関数出力は前記関数出力と等しく、前記複数の第１のテーブル入力のうちの少なくとも一部の値に関して前記検証が失敗の場合、前記保護された関数出力は前記関数出力と等しくない、コンピューティングデバイス。
【請求項２】
前記複数の第１のテーブル入力は状態入力値を含み、前記複数の第１のテーブル出力は状態出力値を含み、前記状態出力値は前記状態入力値に対する状態関数の適用の結果に等しく、
前記第２のテーブルネットワークは、前記複数の第１のテーブル入力と共有される前記第２のテーブル入力が前記状態入力値を含むよう構成され、前記第２のテーブルネットワークは、前記状態入力値への前記状態関数の適用の結果が、前記第２のテーブルネットワークに入力される前記複数の第１のテーブル出力に含まれる前記状態値に等しい場合、前記保護された関数出力が前記関数出力に等しいよう構成される、請求項１に記載のコンピューティングデバイス。
【請求項３】
前記第１のテーブルネットワークは、入力として符号化された入力値を取り、前記符号化された入力値は、前記関数入力値を状態入力値と組み合わせ、合わせて単一の値に暗号化し、
前記第１のテーブルネットワークは、出力として第１の符号化された出力値を生成し、前記第１の符号化された出力値は、前記関数出力値を状態出力値と組み合わせ、合わせて単一の値に暗号化し、前記状態出力値は、前記状態入力値への状態関数の適用の結果に等しく、
前記第２のテーブルネットワークは、入力として、前記第１のテーブルネットワークの前記第１の符号化された出力値と、前記状態入力値及び前記関数入力値のうちの少なくとも１つとを取り、前記第２のテーブルネットワークは、出力として、第２の符号化された出力値を生成し、当該符号化された出力値は前記保護された関数出力を含む、請求項１又は２に記載のコンピューティングデバイス。
【請求項４】
前記第２のテーブルネットワークは、出力として、第２の符号化された出力値を生成し、当該符号化された出力値は、前記保護された関数出力値を保護された状態出力値と組み合わせ、合わせて単一の値に暗号化し、前記保護された状態出力は、前記状態出力値への状態置換の適用の結果に等しい、請求項３に記載のコンピューティングデバイス。 
【請求項５】
前記第２のテーブルネットワークは、状態テーブルネットワークとアラインメントテーブルネットワークとを含み、前記状態テーブルは、前記状態関数のために構成され、前記プロセッサは、前記状態入力に前記状態テーブルを適用して平行な状態出力値を取得し、前記アラインメントテーブルネットワークは、入力として、少なくとも前記平行な状態出力値と前記第１のテーブルネットワークから受け取られる前記状態出力値とを受け取る、請求項２乃至４のいずれか一項に記載のコンピューティングデバイス。
【請求項６】
前記第２のテーブルネットワークは、変更された状態テーブルとアラインメントテーブルネットワークとを含み、当該状態テーブルは入力として前記状態入力値を受け取り変更された状態値を計算し、前記変更された状態値は、前記状態入力値への前記状態関数及び更なる状態関数の適用の結果に等しく、前記アラインテーブルネットワークは、入力として前記状態出力値及び前記変更された状態出力値を取り、前記状態出力値への前記更なる状態関数の適用が前記変更された状態出力値を生じることを検証する、請求項２乃至４のいずれか一項に記載のコンピューティングデバイス。
【請求項７】
符号化された形式で関数値及び状態値を含む符号化された変数と、状態変数とが平行に維持され、前記符号化された変数と前記状態変数とは検証可能な関係にある、請求項５又は６に記載のコンピューティングデバイス。
【請求項８】
前記第２のテーブルネットワークは、入力として前記関数入力値を取り、前記第２のテーブルネットワークは、前記関数入力値への前記データ関数の適用の結果が前記第１の符号化された出力値内に符号化される前記関数出力値に等しい場合、前記保護された関数出力が前記関数出力に等しいよう構成される、請求項１乃至７のいずれか一項に記載のコンピューティングデバイス。
【請求項９】
データ関数を受け取り、第１及び第２のテーブルネットワークを生成するためのコンパイラであって、
前記第１のテーブルネットワークは、関数入力値を含む、前記第１のテーブルネットワークのための複数の第１のテーブル入力を受け取り、複数の第１のテーブル出力を生成し、前記複数の第１のテーブル出力は関数出力値を含み、前記関数出力値は前記関数入力値への前記データ関数の適用の結果に対応し、
前記第２のテーブルネットワークは、前記第１のテーブルネットワークに対してなされる変更に対抗するために前記第１のテーブルネットワークと協力し、前記第２のテーブルネットワークは、前記複数の第１のテーブル出力を含み、少なくとも１つの入力を前記複数の第１のテーブル入力と共有する複数の第２のテーブル入力を受け取り、前記第２のテーブルネットワークは、前記複数の第１のテーブル出力のうちの少なくとも特定の１つに関して、未変更の第１のテーブルネットワークが前記複数の第１のテーブル入力のうちの前記与えられた少なくとも１つから前記複数の第１のテーブル出力のうちの前記特定の１つを取得することができたか否かを検証し、
前記第２のテーブルネットワークは、保護された関数出力を含む第２のテーブル出力を生成し、前記検証が成功の場合、前記保護された関数出力は前記関数出力と等しく、前記複数の第１のテーブル入力のうちの少なくとも一部の値に関して前記検証が失敗の場合、前記保護された関数出力は前記関数出力と等しくない、コンパイラ。
【請求項１０】
関数入力値に関するデータ関数を計算するための電子的方法であって、
前記データ関数のために構成された第１のテーブルネットワークを電子ストレージ上に記憶するステップと、
前記関数入力値を含む、前記第１のテーブルネットワークのための複数の第１のテーブル入力を取得するステップと、
前記複数の第１のテーブル入力に前記第１のテーブルネットワークを適用することによって前記データ関数を計算し、複数の第１のテーブル出力を生成するステップであって、前記複数の第１のテーブル出力は関数出力値を含み、前記関数出力値は前記関数入力値への前記データ関数の適用の結果に対応する、ステップと、
前記第１のテーブルネットワークに対してなされる変更に対抗するために前記第１のテーブルネットワークと協力する第２のテーブルネットワークを記憶するステップと、
前記複数の第１のテーブル出力を含み、少なくとも１つの入力を前記複数の第１のテーブル入力と共有する、前記第２のテーブルネットワークのための複数の第２のテーブル入力を取得して、前記複数の第２のテーブル入力に前記第２のテーブルネットワークを適用するステップとを含み、前記第２のテーブルネットワークは、前記複数の第１のテーブル出力のうちの少なくとも特定の１つに関して、未変更の第１のテーブルネットワークが前記複数の第１のテーブル入力のうちの前記与えられた少なくとも１つから前記複数の第１のテーブル出力のうちの前記特定の１つを取得することができたか否かを検証し、前記第２のテーブルネットワークは、保護された関数出力を含む第２のテーブル出力を生成し、前記検証が成功の場合、前記保護された関数出力は前記関数出力と等しく、前記複数の第１のテーブル入力のうちの少なくとも一部の値に関して前記検証が失敗の場合、前記保護された関数出力は前記関数出力と等しくない、電子的方法。
【請求項１１】
コンピュータ上で実行されるとき、請求項１０の全ステップを実行するコンピュータプログラムコード手段を含む、コンピュータプログラム。
【請求項１２】
コンピュータ読み取り可能媒体上に具現化された、請求項９又は１１に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、関数入力値に関するデータ関数を計算するよう構成されたコンピューティングデバイスに関し、デバイスは、データ関数のために構成された第１のテーブルネットワークを記憶するための電子ストレージを含み、コンピューティングデバイスは、ストレージに結合され、第１のテーブルネットワークのための、関数入力値を含む複数の第１のテーブル入力を取得し、複数の第１のテーブル入力に第１のテーブルネットワークを適用することによりデータ関数を計算して複数の第１のテーブル出力を生成するよう構成された電子プロセッサを含み、複数の第１のテーブル出力は関数出力値を含み、関数出力値は、関数入力値へのデータ関数の適用結果に対応する。
【背景技術】
【０００２】
従来の暗号法では、通常、攻撃者はセキュアシステムの入出力値のみを入手可能であると仮定されてきた。例えば、攻撃者はシステムに入る平文を観察し、システムから出る暗号文を観察することができる。攻撃者は、時には計算的に激しい方法を使用してさえ、このような入出力ペアを解析することにより優位に立とうとする可能性があるが、入出力挙動を実行したシステムへの直接のアクセスは有さないと考えられていた。
【０００３】
近年、攻撃者が実装の知識をいくらか有すると仮定する脅威モデルを考慮することが必要になってきた。例えば、サイドチャネル解析及びリバースエンジニアリングの脅威が考慮され得る。更に、以前はほとんどがセキュリティ問題に関連していた懸念事項が他の分野、例えばプライバシー等に拡張している。暗号鍵等のセキュリティ情報を処理する暗号システムは依然として最大の関心事であるが、他のプログラム、例えばプライバシー関連情報を処理するプログラムの保護も重要になってきた。
【０００４】
コンピュータシステムがいわゆるサイドチャネルを通じていくらかの情報を漏らすことが昔から知られている。コンピュータシステムの入出力挙動の観察は、コンピュータシステムによって使用される秘密鍵等の機密情報に関する有用な情報は一切もたらさない可能性がある。しかし、コンピュータチャネルは他の観察され得るチャネル、例えば電力消費又は電磁放射等を有し、これらのチャネルはサイドチャネルと呼ばれる。例えば、異なる命令によって消費される電力の小さな変化、及び命令の実行中の消費電力の変化が測定され得る。測定された変化は、暗号鍵等の機密情報に関連付けることができる。観察可能な意図された入出力挙動以外の秘密情報に関するかかる追加情報は、サイドチャネルと呼ばれる。コンピュータシステムはその使用中、サイドチャネルを通じて秘密情報を「漏らす」可能性がある。サイドチャネルの観察及び解析は、入出力挙動だけの暗号解析から得られる情報よりも優れた情報へのアクセスを攻撃者に与えるおそれがある。既知のサイドチャネル攻撃の１つの種類は、いわゆる差分電力解析（DPA：differential power analysis）である。 
【０００５】
サイドチャネル問題に対する現在のアプローチは、計算にランダム性を導入する。例えば、電力消費とプログラムが取り扱っているデータとの間の関係をぼやかすために、プログラムを実行する本物の演算の間にダミー命令が挿入され得る。 
【０００６】
コンピュータに対する一層強力な攻撃は、いわゆるリバースエンジニアリングである。多くのセキュリティシナリオで、攻撃者はコンピュータへの完全なアクセスを有し得る。これは、プログラムを分解し、コンピュータ及びプログラムに関するあらゆる情報を得る機会を攻撃者に与える。努力が十分であれば、例えばプログラム内に隠されているあらゆる鍵が攻撃者によって発見されるおそれがある。
【０００７】
この攻撃シナリオに対する防御は非常に困難なことが証明されている。対策の１つの種類は、いわゆるホワイトボックス暗号方式である。ホワイトボックス暗号方式では、鍵とアルゴリズムとが組み合わせられる。得られるアルゴリズムは、１つの特定の鍵に対してしか機能しない。次に、アルゴリズムはいわゆるルックアップテーブルネットワークとして実装され得る。計算は、一連の鍵依存テーブルルックアップに変換される。このアプローチの例としては、例えばS. Chow, P. Eisen, H. Johnson, P.C. van Oorschotによる“White-Box Cryptography and an AES Implementation”を参照されたい。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
コンピュータシステムへのサイドチャネル攻撃に対する既知の対策は、完全に十分ではない。例えば、ランダム性の導入は統計的分析によって対抗され得る。ソフトウェアの難読化は、プログラム演算のより高度な分析によって対抗され得る。したがって、更なるより優れた対策へのニーズが存在する。
【０００９】
例えば、コンピュータプログラムを難読化する方法の１つは、入力値を符号化し、可能な限り符号化された値の上で演算を行うことである。場合によっては、いわゆるテーブルネットワークさえ使用して計算が実行され得る。このようなテーブルネットワークは、例えばホワイトボックス暗号方式の場合、ハンドクラフトされ若しくは専用プログラムによって作成され、又は汎用コンパイラによって作成されてもよい。一般的に言えば、テーブルは実行される演算の種類を難読化すると信じられていた。しかし、発明者は、後半部は概して正しくないことを認識した。 
【００１０】
関数の入出力が符号化されたとしても、入出力関係の統計的特性が、符号化されている関数を明らかにする可能性がある。この現象の例を以下に示す。 
【００１１】
Ｗ＝｛０，１，．．．，Ｎ−１｝、符号化Ｅ、及び対応する復号Ｄ＝Ｅ−１を考える。Ｆ及びＧが、それぞれ符号化されたモジュロＮ加算及び符号化されたモジュロＮ乗算を示すと仮定する。つまり、F:W×W→Wを
0005861018.tif 000002
と定義し、ここで
0005861018.tif 000003
はモジュロＮ加算を示し、G:W×W→WをG(x,y)=E(D(x) *N D(y))と定義し、ここで*NはモジュロＮ乗算を示す。
【００１２】
各固定のｘに対して、{F(x,y) | y∈W}=Wが成り立つ。また、ゼロではない各x∈W、及びＮ素数に対して、{G(x,y) |y∈W}=W且つ{G(0,y) |y∈W}=E(0)が成り立つ。Ｎ非素数に対して、同様のパターンが生じる。
【００１３】
結果として、符号化Ｅとは独立に、Ｆが符号化されたモジュロＮ乗算ではあり得ず、Ｇが符号化されたモジュロＮ加算ではあり得ないことを求めることができる。攻撃者はそのための方法を少なくとも２つ有する。攻撃者はＷ内の２つの異なる要素ｘ１及びｘ２を固定し、H∈{F,G}に関して、全てのｙについてH(x1,y)とH(x2,y)とを比較することができる。これらの量が全てのｙについて異なる場合、ＨがモジュロＮ乗算を表すことはあり得ず、これらの量が一部のｙについて一致する場合、ＨがモジュロＮ加算を表すことはあり得ない。読み取るテーブルエントリを選択できないが、実行中のソフトウェアプログラムのテーブルアクセスの結果を観察できる攻撃者は、Ｆの出力としてはＷの各要素が等しい頻度で現れるが、Ｇに関しては、出力として要素Ｅ（０）がはるかに頻繁に現れるという事実を利用することができる。したがって、Ｈの出力としてＷのある要素がＷの他の要素よりもはるかに頻繁に現れる場合、Ｈは難読化されたモジュロＮ加算ではなく難読化されたモジュロＮ乗算である可能性の方が高い。
【００１４】
言い換えれば、利用可能な最高のソフトウェア難読化方法のうちの１つが使用されたとしても、すなわち、入出力値の完全な符号化及び計算のためにテーブルネットワークが使用されたとしても、プログラムの調査により、依然としていくらかの情報を得ることができる。この状況は非常に望ましくない。 
【００１５】
この問題は、複数の入力値に対して同時に演算をするテーブルネットワークの導入によって対処されることがわかっている。テーブルネットワークは異なる入力又は入力グループに対して異なる関数を適用し得る。複数の入力のうちの２つ以上を合わせて単一の値に暗号化する符号化を使用する場合、実際には２つの関数が実行されるため、テーブルネットワークが何の関数用なのかを攻撃者が求めることは不可能になる。２０１２年１２月２１日に出願されたタイトル“Computing device comprising a table network”のＵＳ仮出願ＵＳ６１／７４０，６９１、及び／又は、出願日が２０１２年１２月２７日の同タイトル“Computing device comprising a table network”のＥＰ出願ＥＰ１２１９９３８７を参照されたい。
【００１６】
このシステムはセキュリティを大きく向上させるが、特に攻撃モデルが更に広げられる場合、攻撃ベクトルは依然として存在する。攻撃者が完全なアクセスを有し、システム内で起こる全てを観察できると仮定するだけでなく、プログラムを変更可能な攻撃者に対しても備えをする。２つのこのような変更、すなわちテーブルエントリの変更及び変数の変更を考える。１つ目の種類の変更は、プログラムの実行を始める前に変更を行うことができるため、攻撃者にとってより軽く、後者の種類の変更はプログラムの実行中に行われるため、より難しいと考えられる。例えば、攻撃者は（おそらくは自動的な態様で）次のような攻撃を試み得る。攻撃者はテーブル内のエントリを変更し、変更されたプログラムを様々な入力に対して実行する。どのランもオリジナルのプログラム及び変更されたプログラムの出力に違いを一切示さない場合、攻撃者は、関連データに関する限り、変更されたテーブルエントリと未変更のテーブルエントリとは等しく、難読化計算、すなわちいわゆる状態変数及び状態関数においてのみ異なると結論付ける。時間が十分であれば、正しい計算に関する限り等しい値のクラスのマップが構築され得る。したがって、事実上、状態変数が排除される。明確には、符号化のため、攻撃者はデータ値が同じである一方で状態値が異なるかを直接観察することはできないが、テーブル変更の効果を分析することによりこれを推測できる可能性がある。 
【００１７】
プログラム変更に対して向上された耐性を備えた、関数入力値に関するデータ関数を計算するよう構成されたコンピューティングデバイスを有することは有益であろう。 
【課題を解決するための手段】
【００１８】
少なくともこの懸念事項に取り組む、関数入力値に関するデータ関数を計算するよう構成されたコンピューティングデバイスが提供される。 
【００１９】
コンピューティングデバイスは、電子ストレージと、ストレージに結合された電子プロセッサとを含む。電子ストレージはデータ関数ｆのために構成された第１のテーブルネットワークと、第１のテーブルネットワークになされた変更に対抗するために第１のテーブルネットワークと協力するよう構成された第２のテーブルネットワークとを記憶するよう構成される。 
【００２０】
プロセッサは、例えば適切なプロセッサコードにより、関数入力値を含む、第１のテーブルネットワークのための複数の第１のテーブル入力を取得し、複数の第１のテーブル入力に第１のテーブルネットワークを適用することによってデータ関数を計算し、複数の第１のテーブル出力を生成するよう構成され、複数の第１のテーブル出力は関数出力値を含み、関数出力値は関数入力値に対するデータ関数の適用の結果に対応する。
【００２１】
また、プロセッサは、複数の第１のテーブル出力を含み、少なくとも１つの入力を複数の第１のテーブル入力と共有する、第２のテーブルネットワークのための複数の第２のテーブル入力を取得して、複数の第２のテーブル入力に第２のテーブルネットワークを適用するよう構成され、第２のテーブルネットワークは、複数の第１のテーブル出力のうちの少なくとも特定の１つに関して、未変更の第１のテーブルネットワークが複数の第１のテーブル入力のうちの与えられた少なくとも１つから複数の第１のテーブル出力のうちの当該特定の１つを取得することができか否かを検証するよう構成される。
【００２２】
第２のテーブルネットワークは、保護された関数出力を含む第２のテーブル出力を生成し、検証が成功の場合、保護された関数出力は関数出力と等しく、検証が失敗の場合、保護された関数出力は関数出力と等しくない。例えば、第２のテーブルネットワークは、検証が失敗の場合、保護された関数出力が常に等しくないよう構成され得る。しかし、好適な実装形態では出力はランダム化され、例えば、検証失敗時の出力は、テーブルを構築するときにランダムに選択される。後者の場合、等しい出力を偶然有する場合がある。参考として状態変数及びランダムな出力を取ると、検証失敗の場合、事象、すなわち全テーブルエントリ、すなわち全ての可能な第１のテーブル入力のうちの少なくとも９０％で出力が等しくないことが要求され得る。 
【００２３】
したがって、このコンピューティングデバイスは深く難読化され、先に概述した変更攻撃を防ぐ。実際には、第１のテーブルネットワークは複数の入力に関して演算をし、複数の出力を生成する。複数の入力は、データ関数への入力のうちの少なくとも１つを含み、複数の出力は、少なくとも関数出力を含む。上記特許出願では、このようなテーブルネットワークが様々な方法で構築できることが記されている。かかる構築の一部として、データ関数が全ての可能な入力値について評価されてもよい。 
【００２４】
第２のテーブルネットワークは第１のテーブルネットワークの計算の一部を検証する。このために、第２のテーブルネットワークは第１のテーブルネットワークの出力を受け取り、第１のテーブルネットワークへの複数の入力のうちの少なくとも一部を共有する。第２のテーブルネットワークは必ずしも複数の入力値の全てを有さないため、第２のテーブルネットワークは完全な計算を行うことができない可能性がある。とはいえ、第２のテーブルネットワークは、複数の第１のテーブル出力のうちの少なくとも１つに関して、未変更の第１のテーブルネットワークが異なる値を与えたであろうか否かを検証できるよう選択される。言い換えれば、第２のテーブルネットワークは、未変更の第１のテーブルネットワークが複数の第１のテーブル出力のうちの特定の１つを取得する、複数の第１のテーブル入力のうちの入力された少なくとも１つを含む複数の第１のテーブル入力の有無を検証する。これを達成する実践的な方法の１つは、第１のテーブルネットワークが実行した計算の一部又は全てと同じ計算を行うことであるが、これは厳密に必須ではなく、例えば関数入力の一部を与えられた場合、一部の関数出力が不可能になったと結論付けることが可能であり得る。後者の例においても、この適合性はコンパイル中の列挙によって確立され、実行中にルックアップされる。 
【００２５】
第２のテーブルネットワークが複数の第１のテーブル入力と入力を共有し得る方法が少なくとも２つ存在する。１つ目の選択肢は、第１のテーブルネットワークの入力のうちの１つが第２のテーブルネットワークにコピーされることである。このアプローチの結果は、入力が他の入力と合わせて符号化される場合、それらも第２のテーブルネットワークへの入力となることである。これは、望まれるよりも大きなテーブルをもたらし得る。合わせて符号化された入力から１つ以上の入力、例えば状態を取得するために状態抽出テーブル等の抽出テーブルを使用することにより、これはある程度、救済することができる。第２の選択肢はシャドー変数を使用することであり、すなわち、第１のネットワークの複数の入力のうちの１つ以上が少なくとも二度、場合によっては異なる符号化で維持される。例えば、第１のテーブルネットワークが関数及び状態入力を有し得る一方、第２のテーブルネットワークは状態入力のみを共有する。この場合、第２のテーブルネットワークの入力は第１のテーブルネットワークの入力から直接コピーされる必要はなく、２つのネットワークは１つ以上の共通の入力を有するが、共通の入力は同じソースから直接来なくてもよい。これは、第２のテーブルネットワーク内のより小さなテーブルをもたらし得る。一方、これは、プログラムの少なくとも一部で、変数の一部が二度維持される、すなわち、いわゆるシャドー変数として維持されることを要求する。 
【００２６】
第２のテーブルネットワークが第１のテーブルネットワークへの変更を検出する場合、第２のテーブルネットワークは関数出力を変更し、すなわち、関数出力とは異なる保護された関数出力を出力する。これは、確率が示すよりもはるかに高い頻度で、攻撃者が自身の変更に起因する変化を見るという効果を有する。例えば、攻撃者が無関係なデータ（例えば状態）を変更したとしても、これは第２のテーブルネットワークによって検出され、変化をデータ変数に広げ得る。上記で概述した攻撃は、完全に不可能で無かったとしても、はるかに難しくなる。 
【００２７】
一実施形態では、複数の第１のテーブル入力は状態入力値を更に含み、複数の第１のテーブル出力は状態出力値を更に含み、状態出力値は状態入力値に対する状態関数の適用の結果に等しく、第２のテーブルネットワークは、入力として状態入力値を取るよう構成され、第２のテーブルネットワークは、状態入力値への状態関数の適用の結果が、第２のテーブルネットワークに入力される複数の第１のテーブル出力に含まれる状態値に等しい場合、保護された関数出力が関数出力に等しいよう構成される。
【００２８】
２つの関数、すなわちデータ関数及び状態関数を同じテーブルネットワーク内で互いに独立して計算することにより、それらの一方を検証することが可能になる。したがって、第２のテーブルネットワーク内で実行されなければならない作業量が減少する。結果として、より少ない入力を有する第２のテーブルネットワークを設計することができ、これは著しく小さいテーブルをもたらす。 
【００２９】
一実施形態では、第１のテーブルネットワークは、入力として符号化された入力値を取り、符号化された入力値は、関数入力値を状態入力値と組み合わせ、合わせて単一の値に符号化し、第１のテーブルネットワークは、出力として第１の符号化された出力値を生成し、第１の符号化された出力値は、関数出力値を状態出力値と組み合わせ、合わせて単一の値に符号化し、状態出力値は、状態入力値への状態関数の適用の結果に等しく、第２のテーブルネットワークは、入力として、第１のテーブルネットワークの第１の符号化された出力値と、状態入力値及び関数入力値のうちの少なくとも１つとを取り、第２のテーブルネットワークは、出力として、第２の符号化された出力値を生成し、符号化された出力値は保護された関数出力を含む。
【００３０】
複数の入力の一部若しくは全ての符号化、及び／又は、複数の出力の一部若しくは全ての符号化は、デバイスのリバースエンジニアリングを顕著に困難にする。攻撃者は値が何を表すか、又は実際に値が何であるかを直接知らない。 
【００３１】
（しばしば「Ｅ」と称される）符号化は、少なくとも部分的に可逆であり、すなわち、関数入力値及び状態入力値の符号化されたペアの一部に関して、関数入力値及び／又は状態入力値が復元可能であり、関数出力値及び状態出力値の符号化されたペアに関しても同様である。実践的な一実装形態では、符号化は典型的には完全に可逆として選択されるが、上記したようにこれは厳密に必要ではない。すなわち、完全に可逆な符号化に関しては、関数入力値及び状態入力値の任意の符号化されたペアについて、関数入力値及び状態入力値の両方を復元することができる。同様に、関数出力値及び状態出力値の符号化ペアから関数出力値及び状態出力値を復元することができる。
【００３２】
符号化は秘密であり、すなわち、システムの異なる実装形態は異なる方法を使用して入出力値を合わせて符号化し得る。
【００３３】
更に、符号化は少なくとも部分的に拡散の原理に従う。符号化された値内の値は、符号化された値の大部分に依存する。例えば、符号化された入出力値から入出力値が復元される場合、入出力値は好ましくは符号化された入出力値の全てに依存し、少なくとも、入出力値自体のビットサイズより多くのビットに依存する。これは、入出力値に関する情報が多くのビットに分散されるという効果を有する。好ましくは、ある者が符号化された値の一部にしかアクセスできない場合、その者が符号化／復号関数の完全な知識を有していたとしても、それが符号化する値を復元することは不可能である。慣用的に、暗号化はしばしば鍵を利用することに留意されたい。鍵符号化の使用は魅力的な可能性であるが、入出力値の比較的小さいサイズのため、符号化をテーブルとして表現することも可能である。このため、入出力値又は中間値等の変数値のコンテキストでの符号化及び暗号化は同義に使用される。 
【００３４】
テーブルネットワークは２つの関数を表現することができ、実際に、符号化された入力値は２つの入力（関数及び状態）を含むため、テーブルネットワークから、それがデータ関数の又は状態関数の符号化バージョンであるのかを判断することはできない。実際には、テーブルネットワークはいずれの関数も計算するよう完備されており、実際に、独立した変数又は（複数の入力を有するデータ関数及び／又は状態関数の実施形態では）変数のセットについて両関数を計算する。
【００３５】
例えば、上記例に適用される場合、加算及び乗算を実行するために使用可能なテーブルネットワークが取得され得る。実際にテーブルネットワークはいずれも実行可能なため、テーブルネットワークの調査によりいずれが使用されているのかを判断することはできない。 
【００３６】
データ関数は１つ又は複数の入力値を取り得る。状態関数は１つ又は複数の入力値を取り得る。一実施形態では、データ及び状態関数の入力値の数は同じである。例えば、デバイスは、複数の関数入力値を複数の符号化された入力値として取得するよう構成されてもよい。複数の符号化された入力値の各々が、複数の入力値のうちの関数入力値及び複数の状態入力値のうちの状態入力値を組み合わせ、合わせて単一の値に暗号化する。テーブルネットワークは入力として複数の符号化された入力値を取り、出力として符号化された出力値を生成するよう構成される。符号化された出力値は関数出力値を状態出力値と組み合わせ、単一の値に暗号化する。関数出力値は複数の関数入力値へのデータ関数の適用結果に等しく、状態出力値は複数の状態入力値への状態関数の適用結果に等しい。
【００３７】
一実施形態では、第２のテーブルネットワークは、出力として第２の符号化された出力値を生成し、符号化された出力値は、保護された関数出力値を保護された状態出力値と組み合わせ、合わせて単一の値に暗号化し、保護された状態出力は、状態出力値への状態置換の適用の結果に等しい。 
【００３８】
第１のネットワークへの変更に対抗する第２のテーブルネットワークの追加は、システムに対する攻撃の問題に大いに寄与する。しかし、攻撃者が第２のテーブルネットワークを見つけることができた場合、攻撃者はその出力から、それによって変化が起こされたか否かを判断可能な可能性がある。第２のテーブルネットワークの出力内の状態値を常に変更することにより、符号化された値内の１つの値だけが変化したとしても符号化された値が全体として変化するため、攻撃者は第２のテーブルネットワークが関数出力に変化を適用する必要があったか否かを見ることはできない。
【００３９】
一実施形態では、第２のテーブルネットワークは、状態テーブルとアラインメントテーブルネットワークとを含み、状態テーブルは、状態関数のために構成され、プロセッサは、状態入力に状態テーブルを適用して平行な状態出力値を取得し、アラインメントテーブルネットワークは、少なくとも平行な状態出力値と第１のテーブルネットワークから受け取られる状態出力値とを入力として受け取る。このようにすることで、状態テーブルは関数テーブルと並行し得る。アラインメントテーブルネットワークが実行される前に、複数の状態及び関数テーブルが使用され得る。これは、依然として変更を検出する一方で変更に対する検査の数を減らす。このようにすることで、コードサイズが低減される。 
【００４０】
一実施形態では、第２のテーブルネットワークは、変更された状態テーブルとアラインメントテーブルネットワークとを含み、状態テーブルは入力として状態入力値を受け取り変更された状態値を計算し、変更された状態値は、状態入力値への状態関数及び更なる状態関数の適用の結果に等しく、アラインテーブルネットワークは、入力として状態出力値及び変更された状態出力値を取り、状態出力値への更なる状態関数の適用が変更された状態出力値を生じるか否かを検証する。
【００４１】
状態テーブルでは、状態関数及び更なる状態関数の関数複合が実行され、一方、第１のテーブルネットワークでは状態関数のみが使用される。アラインメントテーブルは、状態変数が予期される値を有するか否かを検証する。出力が検査され、それが如何にして取得されたかは必ずしも検査されないことに留意されたい。これは、アラインメントテーブルネットワークを除去し、その出力を例えば第１のテーブルネットワークの出力によって置き換えようとする攻撃を防ぐ。状態変数及びデータ変数が並行しなくなるため、かかる試みは失敗する。
【００４２】
第２のテーブルネットワークは状態値に関して演算をしなくてもよく、複数の入力のうちの他の部分が使用されてもよい。一実施形態では、第２のテーブルネットワークは、入力として関数入力値を取り、第２のテーブルネットワークは、関数入力値へのデータ関数の適用の結果が第１の符号化された出力値内に符号化される関数出力値に等しい場合、保護された関数出力が関数出力に等しいよう構成される。
【００４３】
関数入出力は４、５、６、７、又は８ビット、場合によっては１６ビット等より大きくてもよく、状態入出力値は同じサイズ、場合によっては２又は３ビット等より小さくてもよい。実践的な選択肢は、それぞれが４ビットの関数及び状態値、並びに関数及び状態値を含む符号化値を８ビットとすることである。
【００４４】
本発明の一側面は、データ関数を受け取り、第１及び第２のテーブルネットワークを生成するためのコンパイラであって、第１のテーブルネットワークは、関数入力値を含む、第１のテーブルネットワークのための複数の第１のテーブル入力を受け取り、複数の第１のテーブル出力を生成し、複数の第１のテーブル出力は関数出力値を含み、関数出力値は関数入力値へのデータ関数の適用の結果に対応し、第２のテーブルネットワークは、第１のテーブルネットワークに対してなされる変更に対抗するために第１のテーブルネットワークと協力し、第２のテーブルネットワークは、複数の第１のテーブル出力及び少なくとも１つの第１のテーブル入力を含む複数の第２のテーブル入力を受け取り、第２のテーブルネットワークは、複数の第１のテーブル出力のうちの少なくとも特定の１つに関して、未変更の第１のテーブルネットワークが複数の第１のテーブル入力のうちの与えられた少なくとも１つから複数の第１のテーブル出力のうちの特定の１つを取得することができたか否かを検証し、第２のテーブルネットワークは、保護された関数出力を含む第２のテーブル出力を生成し、検証が成功の場合、保護された関数出力は関数出力と等しく、検証が失敗の場合、保護された関数出力は関数出力と等しくない、コンパイラに関する。
【００４５】
コンピューティングデバイスは例えばモバイル電子デバイス、携帯電話、セットトップボックス、コンピュータ等の電子デバイスである。 
【００４６】
本発明に係る方法は、コンピュータ実装方法としてコンピュータ上に、又は専用ハードウェア内に、又は両方の組み合わせに実装され得る。本発明に係る方法の実行可能コードは、コンピュータプログラム製品上に記憶され得る。コンピュータプログラム製品の例は、メモリデバイス、光学記憶デバイス、集積回路、サーバ、オンラインソフトウェア等を含む。好ましくは、コンピュータプログラム製品は、プログラム製品がコンピュータ上で実行されたとき、本発明に係る方法を実行するためのコンピュータ読み取り可能媒体上に記憶された非一時的プログラムコード手段を含む。
【００４７】
好適な一実施形態では、コンピュータプログラムは、コンピュータ上で実行されたとき、本発明に係る方法の全ステップを実行するよう適合されたコンピュータプログラムコード手段を含む。好ましくは、コンピュータプログラムはコンピュータ読み取り可能媒体上に具現化される。
【図面の簡単な説明】
【００４８】
本発明の上記及び他の側面は、以下で説明される実施形態を参照して説明され、明らかである。
【００４９】
【図１】図１は、データ関数及び状態関数を実装するテーブルネットワークを示す概略図である。
【図２】図２は、テーブルネットワークによって構成されたコンピューティングデバイス２０２及び２０４を示すブロック図である。
【図３】図３は、テーブルネットワークを示すブロック図である。
【図４】図４は、テーブルネットワークを一般的に示すブロック図である。
【図５】図５は、コンピューティングデバイスを示すブロック図である。
【図６】図６は、コンパイラを示すフローチャートである。
【図７】図７は、関数を計算するための方法を示すフローチャートである。
【図８】図８ａ及び図８ｂは、テーブルネットワークを示すブロック図である。
【図９】図９は、プログラムフローを示すダイアグラムである。
【００５０】
異なる図面において同じ参照番号を有するアイテムは、同じ構造的特徴及び同じ機能を有し、又は同じ信号である。このようなアイテムの機能及び／又は構造が説明されている場合、詳細な説明においてそれらを繰り返し説明する必要はない。
【発明を実施するための形態】
【００５１】
本発明は多様な形態で実施され得るが、１つ以上の特定の実施形態が詳細に図面に示され、本明細書に記載される。本開示は本発明の原理の例示として考えられ、本発明を図示及び記載の特定の実施形態に限定することは意図しないことを理解されたい。
【００５２】
図４はテーブルネットワークの概念を示し、テーブルネットワーク４００が図示されている。ほとんどの関数がテーブルのネットワークとして表現され得る。特に、算術演算及び論理演算の任意のコンポジションがそのように表現され得る。例えば、テーブルネットワークは例えば暗号法の実装であり得る。複数のテーブルのうちの８つのテーブルが示されている。テーブルは入力値のテーブルルックアップにより入力値を出力値に変換する。関数実装の外部から入力を受け取るための入力テーブル４１０のうちの３つが示されている。出力テーブル４３０のうちの１つが示されている。出力テーブル４３０は、合わせて、例えば連結により関数実装の出力部を形成する。テーブルのうちの別の１つから少なくとも１つの入力を受け取り、少なくとも１つの別のテーブルの入力として使用される出力を生成する中間テーブルのうちの４つのテーブル４２０、４２２、４２４、４２６が示されている。図中、例えば中間テーブル４２２及び４１０は、テーブル４２６のための入力を提供する。テーブルは合わせてネットワークを形成する。暗号法はブロック暗号法であり、ブロック暗号法は暗号化又は解読のために構成され得る。ブロック暗号法はブロックを暗号化し、例えばＡＥＳである。実装は特定の鍵用でもよく、この場合、テーブルは特定の鍵に依存し得る。
【００５３】
ルックアップテーブル４２６は、２つの入力及び１つの出力を有するオペレータ（演算子）を表す。単項演算子用のルックアップテーブルの構成は、二項演算子用に拡張され得る。例えば、２つ目の入力は「カリー化」されてもよい。関数変換技術に関して、カリー化は、ｎ個の複数の引数（又はｎ組の引数）を取る関数を、それぞれが単一の引数を有する一連の関数と称することができるように変換する技術である。このアプローチが使用される場合、ルックアップテーブル４２６は、複数の単項ルックアップテーブルとして実装される。一方、入力ごとにビット列を生成し、結果を連結してもよい。このようにすることで、ルックアップテーブルは直接的に生成され、単一の大きなルックアップテーブルが得られる。構成に基づき、ルックアップテーブルのレイアウトは異なり得るが、等しいサイズ及び同じ特性を有する。複数の入力値は必ずしも同じ符号化に従って符号化されなくてもよいことに留意されたい。
【００５４】
テーブルネットワークは２つの関数を符号化する複数のテーブルを使用してもよく、又は、２つの関数を符号化するテーブルネットワークをサブネットワークとして有してもよい。更に、テーブルネットワークは、攻撃者がテーブル及び／又は変数変更を利用してシステムに関する有用な情報を知ることを防ぐために１つの又は第１及び第２のテーブルネットワークを組み込み得る。
【００５５】
システムは、現在の符号化に基づくネットワークテーブルの状態又はデータ関数を使用するよう構成され得る。本明細書に記載されるテーブルネットワークにも、テーブルネットワーク難読化技術が適用され得る。
【００５６】
例えば、第２のテーブルが入力として第１のテーブルの出力を受け取るとすると、第１のテーブルの出力は秘密の、例えばランダムに選択される符号化によって符号化され、第２のテーブルの入力は逆符号化によって符号化され得る。
【００５７】
図１は、より大きなテーブルネットワーク１００内に埋め込まれているテーブルネットワーク１８０を示す。図示のテーブルネットワーク１８０は、単一のテーブル１３０のみを含む。上記したように、例えばテーブルサイズとセキュリティとの間のトレードオフで、テーブル１３０をテーブルネットワークとして実装することも可能である。図１において、テーブルは長方形によって示されており、値は右上の角が切り落とされた長方形によって示されている。
【００５８】
テーブルネットワーク１８０は、複数の符号化された入力値を入力として取るよう構成されており、符号化された入力値１２２及び１２４が示されている。テーブルネットワーク１８０は、出力として符号化された出力値１６０を生成するよう構成されている。以下の記載では、２つの入力値及び単一の出力値を有するデータ関数及び状態関数を想定する。しかし、実施形態は任意の数の入力値及び／又は出力値に拡張され得る。特に、１つの入力及び１つの出力を有するデータ／状態関数が可能であり、２つの入力及び１つの出力を有するデータ／状態関数が可能である。
【００５９】
テーブルネットワーク１８０はデータ関数のために構成され、電子ストレージ内に記憶され、電子ストレージは、テーブルネットワークを適用することによりデータ関数を計算するよう構成された電子プロセッサに結合される。
【００６０】
符号化された値１２２は、関数入力値１０２及び状態入力値１１２から取得される。例えば、これはエンコーダ１１０によって実行され得る。エンコーダ１１０はテーブルネットワーク１８０を記憶するデバイスと同じデバイス内に含まれてもよいが、これは必須ではない。入力値は既に符号化された形式で受け取られ及び／又は符号化された形式で伝送されてもよく、又は、符号化されていない形式で受け取られ／伝送されてもよい。後者の場合、入力値は符号化され、内部で符号化形式で使用されてもよい。例えばデバイスの外部で異なる符号化が使用される場合、再符号化が存在してもよい。例えば、デコーダ１７０から関数出力値１６２及び状態出力値１６４が取得され得る。
【００６１】
データ関数の符号化入力は、他のテーブル又はテーブルネットワークの出力であり得る。後者は２つの関数のために構成されたテーブルネットワークでもよいし、そうでなくてもよい。異なるデータ関数のために構成されたテーブルネットワークを組み合わせることにより、プログラム全体が構築され得る。
【００６２】
エンコーダ／デコーダ１１０及び１７０は、互いの逆として得られ得る。エンコーダ１１０は次のようして得られてもよい。関数入力値と状態入力値との各可能な組み合わせがリストされる。例えば、両方が４ビット幅の場合、１６＊１６＝２５６の可能な組み合わせが存在する。２５６の組み合わせは、ランダムな全単射順序（bijective order）で自身にマッピングされてもよい。他のサイズに関しても同様である。また、暗号関数が使用されてもよく、例えば何らかの秘密暗号鍵を使用して、８ビットブロック暗号法が適用されてもよい。
【００６３】
符号化入力値は関数入力値１０２及び状態入力値１１２を相互依存した態様で含み、例えば関数入力は符号化入力の全ビットに依存する。したがって、符号化入力値１２２の一部のみを知るだけでは、通常、関数入力値１０２又は状態入力値１１２のいずれも求めることはできない。
【００６４】
以下、数学的言語を使用して複数の実施形態を与える。関数入力値を状態値と組み合わせることの１つの利点は、関数入力が複数の表現を有することである。関数ｆはデータ関数を指し、ｇは状態関数を指す。関数ｆは、ある値がＦの定義域内で複数の表現を有するよう、Ｆに符号化される。どの関数ｆが符号化されているかを隠すために、ｆの入出力は、ｆの符号化バージョンＦの定義域及び範囲内で複数の表現を有する。関数Ｆは、Ｘがｘの表現であれば、Ｆ（Ｘ）がｆ（ｘ）の表現であるよう設計される。以下、ｆの各入出力がＦの複数の入出力に対応し、よって通常、Ｆからの入出力を表現するのにｆからの入出力を表現するよりも多くのビットが必要とされることを強調するために、「長い」変数（Ｆの入出力）及び「短い」変数（ｆの入出力）について論じる場合がある。オペランドのための複数の表現を取得する方法の１つを以下に述べる。上記と同様に、単純さのために、等しい入力出力記号を有する関数を考えるが、これは一般化され得る。
【００６５】
Ｗが符号化しようとするオペランドの集合を示すとする。「状態」の有限集合Σ及び有限集合Ｖを導入し、Ｖの基数はＷ及びΣの基数の積に等しい。ＷｘΣの要素は、秘密符号化関数Ｅによって一対一でＶにマッピングされる。Ｗ内の要素ｗの表現は、次の集合のメンバーである。
Ω(w) = { E(w,σ) | σ∈Σ }
【００６６】
したがって、Ｗ内の各要素の表現の数は、Σの基数に等しい。結果として、Ｖからの記号を運ぶデータパスは、Ｗからの記号を運ぶデータパスより広い。例えば、Ｗが１６ビット整数の集合であり、状態空間がΣ１６＝２４の要素を有する場合、Ｖのためのデータパスは１６＋４＝２０ビット使用し、一方、Ｗのためのデータパスは１６ビット使用する。
【００６７】
次の実施形態は二変数関数を符号化する。符号化することを望む関数ｆ：ＷｘＷ→Ｗを考える。全てのw1,w2∈ W及びσ1, σ2∈ Σについて下式が成り立つような関数Ｆ：ＶｘＶ→Ｖを構築する。
F(E(w1,σ1),E(w2,σ2 ))∈Ω(f(w1,w2))
【００６８】
あるいは、言葉で表現すれば、Ｆはｗ１及びｗ２の表現の任意のペアをf(w1,w2)の表現にマッピングする。
【００６９】
f(w1,w2 )の表現の状態は、決定論的な又はランダム化された態様で、両方のオペランドｗ１及びｗ２に依存してもよく、場合によっては両方の状態σ１及びσ２に依存してもよい。より具体的には、状態は状態σ１及びσ２のみに依存してもよく、これは関数g:Σ×Σ→Σを取り、次を定義することによって実装され得る。
F(E(w1,σ1),E(w2,σ2 ))=E(f(w1,w2 ),g(σ1,σ2))
【００７０】
Σ＝Ｗを取る場合、上記実施形態の興味深い特別なケースが生じる。この場合、関数Ｅを使用してｆを符号化する関数Ｆは、異なる符号化関数
0005861018.tif 000004
を使用するが関数ｇも符号化する。つまり、２つの関数のうち、ｆ又はｇのいずれがＦによって実装されているのかを推測することができない。
0005861018.tif 000005
と定める。計算により、次式が求められる。
0005861018.tif 000006
【００７１】
したがって、Ｆのテーブルは符号化Ｅが使用される場合は関数ｆを実装し、符号化関数として
0005861018.tif 000007
が使用される場合は関数ｇを実装する。このようにすることで、少なくとも２つの関数を符号化し得るため、テーブル１３０だけからではどの関数が使用されているのかを求められないことがわかる。
【００７２】
Ｆのためのテーブルはｆ及びｇの両方を計算するよう働き得る。実際には、Ｅが使用される場合、前述したように、Ｆのためのテーブルはｆを実装する。関数
0005861018.tif 000008
により入出力を前処理及び後処理することにより、同じテーブルをｇを実装するために使用することもできる。正確には、w1,w2∈W,σ1,σ2∈Σとし、vi=E(wi,σi ),i=1,2と示す。この場合、次式が得られる。
0005861018.tif 000009
【００７３】
結果として、次式が得られる。
0005861018.tif 000010
【００７４】
符号化された入力値は、データ関数を含み又はデータ関数によって表現され得るコンピュータプログラムへの入力値であり得る。コンピュータプログラムはコンピュータ上で実行中であってもよい。コンピュータプログラムの命令は、データ関数によって表現され得る。符号化及び復号は秘密鍵によって制御されてもよい。符号化及び復号テーブル自体がかかる鍵としてみなされてもよい。符号化Ｅｋによって符号化されたデータに対して演算をする命令ｆが適用される場合、まずデータが復号され、ｆが復号されたデータに適用され、その後結果が再び符号化される。つまり、データｘは出力F (x) = Ek( f (Dk(x))をもたらす。関数Ｆを例えばルックアップテーブルとして直接記憶することにより、関数ｆ及びそのセマンティクスは隠される。具体的な一実施形態では、復号は符号化の左逆元であり、すなわち、全てのｘに対してDk(Ek(x)) = xである。これは、２つの関数ｆ及びｇが同じ関数Ｅｋ及びＤｋによって符号化及び復号される場合、関数f(g(x))の符号化バージョンを、G (x) = Ek( g (Dk(x))及びF (x) = Ek( f (Dk(x))のためのテーブルを連続して使用することによって行うことができるという利点を有する。実際には、ｘごとにEk (f(g(Dk(x)) = F(G(x))が成り立つと見ることができ、よってＧ及びＦのためのテーブルに続けてアクセスすることによりf(g(x))の符号化バージョンを得ることができる。このようにすることで連続する演算の間に符号化及び復号をすることなく一連の演算を適用することができ、よってセキュリティが著しく強化される。一実施形態では、符号化及び復号はセキュアサイドでのみ起こり、一方、全ての符号化演算がオープンな非セキュアサイドで起こる。１つ以上の符号化関数の出力は、別の符号化関数への入力となり得る。上記したように、符号化及び復号が互いの逆元の場合、これは都合よく構成され得る。本発明によって一連の演算を実行するための好ましい一実施形態は以下の通りである。まず、セキュア領域で、「短い」変数が「長い」変数に変換される。「長い」変数が略等しい頻度で現れることを確実にするよう、ランダム化が含まれる。これは、例えば、ランダムな状態σ∈Σを生成するデバイスを有し、変数ｘをＥｋ(x,σ)にマッピングすることによって達成することができ、ここで、Ｅｋは「長い」変数の符号化である。全てが「長い」変数を使用して演算をするオープンサイドでの全計算の後、セキュアサイドで復号Ｄｋが適用され、次いで、復号された長い変数に対応する「短い」変数が求められる。代わりに、復号及び短い変数の決定が１つの結合されたステップで実行されてもよい。文字ｋは秘密、例えば秘密鍵を示す。
【００７５】
変数のための複数の表現を有することは、データパスが大きく長いことを示唆する。また、これは、ｆの符号化バージョンＦを実装するためのテーブルが大きくなることを示唆する。例えば、入力として２つの１６ビット変数ｘ及びｙを有し、出力として１６ビット変数を有する関数ｆ（ｘ，ｙ）を考える。複数の表現を有することなくｆの符号化バージョンを実装するためのテーブルは、２１６×２１６のエントリを有するテーブルを使用し、各テーブルエントリは１６ビット幅であり、総計２３６ビットのテーブルサイズになる。次に、各１６ビット変数が１６の表現を有すると仮定し、よって、表現の集合は２０ビットで表され得る。今度は２２０×２２０のエントリを有するテーブルが使用され、各テーブルエントリは２０ビット幅であり、総計５×２４２ビットのサイズのテーブルになる。つまり、テーブルは複数の表現を有さない場合の５×２６＝３２０倍の大きさを有する。
【００７６】
下にはエンコーダ１１０、デコーダ１７０、並びに状態抽出テーブル２１２及び２１４の構成の例が与えられている。それぞれ４ビットの単一の関数入力及び単一の状態入力を想定する（どちらもより多くてもよい）。
0005861018.tif 000011
【００７７】
最初の２つの列は、関数入力値及び状態入力値の全ての可能な組み合わせをリストする。最後の列は、数０〜２５５のバイナリのランダム順列又は置換（permutation）をリストする。２５６−２＝２５４の入出力ペアの完全な知識をもってしても、残りの２つのペアが依然として１ビットの不確実性を有するという意味で、暗号化は完全であることに留意されたい。情報理論的な意味での完全な符号化が望ましいが、良好な結果のためには必須ではない。例えば、８ビット幅ブロック暗号法、すなわち、関数入力と状態入力との和に等しいブロックサイズを有するブロック暗号法等を使用することにより、完全さは劣るが依然として非常に有用な符号化が得られる。
【００７８】
最初の２つの列上でのソートにより符号化テーブルが得られ、得られたテーブルは、最初の２つの列から最後の列（符号化）を得る方法を示す。最後の列上でのソートにより、符号化ではなく復号を行うテーブルが得られる。最初の列を除去して最後の列上でソートを行うことにより、状態抽出関数が得られる。一般的に、入力列及び出力列の両方をストアする必要はないことに留意されたい。例えば、入力列がソートされ、全ての可能な組み合わせを含む場合、省かれてもよい。
【００７９】
図２は、電子ストレージ及び電子プロセッサを有する計算デバイス、例えば図５に示されるデバイス（下記参照）における使用のためのテーブルネットワーク２０４及び２０２を示す。 
【００８０】
テーブルネットワーク２０２に関して、２つの第１のテーブルネットワーク２１２及び２１４が示されている。第１のテーブル２１４は第１のテーブル２１２の出力２１６を入力として使用する。テーブルネットワーク２１２及び２１４は、テーブルネットワーク１８０のタイプでもよい。第１のテーブル２１２は複数の入力２１０を受け取って複数の出力を生成し、入力には関数入力値が含まれ、出力には関数出力値が含まれる。図をより明瞭にするため、解釈を助けると考えられる場合を除き、複数の入力及び複数の出力は個別に示されない。テーブル２１２の関数出力値は、テーブル２１４のための更なる入力として使用され、テーブル２１４は複数の出力を生成する。テーブル２１２及び２１４の複数の入出力は、少なくとも単一の値からはどの部分が実際のデータに対応しどの部分が対応しないかを攻撃者が決定できないよう、符号化される。例えば、テーブル２１２及び２１４は、それぞれが関数入力を状態入力と組み合わせ、それぞれが１つ以上の符号化出力を生成し得る１つ以上の符号化入力を入力として受け取り得る。しばしば使用される組み合わせは、２つ以上の符号化入力を受け取り、１つの符号化出力を生成することである。
【００８１】
テーブル２１２及び２１４は、テーブルネットワーク２０２がその一部を構成するプログラムの最終結果に直接関係しないデータに関して計算を実行するため、ネットワーク２０２の使用は有利である。しかし、攻撃者はテーブルエントリを変更して結果を観察することによりシステムを攻撃できる可能性がある。攻撃者はプログラムの実行に影響しないように見える変化を探す。それから、関数データに関する限り、オリジナルの値及び変更された値が等しいことを推測できるからである。
【００８２】
テーブルネットワーク２０４はテーブルネットワーク２０２の代替として、この攻撃を防ぐよう構成されている。テーブルネットワーク２０４は第１のテーブルネットワーク２２２及び２２４を含み、更に追加でテーブルネットワーク２３２及び２３４を含む。第１のテーブルネットワーク２２２及び２２４は、それぞれがテーブル２１２及び２１４に等しいよう選択されてもよい。 
【００８３】
テーブルネットワーク２３２は入力としてテーブルネットワーク２２２の出力２２６を受け取り、また、自身の入力の少なくとも一部をテーブルネットワーク２２２の入力２２０と共有する。第２のテーブルネットワークは、テーブルネットワーク２２２から受け取られた出力２２６がテーブル２３２に与えられた入力２２０と適合するか否かを検証できる。特に、テーブル２３２は、複数の第１のテーブル出力２２６のうちの少なくとも特定の１つ、より好ましくは全てに関して、未変更の第１のテーブルネットワーク２２２が複数の第１のテーブル入力のうちの与えられた少なくとも１つから複数の第１のテーブル出力のうちの当該特定の１つを取得し得たか否かを検証する。テーブル（又はテーブルネットワーク）２３２は、テーブルルックアップ演算によりこれを行うことができる。テーブル２３２の構築中、全ての可能な入力２２０が何であるか及び全ての対応する出力２２６が何であるかが決定され、実際には、これはテーブル２２２自体の構築の一部であり得る。次に、テーブル２３２の入出力の組み合わせごとに、それがテーブルネットワーク２２２の入出力ペアに対応するか否かを示すテーブルが作成される。この判定に基づき、テーブル２３２は異なる出力を有する（下記参照）。言い換えれば、テーブル２２２は、未変更の第１のテーブルネットワークが複数の第１のテーブル出力のうちの特定の１つを得る、複数の第１のテーブル入力のうちの入力された少なくとも１つを含む複数の第１のテーブル入力の有無を決定する。 
【００８４】
これを達成するための実践的な方法は、入力２２０の一部だけから計算された２２６の１つの出力を有することである。例えば、入力２２０は状態入力及び関数入力を含み得る。出力２２６は、関数入力に適用される関数である関数出力と、状態出力とを含み得る。状態出力は好ましくは状態入力のみに依存するが、関数入力に依存してもよい。テーブル２２２の関数入力及び全出力を所与として、テーブル２３２は関数入力と関数出力とが対応すること、すなわち、関数入力に適用されるデータ関数が関数出力を与えるか否かを検証することができる。代わりに又は追加で、テーブル２２２の状態入力及び全出力を所与として、テーブル２３２は、状態入力と状態出力とが対応するか、すなわち、状態入力への状態関数の適用が状態出力を与えるか否かを検証することができる。好適な実施形態では、第２のテーブルネットワークは少なくとも状態変数を検証する。変更されていないプログラム出力をもたらす可能性があるため（すなわち、関数値が変更されない場合）、これらの種類のエラー（すなわち、変更された状態）を捕らえることは重要であると考えられる。後者の種類の変化は、攻撃者にとって特に多くの情報を運ぶ。
【００８５】
通常、テーブル２３２は、何らかの処理ステップを実行し得る次のテーブル／テーブルネットワークでの使用のために２２６の出力を伝送する。しかし、テーブル２３２がエラーを検出する場合、すなわち、２２２の入出力がテーブル２２２又はおそらくは変数自体に干渉してしか得られ得ない場合、テーブル２３２は伝送前に出力２２６の少なくとも一部をランダム化する。第２のテーブルネットワークを通過した出力値を保護された出力値と呼ぶ。保護された値は、エラーが検出されなかった場合は更なる計算のために有用であるが、タンパリングが検出された場合にはランダム化されている。
【００８６】
保護された変数の効果は、タンパリングによって知られ得る情報が著しく減少することである。攻撃者はタンパリングを行うと出力が変化し、プログラムが正常に機能しないことを発見するが、これはタンパリング時に予期されることであり、攻撃者はこの事実自体からは何も学ばない。しかし、ランダム化のため、有用な情報、例えば状態及び関数データに対応して変化する情報は消失する。ランダム化が好ましいが、検証が失敗する場合に保護関数出力が関数出力と異なる限り、より微細な変化も可能である。ランダム化はテーブルの構築中にテーブル内に固定される。テーブルネットワークを適用するために、乱数生成器は必要とされない。 
【００８７】
テーブル２３２の出力は、ここではテーブル２２４及び２３４である次のテーブルネットワークに伝送される。これは、保護されていないネットワークにおいて出力を受け取るテーブル２１４に対応する。ここで、２２４は第１のテーブルネットワークであり、２３４は第２のテーブルネットワークである。 
【００８８】
テーブルネットワーク２０４は、例えばフラッシュ又はＲＡＭ等の電子ストレージ上に記憶され、そして電子プロセッサによって使用され、すなわち、デバイスの外部から受け取られた又はデバイス上で生成されたデータに対してテーブルネットワークを適用することにより使用される。典型的な実施形態では、テーブルネットワークへの入力は、攻撃者に対して秘密な符号化に従って符号化されていることに留意されたい。テーブルネットワークにとって符号化は透明であり、テーブルが作成されれば、一切の追加の処理を伴わない。つまり、テーブルをプレーン値又は符号化値に適用することは、処理要件において等しい。符号化はテーブル間で容易に変化し得ることに留意されたい。符号化は、プレーン値と内部で使用される値との間のマッピングである。 
【００８９】
好ましくは、テーブルネットワーク２０４は、関数値を状態値と組み合わせる変数に作用する。システムは状態値に関しても計算を行い、テーブルは同時に２つの関数を実行するため、攻撃者はテーブルからそれが符号化する関数を特定することができない。状態変数及び関数変数の役割は、プログラムを通じて交替し得る。これらの実施形態では、テーブルは同時に２つの関数を実行する。しかし、同時に実行される関数の数はより大きく選択されもよく、攻撃者による解析をより複雑にする。例えば、テーブルは３つの関数、例えばデータ関数並びに第１及び第２の状態関数を表してもよく、例えば４又は５等の更に大きい関数の数も可能である。
【００９０】
以下、第２のテーブルネットワークの可能な実施形態を数学的言語を用いて列挙する。これらの実施形態において、ｕ、ｖ、ｘ、ｙは関数値及び状態値を符号化する変数であり、ｐ、ｑ、ａは状態値であり、ｗは関数値である。変数ｖは、更なる下流の処理、例えばテーブルで使用され得る、第１及び第２のテーブルネットワークの最終出力である。関数ｆはデータ関数であり、ｇ、ｇ１、及びｇ２は状態関数である。関数σは状態抽出器、ρは関数値抽出器、Ｅはエンコーダ関数であり、すなわち、σ(E(w,p))=p且つρ(E(w,p))=wであり、これらの関数は全てテーブルとして実装され得る。関数Ｐは状態変数に関する関数であり、好ましくは置換である。関数Ｆはｆに対応するが、符号化領域に転記されており、すなわちF(x,y) = E(f(ρ(x),ρ(y),g(σ(x),σ(y)))である。
【００９１】
文字ｚはアライン関数を示し、第１の入力が第２の及び更なる入力に対応する場合、場合によっては何らかの更なる処理を伴い、出力は第１の入力であり、そうでない場合、出力は変更され、例えばランダム化される。
【００９２】
これらの実施形態では、テーブルは２つの関数入力を取り扱う。しかし、入力の数は適宜に選択され得る。システムは単一の入力に適用されてもよいが、興味深いことには複数の入力関数に適用されてもよい。例として４ビットの状態及び関数、並びに８ビットのそれらの結合符号化を使用する。当然ながら異なるサイズが可能であり、例えば状態が２ビットで関数が６ビット等でもよい。 
【００９３】
以下の全ての例において、第１のテーブルネットワークは関数u = F(x,y)を実装する。これは、２つの符号化入力及び１つの符号化出力を有する単一のテーブルによって成され得る。 
【００９４】
第２のテーブルネットワークは次のうちのいずれか１つであり得る。 
【００９５】
１．第２のテーブルネットワークは入力としてｘ、ｙ、及びｕを取り、すなわち、第１のテーブルネットワークの入出力の全てを取る。第２のテーブルネットワークは３つのテーブルを含む。最初の２つは状態抽出器であり、３つ目はアラインテーブルである。ｘ、ｙ入力。p = σ (x);  q= σ (y); v= E(z(u,p,q),P(σ (u)))。ここで、g(p,q)=σ(u)の場合z(u,p,q)=ρ(u)であり、そうでない場合はランダムである。言い換えれば、第２のテーブルネットワークは、第１のテーブルネットワークが状態関数を正しく計算したか否かを検証する。検証が成功の場合、ｕ及びｖは等しい値を有するが、異なる状態を有する。検証がエラーを検出する場合、ｖの値はｕの値とは異なる。状態は置換Ｐの形式のひねりを受けることに留意されたい。この実施形態は入力サイズ８、８、及び１６ビットの３つのテーブルを使用する。
【００９６】
２．第２のテーブルネットワークは入力としてｘ、ｙ、及びｕを取る。第２のテーブルネットワークは１つのテーブルを含む。ｘ、ｙ入力。v= E(z(u,x,y),P(σ (u)))。ここで、F(x,y)=uの場合はz(u,x,y)=ρ(u)であり、そうでない場合はランダムである。ここでは、第１のテーブルネットワークの完全な計算が検証される。テーブルは８＋８＋８＝２４ビットの入力サイズを有する。
【００９７】
３．第２のテーブルネットワークは入力としてｘ、ｙ、及びｕを取る。第２のテーブルネットワークは２つのテーブルを含む。ｘ、ｙ入力。a = g(σ (x),σ (y)); v=E(z(u,a),P(σ (u))。ここで、σ(u)=aの場合はz(u,a)=ρ(u)であり、そうでない場合はランダムである。ここでは、第１のテーブルネットワークの状態部分のみが検証される。テーブルは１６及び１２ビットの入力サイズを有する。変形例として、アラインテーブルとしてv= E(z(u,a),P(a))を使用してもよい。この変更は特に、検証が失敗する場合に関する。
【００９８】
更なる変形例として、第２のテーブルネットワークは:=σ (x);  q= σ (y); a = g(p,q); v= E(z(u,a),P(σ (u))を使用する。ここでは、第２のテーブルは３つのテーブルを使用するが、８、８、及び１２ビットの入力しか有さない。 
【００９９】
４．デバイスは２種類の変数、すなわち、状態及び関数値の両方を有する符号化された変数（「長い」変数）、及び、対応する状態のみの変数（状態変数）に作用する。後者も符号化されてもよいが、サイズはより小さい。サイズの例によれば、「長い変数」は関数値と状態値とを含み８ビットであり、対応する状態変数は４ビットである。長い変数と状態変数は、それぞれの状態変数が検証可能な関係にある、例えば等しいという意味で対応する。 
【０１００】
第１のテーブルネットワークは上記のように長い変数ｘ及びｙに従う。第２のテーブルネットワークは入力として対応する状態変数及びｕを取る。長い変数に対応する状態変数を有することは、第２のテーブルが利用可能な異なるサブセットを第１のテーブルの複数の入力から作成することを可能にする。ｘ及びｙに対応する状態変数をτｘ及びτｙとする。符号化された長い変数は状態変数、すなわちτx=σ(x)、τy=σ(y)を含むため、状態変数は第１のテーブルネットワークの入力の一部であることに留意されたい。第２のテーブルネットワークは入力としてτｘ、τｙ及びｕを使用するのでこれらの入力を共有し、τu=g(τx τy); v=E(z(u, τu ),P(τu ))を計算するために２つのテーブルを含む。ここでは、σ(u)= τuの場合はz(u, τu )=ρ(u)であり、そうでない場合はランダムである。第２のネットワーク内のテーブルへの入力は８及び１２ビットだけである。τｘ及びτｙは、σ（ｘ）及びσ（ｙ）の実際の値とは独立して追跡される別個の変数であり得ることに留意されたい。プログラムは、これらの値が互いに検証され得るように、例えば等しいことが検証され得るように構成されている。
【０１０１】
５．第２のテーブルネットワークは入力としてτx及びτyを取り、第２のテーブルネットワークはτu=g2(g1 (τx,τy )).; v=E(z(u,τu ),P(τu))を計算する２つのテーブルを有する。ここでは、g2(σ(u))=τuの場合はz(u,τu)=ρ(u)であり、そうでなければランダムである。ここで、ｇ１は第１のテーブルネットワーク内で使用される状態関数ｇである。第２のテーブルネットワーク内の状態計算テーブルは、第１のテーブルネットワーク内では実行されない追加の関数を状態値に関して実行する。その後、アラインテーブルはこの事実を検証し、そのための補正を行う。このようにすることで、状態値及び関数値が合わなくなるため、攻撃者はアラインテーブルを省略することができない。次のアラインテーブルにおいてミスマッチが検出され、補正される。 
【０１０２】
これらの例は多くの点で異なることに留意されたい。まず、これらは異なる入出力サイズを有し、これは異なるテーブルサイズをもたらす。プログラムのサイズを制限内に保たなければならない場合、テーブルサイズは重要な基準である。また、実施例は、攻撃者が何の値を入手可能であるかにおいて異なる。関数値との符号化を有さずに状態値が入手可能な場合、攻撃者にとって好都合であると考えられる。サイズ及びセキュリティに対する正確な要求に応じて、これらの選択肢間で選択をすることができる。プログラムが単一の選択肢のみを使用する必要はないことに留意されたい。異なる第２のテーブルが異なるバリエーションを使用してもよい。
【０１０３】
図３、図８ａ、及び図８ｂは、単一の入力を取るデータ関数及び状態関数のための複数のこれらの可能性を示す。例えば、図３はコンピューティングデバイス３００を示す。デバイスは第１のテーブルネットワーク３１０及び第２のテーブルネットワーク３４０を記憶する。
【０１０４】
第１のテーブルネットワーク３１０は入力３０５として長い変数x=E(w,p)を取る。テーブル３１０は、関数部分に対して関数ｆ３１２を適用し、状態部分に対して関数ｇ３１４を適用するよう構成される。実際の実装では、これらの部分が直接見えないことに留意されたい。テーブル３１０は、事前に計算されたテーブル内の値をルックアップすることにより、符号化された値を直接処理する。テーブル３１０は出力３０７：u = E (f (w),g(p))を生成する。第２のテーブルネットワークはテーブル３２０及び３３０の２つのテーブルとしてである。第２のテーブルネットワークはｘを入力として取り、状態抽出器テーブル３２０を適用し、抽出された状態３２２：p=σ(x)を取得する。抽出された状態３２２及び出力３０７は、アラインテーブル３３０への入力である。アラインテーブルは関数ｚ３３２及び置換３３４から構成されている。ここで、σ(u)=pの場合はz(u,p) = ρ(u)であり、そうでなければランダムである。置換３３４は状態に対して置換を適用し、ここではテーブル３１０から得られる状態が選択されたが、テーブル３２０からの状態も可能である。アラインテーブル内に置換を有することは、変化が検出されたか否かに関わらず、テーブルの出力が常に変化することを保証する。これは、テーブル３３０内の変化を利用して、タンパリングによって導入された変化を決定する攻撃を防ぐ。テーブル３３０も、関数３３２及び３３４を別々に見ることができない単一のテーブルである。 
【０１０５】
図８ａは、関数値及び状態値を符号化する長い変数の集合と、対応する状態変数の集合とを記憶する作業メモリを含むコンピューティングデバイス８００を示す。長い変数のコレクションの１つごとに状態変数のコレクションのうちの特定の１つが対応する。長い変数及び状態変数は、検証可能な関係を有する。例えば、長い変数は、状態変数でも符号化される状態値を符号化する。例えば、長い変数は状態値を符号化し、一方、状態変数は状態値の関数を符号化する。
【０１０６】
デバイス８００上にはテーブルネットワークが記憶される。入力として長い変数を取る、上記のような第１のテーブルネットワーク３１０が使用される（示されるのは、単一の長い変数が受け取られる状況であるが、より多くが可能であり、上記式は２つの長い変数が受け取られる状況を示し、より多くも可能である）。
【０１０７】
テーブル３１０は複数の入力、すなわち関数値及び状態値を受け取る。これらの２つの入力は共に符号化されるが、テーブル３１０は入力に対して異なるように作用することに留意されたい。特に、テーブル３１０は関数及び状態入力に対して互いに独立して作用してもよい。
【０１０８】
第２のテーブルネットワークは状態関数テーブル８１０及びアラインテーブル３３０を含む。テーブル３３０には図３のものと同じテーブルが使用されてもよい。状態関数テーブル８１０は、テーブル３１０の複数の入力のサブセットを入力として取り、特に状態値が受け取られる。これは、テーブル３１０が適用される長い変数に対応する状態変数に対してテーブル８１０を適用することによって実行され、あるいは、８０５は、パス３０５の展開から独立して展開するパスの一部であってもよい。テーブル８１０はテーブル３１０と同じ状態関数を実装する。
【０１０９】
好適な実装形態では、状態関数テーブル８１０及びテーブル３１０の両方によって使用される状態関数は、関数とは独立に作用する。これは実装を大きく単純化する。とはいえ、状態関数テーブル内に関数値依存性を導入してもよい。この場合、状態関数テーブル８１０は計算においてテーブル３１０からの中間結果の一部を使用する。これが行われるとき、関数値をプレーン形式で露出しないよう注意しなければならず、一方、次の状態が現在の状態にのみ依存し関数値に依存しない場合、状態値が露出する重大度はより低い。
【０１１０】
テーブル８１０は出力８０７として、状態値への状態関数の適用結果：g(τx)を生成する。この値は（関数値と組み合わされていない）状態値であるが、典型的な実装形態では符号化されることに留意されたい。どのみち処理を妨害しないため、テーブルネットワークではデータを符号化することはまれではない。興味深いことに、複数の入力、例えば関数値及び状態値が共に符号化されてもよく、すなわち、単一の値に暗号化されてもよい。状態変数の符号化は、状態空間のランダムな置換によって実行されてもよい。 テーブル３４０の出力は後続の処理、例えば更なるテーブルネットワークにおいて使用され得る。
【０１１１】
図８ｂは、興味深い変形例を表す。長い入力３０５及び８１５を受け取るテーブル３１０と、テーブル３１０の出力３０７及び他の長い入力８３６を使用するテーブル８３０とを含む第１のテーブルネットワークが示されている。テーブル３１０及び８３０は、複数の符号化入力に関してより複雑な関数を計算することができる。状態関数テーブル８１０及び８２０は、テーブル３１０及び８３０に対応する。これらは入力として、テーブル３１０及び８３０が使用する長い変数に対応する状態変数、すなわち、長い変数３０５、８１５、３０７、８３６、及び８３７にそれぞれ対応する状態変数８０５、８０６、８０７、８１６、８１７を受け取る。
【０１１２】
興味深いことに、これはコンピュータプログラムのセグメントを２回、１回は長い変数に作用するテーブルネットワークを使用して、１回は対応する状態変数に関して実行する可能性を与える。セグメントの終わりにおいて、アラインテーブルは２つのプログラムが依然として同期しているか否かを検証する。
【０１１３】
これは図９に更に示されている。全ての図面と同様に、プログラム実行は図面の上から下に進む。９１０において、プログラムは単一のスレッドで走っている。追加の検証は行われない。どこかのポイントで、よりセキュリティセンシティブな部分に入る。このポイントにおいて、プログラムは２つの部分に分岐し、例えば左では状態変数が評価される一方、右では長い変数が評価される。これは９２０において起こる。どこかのポイントで、一層クリティカルな部分に入る。このポイントにおいて、例えば長い変数が２回完全に評価される。このセクションの終わりに、アラインテーブルが変更がなされなかったことを保証し、これは９３０において行われる。変化が検出されたとしても、プログラムは有用な相関が除去された値で実行し続ける。９４０において、再びアライン関数と共に、第１の分岐も終わる。９５０において、プログラムは２つのスレッド、例えば状態変数及び長い変数に関するスレッドとして実行を続ける。最後に、９６０に別のアライン関数が存在し、プログラムは再び単一のスレッドとして走る。
【０１１４】
図５は、ストレージデバイス５１０を有するコンピューティングデバイス５００を示す。図５に示されるデバイスは、図１、図２、図３、図４、図８ａ、図８ｂ、及び図９に示されるテーブルネットワークと共に使用されてもよく、特にコンピューティングデバイス１００、２０４、２０２、３００、及び８００として使用されてもよい。
【０１１５】
ストレージデバイス５１０は、典型的には１つ以上の不揮発性のメモリであるが、ハードディスク、光学ディスク等であってもよい。また、ストレージデバイス５１０は、ダウンロード又は他の態様で受け取られたデータを含む揮発性メモリであってもよい。コンピューティングデバイス５００はプロセッサ５５０を含む。プロセッサは典型的には、メモリ内に記憶されたコード５５５を実行する。利便性のため、コードはストレージデバイス５１０内に記憶されてもよい。コードは、プロセッサに計算を実行させる。デバイス５００は、入力値を受け取り且つ／又は結果を伝送するためのオプションのＩ／Ｏデバイス５６０を含んでもよい。Ｉ／Ｏデバイス５６０はネットワーク接続、リムーバブルストレージデバイス等でもよい。
【０１１６】
ストレージデバイス５１０は、図１乃至３のうちの１つに係る１つ以上のテーブルネットワークを含む。
【０１１７】
一実施形態では、コンピューティングデバイスは動作中に次のように機能してもよい。コンピューティングデバイス５００は入力値を受け取る。入力値は例えば、符号化テーブル５４１、例えばテーブル１１０を使用することによって符号化される。したがって、入力値は符号化された入力値として取得される。入力値は、例えばデバイス５６０を介して、符号化された入力値として直接取得されてもよいことに留意されたい。入力値を符号化された入力値に符号化することは、状態入力が選択されなければならないことを示唆する。これを行う方法は複数存在し、例えば、乱数生成器によって状態入力がランダムに選択されてもよい。状態入力はアルゴリズムに従って選択されてもよく、アルゴリズムは複雑で、難読化に寄与してもよい。状態入力値は一定でもよく、又は数列、例えば、１等の一定のインクリメントを有し何らかの始点から開始する整数列から順次取得されてもよく、始点はゼロ、乱数等であってもよい。状態入力を乱数として選択し、次の状態入力の選択の度に１増加することは特に好適な選択である。状態入力がオフデバイス（ｏｆｆ−ｄｅｖｉｃｅ）で選択される場合、攻撃者は状態入力値がどこで選択され、何であるかを辿る術がない。
【０１１８】
プロセッサ５５０はメモリ５１０内のプログラム５５５を実行する。プログラムはプロセッサに、符号化された入力値又は結果の出力値に対してルックアップテーブルを適用させる。ルックアップテーブルは任意の論理又は算術関数のために作成され、よって、ルックアップテーブルのシーケンスを使用することによって任意の計算を実行することができる。これはプログラムの難読化を助ける。この場合、ルックアップテーブルは難読化のために符号化され、中間値も同様である。この場合、単一の関数入力値が複数の符号化された入力値によって表され得るので、難読化は特に有利である。更に、一部の又は全てのテーブル及び／又はテーブルネットワークはマルチ関数特性を有し、マルチ関数特性を有するテーブルネットワークの一部又は全てが結果の検証のための第２のテーブルネットワークとペアにされる。
【０１１９】
どこかのポイントで、結果値が求められる。必要な場合、結果は例えば復号テーブル５４２、例えば図１に示されるテーブル１７０を使用して復号され得る。しかし、結果は符号化された形式でエクスポートされてもよい。入力値は入力デバイスから取得されてもよく、出力値は画面上に表示されるよう使用されてもよい。
【０１２０】
計算は符号化されたデータワードに関して行われる。計算はテーブルルックアップアクセスのシーケンスを適用することによって行われる。使用される入力値は、コンピューティングデバイスの外部から受け取られる入力値であってもよいが、前のルックアップテーブルアクセスによって取得されてもよい。このようにすることで、次に新たなルックアップテーブルアクセスのために使用され得る中間結果が取得される。どこかのポイントで、中間結果のうちの１つが関数の符号化された結果である。
【０１２１】
コンピューティングデバイス５００は、データ関数入力に状態入力値を割り当てるための乱数生成器を含んでもよい。
【０１２２】
図６は、コンパイル方式６００をフローチャートとして示す。ステップ６１０において、レシーバによって第１のコンピュータプログラムが受け取られる。ステップ６２０において、例えばトークンを特定するために、字句解析器によって字句解析が実行される。場合によっては、マクロ展開等の処理も実行される。ステップ６３０において、パーサーによってプログラムがパースされる。例えば、パーサーは第１のプログラムのプログラミング言語の形式文法に従い、構文木を生成する。パーサーはプログラム内の異なる言語構築を特定し、適切なコード生成ルーチンを呼び出す。特に、１つ以上のオペレータが特定される。その場合、ステップ６４０において、コードジェネレータによってコード生成が行われる。コード生成中、いくつかのコード及び必要な場合は付属テーブルが生成される。付属テーブルは２つの関数、必要とされるオペレータのための関数及び状態関数のために構成されたテーブル、すなわち第１のテーブル又は第１のテーブルネットワークを含む。第１のテーブルネットワークのうちの一部は、対応する第２のテーブルネットワークとペアにされる。どの第１のテーブルネットワークを第２のテーブルネットワークとペアにすべきかを決定する方法は様々に存在する。コンパイラは、全ての第１のテーブルネットワークを第２のテーブルネットワークとペア組みするよう構成されてもよい。コンパイラは、第２テーブルネットワークの生成の開始、及び、それらを第１のテーブルネットワークの出力に適用するための対応するコードをコンパイラに指示するスタート及びストップタグを受け取られるコンピュータプログラム内で検出するよう構成されてもよい。コンパイラは、第１のテーブルネットワークのランダムなサンプルのために第２のテーブルネットワークを生成してもよい。
【０１２３】
１つ以上のルックアップテーブルによって置き換えられるため、生成されるコードはオペレータを必要とせず、通常は含まない。状態関数はランダムに選択され得る。状態関数はプログラムの結果として選択されてもよく、例えば、状態関数は別の必要なオペレータでもよく、これはテーブルが再利用されることを可能にする。例えば、パーサーは加算演算を特定し、これを加算命令のためのルックアップテーブル、及びルックアップテーブルを正しい値に適用するための生成コードに翻訳する。コンパイラは状態関数としてランダム関数を選択し得る。また、コンパイラは例えば加算、減算、乗算等の関数のセットからランダムに関数を選択してもよい。
【０１２４】
ステップ６５５において、一部のテーブルが複数回生成される可能性は十分にあり、その場合、それらを複数回記憶する必要はないため、生成されたテーブルはテーブルベースに併合される。例えば、加算テーブルが必要とされ、一度だけ生成され得る。全コードが併合され全テーブルが併合されるとコンパイルは終了する。オプションで、最適化ステップが存在してもよい。
【０１２５】
典型的には、コンパイラは符号化された領域、すなわち、全ての値又は少なくとも何らかの基準に対応する全ての値が符号化され、すなわち、コードワードビットサイズ（ｎ）を有するプログラムのセクションを使用する。符号化された領域では、ルックアップテーブルの実行によって演算が実行され得る。符号化された領域に入るとき、全ての値が符号化され、符号化された領域を出るとき、値は復号される。基準は、値がセキュリティセンシティブ情報、例えば暗号鍵に関係し又は依存することであり得る。
【０１２６】
コンパイラを作成する興味深い方法は次の通りである。ステップ６３０において、中間コンパイルが実行される。これは、例えばレジスタトランスファ言語等の中間言語へのものでもよいが、マシン言語コードコンパイルでもよい。これは、図６のステップ６１０〜６３０に関してはテーブルネットワークを生成しない慣用的なコンパイラが使用され得ることを意味する。しかし、ステップ６４０において、中間コンパイルに基づきコード生成が行われる。例えば、マシン言語コードが使用された場合、各命令はその命令の対応するオペレータフリー実装、すなわち、その命令のテーブルベース実装によって置換される。これはコンパイラ作成の特定の単純な方法を表す。図６はマシン言語ではなく第２のプログラミング言語を生成するコンパイラを生成するよう使用されてもよい。
【０１２７】
一実施形態では、コンパイラは、第１のコンピュータプログラミング言語で書かれた第１のコンピュータプログラムを第２のコンピュータプログラムにコンパイルするためのコンパイラであり、コンパイラは、テーブル及びマシン言語コードを生成することによって第２のコンピュータプログラムを生成するためのコードジェネレータを含み、生成されたテーブル及び生成されたマシン言語コードは合わせて第２のコンピュータプログラムを形成し、生成されたマシン言語コードはテーブルを参照し、コンパイラは、第１のコンピュータプログラム内の算術又は論理式を特定するよう構成され、式は少なくとも１つの変数に依存し、コードジェネレータは、変数の複数の値に関する特定された式の事前に計算された結果及び少なくとも１つの他の式を表す１つ以上のテーブルを生成し、且つ、事前に計算された結果を表す生成された１つ以上のテーブルにアクセスすることにより第２のコンピュータプログラム内の特定された式を実装するためにマシン言語コードを生成するよう構成される。理想的には、特定された式を実装するために生成されたマシン言語コードは、算術又は論理マシン命令自体を含まず、少なくとも、デリケートな情報に関する算術又は論理マシン命令を含まない。テーブルをリバースエンジニアリングした攻撃者は、それが特定された式を表し得るが、他方の式も表し得ることを発見し得る。
【０１２８】
これはより少ない算術又は論理演算を含むため、第２のコンピュータプログラムのリバースエンジニアリングに対する耐性を高め、サイドチャネルリークを減少させる。理想的には、全ての算術式及び論理式並びに部分式がテーブルアクセスによって置き換えらえる。算術式若しくは論理式又は部分式を構成する命令が存在しないため、これらは情報を一切漏らし得ない。テーブルは事前に計算され、テーブルに封入される算術又は論理挙動の実行のために消費される電力は、プログラムの実行中に不可視である。
【０１２９】
以下、好適なテーブルネットワークの更なる詳細及び更なる実施形態を与える。
【０１３０】
上記と同様に、Ｗを符号化することを望むオペランド（演算の入出力値）の集合とし、「状態」の有限集合Σ、ＷとΣの基数の積に等しい基数を有する有限集合Ｖを定める。上記データパス拡張は、それを除去する簡単な方法が存在しない場合、より好適である。攻撃者が各Ω（ｗ）を発見又は分離可能な場合、データパス拡張はセキュリティに関して破綻していると考えられる。同値クラスΩの発見を狙いとする２つの関連する攻撃について述べる。
【０１３１】
第１の攻撃は、仮想マシン（VM：virtual machine）及びプログラムがユーザーに出力を提供し、出力は状態依存ではない（実際には、状態に依存しない暗号化されていてもよい１つの変数で足りる）拡張設定におけるものである。例えば、解読エンジンが画面上に画像を提供する。このような設定において、攻撃者は、自身が状態情報を期待するプログラムの変数ｖごとに以下を実行し得る。攻撃者はオリジナルのｖ値を書き出し、この変数を他の値ｔによって置換し始める。正しい画像を生成する全ての値ｔに関して、攻撃者はそのｔが、ｖが表現する集合Ωv (w)に属することを知る。正しく表示されない画像に関してさえも、攻撃者は結果のエラー画像を比較し、ｖに代入され、同じエラーを生じる値ｓ及びｔが等しい値を表すと結論付けることができる。第２の類似する攻撃は、おそらくは例えばテーブルＴに作表されるオペレータ等の関数要素の出力に対する攻撃である。プログラムがテーブル出力Ｔ［ｉ］を使用する場合、攻撃者はテーブルの位置ｉにおける値を変更し得る。アルゴリズムが成功する場合、攻撃者は、位置ｉにおける新しいエントリが（おそらくは）集合Ω(T[i])に含まれることを知る。
【０１３２】
プログラムには冗長性が加えられる。結果として、プログラムの実行中、誤りが検出され、適切な対策が取られ得る。一実施形態では、誤り検査に対する反応は次の通りである。変数の誤りが検出された場合、変数の値が変更され（おそらくは正しくないプログラム出力をもたらす）、そうでない場合、変数の状態は変化するが変数の値は同じままである。 
【０１３３】
３つのコンポーネントが使用され得る。
−プログラムに冗長性を加える、例えば、オペランド、すなわち関数値に加えて状態を加える。
−予期しない状況を検出するために、プログラムの実行中に（又は実行後に）冗長性を利用する。
−予期しない状況を検出するための冗長性の利用の結果として、アクションを起こす。
【０１３４】
例えば、プログラムの異なるバージョンが並列に実行され、例えばインターリーブされてもよい。異なるバージョンは、異なる符号化Ｅ及び／又はプログラム内の変数の状態のための異なる初期値を有し得る。より具体的には、プログラムＰを有し、ｍ個のバージョンを並列に実行すると仮定する。バージョンｉは変数の全て（又は一部）に関して符号化Ｅｉを使用し、初期状態ベクトルとしてσｉを有する。Ｐのｉ番目のバージョンをＥｉ（Ｐ，σｉ）と表す。好ましくは、符号化E1,E2,…,Emは異なる。
【０１３５】
全てのバージョンが並列に実行され、プログラム実行の任意のポイントで、プログラム内の１つ以上の対応する変数がマッチするか否かが検査され得る。１つ以上の変数のマッチングの検査を省いてもよく、全ての検査される変数が全てのプログラムにおいて検査されなくてもよいことに留意されたい。例えば、３つの変数ｘ、ｙ、ｚを有するプログラムＰの３つのバージョンを有する場合、変数ｘは３つのバージョン全てでマッチすることを検査し、変数ｙのマッチをバージョン１及び３間で検査し、変数ｚは全く検査しなくてもよい。ミスマッチの場合、様々な対策を取ることができ、例えばプログラムの実行停止、変更された値での実行継続等である。
【０１３６】
複数のプログラムの並列実行はかなり高コストであり得る。以下、より経済的で、テーブルが変更される攻撃を阻止することを狙う第２の実施形態を説明する。説明的な例として、２つの変数の関数ｆを実装するテーブル内のエントリの変更に対する防御を考える。
【０１３７】
次の表記を使用する。v∈Vごとに、E(w(v),σ(v))=vが成立するという条件により、関数w:V→W及びσ:V→  Σを定める。Σの秘密置換Ｐを仮定する。関数F:V×V→Vは上記したように関数f:W→Wを実装し、よってx,y∈W及びσ,τ∈Σごとに、F(E(x,σ),E(y,τ))=E(f(x,y),g(σ,τ))であり、ここでg:Σ×Σ→Σである。
【０１３８】
入力ｘ及びｙを用いて関数ｆを計算する度に、下記の疑似コードによって表現されるように手順を実行することができる。
p:=σ(x);q:=σ(y);u:=F(x,y);  v:=E(z(u,p,q),P(σ(u));
【０１３９】
関数z:V×Σ×Σ→Wは、σ(u)=g(p,q)であればz(u,p,q)=w(u)であり、そうでない場合は別の値、例えばランダム値であるような関数である。例えば、W=Σの場合、z=w(u)-σ(u)+g(p,q)を取ることができる。ｖの評価は、u∈V,p,q∈Σに対してT[u,p,q]=E(z(u,p,q),P(σ(u))であるように、V×Σ×Σからの要素によってラベル付けされたエントリを有するテーブルＴを使用して実行することができる。上記疑似コードでは、ｘ及びｙの状態値は平文で現れる。これは、手順u:=F(x,y);v:=E(Z(u,x,y),P(σ(u)))を用いることによって回避することができ、後者は単一のテーブルとして実装される。関数Z:V×V×V→Wは、σ(u)=g(σ(x),σ(y))である場合にのみZ(u,x,y) = w(u)であるような関数である。ｖの評価は、全てのu,x,y∈Vに対してT[u,x,y]=E(Z(u,x,y),P(σ(u))であるようなV×V×Vの要素によってラベル付けされたエントリを有するテーブルＴを使用して実行することができる。
【０１４０】
第３の変形例として、手順a:=g(σ(x),σ(y)); u:=F(x,y);v:=E(z(u,a),P(σ(u))を使用することができ、ここで、関数z:V×Σ→Wは、a=σ(u)である場合にのみz(u,a)=w(u)であるような関数である。ａの評価は、全てのx,y∈Vに対してT[x,y]=g(σ(x),σ(y))であるようなV×Vの要素によってラベル付けされ、又は、プログラム内にσ(x),σ(y)が現れる場合はΣ×Σのエントリによってラベル付けされたテーブルＴを使用して実行されてもよい。後者の場合、全てのp,q∈Σに対してT[p,q]=a[p,q]である。ｖの評価は、全てのu∈V,a∈Σに対してU[u,a]=E(z(u,a),P(σ(u))であるようなV×Σからの要素によってラベル付けされたエントリを有するテーブルＵを使用して実行することができる。
【０１４１】
第４の変形例として、第３の変形例と良く似た手順a:=g(σ(x),σ(y)); u:=F(x,y);v:=E(z(u,a),P(a))を使用することができ、ここで、関数z:V×Σ→Wは、a=σ(u)である場合にのみz(u,a)=w(u)であるような関数である。ａの評価は、全てのx,y∈Vに対してT[x,y]=g(σ(x),σ(y))であるようなV×Vの要素によってラベル付けされ、又は、プログラム内にσ(x),σ(y)が現れる場合はΣ×Σのエントリによってラベル付けされるエントリを有するテーブルＴを使用して実行することができる。後者の場合、全てのp,q∈Σに対してT[p,q]=a[p,q]である。ｖの評価は全てのu∈V,a∈Σに対してU[u,a]=E(z(u,a),P(a))であるようなV×Σからの要素によってラベル付けされるエントリを有するテーブルＵを使用して実行することができる。
【０１４２】
上記手順のうちの最初のものの原理（他の変形例に関して同様の原理が成り立つ）を以下に説明する。攻撃者がＦを実装するテーブルＴ内のエントリ［ｘ，ｙ］をａからａ’に変更したと仮定する。入力ｘ及びｙをもって上記手順を適用する。したがって、u=T[x,y]=a'及びv=E(z(a',σ(x),σ(y)),P(σ(a')))が得られる。ここで、２つの場合を考える。
【０１４３】
まず、w(a)=w(a')と仮定する。a≠a'なので、σ(a' )≠σ(a)が成立する。σ(a)=g(σ(x),σ(y))なので、ｚの特性に従ってw(u')≠w(u)=w(a)であり、よって、w(a)=w(a')と仮定したため、w(v)≠w(a')が得られ、すなわちw(v)≠w(a' )=w(a)=w(F(x,y))である。言葉で表現すれば、ｖの値はＦ（ｘ，ｙ）と等しくならない。つまり、プログラムは正しくない値を有する変数と共に続けられ、攻撃者はw(a)=w(a' )であると考える。w(a)≠w(a' )の場合、ｖの値はＦ（ｘ，ｙ）の値と等しい又は等しくない可能性がある。１つ目の場合では、攻撃者はw(a)=w(a')であると考え、これは明らかに防御者を助ける。２つ目の場合では、攻撃者はw(a)=w(a')であると考え、これは攻撃者にとってあまり有用な情報ではない。
【０１４４】
上記のバリエーションでは、ｕの状態がｘ及びｙに基づき期待される状態とマッチする場合にのみw(u)=w(v)であるような変数ｕのｖへの変換を見た。一般化では、状態値をマッチングする代わりに、状態値の関数がマッチングされる。例えば、状態及び期待される状態が所与の数の最上位ビット（ＭＳＢ）で若しくは所与の数の最下位ビット（ＬＳＢ）で一致する場合、又は、状態の記号及び期待される状態の記号のチェックサムが一致する場合にのみ、w(u)=w(v)である。
【０１４５】
第２の実施形態のバリエーションは、テーブルエントリが変更される攻撃を防ぐ。次に、変数が変更される攻撃に対する保護を提供する第３の実施形態を考える。これを達成するために、保護することを望む変数x∈Vごとに、（通常の条件ではσ（ｘ）と等しいはずである）対応する変数τx∈Σを追跡する。ｘが更新される度にτｘも更新される。したがって、ｘ及びτｘを更新するためのプログラムの部分は同期されなければならない。好ましくは、τｘの更新はｘを更新するために使用される変数を一切使用せず、これらの変数に対応する状態のような変数のみを使用する。例えば、変数x,y∈V及び対応する状態のような変数τx, τyを有し、ｘをＦ（ｘ，ｙ）に変更すると仮定する。この場合、τxもg(τx, τy)に更新し、ここでg: Σ×Σ→Σは、F(E(w1,σ1),E(w2,σ2))=E(f(w1,w2),g(σ1,σ2))であるようなものである。状態のような変数は、ＶではなくΣ内の値を有する変数である。
【０１４６】
状態混合関数ｇは、異なる関数Ｆごとに異なり得る。つまり、τｘを更新する方法は、ｘに適用される変換に依存し得る。より一般的には、τｘの更新方法は、更新前のｘ及び／又はｘを更新するために使用された関数（方法、手順？）に依存し得る。τｘ及びσ（ｘ）の値はｘ及びτｘの値が更新される度に検査されてもよいが、必須ではない。検査が行われる度に、手順x:=E(ζ(x,τx),P(τx ));   τx:=P(τx);（Ａ）が適用され得る。ここで、ＰはΣの置換であり、関数ζ:V×Σ→Wは、σ(x)=τの場合にのみζ(x,τ)=w(x)であるような関数である。
【０１４７】
言葉で表現すれば、状態と期待される状態がマッチする場合、ｘの値は同じままであるが、状態は変更され、状態と期待される状態がマッチしない場合、ｘの値が変更される。ｘの評価は、全てのx∈V,τ∈Σに対してT[x,τ]=E(ζ(x,τ),P(τ))であるようなV×Σからの要素によってラベル付けされたエントリを有するテーブルＴを使用して実行することができる。
【０１４８】
手順の後、τ=σ(x).が成立することに留意されたい。攻撃者が手順からｘの更新又はτの更新のいずれか（両方ではない）を無効化することに成功する場合、次の検査において、τとσ（ｘ）はおそらくは等しくなく、ｘの値は変更される（攻撃者が上記手順からｘの更新を無効化することにも成功しない限り）。
【０１４９】
同等に、（Ａ）における割り当ての順番をτx:=P(τx);x:=E(ζ(x,τx),τx )（Ａ’）に変更することができ、ここで、ζ:V×Σ→Wは、σ(x)=P-1 (τ)の場合にのみ、又は同等に、P(σ(x))=τの場合にのみζ(x,τ)=w(x)であるような関数である。上記と同様に、ｘの評価は、V×Σからの要素によってラベル付けされたエントリを有するテーブルを使用して実行され得る。
【０１５０】
代替的な手順は以下の通りである。
x:=E(ζ(x,τ),P(σ(x)));   τ:=P(σ(x));                   (B)
【０１５１】
ｘの評価は、全てのx∈V,τ∈ΣについてT[x,τ]=E(ζ(x,τ),P(σ(x)))であるようなV×Σからの要素によってラベル付けされたエントリを有するテーブルを使用して実行され得る。この代替例では、τの更新は、U[x]=P(σ(x))であるようなＶからの要素によってラベル付けされたエントリを有するテーブルＵを使用して実行されてもよく、又は、σ（ｘ）が明示的に現れることが差支えない場合、まずσのためのテーブルによってp:=σ(x)を求め、次にＷからの要素によってラベル付けされたエントリを有するテーブルＹを使用してτ:=Y[p]を求めてもよい。テーブルＹはテーブルＵよりも少ないエントリを有する。
【０１５２】
より一般的な設定では、検査後のｘの新しい状態はσ（ｘ）だけでなくｘに依存する。この場合、（Ｂ）の代わりに次が使用される。
x:=E(ζ(x,τ),Q(x));  τ:=Q(x)
ここで、Q:V→Σは、全てのv∈Vに対してQ(v)≠σ(v)であるようなものである。ｘの評価は、全てのx∈V,τ∈Σに対してT[x,τ]=E(ζ(x,τ),Q(x)))であるようなV×Σからの要素によってラベル付けされたエントリを有するテーブルを使用して実行することができる。 
【０１５３】
図７は、方法７００をフローチャートで示す。ステップ７１０において、電子ストレージ上に記憶された第１のテーブルネットワークのための複数の第１のテーブル入力が取得される。例えば、これらは前のテーブルから受け取られ得る。ステップ７２０において、複数の第１のテーブル入力に対して第１のテーブルネットワークが適用され、データ関数が計算される。例えば、コンピュータプログラムコードが、複数の入力によって指示されるように、第１のテーブルネットワークのテーブル内の特定のテーブルエントリをルックアップするようプロセッサに命令し得る。複数の入力が使用されるが、これは、これらの一部又は全てを合わせて符号化することによって隠され得る。ステップ７３０において、電子ストレージ上に記憶された第２のテーブルネットワークのための複数の第２のテーブル入力が取得され、第２のテーブル入力は第１のテーブルネットワークの出力と、複数の第１のテーブル入力のうちの少なくとも１つとを含む。次に、ステップ７４０において、この第２のテーブルネットワークは複数の第２のテーブル入力に適用され、保護された関数出力を含む第２のテーブル出力を生成する。
【０１５４】
また、第２のテーブルネットワークは単一のテーブルルックアップが行われる単一のテーブルでもよいが、このテーブルはステップ７４４、７４８、及び７４９を含む複数のことが一緒に起こるよう構築されており、これは破線の矢印によって示されている。ステップ７４０において、保護された関数出力を含む第２のテーブル出力が生成される。ステップ７４４において、複数の第１のテーブル出力のうちの少なくとも特定の１つに関して、未変更の第１のテーブルネットワークが複数の第１のテーブル入力のうちの与えられた少なくとも１つから複数の第１のテーブル出力のうちの当該特定の１つを取得し得たか否かが検証される。この検証に応じて、ステップ７４８又は７４９のいずれかが取られる。ステップ７４８では（すなわち、検証が失敗の場合、すなわち、値を取得し得なかった場合）、保護された関数出力は関数出力と異なる。ステップ７４９では（すなわち、検証が成功の場合、すなわち、値を取得し得た場合）、保護された関数出力は関数出力と等しい。
【０１５５】
保護された出力は次の計算に使用されてもよい。保護された出力は状態値、すなわち、第１のテーブル出力から得られる状態値と合わせて符号化されてもよいことに留意されたい。状態値は好ましくは置換される。関数値と状態値とが合わせて符号化されるため、これは、符号化された値全体が変化したように見えるという効果を有する。好適な実施形態では、攻撃者が７４８又は７４９が適用されたかを見ることができないよう、保護された出力は状態値と組み合わせられ、状態値は常に置換される。
【０１５６】
当業者にとって明らかなように、方法を実行する多様な態様が可能である。例えば、ステップの順序が変更されてもよく、又は、いくつかのステップが並列に実行されてもよい。更に、ステップ間に他のステップが挿入されてもよい。挿入されるステップは本明細書に記載されるような方法の細分化を表してもよいし、又は方法と無関係でもよい。例えば、ステップ７４４、７４８、及び／又は７４９は好ましくは単一のテーブルルックアップによって、又は異なる利点とのトレードオフで、単一のテーブルネットワーク内のテーブルルックアップのシーケンスによって実行される。更に、次のステップの開始前に所与のステップが完全に終了していなくてもよい。 
【０１５７】
本発明に係る方法は、方法７００をプロセッサシステムに実行させるための命令を含むソフトウェアを使用して実行され得る。ソフトウェアは、システムの特定のサブエンティティが実行するステップのみを含んでもよい。ソフトウェアはハードディスク、フロッピー（登録商標）、メモリ等の適切な記憶媒体内に記憶され得る。ソフトウェアは有線若しくは無線で、又はインターネット等のデータネットワークを使用して信号として送られてもよい。ソフトウェアはダウンロード可能且つ／又はサーバ上で遠隔使用可能であってもよい。 
【０１５８】
本発明は、本発明を実行するよう適合されたコンピュータプログラム、特にキャリア上の又はキャリア内のコンピュータプログラムまで及ぶことを理解されたい。プログラムは、ソースコード、オブジェクトコード、部分的にコンパイルされた形式等のソースコード及びオブジェクトコードの中間コードの形式、又は本発明に係る方法の実装における使用に適した任意の他の形式を取り得る。コンピュータプログラム製品に係る一実施形態は、上記方法のうちの少なくとも１つの方法の処理ステップのそれぞれに対応するコンピュータ実行可能な命令を含む。これらの命令はサブルーチンに細分化されてもよく、且つ／又は静的に若しくは動的にリンクされ得る１つ以上のファイル内に保存されてもよい。コンピュータプログラム製品に係る他の実施形態は、上記システム及び／又は製品のうちの少なくとも１つの手段のそれぞれに対応するコンピュータ実行可能な命令を含む。
【０１５９】
上記実施形態は本発明を限定ではなく説明するものであり、当業者は多数の他の実施形態を設計できることに留意されたい。
【０１６０】
請求項において、括弧内の如何なる参照符号も請求項を限定すると解されるべきではない。動詞「備える（又は含む若しくは有する等）」及びその活用形は請求項内に記載されている以外の要素又はステップの存在を除外しない。要素は複数を除外しない。本発明は、複数の異なる要素を備えるハードウェアによって、及び、適切にプログラミングされたコンピュータによって実施され得る。複数の手段を列挙する装置クレームにおいて、手段のいくつかは同一のアイテム又はハードウェアによって具現化されてもよい。単にいくつかの手段が互いに異なる独立請求項に記載されているからといって、これらの手段の組み合わせを好適に使用することができないとは限らない。
【符号の説明】
【０１６１】
図１、２、３、４、５、８ａ、及び８ｂの参照番号のリスト
１００  テーブルネットワーク
１０２、１０４  関数入力値
１１０  エンコーダ
１１２、１１４  状態入力値  
１２２、１２４  符号化された入力値  
１３０  データ関数及び状態関数のためのテーブル
１６０  符号化された出力値
１６２  関数出力値  
１６４  状態出力値  
１７０  デコーダ  
１８０  テーブルネットワーク
２０２、２０４  コンピューティングデバイス  
２１０、２２０  第１のテーブル入力Ａ  
２１２、２２２  第１のテーブルネットワークＡ  
２１４、２２４  第１のテーブルネットワークＢ  
２１６、２２６  第１のテーブル出力Ａ  
２３２  第２のテーブルネットワークＡ  
２３４  第２のテーブルネットワークＢ  
２３６  第２のテーブル出力Ａ  
３００  コンピューティングデバイス  
３０５  入力ｘ＝Ｅ（ｗ，ｐ）
３０７  出力ｕ  
３１０  第１のテーブルネットワーク
３１２  データ関数ｆ
３１４  状態関数ｇ
３２０  状態抽出器テーブル  
３２２  テーブル３２０の出力σ（ｘ）＝ｐ  
３３０  アラインテーブル  
３３２  ｚ関数  
３３４  置換  
３４０  第２のテーブルネットワーク
４１０  入力テーブル
４２０  中間テーブル  
４３０  出力テーブル
５００  コンピューティングデバイス
５１０  ストレージデバイス
５２１、５２２  単一入力ルックアップテーブル  
５３１、５３２  複数入力ルックアップテーブル  
５３１１−５３２３  単一入力ルックアップテーブル  
５４１  符号化ルックアップテーブル  
５４２  復号ルックアップテーブル  
５５０  コンピュータプロセッサ
５５５  マシン言語コード
５６０  Ｉ／Ｏデバイス
８００  計算デバイス
８０５、８０６、８１６  状態入力
８０７、８１７  状態出力
８１０、８２０  状態関数テーブル  
８３０  データ関数テーブル
８３６  関数入力
８３７  関数出力
【要約】
関数入力値ｗに関するデータ関数ｆを計算するよう構成されたコンピューティングデバイスであって、デバイスはデータ関数ｆのために構成された第１のテーブルネットワークを記憶する電子ストレージを含み、−コンピューティングデバイスはストレージに結合された電子プロセッサを含み、電子プロセッサは、関数入力値ｗを含む、第１のテーブルネットワークのための複数の第１のテーブル入力ｘ＝Ｅ（ｗ，ｓ）を取得し、複数の第１のテーブル入力ｘに第１のテーブルネットワークを適用することによってデータ関数を計算して、複数の第１のテーブル出力ｕ＝Ｅ（ｆ（ｗ），ｇ（ｗ，ｓ））を生成するよう構成され、複数の第１のテーブル出力ｕは関数出力値ｆ（ｗ）を含み、関数出力値ｆ（ｗ）は関数入力値ｗに対するデータ関数ｆの適用の結果に対応し、−電子ストレージは、更に、第１のテーブルネットワークに対してなされる変更に第１のテーブルネットワークと協力して対抗するよう構成された第２のテーブルネットワークを記憶し、電子プロセッサは、複数の第１のテーブル出力ｕ及び少なくとも１つの第１のテーブル入力ｗ；ｓを含む、第２のテーブルネットワークのための複数の第２のテーブル入力を取得して、複数の第２のテーブル入力に第２のテーブルネットワークを適用するよう構成され、第２のテーブルネットワークは、複数の第１のテーブル出力のうちの少なくとも特定の１つｆ（ｗ）；ｇ（ｗ，ｓ）に関して、未変更の第１のテーブルネットワークが複数の第１のテーブル入力ｗ；ｓのうちの与えられた少なくとも１つから複数の第１のテーブル出力のうちの当該特定の１つｆ（ｗ）；ｇ（ｗ，ｓ）を取得することができたか否かを検証するよう構成され、−第２のテーブルネットワークは、保護された関数出力を含む第２のテーブル出力ｖ＝Ｅ（ｗ’，ｓ’）を生成し、検証が成功の場合、保護された関数出力ｗ’は関数出力ｆ（ｗ）と等しく、検証が失敗の場合、保護された関数出力ｗ’は関数出力と等しくない、コンピューティングデバイス。【図１】
0005861018.tif 000012
【図２】
0005861018.tif 000013
【図３】
0005861018.tif 000014
【図４】
0005861018.tif 000015
【図５】
0005861018.tif 000016
【図６】
0005861018.tif 000017
【図７】
0005861018.tif 000018
【図８ａ】
0005861018.tif 000019
【図８ｂ】
0005861018.tif 000020
【図９】
0005861018.tif 000021