JP5861018B1 - テーブルネットワークによって構成されたコンピューティングデバイス - Google Patents

テーブルネットワークによって構成されたコンピューティングデバイス Download PDF

Info

Publication number
JP5861018B1
JP5861018B1 JP2015548541A JP2015548541A JP5861018B1 JP 5861018 B1 JP5861018 B1 JP 5861018B1 JP 2015548541 A JP2015548541 A JP 2015548541A JP 2015548541 A JP2015548541 A JP 2015548541A JP 5861018 B1 JP5861018 B1 JP 5861018B1
Authority
JP
Japan
Prior art keywords
function
state
output
network
value
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.)
Expired - Fee Related
Application number
JP2015548541A
Other languages
English (en)
Other versions
JP2016507940A (ja
Inventor
ルドヴィクス マリヌス ジェラルダス マリア トルフィツェン
ルドヴィクス マリヌス ジェラルダス マリア トルフィツェン
パウルス マシアス ヒューバータス メチティルディス アントニウス ゴリッセン
パウルス マシアス ヒューバータス メチティルディス アントニウス ゴリッセン
アルフォンス アントニウス マリア ランベルトス ブレイカーズ
アルフォンス アントニウス マリア ランベルトス ブレイカーズ
ミナ デン
ミナ デン
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
Application granted granted Critical
Publication of JP5861018B1 publication Critical patent/JP5861018B1/ja
Publication of JP2016507940A publication Critical patent/JP2016507940A/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/1824Distributed file systems implemented using Network-attached Storage [NAS] architecture
    • G06F16/1827Management specifically adapted to NAS
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • H04L9/003Countermeasures against attacks on cryptographic mechanisms for power analysis, e.g. differential power analysis [DPA] or simple power analysis [SPA]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • H04L9/004Countermeasures against attacks on cryptographic mechanisms for fault attacks
    • 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/04Masking or blinding
    • H04L2209/043Masking or blinding of tables, e.g. lookup, substitution or mapping
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Storage Device Security (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

関数入力値wに関するデータ関数fを計算するよう構成されたコンピューティングデバイスであって、デバイスはデータ関数fのために構成された第1のテーブルネットワークを記憶する電子ストレージを含み、−コンピューティングデバイスはストレージに結合された電子プロセッサを含み、電子プロセッサは、関数入力値wを含む、第1のテーブルネットワークのための複数の第1のテーブル入力x=E(w,s)を取得し、複数の第1のテーブル入力xに第1のテーブルネットワークを適用することによってデータ関数を計算して、複数の第1のテーブル出力u=E(f(w),g(w,s))を生成するよう構成され、複数の第1のテーブル出力uは関数出力値f(w)を含み、関数出力値f(w)は関数入力値wに対するデータ関数fの適用の結果に対応し、−電子ストレージは、更に、第1のテーブルネットワークに対してなされる変更に第1のテーブルネットワークと協力して対抗するよう構成された第2のテーブルネットワークを記憶し、電子プロセッサは、複数の第1のテーブル出力u及び少なくとも1つの第1のテーブル入力w;sを含む、第2のテーブルネットワークのための複数の第2のテーブル入力を取得して、複数の第2のテーブル入力に第2のテーブルネットワークを適用するよう構成され、第2のテーブルネットワークは、複数の第1のテーブル出力のうちの少なくとも特定の1つf(w);g(w,s)に関して、未変更の第1のテーブルネットワークが複数の第1のテーブル入力w;sのうちの与えられた少なくとも1つから複数の第1のテーブル出力のうちの当該特定の1つf(w);g(w,s)を取得することができたか否かを検証するよう構成され、−第2のテーブルネットワークは、保護された関数出力を含む第2のテーブル出力v=E(w’,s’)を生成し、検証が成功の場合、保護された関数出力w’は関数出力f(w)と等しく、検証が失敗の場合、保護された関数出力w’は関数出力と等しくない、コンピューティングデバイス。

Description

本発明は、関数入力値に関するデータ関数を計算するよう構成されたコンピューティングデバイスに関し、デバイスは、データ関数のために構成された第1のテーブルネットワークを記憶するための電子ストレージを含み、コンピューティングデバイスは、ストレージに結合され、第1のテーブルネットワークのための、関数入力値を含む複数の第1のテーブル入力を取得し、複数の第1のテーブル入力に第1のテーブルネットワークを適用することによりデータ関数を計算して複数の第1のテーブル出力を生成するよう構成された電子プロセッサを含み、複数の第1のテーブル出力は関数出力値を含み、関数出力値は、関数入力値へのデータ関数の適用結果に対応する。
従来の暗号法では、通常、攻撃者はセキュアシステムの入出力値のみを入手可能であると仮定されてきた。例えば、攻撃者はシステムに入る平文を観察し、システムから出る暗号文を観察することができる。攻撃者は、時には計算的に激しい方法を使用してさえ、このような入出力ペアを解析することにより優位に立とうとする可能性があるが、入出力挙動を実行したシステムへの直接のアクセスは有さないと考えられていた。
近年、攻撃者が実装の知識をいくらか有すると仮定する脅威モデルを考慮することが必要になってきた。例えば、サイドチャネル解析及びリバースエンジニアリングの脅威が考慮され得る。更に、以前はほとんどがセキュリティ問題に関連していた懸念事項が他の分野、例えばプライバシー等に拡張している。暗号鍵等のセキュリティ情報を処理する暗号システムは依然として最大の関心事であるが、他のプログラム、例えばプライバシー関連情報を処理するプログラムの保護も重要になってきた。
コンピュータシステムがいわゆるサイドチャネルを通じていくらかの情報を漏らすことが昔から知られている。コンピュータシステムの入出力挙動の観察は、コンピュータシステムによって使用される秘密鍵等の機密情報に関する有用な情報は一切もたらさない可能性がある。しかし、コンピュータチャネルは他の観察され得るチャネル、例えば電力消費又は電磁放射等を有し、これらのチャネルはサイドチャネルと呼ばれる。例えば、異なる命令によって消費される電力の小さな変化、及び命令の実行中の消費電力の変化が測定され得る。測定された変化は、暗号鍵等の機密情報に関連付けることができる。観察可能な意図された入出力挙動以外の秘密情報に関するかかる追加情報は、サイドチャネルと呼ばれる。コンピュータシステムはその使用中、サイドチャネルを通じて秘密情報を「漏らす」可能性がある。サイドチャネルの観察及び解析は、入出力挙動だけの暗号解析から得られる情報よりも優れた情報へのアクセスを攻撃者に与えるおそれがある。既知のサイドチャネル攻撃の1つの種類は、いわゆる差分電力解析(DPA:differential power analysis)である。
サイドチャネル問題に対する現在のアプローチは、計算にランダム性を導入する。例えば、電力消費とプログラムが取り扱っているデータとの間の関係をぼやかすために、プログラムを実行する本物の演算の間にダミー命令が挿入され得る。
コンピュータに対する一層強力な攻撃は、いわゆるリバースエンジニアリングである。多くのセキュリティシナリオで、攻撃者はコンピュータへの完全なアクセスを有し得る。これは、プログラムを分解し、コンピュータ及びプログラムに関するあらゆる情報を得る機会を攻撃者に与える。努力が十分であれば、例えばプログラム内に隠されているあらゆる鍵が攻撃者によって発見されるおそれがある。
この攻撃シナリオに対する防御は非常に困難なことが証明されている。対策の1つの種類は、いわゆるホワイトボックス暗号方式である。ホワイトボックス暗号方式では、鍵とアルゴリズムとが組み合わせられる。得られるアルゴリズムは、1つの特定の鍵に対してしか機能しない。次に、アルゴリズムはいわゆるルックアップテーブルネットワークとして実装され得る。計算は、一連の鍵依存テーブルルックアップに変換される。このアプローチの例としては、例えばS. Chow, P. Eisen, H. Johnson, P.C. van Oorschotによる“White-Box Cryptography and an AES Implementation”を参照されたい。
コンピュータシステムへのサイドチャネル攻撃に対する既知の対策は、完全に十分ではない。例えば、ランダム性の導入は統計的分析によって対抗され得る。ソフトウェアの難読化は、プログラム演算のより高度な分析によって対抗され得る。したがって、更なるより優れた対策へのニーズが存在する。
例えば、コンピュータプログラムを難読化する方法の1つは、入力値を符号化し、可能な限り符号化された値の上で演算を行うことである。場合によっては、いわゆるテーブルネットワークさえ使用して計算が実行され得る。このようなテーブルネットワークは、例えばホワイトボックス暗号方式の場合、ハンドクラフトされ若しくは専用プログラムによって作成され、又は汎用コンパイラによって作成されてもよい。一般的に言えば、テーブルは実行される演算の種類を難読化すると信じられていた。しかし、発明者は、後半部は概して正しくないことを認識した。
関数の入出力が符号化されたとしても、入出力関係の統計的特性が、符号化されている関数を明らかにする可能性がある。この現象の例を以下に示す。
W={0,1,...,N−1}、符号化E、及び対応する復号D=E−1を考える。F及びGが、それぞれ符号化されたモジュロN加算及び符号化されたモジュロN乗算を示すと仮定する。つまり、F:W×W→Wを
と定義し、ここで
はモジュロN加算を示し、G:W×W→WをG(x,y)=E(D(x) *N D(y))と定義し、ここで*NはモジュロN乗算を示す。
各固定のxに対して、{F(x,y) | y∈W}=Wが成り立つ。また、ゼロではない各x∈W、及びN素数に対して、{G(x,y) |y∈W}=W且つ{G(0,y) |y∈W}=E(0)が成り立つ。N非素数に対して、同様のパターンが生じる。
結果として、符号化Eとは独立に、Fが符号化されたモジュロN乗算ではあり得ず、Gが符号化されたモジュロN加算ではあり得ないことを求めることができる。攻撃者はそのための方法を少なくとも2つ有する。攻撃者はW内の2つの異なる要素x及びxを固定し、H∈{F,G}に関して、全てのyについてH(x1,y)とH(x2,y)とを比較することができる。これらの量が全てのyについて異なる場合、HがモジュロN乗算を表すことはあり得ず、これらの量が一部のyについて一致する場合、HがモジュロN加算を表すことはあり得ない。読み取るテーブルエントリを選択できないが、実行中のソフトウェアプログラムのテーブルアクセスの結果を観察できる攻撃者は、Fの出力としてはWの各要素が等しい頻度で現れるが、Gに関しては、出力として要素E(0)がはるかに頻繁に現れるという事実を利用することができる。したがって、Hの出力としてWのある要素がWの他の要素よりもはるかに頻繁に現れる場合、Hは難読化されたモジュロN加算ではなく難読化されたモジュロN乗算である可能性の方が高い。
言い換えれば、利用可能な最高のソフトウェア難読化方法のうちの1つが使用されたとしても、すなわち、入出力値の完全な符号化及び計算のためにテーブルネットワークが使用されたとしても、プログラムの調査により、依然としていくらかの情報を得ることができる。この状況は非常に望ましくない。
この問題は、複数の入力値に対して同時に演算をするテーブルネットワークの導入によって対処されることがわかっている。テーブルネットワークは異なる入力又は入力グループに対して異なる関数を適用し得る。複数の入力のうちの2つ以上を合わせて単一の値に暗号化する符号化を使用する場合、実際には2つの関数が実行されるため、テーブルネットワークが何の関数用なのかを攻撃者が求めることは不可能になる。2012年12月21日に出願されたタイトル“Computing device comprising a table network”のUS仮出願US61/740,691、及び/又は、出願日が2012年12月27日の同タイトル“Computing device comprising a table network”のEP出願EP12199387を参照されたい。
このシステムはセキュリティを大きく向上させるが、特に攻撃モデルが更に広げられる場合、攻撃ベクトルは依然として存在する。攻撃者が完全なアクセスを有し、システム内で起こる全てを観察できると仮定するだけでなく、プログラムを変更可能な攻撃者に対しても備えをする。2つのこのような変更、すなわちテーブルエントリの変更及び変数の変更を考える。1つ目の種類の変更は、プログラムの実行を始める前に変更を行うことができるため、攻撃者にとってより軽く、後者の種類の変更はプログラムの実行中に行われるため、より難しいと考えられる。例えば、攻撃者は(おそらくは自動的な態様で)次のような攻撃を試み得る。攻撃者はテーブル内のエントリを変更し、変更されたプログラムを様々な入力に対して実行する。どのランもオリジナルのプログラム及び変更されたプログラムの出力に違いを一切示さない場合、攻撃者は、関連データに関する限り、変更されたテーブルエントリと未変更のテーブルエントリとは等しく、難読化計算、すなわちいわゆる状態変数及び状態関数においてのみ異なると結論付ける。時間が十分であれば、正しい計算に関する限り等しい値のクラスのマップが構築され得る。したがって、事実上、状態変数が排除される。明確には、符号化のため、攻撃者はデータ値が同じである一方で状態値が異なるかを直接観察することはできないが、テーブル変更の効果を分析することによりこれを推測できる可能性がある。
プログラム変更に対して向上された耐性を備えた、関数入力値に関するデータ関数を計算するよう構成されたコンピューティングデバイスを有することは有益であろう。
少なくともこの懸念事項に取り組む、関数入力値に関するデータ関数を計算するよう構成されたコンピューティングデバイスが提供される。
コンピューティングデバイスは、電子ストレージと、ストレージに結合された電子プロセッサとを含む。電子ストレージはデータ関数fのために構成された第1のテーブルネットワークと、第1のテーブルネットワークになされた変更に対抗するために第1のテーブルネットワークと協力するよう構成された第2のテーブルネットワークとを記憶するよう構成される。
プロセッサは、例えば適切なプロセッサコードにより、関数入力値を含む、第1のテーブルネットワークのための複数の第1のテーブル入力を取得し、複数の第1のテーブル入力に第1のテーブルネットワークを適用することによってデータ関数を計算し、複数の第1のテーブル出力を生成するよう構成され、複数の第1のテーブル出力は関数出力値を含み、関数出力値は関数入力値に対するデータ関数の適用の結果に対応する。
また、プロセッサは、複数の第1のテーブル出力を含み、少なくとも1つの入力を複数の第1のテーブル入力と共有する、第2のテーブルネットワークのための複数の第2のテーブル入力を取得して、複数の第2のテーブル入力に第2のテーブルネットワークを適用するよう構成され、第2のテーブルネットワークは、複数の第1のテーブル出力のうちの少なくとも特定の1つに関して、未変更の第1のテーブルネットワークが複数の第1のテーブル入力のうちの与えられた少なくとも1つから複数の第1のテーブル出力のうちの当該特定の1つを取得することができか否かを検証するよう構成される。
第2のテーブルネットワークは、保護された関数出力を含む第2のテーブル出力を生成し、検証が成功の場合、保護された関数出力は関数出力と等しく、検証が失敗の場合、保護された関数出力は関数出力と等しくない。例えば、第2のテーブルネットワークは、検証が失敗の場合、保護された関数出力が常に等しくないよう構成され得る。しかし、好適な実装形態では出力はランダム化され、例えば、検証失敗時の出力は、テーブルを構築するときにランダムに選択される。後者の場合、等しい出力を偶然有する場合がある。参考として状態変数及びランダムな出力を取ると、検証失敗の場合、事象、すなわち全テーブルエントリ、すなわち全ての可能な第1のテーブル入力のうちの少なくとも90%で出力が等しくないことが要求され得る。
したがって、このコンピューティングデバイスは深く難読化され、先に概述した変更攻撃を防ぐ。実際には、第1のテーブルネットワークは複数の入力に関して演算をし、複数の出力を生成する。複数の入力は、データ関数への入力のうちの少なくとも1つを含み、複数の出力は、少なくとも関数出力を含む。上記特許出願では、このようなテーブルネットワークが様々な方法で構築できることが記されている。かかる構築の一部として、データ関数が全ての可能な入力値について評価されてもよい。
第2のテーブルネットワークは第1のテーブルネットワークの計算の一部を検証する。このために、第2のテーブルネットワークは第1のテーブルネットワークの出力を受け取り、第1のテーブルネットワークへの複数の入力のうちの少なくとも一部を共有する。第2のテーブルネットワークは必ずしも複数の入力値の全てを有さないため、第2のテーブルネットワークは完全な計算を行うことができない可能性がある。とはいえ、第2のテーブルネットワークは、複数の第1のテーブル出力のうちの少なくとも1つに関して、未変更の第1のテーブルネットワークが異なる値を与えたであろうか否かを検証できるよう選択される。言い換えれば、第2のテーブルネットワークは、未変更の第1のテーブルネットワークが複数の第1のテーブル出力のうちの特定の1つを取得する、複数の第1のテーブル入力のうちの入力された少なくとも1つを含む複数の第1のテーブル入力の有無を検証する。これを達成する実践的な方法の1つは、第1のテーブルネットワークが実行した計算の一部又は全てと同じ計算を行うことであるが、これは厳密に必須ではなく、例えば関数入力の一部を与えられた場合、一部の関数出力が不可能になったと結論付けることが可能であり得る。後者の例においても、この適合性はコンパイル中の列挙によって確立され、実行中にルックアップされる。
第2のテーブルネットワークが複数の第1のテーブル入力と入力を共有し得る方法が少なくとも2つ存在する。1つ目の選択肢は、第1のテーブルネットワークの入力のうちの1つが第2のテーブルネットワークにコピーされることである。このアプローチの結果は、入力が他の入力と合わせて符号化される場合、それらも第2のテーブルネットワークへの入力となることである。これは、望まれるよりも大きなテーブルをもたらし得る。合わせて符号化された入力から1つ以上の入力、例えば状態を取得するために状態抽出テーブル等の抽出テーブルを使用することにより、これはある程度、救済することができる。第2の選択肢はシャドー変数を使用することであり、すなわち、第1のネットワークの複数の入力のうちの1つ以上が少なくとも二度、場合によっては異なる符号化で維持される。例えば、第1のテーブルネットワークが関数及び状態入力を有し得る一方、第2のテーブルネットワークは状態入力のみを共有する。この場合、第2のテーブルネットワークの入力は第1のテーブルネットワークの入力から直接コピーされる必要はなく、2つのネットワークは1つ以上の共通の入力を有するが、共通の入力は同じソースから直接来なくてもよい。これは、第2のテーブルネットワーク内のより小さなテーブルをもたらし得る。一方、これは、プログラムの少なくとも一部で、変数の一部が二度維持される、すなわち、いわゆるシャドー変数として維持されることを要求する。
第2のテーブルネットワークが第1のテーブルネットワークへの変更を検出する場合、第2のテーブルネットワークは関数出力を変更し、すなわち、関数出力とは異なる保護された関数出力を出力する。これは、確率が示すよりもはるかに高い頻度で、攻撃者が自身の変更に起因する変化を見るという効果を有する。例えば、攻撃者が無関係なデータ(例えば状態)を変更したとしても、これは第2のテーブルネットワークによって検出され、変化をデータ変数に広げ得る。上記で概述した攻撃は、完全に不可能で無かったとしても、はるかに難しくなる。
一実施形態では、複数の第1のテーブル入力は状態入力値を更に含み、複数の第1のテーブル出力は状態出力値を更に含み、状態出力値は状態入力値に対する状態関数の適用の結果に等しく、第2のテーブルネットワークは、入力として状態入力値を取るよう構成され、第2のテーブルネットワークは、状態入力値への状態関数の適用の結果が、第2のテーブルネットワークに入力される複数の第1のテーブル出力に含まれる状態値に等しい場合、保護された関数出力が関数出力に等しいよう構成される。
2つの関数、すなわちデータ関数及び状態関数を同じテーブルネットワーク内で互いに独立して計算することにより、それらの一方を検証することが可能になる。したがって、第2のテーブルネットワーク内で実行されなければならない作業量が減少する。結果として、より少ない入力を有する第2のテーブルネットワークを設計することができ、これは著しく小さいテーブルをもたらす。
一実施形態では、第1のテーブルネットワークは、入力として符号化された入力値を取り、符号化された入力値は、関数入力値を状態入力値と組み合わせ、合わせて単一の値に符号化し、第1のテーブルネットワークは、出力として第1の符号化された出力値を生成し、第1の符号化された出力値は、関数出力値を状態出力値と組み合わせ、合わせて単一の値に符号化し、状態出力値は、状態入力値への状態関数の適用の結果に等しく、第2のテーブルネットワークは、入力として、第1のテーブルネットワークの第1の符号化された出力値と、状態入力値及び関数入力値のうちの少なくとも1つとを取り、第2のテーブルネットワークは、出力として、第2の符号化された出力値を生成し、符号化された出力値は保護された関数出力を含む。
複数の入力の一部若しくは全ての符号化、及び/又は、複数の出力の一部若しくは全ての符号化は、デバイスのリバースエンジニアリングを顕著に困難にする。攻撃者は値が何を表すか、又は実際に値が何であるかを直接知らない。
(しばしば「E」と称される)符号化は、少なくとも部分的に可逆であり、すなわち、関数入力値及び状態入力値の符号化されたペアの一部に関して、関数入力値及び/又は状態入力値が復元可能であり、関数出力値及び状態出力値の符号化されたペアに関しても同様である。実践的な一実装形態では、符号化は典型的には完全に可逆として選択されるが、上記したようにこれは厳密に必要ではない。すなわち、完全に可逆な符号化に関しては、関数入力値及び状態入力値の任意の符号化されたペアについて、関数入力値及び状態入力値の両方を復元することができる。同様に、関数出力値及び状態出力値の符号化ペアから関数出力値及び状態出力値を復元することができる。
符号化は秘密であり、すなわち、システムの異なる実装形態は異なる方法を使用して入出力値を合わせて符号化し得る。
更に、符号化は少なくとも部分的に拡散の原理に従う。符号化された値内の値は、符号化された値の大部分に依存する。例えば、符号化された入出力値から入出力値が復元される場合、入出力値は好ましくは符号化された入出力値の全てに依存し、少なくとも、入出力値自体のビットサイズより多くのビットに依存する。これは、入出力値に関する情報が多くのビットに分散されるという効果を有する。好ましくは、ある者が符号化された値の一部にしかアクセスできない場合、その者が符号化/復号関数の完全な知識を有していたとしても、それが符号化する値を復元することは不可能である。慣用的に、暗号化はしばしば鍵を利用することに留意されたい。鍵符号化の使用は魅力的な可能性であるが、入出力値の比較的小さいサイズのため、符号化をテーブルとして表現することも可能である。このため、入出力値又は中間値等の変数値のコンテキストでの符号化及び暗号化は同義に使用される。
テーブルネットワークは2つの関数を表現することができ、実際に、符号化された入力値は2つの入力(関数及び状態)を含むため、テーブルネットワークから、それがデータ関数の又は状態関数の符号化バージョンであるのかを判断することはできない。実際には、テーブルネットワークはいずれの関数も計算するよう完備されており、実際に、独立した変数又は(複数の入力を有するデータ関数及び/又は状態関数の実施形態では)変数のセットについて両関数を計算する。
例えば、上記例に適用される場合、加算及び乗算を実行するために使用可能なテーブルネットワークが取得され得る。実際にテーブルネットワークはいずれも実行可能なため、テーブルネットワークの調査によりいずれが使用されているのかを判断することはできない。
データ関数は1つ又は複数の入力値を取り得る。状態関数は1つ又は複数の入力値を取り得る。一実施形態では、データ及び状態関数の入力値の数は同じである。例えば、デバイスは、複数の関数入力値を複数の符号化された入力値として取得するよう構成されてもよい。複数の符号化された入力値の各々が、複数の入力値のうちの関数入力値及び複数の状態入力値のうちの状態入力値を組み合わせ、合わせて単一の値に暗号化する。テーブルネットワークは入力として複数の符号化された入力値を取り、出力として符号化された出力値を生成するよう構成される。符号化された出力値は関数出力値を状態出力値と組み合わせ、単一の値に暗号化する。関数出力値は複数の関数入力値へのデータ関数の適用結果に等しく、状態出力値は複数の状態入力値への状態関数の適用結果に等しい。
一実施形態では、第2のテーブルネットワークは、出力として第2の符号化された出力値を生成し、符号化された出力値は、保護された関数出力値を保護された状態出力値と組み合わせ、合わせて単一の値に暗号化し、保護された状態出力は、状態出力値への状態置換の適用の結果に等しい。
第1のネットワークへの変更に対抗する第2のテーブルネットワークの追加は、システムに対する攻撃の問題に大いに寄与する。しかし、攻撃者が第2のテーブルネットワークを見つけることができた場合、攻撃者はその出力から、それによって変化が起こされたか否かを判断可能な可能性がある。第2のテーブルネットワークの出力内の状態値を常に変更することにより、符号化された値内の1つの値だけが変化したとしても符号化された値が全体として変化するため、攻撃者は第2のテーブルネットワークが関数出力に変化を適用する必要があったか否かを見ることはできない。
一実施形態では、第2のテーブルネットワークは、状態テーブルとアラインメントテーブルネットワークとを含み、状態テーブルは、状態関数のために構成され、プロセッサは、状態入力に状態テーブルを適用して平行な状態出力値を取得し、アラインメントテーブルネットワークは、少なくとも平行な状態出力値と第1のテーブルネットワークから受け取られる状態出力値とを入力として受け取る。このようにすることで、状態テーブルは関数テーブルと並行し得る。アラインメントテーブルネットワークが実行される前に、複数の状態及び関数テーブルが使用され得る。これは、依然として変更を検出する一方で変更に対する検査の数を減らす。このようにすることで、コードサイズが低減される。
一実施形態では、第2のテーブルネットワークは、変更された状態テーブルとアラインメントテーブルネットワークとを含み、状態テーブルは入力として状態入力値を受け取り変更された状態値を計算し、変更された状態値は、状態入力値への状態関数及び更なる状態関数の適用の結果に等しく、アラインテーブルネットワークは、入力として状態出力値及び変更された状態出力値を取り、状態出力値への更なる状態関数の適用が変更された状態出力値を生じるか否かを検証する。
状態テーブルでは、状態関数及び更なる状態関数の関数複合が実行され、一方、第1のテーブルネットワークでは状態関数のみが使用される。アラインメントテーブルは、状態変数が予期される値を有するか否かを検証する。出力が検査され、それが如何にして取得されたかは必ずしも検査されないことに留意されたい。これは、アラインメントテーブルネットワークを除去し、その出力を例えば第1のテーブルネットワークの出力によって置き換えようとする攻撃を防ぐ。状態変数及びデータ変数が並行しなくなるため、かかる試みは失敗する。
第2のテーブルネットワークは状態値に関して演算をしなくてもよく、複数の入力のうちの他の部分が使用されてもよい。一実施形態では、第2のテーブルネットワークは、入力として関数入力値を取り、第2のテーブルネットワークは、関数入力値へのデータ関数の適用の結果が第1の符号化された出力値内に符号化される関数出力値に等しい場合、保護された関数出力が関数出力に等しいよう構成される。
関数入出力は4、5、6、7、又は8ビット、場合によっては16ビット等より大きくてもよく、状態入出力値は同じサイズ、場合によっては2又は3ビット等より小さくてもよい。実践的な選択肢は、それぞれが4ビットの関数及び状態値、並びに関数及び状態値を含む符号化値を8ビットとすることである。
本発明の一側面は、データ関数を受け取り、第1及び第2のテーブルネットワークを生成するためのコンパイラであって、第1のテーブルネットワークは、関数入力値を含む、第1のテーブルネットワークのための複数の第1のテーブル入力を受け取り、複数の第1のテーブル出力を生成し、複数の第1のテーブル出力は関数出力値を含み、関数出力値は関数入力値へのデータ関数の適用の結果に対応し、第2のテーブルネットワークは、第1のテーブルネットワークに対してなされる変更に対抗するために第1のテーブルネットワークと協力し、第2のテーブルネットワークは、複数の第1のテーブル出力及び少なくとも1つの第1のテーブル入力を含む複数の第2のテーブル入力を受け取り、第2のテーブルネットワークは、複数の第1のテーブル出力のうちの少なくとも特定の1つに関して、未変更の第1のテーブルネットワークが複数の第1のテーブル入力のうちの与えられた少なくとも1つから複数の第1のテーブル出力のうちの特定の1つを取得することができたか否かを検証し、第2のテーブルネットワークは、保護された関数出力を含む第2のテーブル出力を生成し、検証が成功の場合、保護された関数出力は関数出力と等しく、検証が失敗の場合、保護された関数出力は関数出力と等しくない、コンパイラに関する。
コンピューティングデバイスは例えばモバイル電子デバイス、携帯電話、セットトップボックス、コンピュータ等の電子デバイスである。
本発明に係る方法は、コンピュータ実装方法としてコンピュータ上に、又は専用ハードウェア内に、又は両方の組み合わせに実装され得る。本発明に係る方法の実行可能コードは、コンピュータプログラム製品上に記憶され得る。コンピュータプログラム製品の例は、メモリデバイス、光学記憶デバイス、集積回路、サーバ、オンラインソフトウェア等を含む。好ましくは、コンピュータプログラム製品は、プログラム製品がコンピュータ上で実行されたとき、本発明に係る方法を実行するためのコンピュータ読み取り可能媒体上に記憶された非一時的プログラムコード手段を含む。
好適な一実施形態では、コンピュータプログラムは、コンピュータ上で実行されたとき、本発明に係る方法の全ステップを実行するよう適合されたコンピュータプログラムコード手段を含む。好ましくは、コンピュータプログラムはコンピュータ読み取り可能媒体上に具現化される。
本発明の上記及び他の側面は、以下で説明される実施形態を参照して説明され、明らかである。
図1は、データ関数及び状態関数を実装するテーブルネットワークを示す概略図である。 図2は、テーブルネットワークによって構成されたコンピューティングデバイス202及び204を示すブロック図である。 図3は、テーブルネットワークを示すブロック図である。 図4は、テーブルネットワークを一般的に示すブロック図である。 図5は、コンピューティングデバイスを示すブロック図である。 図6は、コンパイラを示すフローチャートである。 図7は、関数を計算するための方法を示すフローチャートである。 図8a及び図8bは、テーブルネットワークを示すブロック図である。 図9は、プログラムフローを示すダイアグラムである。
異なる図面において同じ参照番号を有するアイテムは、同じ構造的特徴及び同じ機能を有し、又は同じ信号である。このようなアイテムの機能及び/又は構造が説明されている場合、詳細な説明においてそれらを繰り返し説明する必要はない。
本発明は多様な形態で実施され得るが、1つ以上の特定の実施形態が詳細に図面に示され、本明細書に記載される。本開示は本発明の原理の例示として考えられ、本発明を図示及び記載の特定の実施形態に限定することは意図しないことを理解されたい。
図4はテーブルネットワークの概念を示し、テーブルネットワーク400が図示されている。ほとんどの関数がテーブルのネットワークとして表現され得る。特に、算術演算及び論理演算の任意のコンポジションがそのように表現され得る。例えば、テーブルネットワークは例えば暗号法の実装であり得る。複数のテーブルのうちの8つのテーブルが示されている。テーブルは入力値のテーブルルックアップにより入力値を出力値に変換する。関数実装の外部から入力を受け取るための入力テーブル410のうちの3つが示されている。出力テーブル430のうちの1つが示されている。出力テーブル430は、合わせて、例えば連結により関数実装の出力部を形成する。テーブルのうちの別の1つから少なくとも1つの入力を受け取り、少なくとも1つの別のテーブルの入力として使用される出力を生成する中間テーブルのうちの4つのテーブル420、422、424、426が示されている。図中、例えば中間テーブル422及び410は、テーブル426のための入力を提供する。テーブルは合わせてネットワークを形成する。暗号法はブロック暗号法であり、ブロック暗号法は暗号化又は解読のために構成され得る。ブロック暗号法はブロックを暗号化し、例えばAESである。実装は特定の鍵用でもよく、この場合、テーブルは特定の鍵に依存し得る。
ルックアップテーブル426は、2つの入力及び1つの出力を有するオペレータ(演算子)を表す。単項演算子用のルックアップテーブルの構成は、二項演算子用に拡張され得る。例えば、2つ目の入力は「カリー化」されてもよい。関数変換技術に関して、カリー化は、n個の複数の引数(又はn組の引数)を取る関数を、それぞれが単一の引数を有する一連の関数と称することができるように変換する技術である。このアプローチが使用される場合、ルックアップテーブル426は、複数の単項ルックアップテーブルとして実装される。一方、入力ごとにビット列を生成し、結果を連結してもよい。このようにすることで、ルックアップテーブルは直接的に生成され、単一の大きなルックアップテーブルが得られる。構成に基づき、ルックアップテーブルのレイアウトは異なり得るが、等しいサイズ及び同じ特性を有する。複数の入力値は必ずしも同じ符号化に従って符号化されなくてもよいことに留意されたい。
テーブルネットワークは2つの関数を符号化する複数のテーブルを使用してもよく、又は、2つの関数を符号化するテーブルネットワークをサブネットワークとして有してもよい。更に、テーブルネットワークは、攻撃者がテーブル及び/又は変数変更を利用してシステムに関する有用な情報を知ることを防ぐために1つの又は第1及び第2のテーブルネットワークを組み込み得る。
システムは、現在の符号化に基づくネットワークテーブルの状態又はデータ関数を使用するよう構成され得る。本明細書に記載されるテーブルネットワークにも、テーブルネットワーク難読化技術が適用され得る。
例えば、第2のテーブルが入力として第1のテーブルの出力を受け取るとすると、第1のテーブルの出力は秘密の、例えばランダムに選択される符号化によって符号化され、第2のテーブルの入力は逆符号化によって符号化され得る。
図1は、より大きなテーブルネットワーク100内に埋め込まれているテーブルネットワーク180を示す。図示のテーブルネットワーク180は、単一のテーブル130のみを含む。上記したように、例えばテーブルサイズとセキュリティとの間のトレードオフで、テーブル130をテーブルネットワークとして実装することも可能である。図1において、テーブルは長方形によって示されており、値は右上の角が切り落とされた長方形によって示されている。
テーブルネットワーク180は、複数の符号化された入力値を入力として取るよう構成されており、符号化された入力値122及び124が示されている。テーブルネットワーク180は、出力として符号化された出力値160を生成するよう構成されている。以下の記載では、2つの入力値及び単一の出力値を有するデータ関数及び状態関数を想定する。しかし、実施形態は任意の数の入力値及び/又は出力値に拡張され得る。特に、1つの入力及び1つの出力を有するデータ/状態関数が可能であり、2つの入力及び1つの出力を有するデータ/状態関数が可能である。
テーブルネットワーク180はデータ関数のために構成され、電子ストレージ内に記憶され、電子ストレージは、テーブルネットワークを適用することによりデータ関数を計算するよう構成された電子プロセッサに結合される。
符号化された値122は、関数入力値102及び状態入力値112から取得される。例えば、これはエンコーダ110によって実行され得る。エンコーダ110はテーブルネットワーク180を記憶するデバイスと同じデバイス内に含まれてもよいが、これは必須ではない。入力値は既に符号化された形式で受け取られ及び/又は符号化された形式で伝送されてもよく、又は、符号化されていない形式で受け取られ/伝送されてもよい。後者の場合、入力値は符号化され、内部で符号化形式で使用されてもよい。例えばデバイスの外部で異なる符号化が使用される場合、再符号化が存在してもよい。例えば、デコーダ170から関数出力値162及び状態出力値164が取得され得る。
データ関数の符号化入力は、他のテーブル又はテーブルネットワークの出力であり得る。後者は2つの関数のために構成されたテーブルネットワークでもよいし、そうでなくてもよい。異なるデータ関数のために構成されたテーブルネットワークを組み合わせることにより、プログラム全体が構築され得る。
エンコーダ/デコーダ110及び170は、互いの逆として得られ得る。エンコーダ110は次のようして得られてもよい。関数入力値と状態入力値との各可能な組み合わせがリストされる。例えば、両方が4ビット幅の場合、16*16=256の可能な組み合わせが存在する。256の組み合わせは、ランダムな全単射順序(bijective order)で自身にマッピングされてもよい。他のサイズに関しても同様である。また、暗号関数が使用されてもよく、例えば何らかの秘密暗号鍵を使用して、8ビットブロック暗号法が適用されてもよい。
符号化入力値は関数入力値102及び状態入力値112を相互依存した態様で含み、例えば関数入力は符号化入力の全ビットに依存する。したがって、符号化入力値122の一部のみを知るだけでは、通常、関数入力値102又は状態入力値112のいずれも求めることはできない。
以下、数学的言語を使用して複数の実施形態を与える。関数入力値を状態値と組み合わせることの1つの利点は、関数入力が複数の表現を有することである。関数fはデータ関数を指し、gは状態関数を指す。関数fは、ある値がFの定義域内で複数の表現を有するよう、Fに符号化される。どの関数fが符号化されているかを隠すために、fの入出力は、fの符号化バージョンFの定義域及び範囲内で複数の表現を有する。関数Fは、Xがxの表現であれば、F(X)がf(x)の表現であるよう設計される。以下、fの各入出力がFの複数の入出力に対応し、よって通常、Fからの入出力を表現するのにfからの入出力を表現するよりも多くのビットが必要とされることを強調するために、「長い」変数(Fの入出力)及び「短い」変数(fの入出力)について論じる場合がある。オペランドのための複数の表現を取得する方法の1つを以下に述べる。上記と同様に、単純さのために、等しい入力出力記号を有する関数を考えるが、これは一般化され得る。
Wが符号化しようとするオペランドの集合を示すとする。「状態」の有限集合Σ及び有限集合Vを導入し、Vの基数はW及びΣの基数の積に等しい。WxΣの要素は、秘密符号化関数Eによって一対一でVにマッピングされる。W内の要素wの表現は、次の集合のメンバーである。
Ω(w) = { E(w,σ) | σ∈Σ }
したがって、W内の各要素の表現の数は、Σの基数に等しい。結果として、Vからの記号を運ぶデータパスは、Wからの記号を運ぶデータパスより広い。例えば、Wが16ビット整数の集合であり、状態空間がΣ16=2の要素を有する場合、Vのためのデータパスは16+4=20ビット使用し、一方、Wのためのデータパスは16ビット使用する。
次の実施形態は二変数関数を符号化する。符号化することを望む関数f:WxW→Wを考える。全てのw1,w2∈ W及びσ1, σ2∈ Σについて下式が成り立つような関数F:VxV→Vを構築する。
F(E(w11),E(w22 ))∈Ω(f(w1,w2))
あるいは、言葉で表現すれば、Fはw及びwの表現の任意のペアをf(w1,w2)の表現にマッピングする。
f(w1,w2 )の表現の状態は、決定論的な又はランダム化された態様で、両方のオペランドw及びwに依存してもよく、場合によっては両方の状態σ及びσに依存してもよい。より具体的には、状態は状態σ及びσのみに依存してもよく、これは関数g:Σ×Σ→Σを取り、次を定義することによって実装され得る。
F(E(w11),E(w22 ))=E(f(w1,w2 ),g(σ12))
Σ=Wを取る場合、上記実施形態の興味深い特別なケースが生じる。この場合、関数Eを使用してfを符号化する関数Fは、異なる符号化関数
を使用するが関数gも符号化する。つまり、2つの関数のうち、f又はgのいずれがFによって実装されているのかを推測することができない。
と定める。計算により、次式が求められる。
したがって、Fのテーブルは符号化Eが使用される場合は関数fを実装し、符号化関数として
が使用される場合は関数gを実装する。このようにすることで、少なくとも2つの関数を符号化し得るため、テーブル130だけからではどの関数が使用されているのかを求められないことがわかる。
Fのためのテーブルはf及びgの両方を計算するよう働き得る。実際には、Eが使用される場合、前述したように、Fのためのテーブルはfを実装する。関数
により入出力を前処理及び後処理することにより、同じテーブルをgを実装するために使用することもできる。正確には、w1,w2∈W,σ12∈Σとし、vi=E(wii ),i=1,2と示す。この場合、次式が得られる。
結果として、次式が得られる。
符号化された入力値は、データ関数を含み又はデータ関数によって表現され得るコンピュータプログラムへの入力値であり得る。コンピュータプログラムはコンピュータ上で実行中であってもよい。コンピュータプログラムの命令は、データ関数によって表現され得る。符号化及び復号は秘密鍵によって制御されてもよい。符号化及び復号テーブル自体がかかる鍵としてみなされてもよい。符号化Eによって符号化されたデータに対して演算をする命令fが適用される場合、まずデータが復号され、fが復号されたデータに適用され、その後結果が再び符号化される。つまり、データxは出力F (x) = Ek( f (Dk(x))をもたらす。関数Fを例えばルックアップテーブルとして直接記憶することにより、関数f及びそのセマンティクスは隠される。具体的な一実施形態では、復号は符号化の左逆元であり、すなわち、全てのxに対してDk(Ek(x)) = xである。これは、2つの関数f及びgが同じ関数E及びDによって符号化及び復号される場合、関数f(g(x))の符号化バージョンを、G (x) = Ek( g (Dk(x))及びF (x) = Ek( f (Dk(x))のためのテーブルを連続して使用することによって行うことができるという利点を有する。実際には、xごとにEk (f(g(Dk(x)) = F(G(x))が成り立つと見ることができ、よってG及びFのためのテーブルに続けてアクセスすることによりf(g(x))の符号化バージョンを得ることができる。このようにすることで連続する演算の間に符号化及び復号をすることなく一連の演算を適用することができ、よってセキュリティが著しく強化される。一実施形態では、符号化及び復号はセキュアサイドでのみ起こり、一方、全ての符号化演算がオープンな非セキュアサイドで起こる。1つ以上の符号化関数の出力は、別の符号化関数への入力となり得る。上記したように、符号化及び復号が互いの逆元の場合、これは都合よく構成され得る。本発明によって一連の演算を実行するための好ましい一実施形態は以下の通りである。まず、セキュア領域で、「短い」変数が「長い」変数に変換される。「長い」変数が略等しい頻度で現れることを確実にするよう、ランダム化が含まれる。これは、例えば、ランダムな状態σ∈Σを生成するデバイスを有し、変数xをEk(x,σ)にマッピングすることによって達成することができ、ここで、Eは「長い」変数の符号化である。全てが「長い」変数を使用して演算をするオープンサイドでの全計算の後、セキュアサイドで復号Dが適用され、次いで、復号された長い変数に対応する「短い」変数が求められる。代わりに、復号及び短い変数の決定が1つの結合されたステップで実行されてもよい。文字kは秘密、例えば秘密鍵を示す。
変数のための複数の表現を有することは、データパスが大きく長いことを示唆する。また、これは、fの符号化バージョンFを実装するためのテーブルが大きくなることを示唆する。例えば、入力として2つの16ビット変数x及びyを有し、出力として16ビット変数を有する関数f(x,y)を考える。複数の表現を有することなくfの符号化バージョンを実装するためのテーブルは、216×216のエントリを有するテーブルを使用し、各テーブルエントリは16ビット幅であり、総計236ビットのテーブルサイズになる。次に、各16ビット変数が16の表現を有すると仮定し、よって、表現の集合は20ビットで表され得る。今度は220×220のエントリを有するテーブルが使用され、各テーブルエントリは20ビット幅であり、総計5×242ビットのサイズのテーブルになる。つまり、テーブルは複数の表現を有さない場合の5×2=320倍の大きさを有する。
下にはエンコーダ110、デコーダ170、並びに状態抽出テーブル212及び214の構成の例が与えられている。それぞれ4ビットの単一の関数入力及び単一の状態入力を想定する(どちらもより多くてもよい)。
最初の2つの列は、関数入力値及び状態入力値の全ての可能な組み合わせをリストする。最後の列は、数0〜255のバイナリのランダム順列又は置換(permutation)をリストする。256−2=254の入出力ペアの完全な知識をもってしても、残りの2つのペアが依然として1ビットの不確実性を有するという意味で、暗号化は完全であることに留意されたい。情報理論的な意味での完全な符号化が望ましいが、良好な結果のためには必須ではない。例えば、8ビット幅ブロック暗号法、すなわち、関数入力と状態入力との和に等しいブロックサイズを有するブロック暗号法等を使用することにより、完全さは劣るが依然として非常に有用な符号化が得られる。
最初の2つの列上でのソートにより符号化テーブルが得られ、得られたテーブルは、最初の2つの列から最後の列(符号化)を得る方法を示す。最後の列上でのソートにより、符号化ではなく復号を行うテーブルが得られる。最初の列を除去して最後の列上でソートを行うことにより、状態抽出関数が得られる。一般的に、入力列及び出力列の両方をストアする必要はないことに留意されたい。例えば、入力列がソートされ、全ての可能な組み合わせを含む場合、省かれてもよい。
図2は、電子ストレージ及び電子プロセッサを有する計算デバイス、例えば図5に示されるデバイス(下記参照)における使用のためのテーブルネットワーク204及び202を示す。
テーブルネットワーク202に関して、2つの第1のテーブルネットワーク212及び214が示されている。第1のテーブル214は第1のテーブル212の出力216を入力として使用する。テーブルネットワーク212及び214は、テーブルネットワーク180のタイプでもよい。第1のテーブル212は複数の入力210を受け取って複数の出力を生成し、入力には関数入力値が含まれ、出力には関数出力値が含まれる。図をより明瞭にするため、解釈を助けると考えられる場合を除き、複数の入力及び複数の出力は個別に示されない。テーブル212の関数出力値は、テーブル214のための更なる入力として使用され、テーブル214は複数の出力を生成する。テーブル212及び214の複数の入出力は、少なくとも単一の値からはどの部分が実際のデータに対応しどの部分が対応しないかを攻撃者が決定できないよう、符号化される。例えば、テーブル212及び214は、それぞれが関数入力を状態入力と組み合わせ、それぞれが1つ以上の符号化出力を生成し得る1つ以上の符号化入力を入力として受け取り得る。しばしば使用される組み合わせは、2つ以上の符号化入力を受け取り、1つの符号化出力を生成することである。
テーブル212及び214は、テーブルネットワーク202がその一部を構成するプログラムの最終結果に直接関係しないデータに関して計算を実行するため、ネットワーク202の使用は有利である。しかし、攻撃者はテーブルエントリを変更して結果を観察することによりシステムを攻撃できる可能性がある。攻撃者はプログラムの実行に影響しないように見える変化を探す。それから、関数データに関する限り、オリジナルの値及び変更された値が等しいことを推測できるからである。
テーブルネットワーク204はテーブルネットワーク202の代替として、この攻撃を防ぐよう構成されている。テーブルネットワーク204は第1のテーブルネットワーク222及び224を含み、更に追加でテーブルネットワーク232及び234を含む。第1のテーブルネットワーク222及び224は、それぞれがテーブル212及び214に等しいよう選択されてもよい。
テーブルネットワーク232は入力としてテーブルネットワーク222の出力226を受け取り、また、自身の入力の少なくとも一部をテーブルネットワーク222の入力220と共有する。第2のテーブルネットワークは、テーブルネットワーク222から受け取られた出力226がテーブル232に与えられた入力220と適合するか否かを検証できる。特に、テーブル232は、複数の第1のテーブル出力226のうちの少なくとも特定の1つ、より好ましくは全てに関して、未変更の第1のテーブルネットワーク222が複数の第1のテーブル入力のうちの与えられた少なくとも1つから複数の第1のテーブル出力のうちの当該特定の1つを取得し得たか否かを検証する。テーブル(又はテーブルネットワーク)232は、テーブルルックアップ演算によりこれを行うことができる。テーブル232の構築中、全ての可能な入力220が何であるか及び全ての対応する出力226が何であるかが決定され、実際には、これはテーブル222自体の構築の一部であり得る。次に、テーブル232の入出力の組み合わせごとに、それがテーブルネットワーク222の入出力ペアに対応するか否かを示すテーブルが作成される。この判定に基づき、テーブル232は異なる出力を有する(下記参照)。言い換えれば、テーブル222は、未変更の第1のテーブルネットワークが複数の第1のテーブル出力のうちの特定の1つを得る、複数の第1のテーブル入力のうちの入力された少なくとも1つを含む複数の第1のテーブル入力の有無を決定する。
これを達成するための実践的な方法は、入力220の一部だけから計算された226の1つの出力を有することである。例えば、入力220は状態入力及び関数入力を含み得る。出力226は、関数入力に適用される関数である関数出力と、状態出力とを含み得る。状態出力は好ましくは状態入力のみに依存するが、関数入力に依存してもよい。テーブル222の関数入力及び全出力を所与として、テーブル232は関数入力と関数出力とが対応すること、すなわち、関数入力に適用されるデータ関数が関数出力を与えるか否かを検証することができる。代わりに又は追加で、テーブル222の状態入力及び全出力を所与として、テーブル232は、状態入力と状態出力とが対応するか、すなわち、状態入力への状態関数の適用が状態出力を与えるか否かを検証することができる。好適な実施形態では、第2のテーブルネットワークは少なくとも状態変数を検証する。変更されていないプログラム出力をもたらす可能性があるため(すなわち、関数値が変更されない場合)、これらの種類のエラー(すなわち、変更された状態)を捕らえることは重要であると考えられる。後者の種類の変化は、攻撃者にとって特に多くの情報を運ぶ。
通常、テーブル232は、何らかの処理ステップを実行し得る次のテーブル/テーブルネットワークでの使用のために226の出力を伝送する。しかし、テーブル232がエラーを検出する場合、すなわち、222の入出力がテーブル222又はおそらくは変数自体に干渉してしか得られ得ない場合、テーブル232は伝送前に出力226の少なくとも一部をランダム化する。第2のテーブルネットワークを通過した出力値を保護された出力値と呼ぶ。保護された値は、エラーが検出されなかった場合は更なる計算のために有用であるが、タンパリングが検出された場合にはランダム化されている。
保護された変数の効果は、タンパリングによって知られ得る情報が著しく減少することである。攻撃者はタンパリングを行うと出力が変化し、プログラムが正常に機能しないことを発見するが、これはタンパリング時に予期されることであり、攻撃者はこの事実自体からは何も学ばない。しかし、ランダム化のため、有用な情報、例えば状態及び関数データに対応して変化する情報は消失する。ランダム化が好ましいが、検証が失敗する場合に保護関数出力が関数出力と異なる限り、より微細な変化も可能である。ランダム化はテーブルの構築中にテーブル内に固定される。テーブルネットワークを適用するために、乱数生成器は必要とされない。
テーブル232の出力は、ここではテーブル224及び234である次のテーブルネットワークに伝送される。これは、保護されていないネットワークにおいて出力を受け取るテーブル214に対応する。ここで、224は第1のテーブルネットワークであり、234は第2のテーブルネットワークである。
テーブルネットワーク204は、例えばフラッシュ又はRAM等の電子ストレージ上に記憶され、そして電子プロセッサによって使用され、すなわち、デバイスの外部から受け取られた又はデバイス上で生成されたデータに対してテーブルネットワークを適用することにより使用される。典型的な実施形態では、テーブルネットワークへの入力は、攻撃者に対して秘密な符号化に従って符号化されていることに留意されたい。テーブルネットワークにとって符号化は透明であり、テーブルが作成されれば、一切の追加の処理を伴わない。つまり、テーブルをプレーン値又は符号化値に適用することは、処理要件において等しい。符号化はテーブル間で容易に変化し得ることに留意されたい。符号化は、プレーン値と内部で使用される値との間のマッピングである。
好ましくは、テーブルネットワーク204は、関数値を状態値と組み合わせる変数に作用する。システムは状態値に関しても計算を行い、テーブルは同時に2つの関数を実行するため、攻撃者はテーブルからそれが符号化する関数を特定することができない。状態変数及び関数変数の役割は、プログラムを通じて交替し得る。これらの実施形態では、テーブルは同時に2つの関数を実行する。しかし、同時に実行される関数の数はより大きく選択されもよく、攻撃者による解析をより複雑にする。例えば、テーブルは3つの関数、例えばデータ関数並びに第1及び第2の状態関数を表してもよく、例えば4又は5等の更に大きい関数の数も可能である。
以下、第2のテーブルネットワークの可能な実施形態を数学的言語を用いて列挙する。これらの実施形態において、u、v、x、yは関数値及び状態値を符号化する変数であり、p、q、aは状態値であり、wは関数値である。変数vは、更なる下流の処理、例えばテーブルで使用され得る、第1及び第2のテーブルネットワークの最終出力である。関数fはデータ関数であり、g、g1、及びg2は状態関数である。関数σは状態抽出器、ρは関数値抽出器、Eはエンコーダ関数であり、すなわち、σ(E(w,p))=p且つρ(E(w,p))=wであり、これらの関数は全てテーブルとして実装され得る。関数Pは状態変数に関する関数であり、好ましくは置換である。関数Fはfに対応するが、符号化領域に転記されており、すなわちF(x,y) = E(f(ρ(x),ρ(y),g(σ(x),σ(y)))である。
文字zはアライン関数を示し、第1の入力が第2の及び更なる入力に対応する場合、場合によっては何らかの更なる処理を伴い、出力は第1の入力であり、そうでない場合、出力は変更され、例えばランダム化される。
これらの実施形態では、テーブルは2つの関数入力を取り扱う。しかし、入力の数は適宜に選択され得る。システムは単一の入力に適用されてもよいが、興味深いことには複数の入力関数に適用されてもよい。例として4ビットの状態及び関数、並びに8ビットのそれらの結合符号化を使用する。当然ながら異なるサイズが可能であり、例えば状態が2ビットで関数が6ビット等でもよい。
以下の全ての例において、第1のテーブルネットワークは関数u = F(x,y)を実装する。これは、2つの符号化入力及び1つの符号化出力を有する単一のテーブルによって成され得る。
第2のテーブルネットワークは次のうちのいずれか1つであり得る。
1.第2のテーブルネットワークは入力としてx、y、及びuを取り、すなわち、第1のテーブルネットワークの入出力の全てを取る。第2のテーブルネットワークは3つのテーブルを含む。最初の2つは状態抽出器であり、3つ目はアラインテーブルである。x、y入力。p = σ (x); q= σ (y); v= E(z(u,p,q),P(σ (u)))。ここで、g(p,q)=σ(u)の場合z(u,p,q)=ρ(u)であり、そうでない場合はランダムである。言い換えれば、第2のテーブルネットワークは、第1のテーブルネットワークが状態関数を正しく計算したか否かを検証する。検証が成功の場合、u及びvは等しい値を有するが、異なる状態を有する。検証がエラーを検出する場合、vの値はuの値とは異なる。状態は置換Pの形式のひねりを受けることに留意されたい。この実施形態は入力サイズ8、8、及び16ビットの3つのテーブルを使用する。
2.第2のテーブルネットワークは入力としてx、y、及びuを取る。第2のテーブルネットワークは1つのテーブルを含む。x、y入力。v= E(z(u,x,y),P(σ (u)))。ここで、F(x,y)=uの場合はz(u,x,y)=ρ(u)であり、そうでない場合はランダムである。ここでは、第1のテーブルネットワークの完全な計算が検証される。テーブルは8+8+8=24ビットの入力サイズを有する。
3.第2のテーブルネットワークは入力としてx、y、及びuを取る。第2のテーブルネットワークは2つのテーブルを含む。x、y入力。a = g(σ (x),σ (y)); v=E(z(u,a),P(σ (u))。ここで、σ(u)=aの場合はz(u,a)=ρ(u)であり、そうでない場合はランダムである。ここでは、第1のテーブルネットワークの状態部分のみが検証される。テーブルは16及び12ビットの入力サイズを有する。変形例として、アラインテーブルとしてv= E(z(u,a),P(a))を使用してもよい。この変更は特に、検証が失敗する場合に関する。
更なる変形例として、第2のテーブルネットワークは:=σ (x); q= σ (y); a = g(p,q); v= E(z(u,a),P(σ (u))を使用する。ここでは、第2のテーブルは3つのテーブルを使用するが、8、8、及び12ビットの入力しか有さない。
4.デバイスは2種類の変数、すなわち、状態及び関数値の両方を有する符号化された変数(「長い」変数)、及び、対応する状態のみの変数(状態変数)に作用する。後者も符号化されてもよいが、サイズはより小さい。サイズの例によれば、「長い変数」は関数値と状態値とを含み8ビットであり、対応する状態変数は4ビットである。長い変数と状態変数は、それぞれの状態変数が検証可能な関係にある、例えば等しいという意味で対応する。
第1のテーブルネットワークは上記のように長い変数x及びyに従う。第2のテーブルネットワークは入力として対応する状態変数及びuを取る。長い変数に対応する状態変数を有することは、第2のテーブルが利用可能な異なるサブセットを第1のテーブルの複数の入力から作成することを可能にする。x及びyに対応する状態変数をτ及びτとする。符号化された長い変数は状態変数、すなわちτx=σ(x)、τy=σ(y)を含むため、状態変数は第1のテーブルネットワークの入力の一部であることに留意されたい。第2のテーブルネットワークは入力としてτ、τ及びuを使用するのでこれらの入力を共有し、τu=g(τx τy); v=E(z(u, τu ),P(τu ))を計算するために2つのテーブルを含む。ここでは、σ(u)= τuの場合はz(u, τu )=ρ(u)であり、そうでない場合はランダムである。第2のネットワーク内のテーブルへの入力は8及び12ビットだけである。τ及びτは、σ(x)及びσ(y)の実際の値とは独立して追跡される別個の変数であり得ることに留意されたい。プログラムは、これらの値が互いに検証され得るように、例えば等しいことが検証され得るように構成されている。
5.第2のテーブルネットワークは入力としてτx及びτyを取り、第2のテーブルネットワークはτu=g2(g1xy )).; v=E(z(u,τu ),P(τu))を計算する2つのテーブルを有する。ここでは、g2(σ(u))=τuの場合はz(u,τu)=ρ(u)であり、そうでなければランダムである。ここで、gは第1のテーブルネットワーク内で使用される状態関数gである。第2のテーブルネットワーク内の状態計算テーブルは、第1のテーブルネットワーク内では実行されない追加の関数を状態値に関して実行する。その後、アラインテーブルはこの事実を検証し、そのための補正を行う。このようにすることで、状態値及び関数値が合わなくなるため、攻撃者はアラインテーブルを省略することができない。次のアラインテーブルにおいてミスマッチが検出され、補正される。
これらの例は多くの点で異なることに留意されたい。まず、これらは異なる入出力サイズを有し、これは異なるテーブルサイズをもたらす。プログラムのサイズを制限内に保たなければならない場合、テーブルサイズは重要な基準である。また、実施例は、攻撃者が何の値を入手可能であるかにおいて異なる。関数値との符号化を有さずに状態値が入手可能な場合、攻撃者にとって好都合であると考えられる。サイズ及びセキュリティに対する正確な要求に応じて、これらの選択肢間で選択をすることができる。プログラムが単一の選択肢のみを使用する必要はないことに留意されたい。異なる第2のテーブルが異なるバリエーションを使用してもよい。
図3、図8a、及び図8bは、単一の入力を取るデータ関数及び状態関数のための複数のこれらの可能性を示す。例えば、図3はコンピューティングデバイス300を示す。デバイスは第1のテーブルネットワーク310及び第2のテーブルネットワーク340を記憶する。
第1のテーブルネットワーク310は入力305として長い変数x=E(w,p)を取る。テーブル310は、関数部分に対して関数f312を適用し、状態部分に対して関数g314を適用するよう構成される。実際の実装では、これらの部分が直接見えないことに留意されたい。テーブル310は、事前に計算されたテーブル内の値をルックアップすることにより、符号化された値を直接処理する。テーブル310は出力307:u = E (f (w),g(p))を生成する。第2のテーブルネットワークはテーブル320及び330の2つのテーブルとしてである。第2のテーブルネットワークはxを入力として取り、状態抽出器テーブル320を適用し、抽出された状態322:p=σ(x)を取得する。抽出された状態322及び出力307は、アラインテーブル330への入力である。アラインテーブルは関数z332及び置換334から構成されている。ここで、σ(u)=pの場合はz(u,p) = ρ(u)であり、そうでなければランダムである。置換334は状態に対して置換を適用し、ここではテーブル310から得られる状態が選択されたが、テーブル320からの状態も可能である。アラインテーブル内に置換を有することは、変化が検出されたか否かに関わらず、テーブルの出力が常に変化することを保証する。これは、テーブル330内の変化を利用して、タンパリングによって導入された変化を決定する攻撃を防ぐ。テーブル330も、関数332及び334を別々に見ることができない単一のテーブルである。
図8aは、関数値及び状態値を符号化する長い変数の集合と、対応する状態変数の集合とを記憶する作業メモリを含むコンピューティングデバイス800を示す。長い変数のコレクションの1つごとに状態変数のコレクションのうちの特定の1つが対応する。長い変数及び状態変数は、検証可能な関係を有する。例えば、長い変数は、状態変数でも符号化される状態値を符号化する。例えば、長い変数は状態値を符号化し、一方、状態変数は状態値の関数を符号化する。
デバイス800上にはテーブルネットワークが記憶される。入力として長い変数を取る、上記のような第1のテーブルネットワーク310が使用される(示されるのは、単一の長い変数が受け取られる状況であるが、より多くが可能であり、上記式は2つの長い変数が受け取られる状況を示し、より多くも可能である)。
テーブル310は複数の入力、すなわち関数値及び状態値を受け取る。これらの2つの入力は共に符号化されるが、テーブル310は入力に対して異なるように作用することに留意されたい。特に、テーブル310は関数及び状態入力に対して互いに独立して作用してもよい。
第2のテーブルネットワークは状態関数テーブル810及びアラインテーブル330を含む。テーブル330には図3のものと同じテーブルが使用されてもよい。状態関数テーブル810は、テーブル310の複数の入力のサブセットを入力として取り、特に状態値が受け取られる。これは、テーブル310が適用される長い変数に対応する状態変数に対してテーブル810を適用することによって実行され、あるいは、805は、パス305の展開から独立して展開するパスの一部であってもよい。テーブル810はテーブル310と同じ状態関数を実装する。
好適な実装形態では、状態関数テーブル810及びテーブル310の両方によって使用される状態関数は、関数とは独立に作用する。これは実装を大きく単純化する。とはいえ、状態関数テーブル内に関数値依存性を導入してもよい。この場合、状態関数テーブル810は計算においてテーブル310からの中間結果の一部を使用する。これが行われるとき、関数値をプレーン形式で露出しないよう注意しなければならず、一方、次の状態が現在の状態にのみ依存し関数値に依存しない場合、状態値が露出する重大度はより低い。
テーブル810は出力807として、状態値への状態関数の適用結果:g(τ x)を生成する。この値は(関数値と組み合わされていない)状態値であるが、典型的な実装形態では符号化されることに留意されたい。どのみち処理を妨害しないため、テーブルネットワークではデータを符号化することはまれではない。興味深いことに、複数の入力、例えば関数値及び状態値が共に符号化されてもよく、すなわち、単一の値に暗号化されてもよい。状態変数の符号化は、状態空間のランダムな置換によって実行されてもよい。 テーブル340の出力は後続の処理、例えば更なるテーブルネットワークにおいて使用され得る。
図8bは、興味深い変形例を表す。長い入力305及び815を受け取るテーブル310と、テーブル310の出力307及び他の長い入力836を使用するテーブル830とを含む第1のテーブルネットワークが示されている。テーブル310及び830は、複数の符号化入力に関してより複雑な関数を計算することができる。状態関数テーブル810及び820は、テーブル310及び830に対応する。これらは入力として、テーブル310及び830が使用する長い変数に対応する状態変数、すなわち、長い変数305、815、307、836、及び837にそれぞれ対応する状態変数805、806、807、816、817を受け取る。
興味深いことに、これはコンピュータプログラムのセグメントを2回、1回は長い変数に作用するテーブルネットワークを使用して、1回は対応する状態変数に関して実行する可能性を与える。セグメントの終わりにおいて、アラインテーブルは2つのプログラムが依然として同期しているか否かを検証する。
これは図9に更に示されている。全ての図面と同様に、プログラム実行は図面の上から下に進む。910において、プログラムは単一のスレッドで走っている。追加の検証は行われない。どこかのポイントで、よりセキュリティセンシティブな部分に入る。このポイントにおいて、プログラムは2つの部分に分岐し、例えば左では状態変数が評価される一方、右では長い変数が評価される。これは920において起こる。どこかのポイントで、一層クリティカルな部分に入る。このポイントにおいて、例えば長い変数が2回完全に評価される。このセクションの終わりに、アラインテーブルが変更がなされなかったことを保証し、これは930において行われる。変化が検出されたとしても、プログラムは有用な相関が除去された値で実行し続ける。940において、再びアライン関数と共に、第1の分岐も終わる。950において、プログラムは2つのスレッド、例えば状態変数及び長い変数に関するスレッドとして実行を続ける。最後に、960に別のアライン関数が存在し、プログラムは再び単一のスレッドとして走る。
図5は、ストレージデバイス510を有するコンピューティングデバイス500を示す。図5に示されるデバイスは、図1、図2、図3、図4、図8a、図8b、及び図9に示されるテーブルネットワークと共に使用されてもよく、特にコンピューティングデバイス100、204、202、300、及び800として使用されてもよい。
ストレージデバイス510は、典型的には1つ以上の不揮発性のメモリであるが、ハードディスク、光学ディスク等であってもよい。また、ストレージデバイス510は、ダウンロード又は他の態様で受け取られたデータを含む揮発性メモリであってもよい。コンピューティングデバイス500はプロセッサ550を含む。プロセッサは典型的には、メモリ内に記憶されたコード555を実行する。利便性のため、コードはストレージデバイス510内に記憶されてもよい。コードは、プロセッサに計算を実行させる。デバイス500は、入力値を受け取り且つ/又は結果を伝送するためのオプションのI/Oデバイス560を含んでもよい。I/Oデバイス560はネットワーク接続、リムーバブルストレージデバイス等でもよい。
ストレージデバイス510は、図1乃至3のうちの1つに係る1つ以上のテーブルネットワークを含む。
一実施形態では、コンピューティングデバイスは動作中に次のように機能してもよい。コンピューティングデバイス500は入力値を受け取る。入力値は例えば、符号化テーブル541、例えばテーブル110を使用することによって符号化される。したがって、入力値は符号化された入力値として取得される。入力値は、例えばデバイス560を介して、符号化された入力値として直接取得されてもよいことに留意されたい。入力値を符号化された入力値に符号化することは、状態入力が選択されなければならないことを示唆する。これを行う方法は複数存在し、例えば、乱数生成器によって状態入力がランダムに選択されてもよい。状態入力はアルゴリズムに従って選択されてもよく、アルゴリズムは複雑で、難読化に寄与してもよい。状態入力値は一定でもよく、又は数列、例えば、1等の一定のインクリメントを有し何らかの始点から開始する整数列から順次取得されてもよく、始点はゼロ、乱数等であってもよい。状態入力を乱数として選択し、次の状態入力の選択の度に1増加することは特に好適な選択である。状態入力がオフデバイス(off−device)で選択される場合、攻撃者は状態入力値がどこで選択され、何であるかを辿る術がない。
プロセッサ550はメモリ510内のプログラム555を実行する。プログラムはプロセッサに、符号化された入力値又は結果の出力値に対してルックアップテーブルを適用させる。ルックアップテーブルは任意の論理又は算術関数のために作成され、よって、ルックアップテーブルのシーケンスを使用することによって任意の計算を実行することができる。これはプログラムの難読化を助ける。この場合、ルックアップテーブルは難読化のために符号化され、中間値も同様である。この場合、単一の関数入力値が複数の符号化された入力値によって表され得るので、難読化は特に有利である。更に、一部の又は全てのテーブル及び/又はテーブルネットワークはマルチ関数特性を有し、マルチ関数特性を有するテーブルネットワークの一部又は全てが結果の検証のための第2のテーブルネットワークとペアにされる。
どこかのポイントで、結果値が求められる。必要な場合、結果は例えば復号テーブル542、例えば図1に示されるテーブル170を使用して復号され得る。しかし、結果は符号化された形式でエクスポートされてもよい。入力値は入力デバイスから取得されてもよく、出力値は画面上に表示されるよう使用されてもよい。
計算は符号化されたデータワードに関して行われる。計算はテーブルルックアップアクセスのシーケンスを適用することによって行われる。使用される入力値は、コンピューティングデバイスの外部から受け取られる入力値であってもよいが、前のルックアップテーブルアクセスによって取得されてもよい。このようにすることで、次に新たなルックアップテーブルアクセスのために使用され得る中間結果が取得される。どこかのポイントで、中間結果のうちの1つが関数の符号化された結果である。
コンピューティングデバイス500は、データ関数入力に状態入力値を割り当てるための乱数生成器を含んでもよい。
図6は、コンパイル方式600をフローチャートとして示す。ステップ610において、レシーバによって第1のコンピュータプログラムが受け取られる。ステップ620において、例えばトークンを特定するために、字句解析器によって字句解析が実行される。場合によっては、マクロ展開等の処理も実行される。ステップ630において、パーサーによってプログラムがパースされる。例えば、パーサーは第1のプログラムのプログラミング言語の形式文法に従い、構文木を生成する。パーサーはプログラム内の異なる言語構築を特定し、適切なコード生成ルーチンを呼び出す。特に、1つ以上のオペレータが特定される。その場合、ステップ640において、コードジェネレータによってコード生成が行われる。コード生成中、いくつかのコード及び必要な場合は付属テーブルが生成される。付属テーブルは2つの関数、必要とされるオペレータのための関数及び状態関数のために構成されたテーブル、すなわち第1のテーブル又は第1のテーブルネットワークを含む。第1のテーブルネットワークのうちの一部は、対応する第2のテーブルネットワークとペアにされる。どの第1のテーブルネットワークを第2のテーブルネットワークとペアにすべきかを決定する方法は様々に存在する。コンパイラは、全ての第1のテーブルネットワークを第2のテーブルネットワークとペア組みするよう構成されてもよい。コンパイラは、第2テーブルネットワークの生成の開始、及び、それらを第1のテーブルネットワークの出力に適用するための対応するコードをコンパイラに指示するスタート及びストップタグを受け取られるコンピュータプログラム内で検出するよう構成されてもよい。コンパイラは、第1のテーブルネットワークのランダムなサンプルのために第2のテーブルネットワークを生成してもよい。
1つ以上のルックアップテーブルによって置き換えられるため、生成されるコードはオペレータを必要とせず、通常は含まない。状態関数はランダムに選択され得る。状態関数はプログラムの結果として選択されてもよく、例えば、状態関数は別の必要なオペレータでもよく、これはテーブルが再利用されることを可能にする。例えば、パーサーは加算演算を特定し、これを加算命令のためのルックアップテーブル、及びルックアップテーブルを正しい値に適用するための生成コードに翻訳する。コンパイラは状態関数としてランダム関数を選択し得る。また、コンパイラは例えば加算、減算、乗算等の関数のセットからランダムに関数を選択してもよい。
ステップ655において、一部のテーブルが複数回生成される可能性は十分にあり、その場合、それらを複数回記憶する必要はないため、生成されたテーブルはテーブルベースに併合される。例えば、加算テーブルが必要とされ、一度だけ生成され得る。全コードが併合され全テーブルが併合されるとコンパイルは終了する。オプションで、最適化ステップが存在してもよい。
典型的には、コンパイラは符号化された領域、すなわち、全ての値又は少なくとも何らかの基準に対応する全ての値が符号化され、すなわち、コードワードビットサイズ(n)を有するプログラムのセクションを使用する。符号化された領域では、ルックアップテーブルの実行によって演算が実行され得る。符号化された領域に入るとき、全ての値が符号化され、符号化された領域を出るとき、値は復号される。基準は、値がセキュリティセンシティブ情報、例えば暗号鍵に関係し又は依存することであり得る。
コンパイラを作成する興味深い方法は次の通りである。ステップ630において、中間コンパイルが実行される。これは、例えばレジスタトランスファ言語等の中間言語へのものでもよいが、マシン言語コードコンパイルでもよい。これは、図6のステップ610〜630に関してはテーブルネットワークを生成しない慣用的なコンパイラが使用され得ることを意味する。しかし、ステップ640において、中間コンパイルに基づきコード生成が行われる。例えば、マシン言語コードが使用された場合、各命令はその命令の対応するオペレータフリー実装、すなわち、その命令のテーブルベース実装によって置換される。これはコンパイラ作成の特定の単純な方法を表す。図6はマシン言語ではなく第2のプログラミング言語を生成するコンパイラを生成するよう使用されてもよい。
一実施形態では、コンパイラは、第1のコンピュータプログラミング言語で書かれた第1のコンピュータプログラムを第2のコンピュータプログラムにコンパイルするためのコンパイラであり、コンパイラは、テーブル及びマシン言語コードを生成することによって第2のコンピュータプログラムを生成するためのコードジェネレータを含み、生成されたテーブル及び生成されたマシン言語コードは合わせて第2のコンピュータプログラムを形成し、生成されたマシン言語コードはテーブルを参照し、コンパイラは、第1のコンピュータプログラム内の算術又は論理式を特定するよう構成され、式は少なくとも1つの変数に依存し、コードジェネレータは、変数の複数の値に関する特定された式の事前に計算された結果及び少なくとも1つの他の式を表す1つ以上のテーブルを生成し、且つ、事前に計算された結果を表す生成された1つ以上のテーブルにアクセスすることにより第2のコンピュータプログラム内の特定された式を実装するためにマシン言語コードを生成するよう構成される。理想的には、特定された式を実装するために生成されたマシン言語コードは、算術又は論理マシン命令自体を含まず、少なくとも、デリケートな情報に関する算術又は論理マシン命令を含まない。テーブルをリバースエンジニアリングした攻撃者は、それが特定された式を表し得るが、他方の式も表し得ることを発見し得る。
これはより少ない算術又は論理演算を含むため、第2のコンピュータプログラムのリバースエンジニアリングに対する耐性を高め、サイドチャネルリークを減少させる。理想的には、全ての算術式及び論理式並びに部分式がテーブルアクセスによって置き換えらえる。算術式若しくは論理式又は部分式を構成する命令が存在しないため、これらは情報を一切漏らし得ない。テーブルは事前に計算され、テーブルに封入される算術又は論理挙動の実行のために消費される電力は、プログラムの実行中に不可視である。
以下、好適なテーブルネットワークの更なる詳細及び更なる実施形態を与える。
上記と同様に、Wを符号化することを望むオペランド(演算の入出力値)の集合とし、「状態」の有限集合Σ、WとΣの基数の積に等しい基数を有する有限集合Vを定める。上記データパス拡張は、それを除去する簡単な方法が存在しない場合、より好適である。攻撃者が各Ω(w)を発見又は分離可能な場合、データパス拡張はセキュリティに関して破綻していると考えられる。同値クラスΩの発見を狙いとする2つの関連する攻撃について述べる。
第1の攻撃は、仮想マシン(VM:virtual machine)及びプログラムがユーザーに出力を提供し、出力は状態依存ではない(実際には、状態に依存しない暗号化されていてもよい1つの変数で足りる)拡張設定におけるものである。例えば、解読エンジンが画面上に画像を提供する。このような設定において、攻撃者は、自身が状態情報を期待するプログラムの変数vごとに以下を実行し得る。攻撃者はオリジナルのv値を書き出し、この変数を他の値tによって置換し始める。正しい画像を生成する全ての値tに関して、攻撃者はそのtが、vが表現する集合Ωv (w)に属することを知る。正しく表示されない画像に関してさえも、攻撃者は結果のエラー画像を比較し、vに代入され、同じエラーを生じる値s及びtが等しい値を表すと結論付けることができる。第2の類似する攻撃は、おそらくは例えばテーブルTに作表されるオペレータ等の関数要素の出力に対する攻撃である。プログラムがテーブル出力T[i]を使用する場合、攻撃者はテーブルの位置iにおける値を変更し得る。アルゴリズムが成功する場合、攻撃者は、位置iにおける新しいエントリが(おそらくは)集合Ω(T[i])に含まれることを知る。
プログラムには冗長性が加えられる。結果として、プログラムの実行中、誤りが検出され、適切な対策が取られ得る。一実施形態では、誤り検査に対する反応は次の通りである。変数の誤りが検出された場合、変数の値が変更され(おそらくは正しくないプログラム出力をもたらす)、そうでない場合、変数の状態は変化するが変数の値は同じままである。
3つのコンポーネントが使用され得る。
−プログラムに冗長性を加える、例えば、オペランド、すなわち関数値に加えて状態を加える。
−予期しない状況を検出するために、プログラムの実行中に(又は実行後に)冗長性を利用する。
−予期しない状況を検出するための冗長性の利用の結果として、アクションを起こす。
例えば、プログラムの異なるバージョンが並列に実行され、例えばインターリーブされてもよい。異なるバージョンは、異なる符号化E及び/又はプログラム内の変数の状態のための異なる初期値を有し得る。より具体的には、プログラムPを有し、m個のバージョンを並列に実行すると仮定する。バージョンiは変数の全て(又は一部)に関して符号化Eを使用し、初期状態ベクトルとしてσを有する。Pのi番目のバージョンをE(P,σ)と表す。好ましくは、符号化E1,E2,…,Emは異なる。
全てのバージョンが並列に実行され、プログラム実行の任意のポイントで、プログラム内の1つ以上の対応する変数がマッチするか否かが検査され得る。1つ以上の変数のマッチングの検査を省いてもよく、全ての検査される変数が全てのプログラムにおいて検査されなくてもよいことに留意されたい。例えば、3つの変数x、y、zを有するプログラムPの3つのバージョンを有する場合、変数xは3つのバージョン全てでマッチすることを検査し、変数yのマッチをバージョン1及び3間で検査し、変数zは全く検査しなくてもよい。ミスマッチの場合、様々な対策を取ることができ、例えばプログラムの実行停止、変更された値での実行継続等である。
複数のプログラムの並列実行はかなり高コストであり得る。以下、より経済的で、テーブルが変更される攻撃を阻止することを狙う第2の実施形態を説明する。説明的な例として、2つの変数の関数fを実装するテーブル内のエントリの変更に対する防御を考える。
次の表記を使用する。v∈Vごとに、E(w(v),σ(v))=vが成立するという条件により、関数w:V→W及びσ:V→ Σを定める。Σの秘密置換Pを仮定する。関数F:V×V→Vは上記したように関数f:W→Wを実装し、よってx,y∈W及びσ,τ∈Σごとに、F(E(x,σ),E(y,τ))=E(f(x,y),g(σ,τ))であり、ここでg:Σ×Σ→Σである。
入力x及びyを用いて関数fを計算する度に、下記の疑似コードによって表現されるように手順を実行することができる。
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)を取ることができる。vの評価は、u∈V,p,q∈Σに対してT[u,p,q]=E(z(u,p,q),P(σ(u))であるように、V×Σ×Σからの要素によってラベル付けされたエントリを有するテーブルTを使用して実行することができる。上記疑似コードでは、x及びyの状態値は平文で現れる。これは、手順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)であるような関数である。vの評価は、全てのu,x,y∈Vに対してT[u,x,y]=E(Z(u,x,y),P(σ(u))であるようなV×V×Vの要素によってラベル付けされたエントリを有するテーブルTを使用して実行することができる。
第3の変形例として、手順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)であるような関数である。aの評価は、全てのx,y∈Vに対してT[x,y]=g(σ(x),σ(y))であるようなV×Vの要素によってラベル付けされ、又は、プログラム内にσ(x),σ(y)が現れる場合はΣ×Σのエントリによってラベル付けされたテーブルTを使用して実行されてもよい。後者の場合、全てのp,q∈Σに対してT[p,q]=a[p,q]である。vの評価は、全てのu∈V,a∈Σに対してU[u,a]=E(z(u,a),P(σ(u))であるようなV×Σからの要素によってラベル付けされたエントリを有するテーブルUを使用して実行することができる。
第4の変形例として、第3の変形例と良く似た手順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)であるような関数である。aの評価は、全てのx,y∈Vに対してT[x,y]=g(σ(x),σ(y))であるようなV×Vの要素によってラベル付けされ、又は、プログラム内にσ(x),σ(y)が現れる場合はΣ×Σのエントリによってラベル付けされるエントリを有するテーブルTを使用して実行することができる。後者の場合、全てのp,q∈Σに対してT[p,q]=a[p,q]である。vの評価は全てのu∈V,a∈Σに対してU[u,a]=E(z(u,a),P(a))であるようなV×Σからの要素によってラベル付けされるエントリを有するテーブルUを使用して実行することができる。
上記手順のうちの最初のものの原理(他の変形例に関して同様の原理が成り立つ)を以下に説明する。攻撃者がFを実装するテーブルT内のエントリ[x,y]をaからa’に変更したと仮定する。入力x及びyをもって上記手順を適用する。したがって、u=T[x,y]=a'及びv=E(z(a',σ(x),σ(y)),P(σ(a')))が得られる。ここで、2つの場合を考える。
まず、w(a)=w(a')と仮定する。a≠a'なので、σ(a' )≠σ(a)が成立する。σ(a)=g(σ(x),σ(y))なので、zの特性に従ってw(u')≠w(u)=w(a)であり、よって、w(a)=w(a')と仮定したため、w(v)≠w(a')が得られ、すなわちw(v)≠w(a' )=w(a)=w(F(x,y))である。言葉で表現すれば、vの値はF(x,y)と等しくならない。つまり、プログラムは正しくない値を有する変数と共に続けられ、攻撃者はw(a)=w(a' )であると考える。w(a)≠w(a' )の場合、vの値はF(x,y)の値と等しい又は等しくない可能性がある。1つ目の場合では、攻撃者はw(a)=w(a')であると考え、これは明らかに防御者を助ける。2つ目の場合では、攻撃者はw(a)=w(a')であると考え、これは攻撃者にとってあまり有用な情報ではない。
上記のバリエーションでは、uの状態がx及びyに基づき期待される状態とマッチする場合にのみw(u)=w(v)であるような変数uのvへの変換を見た。一般化では、状態値をマッチングする代わりに、状態値の関数がマッチングされる。例えば、状態及び期待される状態が所与の数の最上位ビット(MSB)で若しくは所与の数の最下位ビット(LSB)で一致する場合、又は、状態の記号及び期待される状態の記号のチェックサムが一致する場合にのみ、w(u)=w(v)である。
第2の実施形態のバリエーションは、テーブルエントリが変更される攻撃を防ぐ。次に、変数が変更される攻撃に対する保護を提供する第3の実施形態を考える。これを達成するために、保護することを望む変数x∈Vごとに、(通常の条件ではσ(x)と等しいはずである)対応する変数τx∈Σを追跡する。xが更新される度にτも更新される。したがって、x及びτを更新するためのプログラムの部分は同期されなければならない。好ましくは、τの更新はxを更新するために使用される変数を一切使用せず、これらの変数に対応する状態のような変数のみを使用する。例えば、変数x,y∈V及び対応する状態のような変数τx, τyを有し、xをF(x,y)に変更すると仮定する。この場合、τxもg(τx, τy)に更新し、ここでg: Σ×Σ→Σは、F(E(w11),E(w22))=E(f(w1,w2),g(σ12))であるようなものである。状態のような変数は、VではなくΣ内の値を有する変数である。
状態混合関数gは、異なる関数Fごとに異なり得る。つまり、τを更新する方法は、xに適用される変換に依存し得る。より一般的には、τの更新方法は、更新前のx及び/又はxを更新するために使用された関数(方法、手順?)に依存し得る。τ及びσ(x)の値はx及びτの値が更新される度に検査されてもよいが、必須ではない。検査が行われる度に、手順x:=E(ζ(x,τx),P(τx )); τx:=P(τx);(A)が適用され得る。ここで、PはΣの置換であり、関数ζ:V×Σ→Wは、σ(x)=τの場合にのみζ(x,τ)=w(x)であるような関数である。
言葉で表現すれば、状態と期待される状態がマッチする場合、xの値は同じままであるが、状態は変更され、状態と期待される状態がマッチしない場合、xの値が変更される。xの評価は、全てのx∈V,τ∈Σに対してT[x,τ]=E(ζ(x,τ),P(τ))であるようなV×Σからの要素によってラベル付けされたエントリを有するテーブルTを使用して実行することができる。
手順の後、τ=σ(x).が成立することに留意されたい。攻撃者が手順からxの更新又はτの更新のいずれか(両方ではない)を無効化することに成功する場合、次の検査において、τとσ(x)はおそらくは等しくなく、xの値は変更される(攻撃者が上記手順からxの更新を無効化することにも成功しない限り)。
同等に、(A)における割り当ての順番をτx:=P(τx);x:=E(ζ(x,τx),τx )(A’)に変更することができ、ここで、ζ:V×Σ→Wは、σ(x)=P-1 (τ)の場合にのみ、又は同等に、P(σ(x))=τの場合にのみζ(x,τ)=w(x)であるような関数である。上記と同様に、xの評価は、V×Σからの要素によってラベル付けされたエントリを有するテーブルを使用して実行され得る。
代替的な手順は以下の通りである。
x:=E(ζ(x,τ),P(σ(x))); τ:=P(σ(x)); (B)
xの評価は、全てのx∈V,τ∈ΣについてT[x,τ]=E(ζ(x,τ),P(σ(x)))であるようなV×Σからの要素によってラベル付けされたエントリを有するテーブルを使用して実行され得る。この代替例では、τの更新は、U[x]=P(σ(x))であるようなVからの要素によってラベル付けされたエントリを有するテーブルUを使用して実行されてもよく、又は、σ(x)が明示的に現れることが差支えない場合、まずσのためのテーブルによってp:=σ(x)を求め、次にWからの要素によってラベル付けされたエントリを有するテーブルYを使用してτ:=Y[p]を求めてもよい。テーブルYはテーブルUよりも少ないエントリを有する。
より一般的な設定では、検査後のxの新しい状態はσ(x)だけでなくxに依存する。この場合、(B)の代わりに次が使用される。
x:=E(ζ(x,τ),Q(x)); τ:=Q(x)
ここで、Q:V→Σは、全てのv∈Vに対してQ(v)≠σ(v)であるようなものである。xの評価は、全てのx∈V,τ∈Σに対してT[x,τ]=E(ζ(x,τ),Q(x)))であるようなV×Σからの要素によってラベル付けされたエントリを有するテーブルを使用して実行することができる。
図7は、方法700をフローチャートで示す。ステップ710において、電子ストレージ上に記憶された第1のテーブルネットワークのための複数の第1のテーブル入力が取得される。例えば、これらは前のテーブルから受け取られ得る。ステップ720において、複数の第1のテーブル入力に対して第1のテーブルネットワークが適用され、データ関数が計算される。例えば、コンピュータプログラムコードが、複数の入力によって指示されるように、第1のテーブルネットワークのテーブル内の特定のテーブルエントリをルックアップするようプロセッサに命令し得る。複数の入力が使用されるが、これは、これらの一部又は全てを合わせて符号化することによって隠され得る。ステップ730において、電子ストレージ上に記憶された第2のテーブルネットワークのための複数の第2のテーブル入力が取得され、第2のテーブル入力は第1のテーブルネットワークの出力と、複数の第1のテーブル入力のうちの少なくとも1つとを含む。次に、ステップ740において、この第2のテーブルネットワークは複数の第2のテーブル入力に適用され、保護された関数出力を含む第2のテーブル出力を生成する。
また、第2のテーブルネットワークは単一のテーブルルックアップが行われる単一のテーブルでもよいが、このテーブルはステップ744、748、及び749を含む複数のことが一緒に起こるよう構築されており、これは破線の矢印によって示されている。ステップ740において、保護された関数出力を含む第2のテーブル出力が生成される。ステップ744において、複数の第1のテーブル出力のうちの少なくとも特定の1つに関して、未変更の第1のテーブルネットワークが複数の第1のテーブル入力のうちの与えられた少なくとも1つから複数の第1のテーブル出力のうちの当該特定の1つを取得し得たか否かが検証される。この検証に応じて、ステップ748又は749のいずれかが取られる。ステップ748では(すなわち、検証が失敗の場合、すなわち、値を取得し得なかった場合)、保護された関数出力は関数出力と異なる。ステップ749では(すなわち、検証が成功の場合、すなわち、値を取得し得た場合)、保護された関数出力は関数出力と等しい。
保護された出力は次の計算に使用されてもよい。保護された出力は状態値、すなわち、第1のテーブル出力から得られる状態値と合わせて符号化されてもよいことに留意されたい。状態値は好ましくは置換される。関数値と状態値とが合わせて符号化されるため、これは、符号化された値全体が変化したように見えるという効果を有する。好適な実施形態では、攻撃者が748又は749が適用されたかを見ることができないよう、保護された出力は状態値と組み合わせられ、状態値は常に置換される。
当業者にとって明らかなように、方法を実行する多様な態様が可能である。例えば、ステップの順序が変更されてもよく、又は、いくつかのステップが並列に実行されてもよい。更に、ステップ間に他のステップが挿入されてもよい。挿入されるステップは本明細書に記載されるような方法の細分化を表してもよいし、又は方法と無関係でもよい。例えば、ステップ744、748、及び/又は749は好ましくは単一のテーブルルックアップによって、又は異なる利点とのトレードオフで、単一のテーブルネットワーク内のテーブルルックアップのシーケンスによって実行される。更に、次のステップの開始前に所与のステップが完全に終了していなくてもよい。
本発明に係る方法は、方法700をプロセッサシステムに実行させるための命令を含むソフトウェアを使用して実行され得る。ソフトウェアは、システムの特定のサブエンティティが実行するステップのみを含んでもよい。ソフトウェアはハードディスク、フロッピー(登録商標)、メモリ等の適切な記憶媒体内に記憶され得る。ソフトウェアは有線若しくは無線で、又はインターネット等のデータネットワークを使用して信号として送られてもよい。ソフトウェアはダウンロード可能且つ/又はサーバ上で遠隔使用可能であってもよい。
本発明は、本発明を実行するよう適合されたコンピュータプログラム、特にキャリア上の又はキャリア内のコンピュータプログラムまで及ぶことを理解されたい。プログラムは、ソースコード、オブジェクトコード、部分的にコンパイルされた形式等のソースコード及びオブジェクトコードの中間コードの形式、又は本発明に係る方法の実装における使用に適した任意の他の形式を取り得る。コンピュータプログラム製品に係る一実施形態は、上記方法のうちの少なくとも1つの方法の処理ステップのそれぞれに対応するコンピュータ実行可能な命令を含む。これらの命令はサブルーチンに細分化されてもよく、且つ/又は静的に若しくは動的にリンクされ得る1つ以上のファイル内に保存されてもよい。コンピュータプログラム製品に係る他の実施形態は、上記システム及び/又は製品のうちの少なくとも1つの手段のそれぞれに対応するコンピュータ実行可能な命令を含む。
上記実施形態は本発明を限定ではなく説明するものであり、当業者は多数の他の実施形態を設計できることに留意されたい。
請求項において、括弧内の如何なる参照符号も請求項を限定すると解されるべきではない。動詞「備える(又は含む若しくは有する等)」及びその活用形は請求項内に記載されている以外の要素又はステップの存在を除外しない。要素は複数を除外しない。本発明は、複数の異なる要素を備えるハードウェアによって、及び、適切にプログラミングされたコンピュータによって実施され得る。複数の手段を列挙する装置クレームにおいて、手段のいくつかは同一のアイテム又はハードウェアによって具現化されてもよい。単にいくつかの手段が互いに異なる独立請求項に記載されているからといって、これらの手段の組み合わせを好適に使用することができないとは限らない。
図1、2、3、4、5、8a、及び8bの参照番号のリスト
100 テーブルネットワーク
102、104 関数入力値
110 エンコーダ
112、114 状態入力値
122、124 符号化された入力値
130 データ関数及び状態関数のためのテーブル
160 符号化された出力値
162 関数出力値
164 状態出力値
170 デコーダ
180 テーブルネットワーク
202、204 コンピューティングデバイス
210、220 第1のテーブル入力A
212、222 第1のテーブルネットワークA
214、224 第1のテーブルネットワークB
216、226 第1のテーブル出力A
232 第2のテーブルネットワークA
234 第2のテーブルネットワークB
236 第2のテーブル出力A
300 コンピューティングデバイス
305 入力x=E(w,p)
307 出力u
310 第1のテーブルネットワーク
312 データ関数f
314 状態関数g
320 状態抽出器テーブル
322 テーブル320の出力σ(x)=p
330 アラインテーブル
332 z関数
334 置換
340 第2のテーブルネットワーク
410 入力テーブル
420 中間テーブル
430 出力テーブル
500 コンピューティングデバイス
510 ストレージデバイス
521、522 単一入力ルックアップテーブル
531、532 複数入力ルックアップテーブル
5311−5323 単一入力ルックアップテーブル
541 符号化ルックアップテーブル
542 復号ルックアップテーブル
550 コンピュータプロセッサ
555 マシン言語コード
560 I/Oデバイス
800 計算デバイス
805、806、816 状態入力
807、817 状態出力
810、820 状態関数テーブル
830 データ関数テーブル
836 関数入力
837 関数出力

Claims (12)

  1. 関数入力値に関するデータ関数を計算するためのコンピューティングデバイスであって、前記コンピューティングデバイスは前記データ関数のために構成された第1のテーブルネットワークを記憶する電子ストレージを含み、
    前記コンピューティングデバイスは、前記電子ストレージに結合された電子プロセッサを含み、前記電子プロセッサは、前記関数入力値を含む、前記第1のテーブルネットワークのための複数の第1のテーブル入力を取得し、前記複数の第1のテーブル入力に前記第1のテーブルネットワークを適用することによって前記データ関数を計算して、複数の第1のテーブル出力を生成し、前記複数の第1のテーブル出力は関数出力値を含み、前記関数出力値は前記関数入力値に対する前記データ関数の適用の結果に対応し、
    前記電子ストレージは、更に、前記第1のテーブルネットワークに対してなされる変更に前記第1のテーブルネットワークと協力して対抗する第2のテーブルネットワークを記憶し、前記電子プロセッサは、前記複数の第1のテーブル出力を含み、少なくとも1つの入力を前記複数の第1のテーブル入力と共有する、前記第2のテーブルネットワークのための複数の第2のテーブル入力を取得して、前記複数の第2のテーブル入力に前記第2のテーブルネットワークを適用し、前記第2のテーブルネットワークは、前記複数の第1のテーブル出力のうちの少なくとも特定の1つに関して、未変更の第1のテーブルネットワークが前記複数の第1のテーブル入力のうちの前記与えられた少なくとも1つから前記複数の第1のテーブル出力のうちの前記特定の1つを取得することができたか否かを検証し、
    前記第2のテーブルネットワークは、保護された関数出力を含む第2のテーブル出力を生成し、前記検証が成功の場合、前記保護された関数出力は前記関数出力と等しく、前記複数の第1のテーブル入力のうちの少なくとも一部の値に関して前記検証が失敗の場合、前記保護された関数出力は前記関数出力と等しくない、コンピューティングデバイス。
  2. 前記複数の第1のテーブル入力は状態入力値を含み、前記複数の第1のテーブル出力は状態出力値を含み、前記状態出力値は前記状態入力値に対する状態関数の適用の結果に等しく、
    前記第2のテーブルネットワークは、前記複数の第1のテーブル入力と共有される前記第2のテーブル入力が前記状態入力値を含むよう構成され、前記第2のテーブルネットワークは、前記状態入力値への前記状態関数の適用の結果が、前記第2のテーブルネットワークに入力される前記複数の第1のテーブル出力に含まれる前記状態値に等しい場合、前記保護された関数出力が前記関数出力に等しいよう構成される、請求項1に記載のコンピューティングデバイス。
  3. 前記第1のテーブルネットワークは、入力として符号化された入力値を取り、前記符号化された入力値は、前記関数入力値を状態入力値と組み合わせ、合わせて単一の値に暗号化し、
    前記第1のテーブルネットワークは、出力として第1の符号化された出力値を生成し、前記第1の符号化された出力値は、前記関数出力値を状態出力値と組み合わせ、合わせて単一の値に暗号化し、前記状態出力値は、前記状態入力値への状態関数の適用の結果に等しく、
    前記第2のテーブルネットワークは、入力として、前記第1のテーブルネットワークの前記第1の符号化された出力値と、前記状態入力値及び前記関数入力値のうちの少なくとも1つとを取り、前記第2のテーブルネットワークは、出力として、第2の符号化された出力値を生成し、当該符号化された出力値は前記保護された関数出力を含む、請求項1又は2に記載のコンピューティングデバイス。
  4. 前記第2のテーブルネットワークは、出力として、第2の符号化された出力値を生成し、当該符号化された出力値は、前記保護された関数出力値を保護された状態出力値と組み合わせ、合わせて単一の値に暗号化し、前記保護された状態出力は、前記状態出力値への状態置換の適用の結果に等しい、請求項3に記載のコンピューティングデバイス。
  5. 前記第2のテーブルネットワークは、状態テーブルネットワークとアラインメントテーブルネットワークとを含み、前記状態テーブルは、前記状態関数のために構成され、前記プロセッサは、前記状態入力に前記状態テーブルを適用して平行な状態出力値を取得し、前記アラインメントテーブルネットワークは、入力として、少なくとも前記平行な状態出力値と前記第1のテーブルネットワークから受け取られる前記状態出力値とを受け取る、請求項2乃至4のいずれか一項に記載のコンピューティングデバイス。
  6. 前記第2のテーブルネットワークは、変更された状態テーブルとアラインメントテーブルネットワークとを含み、当該状態テーブルは入力として前記状態入力値を受け取り変更された状態値を計算し、前記変更された状態値は、前記状態入力値への前記状態関数及び更なる状態関数の適用の結果に等しく、前記アラインテーブルネットワークは、入力として前記状態出力値及び前記変更された状態出力値を取り、前記状態出力値への前記更なる状態関数の適用が前記変更された状態出力値を生じることを検証する、請求項2乃至4のいずれか一項に記載のコンピューティングデバイス。
  7. 符号化された形式で関数値及び状態値を含む符号化された変数と、状態変数とが平行に維持され、前記符号化された変数と前記状態変数とは検証可能な関係にある、請求項5又は6に記載のコンピューティングデバイス。
  8. 前記第2のテーブルネットワークは、入力として前記関数入力値を取り、前記第2のテーブルネットワークは、前記関数入力値への前記データ関数の適用の結果が前記第1の符号化された出力値内に符号化される前記関数出力値に等しい場合、前記保護された関数出力が前記関数出力に等しいよう構成される、請求項1乃至7のいずれか一項に記載のコンピューティングデバイス。
  9. データ関数を受け取り、第1及び第2のテーブルネットワークを生成するためのコンパイラであって、
    前記第1のテーブルネットワークは、関数入力値を含む、前記第1のテーブルネットワークのための複数の第1のテーブル入力を受け取り、複数の第1のテーブル出力を生成し、前記複数の第1のテーブル出力は関数出力値を含み、前記関数出力値は前記関数入力値への前記データ関数の適用の結果に対応し、
    前記第2のテーブルネットワークは、前記第1のテーブルネットワークに対してなされる変更に対抗するために前記第1のテーブルネットワークと協力し、前記第2のテーブルネットワークは、前記複数の第1のテーブル出力を含み、少なくとも1つの入力を前記複数の第1のテーブル入力と共有する複数の第2のテーブル入力を受け取り、前記第2のテーブルネットワークは、前記複数の第1のテーブル出力のうちの少なくとも特定の1つに関して、未変更の第1のテーブルネットワークが前記複数の第1のテーブル入力のうちの前記与えられた少なくとも1つから前記複数の第1のテーブル出力のうちの前記特定の1つを取得することができたか否かを検証し、
    前記第2のテーブルネットワークは、保護された関数出力を含む第2のテーブル出力を生成し、前記検証が成功の場合、前記保護された関数出力は前記関数出力と等しく、前記複数の第1のテーブル入力のうちの少なくとも一部の値に関して前記検証が失敗の場合、前記保護された関数出力は前記関数出力と等しくない、コンパイラ。
  10. 関数入力値に関するデータ関数を計算するための電子的方法であって、
    前記データ関数のために構成された第1のテーブルネットワークを電子ストレージ上に記憶するステップと、
    前記関数入力値を含む、前記第1のテーブルネットワークのための複数の第1のテーブル入力を取得するステップと、
    前記複数の第1のテーブル入力に前記第1のテーブルネットワークを適用することによって前記データ関数を計算し、複数の第1のテーブル出力を生成するステップであって、前記複数の第1のテーブル出力は関数出力値を含み、前記関数出力値は前記関数入力値への前記データ関数の適用の結果に対応する、ステップと、
    前記第1のテーブルネットワークに対してなされる変更に対抗するために前記第1のテーブルネットワークと協力する第2のテーブルネットワークを記憶するステップと、
    前記複数の第1のテーブル出力を含み、少なくとも1つの入力を前記複数の第1のテーブル入力と共有する、前記第2のテーブルネットワークのための複数の第2のテーブル入力を取得して、前記複数の第2のテーブル入力に前記第2のテーブルネットワークを適用するステップとを含み、前記第2のテーブルネットワークは、前記複数の第1のテーブル出力のうちの少なくとも特定の1つに関して、未変更の第1のテーブルネットワークが前記複数の第1のテーブル入力のうちの前記与えられた少なくとも1つから前記複数の第1のテーブル出力のうちの前記特定の1つを取得することができたか否かを検証し、前記第2のテーブルネットワークは、保護された関数出力を含む第2のテーブル出力を生成し、前記検証が成功の場合、前記保護された関数出力は前記関数出力と等しく、前記複数の第1のテーブル入力のうちの少なくとも一部の値に関して前記検証が失敗の場合、前記保護された関数出力は前記関数出力と等しくない、電子的方法。
  11. コンピュータ上で実行されるとき、請求項10の全ステップを実行するコンピュータプログラムコード手段を含む、コンピュータプログラム。
  12. コンピュータ読み取り可能媒体上に具現化された、請求項9又は11に記載のコンピュータプログラム。
JP2015548541A 2012-12-21 2013-12-19 テーブルネットワークによって構成されたコンピューティングデバイス Expired - Fee Related JP5861018B1 (ja)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201261740726P 2012-12-21 2012-12-21
US61/740,726 2012-12-21
US201361767856P 2013-02-22 2013-02-22
EP13156302 2013-02-22
US61/767,856 2013-02-22
EP13156302.5 2013-02-22
PCT/EP2013/077267 WO2014096117A1 (en) 2012-12-21 2013-12-19 Computing device configured with a table network

Publications (2)

Publication Number Publication Date
JP5861018B1 true JP5861018B1 (ja) 2016-02-16
JP2016507940A JP2016507940A (ja) 2016-03-10

Family

ID=47877774

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015548541A Expired - Fee Related JP5861018B1 (ja) 2012-12-21 2013-12-19 テーブルネットワークによって構成されたコンピューティングデバイス

Country Status (8)

Country Link
US (1) US9594769B2 (ja)
EP (1) EP2936730B1 (ja)
JP (1) JP5861018B1 (ja)
CN (1) CN104919750B (ja)
BR (1) BR112015014946A2 (ja)
MX (1) MX343892B (ja)
RU (1) RU2661308C2 (ja)
WO (1) WO2014096117A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018515812A (ja) * 2015-05-19 2018-06-14 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 暗号化された値での計算

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102013205166A1 (de) * 2013-03-22 2014-09-25 Robert Bosch Gmbh Verfahren zum Erzeugen einer Einwegfunktion
JP6415542B2 (ja) 2013-05-01 2018-10-31 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 難読化に適した電子ブロック暗号装置
JP6046870B1 (ja) * 2013-12-05 2016-12-21 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. テーブルネットワークの繰り返し適用のための計算装置
SG10201405852QA (en) * 2014-09-18 2016-04-28 Huawei Internat Pte Ltd Encryption function and decryption function generating method, encryption and decryption method and related apparatuses
RU2715021C2 (ru) 2014-12-22 2020-02-21 Конинклейке Филипс Н.В. Скрытие исполнения программы
EP3238365B1 (en) 2014-12-24 2019-02-20 Koninklijke Philips N.V. Cryptographic system and method
KR102311340B1 (ko) * 2015-01-15 2021-10-15 한국전자통신연구원 암호화 장치 및 방법
WO2016173882A1 (en) * 2015-04-30 2016-11-03 Koninklijke Philips N.V. Cryptographic device for calculating a block cipher
NL2015745B1 (en) 2015-11-09 2017-05-26 Koninklijke Philips Nv A cryptographic device arranged to compute a target block cipher.
EP3538989B1 (en) * 2016-11-08 2020-03-04 Koninklijke Philips N.V. Electronic calculating device for converting a residue numbers system representation to a radix representation
US20200097257A1 (en) 2016-12-12 2020-03-26 Koninklijke Philips N.V. Electronic calculating device arranged to calculate the product of integers

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10154976A (ja) * 1996-11-22 1998-06-09 Toshiba Corp タンパーフリー装置
JP2005522912A (ja) * 2002-04-08 2005-07-28 オベルトゥル カード システムズ ソシエテ アノニム 暗号化されたアクセスを使う電子的エンティティのセキュリティ化方法
JP2007514193A (ja) * 2003-12-11 2007-05-31 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 各暗号化ラウンドのコア暗号化関数を隠蔽するために置換を用いたブロック暗号化システム
JP2009529819A (ja) * 2006-03-10 2009-08-20 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ データ処理システムの完全性
JP2009543498A (ja) * 2006-07-12 2009-12-03 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ デジタルデータ処理装置の耐改竄性
JP2009543244A (ja) * 2006-07-12 2009-12-03 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 暗号関数を難読化する方法およびシステム
JP2010068135A (ja) * 2008-09-09 2010-03-25 Fujitsu Ltd 不正操作検知回路、不正操作検知回路を備えた装置、及び不正操作検知方法
JP2012070048A (ja) * 2010-09-21 2012-04-05 Toshiba Corp 暗号化装置および復号装置
WO2014072855A1 (en) * 2012-11-07 2014-05-15 Koninklijke Philips N.V. Computing device storing look-up tables for computation of a function

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2754094C (en) 2009-03-10 2017-08-15 Irdeto Corporate B.V. White-box cryptographic system with input dependent encodings
US8914621B2 (en) 2009-04-02 2014-12-16 Infineon Technologies Ag Processing unit that detects manipulations thereof, device comprising two processing units, method for testing a processing unit and a device comprising two processing units
WO2011080487A1 (fr) * 2009-12-30 2011-07-07 France Telecom Procede de generation de table de correspondance pour une boite blanche cryptographique
RU2439693C1 (ru) * 2010-06-04 2012-01-10 Федеральное государственное учреждение "Государственный научно-исследовательский испытательный институт проблем технической защиты информации Федеральной службы по техническому и экспортному контролю" Способ защиты текстовой информации от несанкционированного доступа
US8718280B2 (en) * 2010-12-17 2014-05-06 Apple Inc. Securing keys of a cipher using properties of the cipher process
JP2012182779A (ja) * 2011-01-31 2012-09-20 Nippon Hoso Kyokai <Nhk> 受信装置、放送システム及びプログラム
RU2676454C2 (ru) 2012-12-21 2018-12-28 Конинклейке Филипс Н.В. Вычислительное устройство, содержащее сеть таблиц

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10154976A (ja) * 1996-11-22 1998-06-09 Toshiba Corp タンパーフリー装置
JP2005522912A (ja) * 2002-04-08 2005-07-28 オベルトゥル カード システムズ ソシエテ アノニム 暗号化されたアクセスを使う電子的エンティティのセキュリティ化方法
JP2007514193A (ja) * 2003-12-11 2007-05-31 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 各暗号化ラウンドのコア暗号化関数を隠蔽するために置換を用いたブロック暗号化システム
JP2009529819A (ja) * 2006-03-10 2009-08-20 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ データ処理システムの完全性
JP2009543498A (ja) * 2006-07-12 2009-12-03 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ デジタルデータ処理装置の耐改竄性
JP2009543244A (ja) * 2006-07-12 2009-12-03 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 暗号関数を難読化する方法およびシステム
JP2010068135A (ja) * 2008-09-09 2010-03-25 Fujitsu Ltd 不正操作検知回路、不正操作検知回路を備えた装置、及び不正操作検知方法
JP2012070048A (ja) * 2010-09-21 2012-04-05 Toshiba Corp 暗号化装置および復号装置
WO2014072855A1 (en) * 2012-11-07 2014-05-15 Koninklijke Philips N.V. Computing device storing look-up tables for computation of a function

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6015047261; 山口 晃由、品川 宗介、佐藤 恒夫: '"テーブルネットワーク型AES実装の新手法の提案"' 2008年暗号と情報セキュリティシンポジウム 2A1-1, 20080122, p.1-6, (社)電子情報通信学会 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018515812A (ja) * 2015-05-19 2018-06-14 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 暗号化された値での計算

Also Published As

Publication number Publication date
CN104919750B (zh) 2017-06-06
US20150293911A1 (en) 2015-10-15
RU2015123670A (ru) 2017-01-10
EP2936730A1 (en) 2015-10-28
MX343892B (es) 2016-11-28
MX2015006158A (es) 2015-08-05
JP2016507940A (ja) 2016-03-10
CN104919750A (zh) 2015-09-16
BR112015014946A2 (pt) 2017-07-11
WO2014096117A1 (en) 2014-06-26
EP2936730B1 (en) 2016-06-15
RU2661308C2 (ru) 2018-07-13
US9594769B2 (en) 2017-03-14

Similar Documents

Publication Publication Date Title
JP5861018B1 (ja) テーブルネットワークによって構成されたコンピューティングデバイス
US10180824B2 (en) Computing device comprising a table network
US11362802B2 (en) Cryptographic device arranged to compute a target block cipher
Alpirez Bock et al. White-box cryptography: don’t forget about grey-box attacks
JP5851074B2 (ja) 関数の計算のためのルックアップテーブルを記憶した計算装置
US20150067874A1 (en) Securing accessible systems using cross-linking
RU2692419C1 (ru) Криптографическое устройство и кодирующее устройство
CN105765896B (zh) 用于表格网络的迭代应用的计算设备
JP2017509942A (ja) 暗号アルゴリズムで使用されるときに秘密データを保護する方法
JP7079711B2 (ja) 変換装置、変換方法、変換プログラム及び難読プログラム
US11210135B2 (en) Lightweight dispatcher for program control flow flattening
CN111602367B (zh) 用于保护在使白盒密码算法安全的对策中使用的熵源的方法
CN111480140B (zh) 计算设备和方法
EP3238113B1 (en) Hiding of a program execution

Legal Events

Date Code Title Description
A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20151116

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151125

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151221

R150 Certificate of patent or registration of utility model

Ref document number: 5861018

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees