JP7285850B2 - コンパイルデバイス及び方法 - Google Patents

コンパイルデバイス及び方法 Download PDF

Info

Publication number
JP7285850B2
JP7285850B2 JP2020544783A JP2020544783A JP7285850B2 JP 7285850 B2 JP7285850 B2 JP 7285850B2 JP 2020544783 A JP2020544783 A JP 2020544783A JP 2020544783 A JP2020544783 A JP 2020544783A JP 7285850 B2 JP7285850 B2 JP 7285850B2
Authority
JP
Japan
Prior art keywords
protection
security
dataflow graph
encoding
performance
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.)
Active
Application number
JP2020544783A
Other languages
English (en)
Other versions
JP2021515314A (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
Publication of JP2021515314A publication Critical patent/JP2021515314A/ja
Application granted granted Critical
Publication of JP7285850B2 publication Critical patent/JP7285850B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/629Protecting access to data via a platform, e.g. using keys or access control rules to features or functions of an application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • General Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)
  • Storage Device Security (AREA)

Description

本発明は、コンパイルデバイス、コンパイル方法、及びコンピュータ可読媒体に関する。
プログラムにより使用又は処理されるデータは、高い価値をもち得る。例えば、所与の機能を実装することを可能にする機械学習アルゴリズムは、機械学習工程中に学習された、例えば機械学習モデルの非常に特有の重みを使用する。プログラムのリバースエンジニアリングがそれらの重みを明らかにし得る結果、機械学習アルゴリズムを訓練するために使用されるデータにアクセスすることも、訓練工程を実現する演算能力も必要とせずに、攻撃者はアルゴリズムの機能を簡単に複製し、又は改善し得る。同様に、幾つかのアプリケーションは例えば秘密の暗号鍵といった秘密のデータを使用して演算する。権限の無い使用からそれらの鍵を保護することは重要である。
秘密情報を明らかにするリバースエンジニアリングからコンピュータプログラムを保護する様々な手法が存在する。例えば、様々な知られた難読化方法が、コンピュータプログラムにおけるデータフローを追うことを困難にする。
更に、データであって、そのデータに対してコンピュータプログラムが作用するデータ、例えば変数に符号化が適用される。このような保護されたプログラムをリバースエンジニアリングすることを試みる攻撃者は、プログラムがどのデータに作用するかを知らない。例えば、様々なホワイトボックス符号化が使用される。例えば、完全準同形暗号化が、アルゴリズムを保護するために使用され得る。しかし、プログラムに対するこれらの符号化技術の自動的な適用はリスクを抱えている。
しかし、プログラムに対するこれらの技術の直接的な適用は単純ではない。一方で、プログラム全体に対する符号化の適用が、大きいパフォーマンス上のペナルティーをもたらし得るのに対し、安全性のより低い符号化の適用は、セキュリティーのリスクをもたらし得る。
知られたコンパイラが米国特許出願第2003221121(A1)号において説明されている。知られたコンパイラは、改ざん及びリバースエンジニアリングからソフトウェアを保護する。観測可能な演算が元のソフトウェアコードの意図から解離させられるように、プログラムのデータフローが変換される。意図は、コードの実行を観察することによりデータフローを理解及び復号することが困難であると攻撃者が気付くことである。
保護されたプログラムに使用される保護を自動的に決定する、又は少なくともそれに役立つデバイス及び方法を提供することが有益である。
これらの、及び/又は他の目的を達成するために、コンピュータプログラムのセキュリティーを改善する保護変換の選択のために構成されたコンパイルデバイスが提案される。コンパイルデバイスは、
- コンピュータプログラム表現を受信するように構成された入力インターフェースと、
- プロセッサ回路とを備え、前記プロセッサ回路は、
- コンピュータプログラム表現からデータフローグラフの表現を取得することと、
- データフローグラフの部分に保護変換を割当てることであって、保護変換が、利用可能な保護変換のリストから選択される、割当てること、
- データフローグラフ(200)及び割当てられた保護変換に対するパフォーマンスレベル及びセキュリティーレベルを特定すること、及び、
- パフォーマンスレベル及びセキュリティーレベルが、セキュリティーターゲット及び/又はパフォーマンスターゲットを満たしている場合、保護変換を割当てることを終了すること、を繰り返し行うことと、
- 少なくともセキュリティーターゲット及び/又はパフォーマンスターゲットを満たすデータフローグラフ及び割当てられた保護変換からコンピュータプログラム表現のコンパイル結果を取得することと、
を行うように構成されている。
利用可能な様々なタイプの保護変換が存在し、その保護変換のうちの幾つかは他より良い保護を与え、その保護変換のうちの幾つかは他より多くのリソースを要求し、例えば、それらはより良く、又はより悪く実施する。異なる保護変換が試みられ、パフォーマンス及びセキュリティーに対して評価されるので、改善された選択が行われる。
コンパイルデバイスは電子デバイスであり、例えば、コンパイルデバイスは、コンピュータ、サーバー、デスクトップコンピュータ、ラップトップなどである。コンパイルデバイスは、他のプログラミングツール、又は更なるコンパイルデバイス、例えばリンカーなどと組み合わされる。
本明細書において説明されているコンパイル方法は、広範囲の実用的な用途に適用されてよい。このような実用的な用途は、暗号処理用途、例えば、デジタルメッセージの暗号化、暗号解読、及び認証の難読化を有する。例えば、コンパイル方法は、独自アルゴリズム、例えば学習アルゴリズム、画像処理、音声処理などの難読化に適用される。
本発明による方法は、コンピュータ実装方法としてコンピュータにおいて、若しくは、専用ハードウェアにおいて、又は、両方の組合せとして実装される。本発明による方法のための実行可能コードは、コンピュータプログラムプロダクトに格納される。コンピュータプログラムプロダクトの例として、メモリデバイス、光記憶デバイス、集積回路、サーバー、オンラインソフトウェアなどが挙げられる。好ましくは、コンピュータプログラムプロダクトは、プログラムプロダクトがコンピュータにおいて実行されたときに本発明による方法を実施するためのコンピュータ可読媒体に記憶された非一時的プログラムコードを含む。
好ましい実施形態において、コンピュータプログラムは、コンピュータプログラムがコンピュータにおいて動作させられたときに本発明による方法のすべてのステップを実施するように適応されたコンピュータプログラムコードを含む。好ましくは、コンピュータプログラムは、コンピュータ可読媒体において具現化される。
本発明の別の一態様は、コンピュータプログラムをダウンロードに利用可能にする方法を提供する。コンピュータプログラムが、例えばAppleのApp Store、GoogleのPlay Store、又はMicrosoftのWindows Storeにアップロードされるとき、及び、コンピュータプログラムがこのようなストアからのダウンロードのために利用可能であるとき、この態様が使用される。
本発明の更なる詳細、態様、及び実施形態は、図面を参照しながら、単なる例示として説明される。図中の要素は簡潔かつ明確であるように描かれており、一定の縮尺で描かれているとは限らない。図中、既に説明されている要素に対応した要素が、同じ参照符号を付されている場合がある。
コンパイルデバイスの一実施形態の例を概略的に示す図である。 コンパイルデバイスの一実施形態の例を概略的に示す図である。 コンパイルデバイスの一実施形態の例を概略的に示す図である。 データフローグラフの一実施形態の例を概略的に示す図である。 データフローグラフの一実施形態の例を概略的に示す図である。 利用可能な保護変換のリストにおける保護変換の選択を最適化する方法を示す図である。 利用可能な保護変換のリストにおける保護変換の選択を最適化する方法を示す図である。 データ符号化及び復号システムの一実施形態の例を概略的に示す図である。 データ暗号化及び暗号解読システムの一実施形態の例を概略的に示す図である。 符号化されたソフトウェアの一実施形態の例を概略的に示す図である。 コンパイル方法の一実施形態の例を概略的に示す図である。 一実施形態によるコンピュータプログラムを含む書き込み可能部分を含むコンピュータ可読媒体を概略的に示す図である。 一実施形態によるプロセッサシステムの表現を概略的に示す図である。
本発明は、多くの異なる形態をとる実施形態を許容するとともに、本開示が本発明の原理の例とみなされるのであり、示される、及び説明される特定の実施形態に本発明を限定することを意図したものではないという理解のもとに、1つ又は複数の特定の実施形態が図面に示され、本明細書において詳細に説明される。
以下、理解のために、動作中における実施形態の要素が説明される。しかし、それぞれの要素により実施されるように説明される機能を実施するように、それぞれの要素が構成されていることが明らかとなる。
更に、本発明は実施形態に限定されず、本発明は、本明細書において説明されている、又は、相互に異なる従属請求項に記載されている新しい特徴又は特徴の組合せの各々に内在する。
ここまでに示されているように、権限の無いリバースエンジニアリングからコンピュータソフトウェアを保護する多くの理由が存在する。例えば、ソフトウェアは、暗号処理演算、例えば、暗号化/暗号解読演算又は署名演算を表現する。暗号処理演算に必要な秘密情報を秘密のまま維持する要望が存在する。ソフトウェアは、独自アルゴリズム、例えば、(訓練された)ニューラルネットワーク、画像処理アルゴリズムなどを更に備えてよい。ソフトウェアに組み込まれたノウハウを秘密のまま維持する要望が存在する。これを行う1つのアプローチが、符号化すること、例えばソフトウェアにおいて使用されるデータを暗号化することである。符号化されたデータは、適切に適応されたソフトウェア演算子により演算される。例えば、論理演算又は算術演算などが、例えばテーブルとして、又は有限体上の多項式として符号化されるので、論理演算又は算術演算などが符号化されたデータに作用し得る。このような演算は、ホワイトボックス暗号法の分野において知られている。しかし、これらの技術は、暗号法以外にも同様に適用され得る。符号化されたデータに対して演算するために、データを符号化すること、及び、テーブルを使用することの例が、S.Chowらによる「White-box Cryptography and an AES Implementation」に記載されている。
様々なタイプのソフトウェアにデータの符号化を適用することに大きい将来性が存在するので、データの符号化を自動化する要望が存在する。しかし、これがそれほど簡単ではないことが分かった。実施形態は、符号化される変数及び演算を自動的に決定するシステム及び方法を説明している。
想定される使用例が図4aに示される。図4aは、ノード410、例えばコンピュータ、及び、異なるソフトウェア/ハードウェアブロックへの符号化の想定されるディストリビューションを示す。ノード410は、データ生成器420、例えばセンサーを備える。ノード410は、生成器420により生成されたデータにアルゴリズムを適用し、アルゴリズム432及び433が示されている。例えば、アルゴリズム432は、信号処理アルゴリズムであり、アルゴリズム433は、秘密鍵を使用したAES暗号化である。リバースエンジニアリングされることから独自の信号処理アルゴリズムを保護することが目標とされる。暗号化の秘密鍵が攻撃者により取得されることから暗号化、例えばAES暗号化を保護することが目標とされる。これらの目標を達成するために、ノード410は、データであって、そのデータにノード410が演算をするデータの符号化を使用する。3つの異なる符号化、すなわち、符号化481、符号化482、及び符号化483が示される。この場合において、ノード410の出力は、符号化483に従って符号化される。概して、これが必須というわけではなく、出力は、符号化されていなくてよく、例えば、この場合、AESのもとでのみ暗号化される。ノード410の出力は、例えばサーバーにおいて動作するソフトウェア460により更に処理される。本例において、ソフトウェア460は、例えば入来データを復号するために、少なくとも部分的に符号化483を使用するが、符号化されないデータに対して部分的に動作してもよい。
別の例が図4bに示される。昨年中に、完全準同形スキーム及び符号化スキームに大幅な進展があった。準同形スキームを使用することが符号化されたデータに対する演算をより簡単にする。最初に、2009年にGentryにより完全準同形暗号化スキームが提案された。このようなFHEスキームは、両方の基本的な代数的演算、すなわち加算及び乗算を順守している。それ以降、多くの他のスキームが提案されている。Simple Encrypted Arithmetic Library(SEAL)が、適切に設計された、及びドキュメント化された準同形暗号化ライブラリを提供することを目的とした実用的なライブラリである。SEAL自体はRLWE問題に依存したFV準同形暗号化スキームを使用する。任意の(完全)準同形暗号化スキームにおいて、3つの鍵、すなわち、
- 平文を暗号文に暗号化するために使用される公開鍵
- 暗号化された領域において演算(例えば乗算)を実施するために使用される評価鍵
- ユーザーが出力を暗号解読することを可能にする秘密鍵
が関与する。
想定される使用例が図4bに示される。図4bは、ノード410、例えばコンピュータ、及び、異なるソフトウェア/ハードウェアブロックへの、符号化/復号、暗号化/暗号解読関数、及び、秘密鍵/公開鍵/評価鍵のディストリビューションを示す。ノード410は、データ生成器420、例えばセンサーを備える。データ生成器は公開鍵pubKを使用してデータを暗号化する。ソフトウェア430は、評価鍵(evalk)を使用して暗号化された領域においてソフトウェア上で演算を実施する。場合によっては複数の評価鍵を使用する、複数のアルゴリズムが存在する。演算の結果はクラウド450において動作するソフトウェア460に送信される。例えば、ソフトウェア460は、セキュア環境において動作するという信頼性がある。ソフトウェア460は、暗号解読アルゴリズム462を適用することにより演算結果を暗号解読する。例えば、暗号解読は、何らかのセキュア要素472に記憶された秘密鍵を使用する。したがって、ソフトウェア430は、暗号化されたデータに対して少なくとも部分的に動作する。
(F)HEが使用される場合、3要素の組(秘密鍵、公開鍵、評価鍵)が生成され、異なるソフトウェア及びハードウェアコンポーネントにわたってディストリビューションされ得る。例えば、次のとおりである。
- 公開鍵は、データを生成することを担当するソフトウェア/ハードウェア要素にディストリビューションされ得る。この鍵に対して保護は要求されない。
- 評価鍵は、データを処理することを担当するソフトウェア/ハードウェアコンポーネントにディストリビューションされ得る。この鍵に対して保護は要求されない。一実施形態において、この鍵は、暗号解読が実現可能であるように、生成されるノイズが十分小さい限り使用される。
- 秘密鍵は、入力データを暗号解読することを担当するソフトウェアに結び付けられたセキュア要素に配備され得る。
別の用途が図5に示される。図5は、符号化された領域における演算の表現を概略的に示す。ホワイトボックス暗号法の分野から生まれた符号化スキームが、アルゴリズム及びそのデータのリバースエンジニアリングをより困難にするために設計されている。符号化は、例えば、(i)ニブル、(ii)剰余数系、又は(iii)代数変換などに基づき得る。図5は、符号化された領域において実現される演算の抽象的表現を示す。整数環(R,+,*)上の評価関数f()の代わりにRの元が、変換T()により異なる領域Aに変換され、その結果、同じ関数f()が、Aにおいて表現される元と、代替的な演算
Figure 0007285850000001
とに基づいて実施され得る。この実施はF()と表記される。このようなスキームは、T()が、データを暗号化するための公開鍵の使用を表現し得、F()において実現される演算が、符号化された演算及び何らかのタイプの評価鍵を関与させ、及び、逆変換が秘密鍵の使用に等しいという意味で、(F)HEスキームとある程度同様である。しかし、ホワイトボックス暗号法では、コード自体に変換T()及びT-1()の使用をマージさせることが通常である。抽出の困難さは、例えば、それらを実装する大きいテーブルなどをリバースエンジニアリングすることの困難さに依存する。
一実施形態において、コンパイラは、プログラムPを自動的に生成するように構成され、その中で、コンピュータプログラム、その変数、及び/又はその処理されたデータが保護される。例えば、コンパイルされたプログラムの部分は、暗号化された領域において実行する。これは、プログラマーが多くの場合、平文領域においてプログラムをコーディングし、後においてのみ、プログラマーは、暗号化された領域においてこのようなプログラムを実行することに興味を示すので、有益である。暗号化された領域におけるプログラムPの生成は、コンパイラにより実現される。
図1aは、コンパイルデバイス100の一実施形態の例を概略的に示す。
コンパイルデバイス100は、コンピュータプログラム表現を受信するように構成された入力インターフェース110を備える。コンパイルデバイス100は、コンピュータプログラムのセキュリティーを改善するように保護変換を選択するように構成される。例えば、コンピュータプログラムは、高レベルコンピュータプログラムにより、例えばC、Pascal、C#などにより表現され、例えば記述される。例えば、コンピュータプログラム表現は、ソースコードである。コンピュータプログラム表現は、例えばマクロを実行することにより、又はコンピュータコードをパースすることによりコンピュータプログラムコードを前処理するように構成される別のコンパイルデバイスの出力である。例えば、コンピュータプログラムコード表現は、高レベルコンピュータコードのデータフローグラフの表現である。コンピュータプログラム表現は、コンパイラ中間言語に従ったものであってもよい。
入力インターフェース110は、通信インターフェースである。コンパイルデバイス100は、(図1aに示されていない)コンピュータネットワークを介して他のコンピュータデバイスと通信する。コンピュータネットワークは、インターネット、イントラネット、LAN、WLANなどである。コンピュータネットワークは、インターネットである。コンピュータネットワークは、全体的に、又は部分的に有線であってよく、及び/又は、全体的に、又は部分的に無線であってもよい。例えば、コンピュータネットワークは、Ethernet接続を含む。例えば、コンピュータネットワークは、例えば、Wi-Fi、ZigBeeなど無線接続を含む。コンパイルデバイスは、必要に応じて他のデバイスと通信するように、例えばコンピュータプログラム表現を受信するように構成された接続インターフェースを備える。例えば、接続インターフェースは、コネクタ、例えば有線コネクタ、例えば、Ethernetコネクタ、又は、無線コネクタ、例えばアンテナ、例えばWi-Fi、4G又は5Gアンテナを備える。コンピュータプログラム表現は、電子的形態により受信される。
コンパイルデバイスの実行は、プロセッサ回路において実装され、その例が本明細書に示される。図1aは、プロセッサ回路の機能ユニットである機能ユニットを示す。例えば、図1aは、プロセッサ回路の可能な機能的体系の設計図として使用される。プロセッサ回路は図1aにおけるユニットとは別に図示されていない。例えば、図1aに示される機能ユニットは、デバイス100に、例えばデバイス100の電子メモリに記憶された、及び、デバイス100のマイクロプロセッサにより実行可能なコンピュータ命令において全体的に、又は部分的に実装されてよい。ハイブリッド型の実施形態において、機能ユニットは、ハードウェア、例えばコプロセッサにおいて部分的に、及び、デバイス100に記憶された、及び、デバイス100において実行されるソフトウェアにおいて部分的に実装される。図1bは、コンパイルデバイス100の可能な実施形態を示す。図1bは、入力インターフェース110、プロセッサ回路160、及びメモリ161を備えるコンパイルデバイス100を示す。メモリ161は、データ及び/又は命令ストレージに対して使用される。
図1aに戻る。コンパイルデバイス100は、例えば入力インターフェース110から受信されたコンピュータプログラム表現を記憶するためのストレージ120を備える。ストレージ120は、例えばデータフローグラフなどの中間表現を記憶するために使用される。
コンパイルデバイス100は、パース部130、オプティマイザー部140、及びコンパイルユニット150を備える。パース部130は、データフローパーサー132及び符号化分析器134を備える。パース部130及び符号化分析器134は、コンピュータプログラム表現からデータフローグラフの表現を一緒に取得し、データフローグラフにおけるノードの少なくとも一部が、符号化されるとして、又は、符号化されないとしてマーキングされる。例えば、データフローパーサー132は、コンピュータプログラム表現からデータフローグラフを取得するように構成される。符号化分析器134は、セキュリティーターゲット及び/又はパフォーマンスターゲットをデータフローグラフの1つ又は複数の部分に関連付けるように構成される。
例えば、コンピュータプログラムのコンパイルフラグ又は他の注釈が規定され、これを通してユーザーが、プログラムをコンパイルする前に保護又はパフォーマンス目標を設定し得る。一実施形態において、コンパイラは、プログラムを分析してプログラムの中間表現を取得し、繰り返して、パフォーマンスを推定し、及び/又は、想定されるセキュリティーレベルを推定する。パフォーマンスの推定は、例えば演算をカウントすることにより静的に、又は、例えばプログラムをシミュレーションすることにより動的に行われる。セキュリティーの推定は、例えばそれぞれのセキュリティー手段に関連した固定のセキュリティーレベルを参照することにより静的に、又は、プログラムのシミュレーションに自動化された攻撃を適用することにより動的に行われる。例えばコンパイルフラグを通してユーザーにより設定された目標を達成する異なるタイプの符号化及び保護が適用されるまで、又は、ターゲットとされるコンパイルフラグが実行不可能であるとシステムが判定するまで繰り返しが行われる。
すべてのデータが同等に重要というわけではないので、セキュリティー目標は重要である。例えば、暗号処理データ、例えば鍵データは、アルゴリズムの難読化に対する符号化より高いセキュリティーレベルを必要とする。注釈は、例えば、変数、関数、マクロなどのプログラム構築前のプラグマとして含まれ得る。
一実施形態において、コンパイルデバイスは、どのノードが保護されるか、例えば符号化されるか、どのノードが符号化されることを必要としないかを特定する。更に、中間表現、例えばデータフローグラフが、符号化されるノード及び符号化されないノードのディストリビューションを改善するように補正される。ノードに、保護される、例えば符号化される、及び保護されない、例えば符号化されないことを割当てる特定の有益な手法は、同じ出願人により出願された欧州特許出願(代理人整理番号2017PF02452)の方法を使用することである。例えばプログラムにおいて符号化される変数及び演算を自動的に決定することが開示されている。これは、プログラムの中間表現において危険な状況を探索することにより実行される。攻撃者がコードフローなどを簡単にトレースすることができないように、コード複製及び演算の後方伝播により危険な状況が解決される。
符号化分析器134の出力は、どの変数が保護されなければならないか、どの変数がプログラムにおいて保護されてはならないかを含み、更に、符号化分析器134は、変数に対するセキュリティーターゲット及び/又はパフォーマンスターゲットを指定する。後者は、セキュリティーターゲット及び/又はパフォーマンスターゲットをデータフローグラフの部分に関連付けることにより表される。
符号化分析器134は、パフォーマンス/セキュリティー目標をどれほど最良に達成するかを指定することを必要としない。異なるタイプの保護、例えば符号化がセキュリティーとパフォーマンスとに関連した異なるトレードオフを含むので、保護を選択することは取るに足らないタスクではない。多くの場合、より秘密性の高い符号化は、より高いCPU又はメモリ要求を要求する。更に、異なるタイプの符号化は、より多い、又は、より少ないいわゆるコピーファイネットワーク、例えばプログラムにおけるデータムのフローのみに関連した部分に適用され得るが、これは、コンパイル中の演算パフォーマンスに影響を与え、及び、実行中のリソース、特にプログラムサイズに影響を与える。
例えば、データフローグラフは、静的単一代入(SSA)形成である。これは、分析及び最適化を実施するためのコード表現としてソフトウェアコンパイラにより使用されるよく知られた、一般的な、及び効果的なフローエクスポーズドフォームである。静的単一代入に基づく効果的なアルゴリズムが、定数伝播、冗長演算検出、デッドコード除去、誘導変数除去、及び他の要求を解決するために発展してきた。
特にSSA形式でデータフローグラフを取得するための、効果的なアルゴリズム、及び、データフローグラフに基づいてコンピュータプログラムを最適化及び/又はコンパイルすることが知られている。好ましい実施形態が静的単一代入に関連して説明される。標準的なコンパイラに対する背景を提供する標準的な参考文献は、「Advanced Compiler Design & Implementation」、1997、Steven Muchnick著(ISBN 1-55860-320-4)である。
したがって、部分的なコンパイルの後に、静的単一代入(SSA)プロパティをもつデータフローグラフの表現が取得され、すなわち、各変数が厳密に1回だけ代入され、及び、各変数が使用される前に各変数が規定される。このグラフにおいて、エッジは(一時的な)変数でありノードは、演算(+、-、*、…)、メモリアクセス(*p=…)などである。
SSA形式によるデータフローグラフの例が図2aに示される。実際には、データフローグラフは、遥かに大きく、この場合、図2aは、より大きいデータフローグラフの細部とみなされる。データフローグラフは、プログラム全体のデータフローグラフである必要はないが、例えばライブラリ、ルーチン、基本ブロックなどといった部分のデータフローグラフである。
SSAグラフ、特にSSAグラフ200は、コンピュータプログラムコードの中間形式、例えばソースコードを表す、あるタイプのデータフローグラフである。SSAグラフは有向である。(ノードとも呼ばれる)SSAグラフの頂点は演算を表す。SSAグラフのエッジは、例えば仮想レジスタ、又はメモリ、例えばメモリの選択された部分が挙げられるデータホルダー、例えばレジスタを表す。図2aは、コンピュータプログラム(フラグメント)に対応した例示的なSSAグラフを示す。本明細書において図形的に示されているSSAグラフは、コンパイルデバイス100の電子メモリにおいてデータ構造体として表されることに留意されたい。
SSAグラフにおける2タイプのノードは特別なもの、すなわち、コピーノード及びファイノードである。SSAグラフは、入来値を1つ又は複数のノードにディストリビューションするコピーノードを含む。図2aは、1つのこのようなコピーノード、すなわちコピーノード214を示す。ファイ演算は、グラフにおける制御フローによりもたらされるデータ選択を実装するために使用される。例えば、z=ファイ(a,b)は、aに対する最新の代入が、bに対する最新の代入より最近である場合、aがzに代入されなければならないことを意味する。bに対して逆のことが言える。例示的なグラフ200は、2つのファイノード、すなわちファイノード212及びファイノード216を含む。好ましくは、ファイノードがある種の符号化により保護される場合、同じ符号化スキームに従ってすべての入力が符号化されることを確実なものとすることが望ましい。
パース及びSSA変換(必要な場合)の後に、結果として得られるデータフローグラフは、ファイノード及びコピーノードのみからなるサブグラフ、又はサブネットワーク-いわゆるコピーファイネットワーク-を含む。このようなサブグラフの境界は、例えば算術演算、メモリ演算などの異なるタイプのステートメントを使用して、ノードにより表される。後者は、演算ノードと呼ばれる。
実行中にライブ状態である、及び、複数のソース及び複数のターゲットを含むデータムは、コピーファイネットワークとしてSSAデータフローグラフにおいて視認可能である。したがって、データフローがSSAフォーマットである場合、コピーファイネットワークとして複数のソース及び複数のターゲットを使用してデータムが識別される。しかし、これが必須というわけではない。例えば、異なるタイプのデータフローグラフは、複数のソース及び複数のターゲットを使用してデータムを識別する異なる手法をとる。本明細書において説明されている好ましい実施形態は、SSA型データフローグラフを使用するので、本明細書ではコピーファイネットワーク、又はコピーファイサブグラフが引き続き参照される。
データフローグラフ200は、3つのノードを含むコピーファイネットワーク210を示す。図2aにおける他のノードは、他の演算を表す。例えば、ノード222及び234は、インクリメント演算、例えば「i:=j+1」を表す。例えば、ノード224は、メモリからの読み出しの演算を表す。例えば、ノード226は、パラメータ入力、例えばパラメータからルーチンへの入力を表す。例えば、ノード236は、算術演算を表す。コピーファイネットワークにおけるノードは、図2aにおいて斑点パターンを付してマーキングされている。図2aは、コピーファイネットワークの入力側におけるノード220、及び、コピーファイネットワークの出力側におけるノード230を示す。
符号化分析器134は、符号化されるとして、又は、符号化されないとして、データフローグラフにおけるノードをマーキングし、セキュリティーターゲット及び/又はパフォーマンスターゲットを更に関連付ける。例えば、これは、例えばデータフローグラフに対するパーシングと一緒に、コンパイルパスにおいて実行される。フロー制御演算、例えば、コピー又はファイノードはマーキングされることを必要としない。オプティマイザー部140は、例えば更にマーキングするとして、特定の保護変換をデータフローグラフの部分に更に関連付ける。
符号化される、又は、符号化されないとしての、ノードの、及び特定の保護変換のマーキングは、コンパイルユニット150により後で使用される。例えば、コンパイルユニット150は、符号化されないノードに作用するようにネイティブな演算を使用する。例えば、インクリメント演算は、例えばマシン「INC」命令により、コンパイルユニット150により実装され得る。符号化された演算に対して、コンパイルユニット150は、符号化された演算を使用し、例えば、演算を実施するようにライブラリがコールされる。例えば、コンパイルユニットは、符号化されたインクリメントを実施するために「ENC_INC()」演算をコールする。符号化された関数は、符号化されたデータを受信して、符号化されたデータを出力する。例えば、符号化された演算は、テーブルとして、又は有限体上の多項式として実装される。
プログラム、その変数、及び/又は、処理されたデータを保護するために、暗号化された領域において実行されるプログラムPを自動的に生成する工程を含むことが望ましい。例えば、プログラマーは、平文領域においてプログラムを記述する。後においてのみ、プログラマーは、暗号化された領域においてプログラムを実行することに興味を示す。自動的に、又は、手動により、又は、部分的に手動により/部分的に自動的にノードをマーキングすることにより、コンパイラユニット150は正しい符号化された、又は符号化されない関数をコールするために必要な情報を含む。更に、これらのことに多くの注意を払わなくても、プログラムの開発は行われ得る。
例えば、一実施形態において、コンパイルデバイスは、符号化領域の数nを選択し、符号化領域の数に演算を区切る。数を増やすことは、例えばホワイトボックス攻撃に対するセキュリティーを高めるが、数を増やすことは、プログラムのフットプリントを増やすことにもなる。
符号化される、又は、符号化されないとしてノードをマーキングすることは、符号化ルールに従って行われる。例えば、ルールベースは、幾つかのノードが符号化されないことを要求する。例えば、メモリアクセス、外部関数コール、及びパラメータに対応したノードは、符号化されないとしてマーキングされる。例えば、一実施形態において、幾つかのノードが、ルールに従って符号化されないとしてマーキングされ、残りのすべてのノードが、符号化されるとマーキングされる。
例えば、一実施形態において符号化に対する制約はインターフェースに由来し、例えば、コンピュータコードは使用される符号化に適合しないデバイス、メモリ、又は、他のソフトウェアとインターフェース接続しなければならない。符号化に対する制約は、使用されるコンパイルユニット又はライブラリにおける制約に由来する場合もある。例えば、幾つかの演算は、例えば浮動小数点数に対する演算など、符号化された形態においてサポートされない。
例えば、一実施形態において、2ステップアプローチが使用される。例えばメモリアクセス、外部関数コールなどに対応したものといった、幾つかのノードは、ルールに従って符号化されないものでなければならない。他のすべてのノードは、最初に、符号化されるとしてマーキングされる。更なるルール、例えばヒューリスティックに従って、幾つかのノードは、それらが最初に符号化されていた場合でも、符号化されないとしてマーキングされる。例えば、パース後に幾つかの演算が暗号化された形態において実施されることができないこと、例えばライブラリがそれらをサポートしていないことが判明する。例えば、幾つかのノードは、浮動小数点数に対する演算に対応するが、符号化された浮動小数点演算が利用可能ではない場合がある。コンパイルユニットが警告又は出力ログなどを出力することにより、プログラマーは、どの演算が符号化された形態において実施されるか、及び、どの演算が符号化された形態において実施されないかを検証し得る。一実施形態において、プログラマーは、コンピュータプログラム表現にコンパイラディレクティブを挿入する。例えば、ソースコードにおいてプログラマーは、どの変数が符号化されるか、又は、どの変数が符号化されないかを示す。一実施形態において、コピーファイノードを除くすべてのノードが、符号化される、又は符号化されないとマーキングされる。
一実施形態において、パース部130は、更に、符号化に適応するために、例えばファイノードが複数の異なる符号化を受信することを回避するために、又は、危険なことが知られているデータフローグラフにおけるサブグラフを回避するために、データフローグラフを修正する。
コンパイルデバイス100は、オプティマイザー部140を備える。オプティマイザー部140は、データフローグラフの部分に保護変換を割当てるように構成される。例えば、デバイス100は、利用可能な保護変換のリストを含み、利用可能な保護変換のリストから、オプティマイザー部140は保護変換を選択する。
オプティマイザー部140は、パフォーマンス分析器142とセキュリティー分析器144とを備える。パフォーマンス分析器142は、データフローグラフ200及び割当てられた保護変換に対するパフォーマンスレベルを特定するように構成される。パフォーマンスは、典型的には、時間パフォーマンスに関連しているが、サイズパフォーマンス、例えばコンパイルされたプログラムのサイズに関連していてもよい。パフォーマンスのハイブリッド型の定義も可能である。
パフォーマンスレベルが特定され得る幾つかの手法が存在する。例えば、パフォーマンス分析器142は、データフローグラフにおける複数のタイプの演算の数をカウントして、データフローグラフにおける複数のタイプの演算が、割当てられた保護変換に従って、符号化された演算により置換されるときの想定されるコストを取得するように構成される。
例えば、パフォーマンス分析器142は、データフローグラフ200におけるノードの数、及び、それらのノードが実施する演算タイプをカウントする。各保護手段は、利用可能な保護手段のリストと一緒に記憶される関連するパフォーマンス上のペナルティーを伴う。例えば、パフォーマンス分析器142は、インクリメント演算である15個のノードが存在することを特定し、そのうちの10個が、インクリメント演算をENC_INCテーブル参照により置換することにより符号化され、そのうちの2つが、マスクされるが平文データに対して演算し、及び、そのうちの3つが保護されない。関連するパフォーマンスは、それぞれ、例えば、1.6、0.4及び0.1であり、合計で10*1.6+2*0.4+3*0.1=17.1となる。代替的に、パフォーマンス上のペナルティーが推定され、この場合においては、それぞれ、1.5、0.3及び0であり、合計で10*1.5+2*0.3=15.6となる。これは、ループを考慮しないが、演算により被るパフォーマンス上のペナルティーの粗い推定を取得するのに十分である。
より高度な実施形態において、例えば、コンパイル時にループが実行される回数を推定することにより、又は、例示的な入力に対してコンピュータプログラムをシミュレーションすることにより、ループが考慮される。例えば、シミュレーションが中間表現に対して、例えばデータフローグラフに対して直接行われ、又は、一時的なコンパイルが、例えばプロファイラーを使用して、シミュレーションを目的として実施される。一実施形態において、シミュレーションが例示的な入力データに対して行われた後、ノードが実行される回数が記録され、例えばプロファイル化される。次に、記録された実行回数が、静的なパフォーマンスレベルを量るために使用される。例えば、上記の例を続けることにより、ノードのうちの1つが、10回実行されるが、残りのものは一度だけ実行される。この場合において、前者のノードはパフォーマンスレベルを演算するときに10倍大きい重みを受け取る。
どのノードが符号化されるか、及びどのノードが符号化されないかを特定した後、保護手段、例えば、符号化、及び、符号化間の変換が、データフローグラフに挿入される。変換を挿入することがデータフローグラフを有効に維持し、すなわち、符号化された、及び/又は符号化されない演算を含むデータフローグラフにおいて、プログラムは変換無しでは適切に動作しない。
オプティマイザー部140は、データフローグラフ200及び割当てられた保護変換に対するセキュリティーレベルを判定するように構成されたセキュリティー分析器144を備える。セキュリティーレベルは、データフローグラフ全体、又は、そのサブグラフのレベルにおいて演算されてよいが、個々のノード及び/又はエッジのレベルにおいて演算されてもよい。例えば、一実施形態において、セキュリティーターゲットは、データフローグラフにおける1つ又は複数のエッジ及び/又はノードに割当てられる。セキュリティーターゲットは、データフローグラフにおける1つ又は複数のエッジ及び/又はノードに対して取得されたセキュリティーターゲットから取得される。セキュリティーレベルを推定することは、パフォーマンスレベルを推定することと同様の手法により行われる。例えば、個々のノード及び/又はエッジのセキュリティーレベルを追加する。典型的には、ノードが実行される想定される回数を使用してノードを量ることは必要とされない。
セキュリティーレベルは、所望の保護のタイプを示す。例えば、セキュリティーターゲットが、セキュリティータイプを含む。セキュリティータイプの例は、機密性及び完全性を含む。前者では、攻撃者は変数の平文値を取得することが可能であってはならないのに対し、後者では、攻撃者は値を変更することが可能であってはならない。変更された値は検出されるが、演算の最終結果がランダム化される限り、それが発生することを可能にされてもよい。例えば、後者は、例えば一定値又は変数の関数といったチェック値と一緒に変数を符号化することにより達成される。チェック値が正しい限り、それは変数を使用した演算に影響を与えないが、チェック値が正しくない場合、それが影響を与えるので、攻撃者が変更を加えた後は、後の演算が歪曲される。例えば、国際特許出願WO2015082212(A1)、「A computing device for iterative application of table networks」を参照されたい。
セキュリティーターゲットは、攻撃タイプを更に含んでよい。攻撃タイプは、攻撃のタイプであって、コンパイラがその攻撃のタイプに対して保護をしなければならない攻撃のタイプを示す。例として、ソフトウェアが動作している間に攻撃者がソフトウェアに対する完全な読み出し及び書き込みアクセスが可能であるホワイトボックス、攻撃者が入力値及び出力値、及び、プログラム又はプログラムの一部が実行するのにかかる時間にアクセスすることが可能であるサイドチャネルタイム、攻撃者が入力値及び出力値、及び、プログラムが実行している間に消費される電力にアクセスすることが可能なサイドチャネル電力が挙げられる。サイドチャネル攻撃から保護するために、保護手段は、定時間又は定電力演算、又は、ランダム化ダミー演算の挿入を含み得る。
セキュリティーターゲットは、攻撃労力、例えば、攻撃者がプログラムを攻撃することに注ぎ込むと想定される労力の大きさを含み得る。例えば、攻撃労力は、高い、中程度、ベストエフォートであり得る。労力は、100、10、1などの数値としても表され得る。
例えば、符号化されたインクリメントENC_INCによりインクリメント演算を置換することは、ホワイトボックスに対して中程度のセキュリティーレーティングをもたらし、定時間に対して高いレーティングをもたらす。しかし、インクリメントが他の演算と組み合わされた保護は、より高いホワイトボックスレーティングなどをもたらす。
より高度な実施形態において、セキュリティーレベルは自動化されたジェネリック攻撃を使用して推定される。ジェネリック攻撃は、プログラムの内部の知識情報無しで動作する攻撃である。攻撃のタイプなどの知識情報が必要とされないので、ジェネリック攻撃は、コンパイラ自体によるプログラムに対してさえも動作し得る。
例えば、一実施形態において、セキュリティーターゲットは、入力変数、及び秘密変数を示す。サイドチャネルタイプ演算に対して、秘密変数がプログラムにおいて観測可能な情報と相関しないか、ほとんどしないことが望ましい。相関に対して、プログラムの保護されていないバージョンにおける秘密変数が使用されるのに対し、観測可能な情報に対して、割当てられた保護手段を伴うプログラムが使用されることに留意されたい。
セキュリティーレベルは、次のことにより推定される。
- 秘密変数の異なる値に対して、及び、任意選択的に入力値の異なる値に対してコンピュータプログラムの複数回の実行を実現すること、観測可能なものの値、例えば、コンピュータプログラムの実行中に入力変数に依存するコンピュータプログラムの少なくとも1つの変数、例えば、実行を通して変数により引き受けられる値のシーケンスを記録すること、及び/又は、少なくとも1つの変数に対して実施される演算の演算時間、及び/又は、推定された電力消費などを記録すること。例えば、秘密値は、秘密鍵、又は秘密鍵の一部、例えば最初のバイトである。例えば、入力値は、秘密鍵を使用して暗号化される入力メッセージである。幾つかの変数が秘密鍵と相関する場合、それらの変数は、秘密鍵に関する情報を漏らし、これは望ましくないことである。
- 割当てられた保護変換を伴わない秘密変数と観測可能なもの、例えば記録された値又は演算時間などとの間の相関を演算すること。
観測可能なもの、例えば少なくとも1つの変数の間の相関が高い場合、秘密変数が観測可能な変数から推定されるので、セキュリティーは低い。相関が0に近いか、又は理想的に0である場合、セキュリティーはより高い。例えば、セキュリティーターゲットAは、0.01未満の相関と関連付けられ、セキュリティーターゲットBは、0.1未満の相関と関連付けられる。セキュリティーターゲットAは、サイドチャネル攻撃に対する、より良い耐性を与えるが、より高いパフォーマンスコストを要求する。
オプティマイザー部140は、パフォーマンスレベル及びセキュリティーレベルがセキュリティーターゲット及び/又はパフォーマンスターゲットを満たすまで、データフローグラフの部分への保護変換の割当てを繰り返すように構成される。例えば、割当てられた保護変換は、目標により適切に到達するように部分的に修正される。例えば、幾つかの変数に対して、保護変換は、より高いセキュリティーレベルを伴って使用され、他のものに対して、保護変換は、より低いセキュリティーレベルを伴って使用されることなどである。ターゲットに到達したとき、又は、目標に達することが不可能であるように思われるとき、例えば、ある長さの期間が満了した後に、オプティマイザー140は、保護変換の割当てを終了する。
オプティマイザー部140が最適化を実施する様々な手法が存在する。例えば、最適化は、例えば、まず、ユーザーにより示された変数が保護され、次に、小さい変数が大きい変数の前に保護されるなどの所定のシーケンスをたどる。代替的に、オプティマイザー140は、様々な最適化技術のうちの1つを使用してよい。例えば、オプティマイザー140は、ランダムウォークを実施し、及び、最良の選択を維持する。例えば、オプティマイザー140は、ユーザーのターゲットに最も大きく寄与するものを含む部分が最初に保護されるグリーディ最適化を実施する。例えば、オプティマイザー140は、ヒルクライム、シミュレーションによるアニーリング、タブー探索などを実施する。
例えば、使用される符号化の数は、予め数字nに固定される。次に、符号化され得る各演算子が、符号化領域にランダムに割当てられる。セキュリティーレベルが秘密鍵と変数との間の相関を演算することにより演算される。したがって、符号化領域への割当ては、相関を最小化するように、例えば、最大の相関、又は、すべての相関の総和を最小化するように、などのように、例えばヒルクライムなどの最適化方法に従って繰り返し変更される。
最後に、コンパイル部150は、少なくともセキュリティーターゲット及び/又はパフォーマンスターゲットを満たすデータフローグラフ及び割当てられた保護変換から、コンピュータプログラム表現のコンパイル結果を取得するように構成される。
図3aは、利用可能な保護変換のリストにおける保護変換の選択を最適化する方法301を示す。本方法は、
- 関連するセキュリティーレベルがセキュリティーターゲットを達成するように選択されたデータフローグラフの部分に、初期保護変換を割当てること(311)であって、例えば、保護変換が、閾値より上のセキュリティーレベルをもつように選択され、又は、保護変換が、最高の(最良の)セキュリティーレベル変換であるように選択される、割当てること(311)と、
- パフォーマンスレベルが特定されること(312)と、
- 特定されたパフォーマンスレベルがパフォーマンスターゲット313未満である場合、1つ又は複数の割当てられた保護変換がより低い関連するセキュリティーレベルを伴う保護変換に変更されること(314)とを有する。次に、本方法は、ターゲットに到達するまで繰り返される。
ターゲットに到達した場合、本方法が終了とされる(315)。
図3bは、利用可能な保護変換のリストにおける保護変換の選択を最適化する方法302を示す。本方法は、
- 関連するセキュリティーレベルがセキュリティーターゲット未満であるように選択されたデータフローグラフの部分に初期保護変換を割当てること(321)であって、例えば、保護変換が、閾値未満のセキュリティーレベルをもつように選択され、又は、保護変換が、最低の(最悪の)セキュリティーレベル変換であるように選択される、割当てること(321)と、
- パフォーマンスレベルが特定されること(322)と、
- 特定されたパフォーマンスレベルがパフォーマンスターゲット323より上である場合、1つ又は複数の割当てられた保護変換が、より高い関連するセキュリティーレベルを伴う保護変換に変更されること(324)と、
を有する。次に、ターゲットに到達するまで、本方法が繰り返される。ターゲットに到達した場合、本方法が終了とされる(325)。コンパイルは、パフォーマンスレベルが依然としてパフォーマンスターゲットより上であった保護変換の最後の集合を使用して実施される。
方法301では、パフォーマンスターゲットが満たされるまで、セキュリティーが下げられる。方法302では、異なるアプローチが使用され、この場合、セキュリティーターゲットを最良に満たすように、パフォーマンスバジェットが消費される。所与の状況に対して方法301と方法302とのどちらが最良であるかは、所望のトレードオフに依存する。
例えばリストに含まれる割当てられ得る保護変換は、データフローグラフの、1つ又は複数の、エッジに対する変数保護、及び/又は、ノードに対する演算保護を含む。例えば、可能な変換は、以下を含む。
- 変数の符号化、及び、復号された変数に対する演算の平文実行。この状況では、ほとんどの場合、変数が符号化されるが、変数が演算される直前及び直後に復号される。符号化は、例えば、状態、例えばソルト値を含む、ランダムな全単射演算であり得る。符号化は、マスキング演算、例えば、ランダム値を加算、例えばXORをすることであってもよい。
- 変数の符号化、及び、符号化された変数に対する符号化された演算実行。この状況において、変数は符号化されるが、更に、符号化された形態において演算される。それは、演算を実施するために参照テーブル又は多項式などを要求するので、これは、概してより高価な演算である。
- 変数及び/又は演算に適用される準同形暗号化。
- 定時間実行演算。この場合、変数は符号化されることを必要としないが、それらに対して実施される演算は、それらの値に対して独立している。これは、演算が常に最悪時の時間をかけて実施することを意味する。
特定の保護手段を割当てることは、多くの場合、含意を含む。符号化されたデータに対して演算が実施される場合、これは、データが符号化された形態において利用可能でなければならないことを意味する。更なる演算がデータに対して実施される場合、それは同じ符号化によりデータを受け入れるように準備されなければならない。これは、データフローグラフに、あるタイプの符号化から別のタイプに変換する変換ノードを挿入することにより達成される。
これは、ノード及び/又はエッジを符号化領域に割当てることにより管理される。複数の符号化領域は確立される。同じ符号化領域に割当てられたデータフローグラフの部分が、同じ保護変換に割当てられる。典型的には、より多くの符号化領域を含むことは、セキュリティーに対して有益であるが、一方で、複数の符号化領域を含むことは、プログラムのフットプリントを増やす。
例えば、上述のソフトウェアにおいて指定された2つのアルゴリズムA及びBが、下記の表において列1において説明されている関数fA及びfBにより実装されると仮定する。次の列2、3、及び4において、及び、それらの2つの関数の各々が異なるセキュリティー目標を伴う割当てられた2つの異なるSSAネットワークであると仮定した場合、関数は、2つの参照テーブルにより置換されてよく(列2)、符号化/復号関数が適用され(列3)、符号化/復号関数の強度はターゲットセキュリティー目標に依存する。最終列において、テーブルが、実装された関数を更に難読化するために組み合わされ得る。後続のステップの各々が、セキュリティーを高め得るが、パフォーマンスも影響を受ける。したがって、アルゴリズムは、パフォーマンス要求を満たしながら、できる限り保護するためにそれらのステップを注意深く適用する。
Figure 0007285850000002
一実施形態において、コンパイラデバイスは、以下の入力うちの1つ又は複数を受信する。
(i)保護されるプログラム(例えばcプログラム、又は中間プログラム表現、例えばデータフローグラフ)
(ii)保護されたプログラムのための1つ又は複数のパフォーマンス目標
(iii)プログラムの異なる部分におけるターゲットセキュリティーレベル
(iv)セキュリティー/パフォーマンス特性を伴う符号化及び保護の利用可能なタイプを含むリスト
コンパイラデバイスは、パフォーマンス要求(演算の数、演算タイプ)に従ってプログラム部分を分類するように構成され、及び、個々のパフォーマンス及びプログラム全体における全体的なリソース要求に従って異なるプログラム部分に対するパフォーマンスランクを出力する。これは、特定のオペランドを使用する各演算タイプをカウントすることと、符号化演算のコストが分かっている符号化された演算によりそれらの演算が置換されたときの想定されるコストを演算することとにより行われ得る。全体的なパフォーマンスは、ターゲットデバイスにおいて入力プログラムを実行することにより取得され得る。それを安全にした後のパフォーマンスは、プログラムの特定の部分を保護する追加的なコストを推定することにより取得し得る。パフォーマンス上のペナルティーは、(PerformancePlain+EstimatedPerformancePartsProgramProtected)/PerformancePlain、のように計算される。
コンパイラデバイスは、例えば注釈、及び、実行されるデータ/演算のタイプにより指定されたセキュリティー要求に従ってネットワークを分類するように構成される。出力は、異なるプログラム部分において要求されるセキュリティーをランク付けするセキュリティーリストである。この優先順位付けは、ネットワークにおいて使用される演算タイプ、それらがどれくらい適切に保護され得るか、及び、ネットワークが他のものとどれくらい関連しているかを分析することにより実行され得る。
注釈は、例えば変数、関数、マクロなどのプログラム構築前にプラグマとして含まれ得る。注釈の選択肢は、
・タイプ:機密性、完全性、可用性
・攻撃:ホワイトボックス、サイドチャネルタイム、サイドチャネル電力
・労力:高い、中程度、ベストエフォート
を含む。
タイプは、有効な保護のタイプを意味する。機密性は、プラグマを使用して注釈付けされたプログラム部分を暗号化することを意味する。完全性は、プログラムが変更されることができないことを確実なものとする完全性チェックを含むことを意味する。可用性は、コードが実行されることを確実なものとするための能力を追加することを意味する。例えば、関数が少なくとも1回動作することを確実なものとするために関数を複製することによる。例えば、後者は、プログラムの残部を実行する前にユーザーが権限を与えられることを検証するために使用される。
攻撃とは、本明細書では、実施される、及び、適用されなければならない保護のタイプを決定する攻撃のタイプを意味する。ホワイトボックスとは、本明細書では、攻撃者がコード全体にアクセスすることが可能であり、すべてを観測/変更し得ることを意味する。したがって、結果として得られる実装体は、符号化又は暗号化された保護されたプログラムを出力しなければならない。サイドチャネルタイムとは、本明細書では、プログラムの実行時間を観測し、実行時間から情報を導出し得る攻撃者を意味する。したがって、保護されたプログラムは、実行時間が一定である(その結果、攻撃者が何も獲得しない)ようにされなければならず、又は、攻撃者が実際の実行時間を導出することができないように、実行に依存した十分大きいランダムな遅延を追加するようにされなければならない。サイドチャネル電力とは、本明細書において、攻撃者が電力トレースを観測し得ることを意味する。したがって、プログラムは、異なる電力要求を伴う命令が定電力消費の仮想化された命令(例えばテーブル参照)により置換されるようにされていなければならない。
労力とは、本明細書において、結果として得られる保護がどれだけ良くなければならないかを意味する。A)高い:それが最良の利用可能なセキュリティーを提供することとする。B)中程度:それができる限り良いセキュリティーを提供しなければならない。セキュリティー無しというのは選択肢に無い。C)ベストエフォート:それはできる限り良いセキュリティーを提供しなければならないが、パフォーマンスの理由に起因して実行可能でない場合、平文実装も適切である。
注釈は強力であるが、プログラマーは、注釈を追加することを忘れる可能性がある。コンパイラは、例えば入力データが特定の定数と混合された演算部分をプログラム部分が含むか否かを更に分析し得る。このようなプログラム部分は、暗号化により保護する理想的な候補である。コンパイラシステムは、所与のプログラム部分が、入力に伴う時間依存性をもたらす入力変数に依存した演算を実施するか否かを更に分析し得る。このようなプログラム部分は、サイドチャネルタイミング攻撃からの保護のために理想的である。コンパイラシステムは、このような部分が保護されない場合、警告をトリガーして、プログラマーに警報を出し得る。代替的に、コンパイラは、コンパイラがより高いレベルの保護を自動的に適用し得るように、コンパイルフラグ(例えば-p1、-p2、-p3)を使用して拡張され得る。
プログラム入力を分析することが行われた後、コンパイラデバイスは、最適化及びターゲット保護レベルに応じて、使用される符号化及び保護を決定する。
- セキュリティーに対する最適化の場合:
・最良のタイプの符号化/保護を各プログラム部分に割当て、パフォーマンス(メモリ/CPU)を推定する。
・(パフォーマンスがパフォーマンス目標より悪い)間、{より簡単な符号化/保護をより低いセキュリティーニーズを伴うプログラム部分に適用する}
・結果として得られる保護が要求されるものより低い場合、コンパイラシステムは、状況からプログラマーに警報を出すように警告をトリガーしなければならない。
- パフォーマンスに対する最適化の場合:
・最も実行性のあるタイプの符号化又は保護を各プログラム部分に割当て、パフォーマンス(メモリ/CPU)を推定する。
・(パフォーマンスがパフォーマンス目標より良い)間、{より高いセキュリティーニーズを伴うネットワークにより安全な符号化を適用する}
・結果として得られる保護が、要求されるものより低い場合、コンパイラシステムは、状況からプログラマーに警報を出すように警告をトリガーしなければならない。
一実施形態において、コンパイラデバイスは、プログラムの中間表現を取得し、この場合において、使用される注釈に応じて、
・機密性のために、各変数が2つのラベルに割当てられ、第1のものが、使用される符号化のタイプを規定し、第2のものが、符号化領域を規定する。
・完全性のために、プログラム部分は、完全性チェックを判定する拡張されたブロックである。
・可用性のために、高い可用性を要望するプログラム部分はn回反復される。コピーの各々が、それらを無効化する攻撃者のタスクを困難にするように、プログラムの異なる位置に配置される。
・ホワイトボックス攻撃に対して、攻撃者が変数を理解することができないように符号化されるように変数が表記されなければならない。
・サイドチャネルタイミング攻撃に対して、サイドチャネルタイミング攻撃を受けやすいプログラム部分及び変数は、定時間において実行されるようにマーキングされなければならず、又は、大きい実行に依存したタイミングノイズが追加される。定時間は、演算及びメモリアクセスが定時間でなければならないことを意味する。実行に依存したタイミングノイズのために、プログラム部分は、ランダムなデータに依存して大きい時間変動性を導入するブロックを伴って拡張される。
・サイドチャネル電力攻撃に対して、異なる電力要求を伴う命令は、定電力消費を伴う仮想化された演算により置換される。
最後に、符号化及び保護が相応に割当てられる。例えば:
- 符号化の場合:
・コンパイルが1つのデバイスに対するものである場合、データがそのデバイスを通して符号化されることを特定する。
・コンパイルが複数のデバイスに対するものである場合、連続したデバイスの入力/出力データインターフェースが同じ符号化を使用しなければならないことを特定する。任意選択的に、デバイス生成データにおける対称暗号化アルゴリズム(例えばAES)、及び、デバイス消費データにおける対応した符号化された対称暗号解読アルゴリズム(例えばAES)の符号化された実装を含むことによりコードを拡張する。
- (F)HEの場合:
・コンパイルが1つのデバイスに対するものである場合、入力データが暗号化されなければならないこと、及び、デバイスを通した演算が暗号化された領域において実施されなければならないことを特定する。ノイズが過度に増えた場合、データを暗号解読するために使用される秘密鍵を記憶したセキュア要素との通信を関与させ、及び、場合によっては、別のネットワークに割当てられた公開鍵を使用して、更に再度それを暗号化する。
・コンパイルが異なるデバイスに対するものである場合、データは暗号化されなければならず、演算は暗号化された領域において実施されなければならない。暗号解読は、受信デバイスにおいて行われるのみである。
- 可用性保護が要求される場合:
・コンパイルがマルチコアCPUに対するものである場合、異なるコアに反復されたプログラム部分の各々の実行を割当てる。
・コンパイルがマルチデバイスシステムに対するものである場合、反復されるプログラム部分の各々の実行を、異なるデバイスに割当てる。
- サイドチャネル電力保護の場合、プログラムが実行されるプロセッサにおける異なる命令の電力消費を分析し、それらの命令を定電力消費の参照テーブルに変換する。
- 定時間を使用したサイドチャネルタイム保護の場合、プログラムが実行されるプロセッサにおける異なる命令、及びメモリアクセスに対する時間要求を分析し、それらの命令を定時間アクセスの参照テーブルに変換する。
コンパイルを実施するために、コンパイラデバイスは、例えば部分140又は150において、符号化/復号及び保護を生成するように、及び、取得されたラベルに従って各プログラム部分にそれらを適用するように構成される。
図1cは、コンパイルデバイス101の一実施形態の例を概略的に示す。コンパイルデバイス101は、コンパイルデバイス101が保護変換を適用する前に演算を組み合わせるように構成されることを除いて、コンパイルデバイス100と同様である。例えば、コンパイルデバイス101は例えば、それに対して構成されたオプティマイザー部140における組合せ部145を備える。
コンパイルデバイス100と同様に、コンパイルデバイス101は、保護され得る変数を検出するように構成されるが、組合せデバイス145は、検出された変数に作用する演算を選択するように、及びそれらの演算を組み合わせるように構成される。組み合わされた演算は、上述のように保護され得る。例えば、組み合わされた演算は、例えば参照テーブルに、又は、多項式として符号化され得る。
コンパイルデバイス101は、例えばCPUペナルティー及びメモリペナルティーなどの、入力パフォーマンス目標に従った保護のためのパラメータを最適化する方法を更に使用する。
一実施形態において、保護される各演算は、それ自体の符号化領域に割当てられる。すべての選択された関数がテーブル参照に変換され、ある符号化から次のものに変換するように、それらの間に全単射が導入される。一実施形態において、少なくとも2つの演算が同じ符号化を使用して保護され、したがって、ある符号化から次のものに変換するために、それらの間の全単射が必要とされない。符号化の数を減らすことは、演算が再使用され得る可能性を高め、要求される参照テーブルの数を減らすなどする。
一実施形態において、コンパイルデバイス100は、3つの段階で構成される。
1.保護され得る変数を検出する
2.ステートメントを組み合わせる
3.n個の符号化を適用し、ステートメントを参照テーブルに変換する
3つの段階に基づいて、コンパイラシステムは、上述のパスに対してパラメータを最適化するために、例えばCPUペナルティー及びメモリペナルティーを入力パフォーマンス目標として採用する最適化アルゴリズムを適用し得る。
例えば、段階1では、保護され得る変数は、以下のように検出され得る。すなわち、これらの要求、すなわち、
1.vが、参照テーブルに変換され得るステートメントにおいて使用されること、
2.vが、符号化を明らかにすることなく符号化され得ること、
を満たす場合に、変数vが保護され得る。
相応のサイズの参照テーブルに変換され得る割当てにおいて変数vが使用される場合、変数vが保護され得る。このような参照テーブルのサイズを測定するために、vが使用されるプログラムの中間表現が入力として採用される。この中間表現は、SSAプロパティを含む。
以下のフラグメント、すなわち、
(1)input1=ファイ(a,b);
(2)input2=c;
(3)出力=g(input1,input2);
を考慮する。
代入ステートメント、例えば(3)において、ビットで表した総入力サイズsは、この手法により、すなわち、
Figure 0007285850000003
により規定され得る。
関数rangeは適切に表される入力により要求されるビット数を返すことに留意されたい。この関数は、単に入力のタイプを返す別の関数により更に置換され得る。代入ステートメントの、ビットで表した入力サイズは、代入の左側を実装する参照テーブルが含むエントリーeの数を示す。e=2である。言い換えると、eは、代入ステートメントの左側を実装する参照テーブルのサイズの標示を与える。大きい値のsを伴うステートメントに対して、結果として得られる参照テーブルのサイズは、プログラムを、実際に実装される、及び実行されるには過度に大きいものにする。例えば、パフォーマンスターゲットは、参照テーブルのために使用され得るメモリ量に対する制限を設定する。したがって、要求1は、sの最大許容値に制約を課し、したがって、保護されたプログラムの全体のサイズに影響を与える生成された参照テーブルのサイズに制約を課す。
変数vを保護するために使用される符号化が参照テーブルにマージされ得る場合、変数vが保護され得る。これが当てはまるか否かを判定するために、vを使用及び生成するステートメントが分析されなければならない。一例として、(ステートメントがSSAにおけるものである)次の関数の保護が考慮され得る。
function f(b,c) {
(1) a = g(b,c);
(2) x = h(c);
(3) d = y(a);
(4) e = x;
(5) z = i(d,e);
(6) return z;
許容される要求より上からの最大総入力サイズsが16[ビット]であると仮定する。変数cが18[ビット]のサイズをもち、すべての他の変数が8[ビット]のレンジをもつと仮定する。本例において、b、c、及びzは関数の引数及び戻り値であるので、b、c、及びzは保護されることができない。関数のシグネチャ又はapiは、保護されていないコードとのインターフェースであるので、平文のまま維持される必要がある。a及びxは、(符号化を安全に統合し得る)参照テーブルに変換されることができないステートメントの左側にあるので、変数a、x、及びeは、保護されることができない。しかし、変数dは、以下の理由により保護され得る。
・変数dは、(符号化を安全に統合し得る)参照テーブルに変換され得るステートメント(3)の左側にある。
・変数dは、(復号を安全に統合し得る)参照テーブルに変換され得るステートメント(5)の右側において使用される。
コンパイルデバイス101、例えば組合せ部145は、演算を組み合わせるように構成される。例えば、段階2において、保護され得る変数が識別された後に、ステートメントが組み合わされる。例えば、組合せ部145は、機能的に後のステートメント、例えば、あるものの出力変数が次のものの入力であるステートメントを特定するように構成される。後のステートメントは、1つのステートメントに組み合わされる。
結果として得られるステートメントの最大変数サイズが、前のセクションにおいて規定された最大サイズ未満であるとき、結果として得られるステートメントの、左側の変数は、更に保護され得る。
例えば、以下のプログラムと16[ビット]の最大変数サイズとを仮定する。
(1)a=b+c//b及びcは4ビットのレンジをもち、aは5ビットのレンジをもつ。
(2)f=d*a//d及びeは4ビットのレンジをもち、fは8ビットのレンジをもつ。
(3)h=a-f//aは5ビットのレンジをもち、fは8ビットのレンジをもち、hは13ビットのレンジをもつ。
したがって、ライン1、ライン2、及びライン3における3つのステートメントは、まず、1つのステートメント、すなわち、h=(b+c)-(d*(b+c))=(1-d)*(b+c)に組み合わされ得る。
結果として得られるステートメントの入力及び/又は出力変数に符号化を適用すること、及び、結果として得られるステートメントを符号化された参照テーブルに変換することは、リバースエンジニアリングからの、及びホワイトボックス攻撃からの保護を大幅に改善することに留意されたい。複数の基本演算により構成される関数を実装する符号化された参照テーブルをリバースエンジニアリングするために必要な労力は、単純な算術関数のみを実装する符号化された参照テーブルをリバースエンジニアリングするために必要な労力より大きいので、これは有効である。
上記の例において結果として得られる総入力変数サイズは、4+4+4=12[ビット]であり、したがって、ステートメントは、1つの符号化された参照テーブルに変換され得ることに更に留意されたい。符号化の厳密な導入は、第3の段階の一部であり、例えば、次の段階において符号化を導入した後である。ステートメントを組み合わせるための前述のアプローチは速度の観点から有益である。
段階3において、符号化及び変換ステートメントが適用され、参照テーブルが形成される。この時点において、以下の入力、すなわち、(1)保護され得る変数の集合、及び(2)パフォーマンス/セキュリティー制約の集合が利用可能である。例えば、(2)は、プログラム(又はプログラムの一部)に適用され得る符号化の最大数である。(2)は、適用され得る符号化の最大数をメモリ量から導出することが可能であるように、プログラムにより要求されるメモリ量である。
この例の可能な実施態様は、以下のとおりである。
- n=0:任意の数の符号化が使用され得る。典型的には、各変数を保護するために、異なる符号化が使用される。
- n=1:プログラム全体において(変数サイズごとに)同じ符号化が使用される。
- n=2:プログラム全体において(変数サイズごとに)2つの異なる符号化が使用され得る。
- n=…:…
サイズが変数サイズに一致する必要があるので、符号化の数は変数サイズごとであることに留意されたい。入力が与えられると、次に、コンパイラシステムは保護され得る各変数に符号化を割当てる。n=0である場合、各変数は異なる符号化を使用する。他のnの選択肢の場合、コンパイラシステムは、異なる代替例を使用し得る。最も簡単なものは、変数j(mod n)に符号化iを適用することである。例えば、次のとおりである。
Figure 0007285850000004
別の選択肢は、ランダム化された手法により符号化を割当てることであり、例えばVar j←Enc_i、であり、ここで、i←random(n)である。
変数が異なるレンジ(又はタイプ)をもつ場合、演算(例えば、+、-、XOR、…)が同じであるときでも、異なる符号化が同様に適用されることに更に留意されたい。この場合、同じ関数が複数のステートメントの左側に存在する場合、異なる符号化を伴う異なる参照テーブルが生成されるので、多数の符号化を使用することは、サイズの大幅な増加につながることに更に留意されたい。
メモリペナルティーが与えられた場合、コンパイラシステムは、以下のことを行い得る。
1.現在のマシンにおいてコンパイルされた後に、平文プログラムに対するメモリパフォーマンスを取得する。
2.入力ペナルティーに基づいて、コンパイラシステムは、入力パラメータに従って、保護されたプログラムにおいて可能にされるメモリの絶対的な増加を取得し得る。
3.メモリの絶対的な増加に基づいて、コンパイラシステムは、次に、メモリ制約内においてプログラムに適合した要求される符号化を演算し得る。
例えば、最大メモリ増加量が10KBである場合、2バイト長の入力変数に依存した関数を符号化することは、2^16/1024=64KBのメモリを要求するので実行可能でない。しかし、8ビット変数に依存した関数を符号化することは、2^8/1024=256Bのメモリを要求するので実現可能である。
CPU及びメモリの絶対的な増加に基づいて、コンパイラシステムは、次に、すべての変数が異なる符号化を使用している場合、符号化され得る変数の最大サイズを演算し得ることに更に留意されたい。変数を特定する工程は、(プログラムの中間表現において)プログラムをスキャンして、小から大まで変数及び関数をランク付けすることである。変数がランク付けされた後に、コンパイラシステムは、(小さいものから始めて)x個の変数を符号化するように決定された後に残されたメモリ量を演算することを開始する。メモリバジェットが利用可能でないとき、工程が終了する。
CPUパフォーマンスに対する最適化工程も同様である。しかし、この場合、目標は、テーブル参照の数を最小化することであり、したがって、目標は、できる限り多くマージすることができるように、すべての符号化を適用することを開始することである。CPUパフォーマンスが要求されるものより良い間、コンパイラシステムは消費されるメモリをチェックする。メモリが過度に高い場合、コンパイラシステムは最大の入力のものから始めて、メモリ要求が満たされるまで、符号化されたテーブルを次第にアンマージする。
例えばCPUペナルティー及びメモリペナルティーを入力パフォーマンス目標として採用することにより、上述のパスに対してパラメータを最適化することが可能である。例えば、コンパイルデバイス101は、最適化アルゴリズムを適用し得る。この最適化工程のために異なる可能性が存在する。例えば、コンパイルデバイス101は、次のために構成され、すなわち、
まず、導入され得る様々なサイズの符号化の最大数を特定する。これは、例えばプログラムの中間表現においてプログラムをスキャンすること、及びコピーファイネットワークをサイズに基づいてグループに分類すること、及び、例えば、それらをカウントすることにより行われ得る。コピーファイネットワークは、コピー又はファイステートメントのみにより構成されたプログラムグラフ表現のサブネットワークである。これは、コピーファイネットワークにおけるすべての変数が同じレンジをもつこと、及び、コピーファイネットワークにおいて、データに対してどのような操作も実施されないことを意味する。
例えば、各グループは、プログラムに存在する各変数レンジ(例えば8ビット、16ビット、32ビット)に対してコピーファイネットワークの数を含む。これは、プログラムにおける保護可能な変数の各レンジをそのレンジに対するコピーファイネットワークの数にマッピングするリストを返す。例えば、下記のリストLは、レンジ8ビットの45個のコピーファイネットワーク、レンジ12ビットの23個のコピーファイネットワーク、及び、レンジ16ビットの76個のコピーファイネットワークが存在することを意味する。L=[[8,45],[12,23],[16,76]]
コピーファイネットワークの境界におけるすべてのデータ操作ブロックにおいて同じ符号化が使用される必要がある。特に、コピーファイネットワークの各ソースノードに同じ符号化が適用されなければならないとともに、符号化逆射がコピーファイネットワークの各宛先ノードに適用されなければならないことが確認され得る。これは図2bの例示的なデータフローグラフに示されている。図2bにおいて、241及び242はコピーファイネットワークであり、243はデータ操作ブロック、例えば演算子であり、244は符号化であり、245はコピーファイネットワークにおけるエレメントであり、文字g及びfは符号化を表す。図2bの右側において、データフローグラフにおいて符号化が適用されている。
次に、プログラムは、利用可能なメモリに対してプログラム強度を最大化する符号化の数を導出する必要がある。コピーファイネットワークを通るデータ操作ブロックからの出力は、そのデータを消費するデータ操作ブロックにおいて反転されることを必要とするので、適用可能な符号化の最大数は、プログラムに含まれるコピーファイネットワークの数に常に等しいことに留意されたい。この最適化ステップは、幾つかの手法で行われ得る。第1のものは、最小レンジのコピーファイネットワークのすべてのデータ操作ブロックに対して第1の新しい符号化を導入し、それらのすべてが導入されたときにのみ次のレンジに移動し、最大メモリ量が割当てられるまで移動することである。例えば、上記の例においてまず、8ビットのコピーファイネットワークにおける変数に対して符号化を生成し、次に、タイプ12ビットに対する符号化の生成に移動し、更に続く。第2の方法は、最大サイズのレンジ(上記の例では、サイズ16ビット)から始まり、すべての要求される符号化が演算されるまで、最大サイズのレンジに対してそれらを生成し続け、次に、次のタイプのより小さいサイズ(この場合において、12ビット)に移動することである。第3の方法は、連続した手法により利用可能なデータレンジの各々に対して符号化を追加することである。上記の例では、サイズ8ビットに対する符号化から始まり、次に、サイズ12ビットの符号化に対して別のものを追加し、次に、サイズ16ビットの符号化に対して別のものを追加し、次に、サイズ8ビットから再開する…。すべての利用可能なメモリが割当てられたときに、この工程は終了する。
例えば、データフローグラフにおける演算ノードは、関連する符号化メモリ要求を含む。例えば、演算子は、有限体上の多項式の形態をとる、又は、参照テーブルの形態をとる符号化された演算子として実装される。関連する符号化メモリ要求は、2の、入力の総ビットサイズ乗に、演算子の出力におけるビット数を乗じたものである。演算子のうちの幾つかは、このサイズに基づいて符号化されることができず、例えば、それは閾値より大きい。符号化のために利用可能なメモリサイズに基づいて、コンパイルデバイスは、どの符号化、及び/又は、幾つの符号化を適用するかを決定し得る。例えば、コンパイルデバイスは、最小の関連するサイズから始まり、符号化のために利用可能なメモリが枯渇するまで、異なる符号化を割当てる。
例えば、コンパイルデバイスは、まず、各変数サイズに1つの符号化を適用する。メモリが依然として符号化のために利用可能である場合、メモリは、最小から最大まで割当てられる。
例えば、コンパイルデバイスが、まず、例えばユーザーにより、又は、分析部130などにより、高セキュリティーとして識別された各変数サイズに異なる符号化を適用する。次に、1つの符号化が各変数サイズに適用される。メモリが依然として符号化のために利用可能である場合、メモリは、最小から最大まで割当てられる。
これらの方法は、基礎レベルの符号化が達成されることを確実なものとした後に、異なる符号化が、より小さい変数に集中させられるという利点をもつ。より小さい変数は、より大きい変数に比べると、符号化のために要求するメモリが遥かに少ないので、より小さい変数は使用される異なる符号化の数を増やす。攻撃者は少数ではなく多くの異なる符号化を扱う必要があるので、この技法は、例えば、難読化目的のために有用である。
符号化は、場合によってはソルト又は状態値を伴って全単射に基づく。例えば、特定のタイプに属する変数が(m個の異なる素数に対する)m個の元からなるRNSにおいてまず符号化され、次に、全単射が元の各々に適用される剰余数系(RNS)に基づく代替的な符号化も使用され得る。
異なる公開鍵及び異なる評価鍵が異なるタイプの変数を評価するために使用されるように、符号化が完全準同形暗号化に基づいていてもよい。
コンパイルデバイス100又は101の様々な実施形態において、通信インターフェース又は入力インターフェースは、様々な代替例から選択される。例えば、インターフェースは、ローカルエリアネットワーク又は広域ネットワーク、例えば、インターネットへのネットワークインターフェース、内部又は外部データストレージへのストレージインターフェース、キーボード、アプリケーションインターフェース(API)などである。
コンパイルデバイスは、例えば、1つ又は複数のボタン、キーボード、ディスプレイ、タッチスクリーンなどのよく知られた要素を含むユーザーインターフェースを含む。ユーザーインターフェースは、コンパイル作業などを実施するためにユーザー対話に適応するように構成される。
ストレージ120は、電子メモリ、例えばフラッシュメモリ、又は、磁気メモリ、例えばハードディスクなどとして実装される。ストレージ120は、ストレージ120を一緒に構成する複数の独立したメモリを備える。ストレージ120は、一時的なメモリ、例えばRAMである。一時的なストレージ120の場合、ストレージ120は、例えば、任意選択的なネットワーク接続を介してそれらを取得することにより使用前にデータを取得する幾つかの手段を含む。
典型的には、コンパイルデバイス100及び101は、デバイス100及び101に記憶された適切なソフトウェアを実行するマイクロプロセッサを備え、例えば、そのソフトウェアは、対応するメモリ、例えば、(別々には示されていない)揮発性メモリ、例えばRAM、又は、不揮発性メモリ、例えばフラッシュにダウンロード及び/又は記憶されたものである。代替的に、デバイス100及び101は、プログラム可能論理部、例えばフィールドプログラム可能ゲートアレイ(FPGA)において全体的に、又は部分的に実装される。デバイス100及び101は、いわゆる特定用途向け集積回路(ASIC)、例えば、それらの特定の使用のためにカスタマイズされた集積回路(IC)として全体的に、又は部分的に実装される。例えば、回路は、例えば、ハードウェア記述言語、例えば、Verilog、VHDLなどを使用してCMOSにおいて実装される。
一実施形態において、コンパイルデバイスは、入力インターフェース回路、ストレージ回路、パース部回路、データフローパーサー回路、符号化分析器回路、オプティマイザー部回路、パフォーマンス分析器回路、セキュリティー分析器回路、コンパイルユニット回路を備える。デバイス100は、追加的な回路、例えば組合せ部回路を備える。回路は、本明細書において説明されている対応するユニットを実装する。回路は、プロセッサ回路及びストレージ回路であってよく、プロセッサ回路は、ストレージ回路において電子的に表された命令を実行する。
プロセッサ回路は、例えば複数のサブプロセッサ回路として分散された手法により実装されてよい。ストレージは、複数の分散したサブストレージにわたって分散される。メモリの一部又はすべては、電子メモリ、磁気メモリなどである。例えば、ストレージは、揮発性の、及び不揮発性の部分を含む。ストレージの一部は、読み出し専用である。
図6は、コンパイル方法600の一実施形態の例を概略的に示す。コンパイル方法600は、コンピュータプログラムのセキュリティーを改善する保護変換の選択のために構成される。コンパイル方法600は、
- コンピュータプログラム表現を受信すること(610)と、
- コンピュータプログラム表現からデータフローグラフ200表現を取得すること(620)と、
- データフローグラフの部分に保護変換を割当てること(630)であって、保護変換が、利用可能な保護変換のリストから選択される、割当てること(630)、
- データフローグラフ200及び割当てられた保護変換に対するパフォーマンスレベル及びセキュリティーレベルを特定すること(640)、及び、
- パフォーマンスレベル及びセキュリティーレベルが、セキュリティーターゲット及び/又はパフォーマンスターゲットを満たしている場合、保護変換を割当てることを終了することであって、例えば、方法600は、割当てること(630)に向かう、又は、取得すること(660)に向かう条件分岐650を含む、終了すること、を繰り返し行うことと、
- 少なくともセキュリティーターゲット及び/又はパフォーマンスターゲットを満たすデータフローグラフ及び割当てられた保護変換からコンピュータプログラム表現のコンパイル結果を取得すること(660)と、
を有する。
当業者に明らかなように、方法を実行する多くの異なる手法が可能である。例えば、ステップの順序は変えられ得、又は、幾つかのステップは並行して実行されてよい。更に、ステップ間に他の方法ステップが挿入されてよい。挿入されたステップは、例えば本明細書において説明されている方法の改良例を表してよく、又は本方法に無関係であってよい。更に、所与のステップは、次のステップが始められる前に完全に終えられないものであってよい。
本発明による方法は、プロセッサシステムが方法600を実施することをもたらすための命令を含むソフトウェアを使用して実行されてよい。ソフトウェアは、システムの特定のサブエンティティにより行われるステップのみを有する。ソフトウェアは、例えばハードディスク、フロッピー、メモリ、光ディスクなどの適切な記憶媒体に記憶されてよい。ソフトウェアは、有線により、又は無線により、又はデータネットワーク、例えばインターネットを使用して信号として送信されてよい。ソフトウェアは、ダウンロードのために、及び/又は、サーバーにおける遠隔使用のために利用可能とされてよい。本発明による方法は、本方法を実施するようにプログラム可能論理部、例えばフィールドプログラム可能ゲートアレイ(FPGA)を形成するように構成されたビットストリームを使用して実行されてよい。
本発明は、本発明を実施するように適応されたコンピュータプログラム、特に担体上の、又は担体内のコンピュータプログラムにも及ぶことが理解される。プログラムは、例えば部分的にコンパイルされた形態のソースコード、オブジェクトコード、コード中間ソース、及びオブジェクトコードの形態であってよく、又は、本発明による方法の実施態様における使用に適した任意の他の形態であってよい。コンピュータプログラムプロダクトに関する一実施形態は、記載されている方法のうちの少なくとも1つの処理ステップの各々に対応したコンピュータ実行可能命令を含む。これらの命令は、サブルーチンに再分割されてよく、及び/又は、静的に、又は動的にリンクされる1つ又は複数のファイルに記憶されてよい。コンピュータプログラムプロダクトに関する別の実施形態は、記載されるシステム及び/又は製品のうちの少なくとも1つの手段の各々に対応したコンピュータ実行可能命令を含む。
図7aは、コンピュータプログラム1020を含む書き込み可能部分1010を含むコンピュータ可読媒体1000を示し、コンピュータプログラム1020は、一実施形態による、プロセッサシステムにコンパイル方法を実施させるための命令を含む。コンピュータプログラム1020は、物理的なマークとして、又は、コンピュータ可読媒体1000の磁化によりコンピュータ可読媒体1000において具現化されてよい。しかし、任意の他の適切な実施形態も更に考えられる。更に、本例ではコンピュータ可読媒体1000が光ディスクとして示されるが、コンピュータ可読媒体1000は、任意の適切なコンピュータ可読媒体、例えばハードディスク、ソリッドステートメモリ、フラッシュメモリなどであってよく、書き込み不能であるか、又は書き込み可能であってよいことが理解される。コンピュータプログラム1020は、コンパイルの方法をプロセッサシステムに実施させるための命令を含む。
図7bは、コンパイルデバイスの一実施形態によるプロセッサシステム1140の概略図を示す。プロセッサシステムは1つ又は複数の集積回路1110を備える。1つ又は複数の集積回路1110のアーキテクチャが図7bに概略的に示されている。回路1110は、一実施形態による方法を実行するように、及び/又はそのモジュール又はユニットを実装するようにコンピュータプログラムコンポーネントを動作させるための処理ユニット1120、例えばCPUを備える。回路1110は、プログラミングコード、データなどを記憶するためのメモリ1122を備える。メモリ1122の一部が読み出し専用であってよい。回路1110は、通信要素1126、例えば、アンテナ、コネクタ、又はその両方などを備える。回路1110は、本方法において規定される処理の一部又はすべてを実施するための専用集積回路1124を備える。プロセッサ1120、メモリ1122、専用IC1124、及び通信要素1126は、バスなどの相互接続体1130を介して互いに接続される。プロセッサシステム1110は、アンテナ及び/又はコネクタをそれぞれ使用した接触及び/又は非接触通信のために構成される。
例えば、一実施形態において、プロセッサシステム1140、例えばコンパイルデバイスは、プロセッサ回路とメモリ回路とを備えてよく、プロセッサはメモリ回路に記憶されたソフトウェアを実行するように構成される。例えば、プロセッサ回路は、Intel Core i7プロセッサ、ARM Cortex-R8などである。一実施形態において、プロセッサ回路は、ARM Cortex M0である。メモリ回路は、ROM回路、又は不揮発性メモリ、例えばフラッシュメモリである。メモリ回路は、揮発性メモリ、例えばSRAMメモリである。後者の場合において、デバイスは、ソフトウェアを提供するために構成された不揮発性ソフトウェアインターフェース、例えばハードドライブ、ネットワークインターフェースなどを備える。
上述の実施形態は本発明を限定するのではなく例示すること、及び、当業者が多くの代替的な実施形態を設計することができることに留意されなければならない。
特許請求の範囲において、括弧内に位置するいずれの参照符号も、請求項を限定すると解釈されてはならない。「備える(含む、有する、もつ)」という動詞及びその活用形の使用は、請求項に記載された要素及びステップ以外の要素及びステップの存在を否定するわけではない。単数形の要素は、複数のこのような要素の存在を否定するわけではない。本発明は、幾つかの区別される要素を備えるハードウェアにより、及び適切にプログラムされたコンピュータにより実装されてよい。幾つかの手段を列挙したデバイスの請求項において、これらの手段のうちの幾つかが同じ1つのハードウェア物品により具現化されてよい。単に特定の手段が相互に異なる従属請求項に記載されているということが、利点を得るためにこれらの手段の組合せが使用不可能なことを示すわけではない。
特許請求の範囲において、括弧内の参照符号は、例示的な実施形態の図面における参照符号を表し、又は、実施形態の式を表すことにより、請求項を理解しやすくしている。これらの参照符号は、請求項を限定すると解釈されてはならない。
(図1a~図2b、図4a~図5、及び図7a~図7bにおける符号の説明)
100 コンパイルデバイス
110 入力インターフェース
120 ストレージ
130 パース部
132 データフローパーサー
134 符号化分析器
140 オプティマイザー部
142 パフォーマンス分析器
144 セキュリティー分析器
145 組合せ部
150 コンパイルユニット
160 プロセッサ回路
161 メモリ
200 データフローグラフ
210 コピーファイサブグラフ
212~216 コピー又はファイノード
220、230 ノード
222~226 ノード
232~236 ノード
241、242 コピーファイネットワーク
243 データ操作ブロック
244 符号化
245 コピーファイネットワークにおけるエレメント
410 ノード
420 データ生成器(例えばセンサー)
422 符号化及び暗号化(公開鍵:pubK)
430 ソフトウェア
432 アルゴリズム
433 アルゴリズム
440 ハードウェア
450 クラウド
460 ソフトウェア(セキュア環境)
462 暗号解読及び復号
470 ハードウェア
472 セキュア要素(秘密鍵:pk)
481~483 符号化
1000 コンピュータ可読媒体
1010 書き込み可能部分
1020 コンピュータプログラム
1110 集積回路
1120 処理ユニット
1122 メモリ
1124 専用集積回路
1126 通信要素
1130 相互接続体
1140 プロセッサシステム

Claims (13)

  1. コンピュータプログラムのセキュリティーを改善する保護変換の選択のためのコンパイルデバイスであって、前記コンパイルデバイスが、
    コンピュータプログラム表現を受信する入力インターフェースと、
    プロセッサ回路とを備え、前記プロセッサ回路が、
    前記コンピュータプログラム表現からデータフローグラフの表現を取得することと、
    前記データフローグラフの部分に前記保護変換を割当てることであって、前記保護変換が、利用可能な前記保護変換のリストから選択される、割当てること、
    前記データフローグラフ及び割当てられた前記保護変換に対するパフォーマンスレベル及びセキュリティーレベルを特定すること、及び
    前記パフォーマンスレベル及び前記セキュリティーレベルがセキュリティーターゲット及び/又はパフォーマンスターゲットを満たしている場合、前記保護変換を前記割当てることを終了すること、を繰り返し行うことと、
    少なくとも前記セキュリティーターゲット及び/又は前記パフォーマンスターゲットを満たす前記データフローグラフ及び割当てられた前記保護変換から前記コンピュータプログラム表現のコンパイル結果を取得することと、
    を行う、コンパイルデバイス。
  2. 利用可能な前記保護変換の前記リストにおける前記保護変換が、関連するセキュリティーレベルをもち、
    前記コンパイルデバイスは、前記関連するセキュリティーレベルが前記セキュリティーターゲットを達成するように選択された前記データフローグラフの部分に初期保護変換を割当て、特定された前記パフォーマンスレベルが前記パフォーマンスターゲット未満である場合、1つ又は複数の割当てられた前記保護変換が、より低い関連するセキュリティーレベルを伴う前記保護変換に変更され、及び/又は、
    前記コンパイルデバイスは、前記関連するセキュリティーレベルが前記セキュリティーターゲット未満であるように選択された前記データフローグラフの部分に初期保護変換を割当て、特定された前記パフォーマンスレベルが前記パフォーマンスターゲットより上である場合、1つ又は複数の割当てられた前記保護変換が、より高い関連するセキュリティーレベルを伴う前記保護変換に変更される、
    請求項1に記載のコンパイルデバイス。
  3. 利用可能な前記保護変換が、エッジに対する1つ又は複数の変数保護、及び/又は、前記データフローグラフのノードに対する演算保護を含む、
    請求項1又は2に記載のコンパイルデバイス。
  4. 前記プロセッサ回路が、前記データフローグラフにおける1つ又は複数のエッジ及び/又はノードに対する1つ又は複数の前記セキュリティーターゲットを取得し、前記セキュリティーターゲットが、前記データフローグラフにおける1つ又は複数の前記エッジ及び/又は前記ノードに対して取得された前記セキュリティーターゲットから取得される、
    請求項1から3のいずれか一項に記載のコンパイルデバイス。
  5. 前記保護変換が、
    変数の符号化及び復号された前記変数に対する平文の演算実行と、
    変数の符号化及び符号化された前記変数に対する符号化された演算実行と、
    変数及び/又は演算に適用される準同形暗号化と、
    定時間実行演算と、
    のうちの1つ又は複数を含む、
    請求項1から4のいずれか一項に記載のコンパイルデバイス。
  6. 前記データフローグラフの部分が、複数の符号化領域のうちの前記符号化領域に割当てられ、同じ前記符号化領域に割当てられた前記データフローグラフの部分が、同じ前記保護変換に割当てられる、
    請求項1から5のいずれか一項に記載のコンパイルデバイス。
  7. 前記セキュリティーターゲットが、
    機密性と完全性とを含むセキュリティータイプ、
    ホワイトボックス、サイドチャネルタイム、サイドチャネル電力を含む攻撃タイプ、及び/又は、
    高い、中程度、ベストエフォートを含む攻撃労力、
    に対するターゲットを含む、
    請求項1から6のいずれか一項に記載のコンパイルデバイス。
  8. 前記パフォーマンスレベルが、前記データフローグラフにおける複数の種類の演算の数をカウントすることと、前記データフローグラフにおける複数の種類の前記演算が、割当てられた前記保護変換に従って、符号化された演算により置換されたときの想定されるコストを取得することとにより特定される、
    請求項1から7のいずれか一項に記載のコンパイルデバイス。
  9. 前記セキュリティーターゲットが、入力変数と秘密変数とを示し、
    前記セキュリティーレベルが、
    前記入力変数及び前記秘密変数の異なる値に対する前記コンピュータプログラムの複数回の実行を実現すること、前記コンピュータプログラムの実行中に前記入力変数に依存する前記コンピュータプログラムの少なくとも1つの変数の値を記録すること、並びに/又は、前記少なくとも1つの変数に対して実施される演算の演算時間を記録することと、
    割当てられた前記保護変換を伴わない前記秘密変数と記録された前記値又は前記演算時間との間の相関を演算することと、
    により推定される、
    請求項1から8のいずれか一項に記載のコンパイルデバイス。
  10. 前記プロセッサ回路が、前記保護変換を適用する前に演算を組み合わせる、
    請求項1から9のいずれか一項に記載のコンパイルデバイス。
  11. 前記データフローグラフにおける演算ノードが、関連する符号化メモリ要求を含み、
    前記プロセッサ回路が、最小の関連する前記符号化メモリ要求から最大まで、前記演算ノードに対して異なる符号化を導入し、最大メモリ量が割当てられるまで符号化された前記演算ノードにメモリを割当てる、
    請求項1から10のいずれか一項に記載のコンパイルデバイス。
  12. 入力インターフェースと、プロセッサ回路とを備え、コンピュータプログラムのセキュリティーを改善する保護変換の選択のためのコンパイルデバイスで行われるコンパイル方法であって、前記コンパイル方法が、
    前記入力インターフェースが、コンピュータプログラム表現を受信するステップと、
    前記プロセッサ回路が、前記コンピュータプログラム表現からデータフローグラフの表現を取得するステップと、
    前記プロセッサ回路が、前記データフローグラフの部分に前記保護変換を割当てるステップであって、前記保護変換が、利用可能な前記保護変換のリストから選択される、割当てるステップ、
    前記プロセッサ回路が、前記データフローグラフ及び割当てられた前記保護変換に対するパフォーマンスレベル及びセキュリティーレベルを特定するステップ、及び、
    前記プロセッサ回路が、前記パフォーマンスレベル及び前記セキュリティーレベルがセキュリティーターゲット及び/又はパフォーマンスターゲットを満たしている場合、前記保護変換を前記割当てるステップを終了するステップ、を繰り返し行うステップと、
    前記プロセッサ回路が、少なくとも前記セキュリティーターゲット及び/又は前記パフォーマンスターゲットを満たす前記データフローグラフ及び割当てられた前記保護変換から、前記コンピュータプログラム表現のコンパイル結果を取得するステップと、
    を有する、コンパイル方法。
  13. 請求項12に記載の方法を実施することをコンパイルデバイスにさせる命令を表す一時的な、又は非一時的なデータを含む、コンピュータ可読媒体。
JP2020544783A 2018-02-28 2019-02-20 コンパイルデバイス及び方法 Active JP7285850B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP18159169.4 2018-02-28
EP18159169.4A EP3534253A1 (en) 2018-02-28 2018-02-28 Compiling device and method
PCT/EP2019/054133 WO2019166288A1 (en) 2018-02-28 2019-02-20 Compiling device and method

Publications (2)

Publication Number Publication Date
JP2021515314A JP2021515314A (ja) 2021-06-17
JP7285850B2 true JP7285850B2 (ja) 2023-06-02

Family

ID=61526604

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020544783A Active JP7285850B2 (ja) 2018-02-28 2019-02-20 コンパイルデバイス及び方法

Country Status (5)

Country Link
US (1) US11475166B2 (ja)
EP (2) EP3534253A1 (ja)
JP (1) JP7285850B2 (ja)
CN (1) CN111819542A (ja)
WO (1) WO2019166288A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3913509A1 (en) * 2020-05-22 2021-11-24 Thales Dis France Sa Method to secure computer code
EP4012593A1 (en) * 2020-12-09 2022-06-15 Thales DIS France SA Neural network cryptography coprocessor providing countermeasture against side-channel analysis
EP4315140A1 (en) * 2021-03-26 2024-02-07 Verimatrix UL Ltd Input driven execution randomization
CN113076090B (zh) * 2021-04-23 2022-07-05 中国人民解放军国防科技大学 一种面向边信道安全防护的循环语句执行方法及装置
IT202100012488A1 (it) * 2021-05-14 2022-11-14 Torino Politecnico Metodo di configurazione di reti neurali e metodo di elaborazione di file binari
US20230005096A1 (en) * 2021-06-23 2023-01-05 Nvidia Corporation Memory allocation using graphs

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012032900A (ja) 2010-07-29 2012-02-16 Kddi Corp ソフトウェアの不正配布検出装置、ソフトウェアの不正配布検出方法およびプログラム
US20140245271A1 (en) 2013-02-28 2014-08-28 Microsoft Corporation Compiler Based Obfuscation
US20170024585A1 (en) 2014-03-31 2017-01-26 Irdeto B.V. Secured electronics device

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6594761B1 (en) 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US6779114B1 (en) * 1999-08-19 2004-08-17 Cloakware Corporation Tamper resistant software-control flow encoding
AU2003242768A1 (en) * 2002-08-02 2004-02-25 Telefonaktiebolaget Lm Ericsson (Publ) Optimised code generation
US7584354B2 (en) * 2003-01-31 2009-09-01 Intel Corporation Implementing portable content protection to secure secrets
US7366914B2 (en) * 2003-08-29 2008-04-29 Intel Corporation Source code transformation based on program operators
US20070266434A1 (en) * 2006-05-11 2007-11-15 Reifer Consultants, Inc. Protecting Applications Software Against Unauthorized Access, Reverse Engineering or Tampering
EP1936532B1 (en) * 2006-12-21 2009-07-29 Telefonaktiebolaget LM Ericsson (publ) Obfuscating computer program code
US8752032B2 (en) * 2007-02-23 2014-06-10 Irdeto Canada Corporation System and method of interlocking to protect software-mediated program and device behaviours
US8990930B2 (en) 2009-02-06 2015-03-24 Microsoft Corporation Code property analysis for security mitigations
US20140130153A1 (en) * 2012-11-08 2014-05-08 International Business Machines Corporation Sound and effective data-flow analysis in the presence of aliasing
US20160306973A1 (en) 2013-12-05 2016-10-20 Koninklijke Philips N.V. A computing device for iterative appilcation of table networks
US10261889B2 (en) * 2014-06-25 2019-04-16 Microsoft Technology Licensing, Llc Techniques for edit-and-continue and enhanced optimized debugging on optimized code
EP3566159B1 (en) 2017-01-05 2020-10-21 Koninklijke Philips N.V. Compiling device and method
EP3502935A1 (en) 2017-12-20 2019-06-26 Koninklijke Philips N.V. Compiling device and method

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012032900A (ja) 2010-07-29 2012-02-16 Kddi Corp ソフトウェアの不正配布検出装置、ソフトウェアの不正配布検出方法およびプログラム
US20140245271A1 (en) 2013-02-28 2014-08-28 Microsoft Corporation Compiler Based Obfuscation
JP2016511905A (ja) 2013-02-28 2016-04-21 マイクロソフト テクノロジー ライセンシング,エルエルシー コンパイラベースの難読化
US20170024585A1 (en) 2014-03-31 2017-01-26 Irdeto B.V. Secured electronics device

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
坂本 憲昭 Noriaki SAKAMOTO,耐タンパー技術のためのアルゴリズム難読化の一提案 Scrambling Programs for Tamper Resistant Software,情報処理学会研究報告 Vol.98 No.108 IPSJ SIG Notes,日本,社団法人情報処理学会 Informaiton Processing Socie,1998年11月27日,第98巻,p.25-30.

Also Published As

Publication number Publication date
CN111819542A (zh) 2020-10-23
US20210049289A1 (en) 2021-02-18
US11475166B2 (en) 2022-10-18
WO2019166288A1 (en) 2019-09-06
EP3534253A1 (en) 2019-09-04
JP2021515314A (ja) 2021-06-17
EP3759590B1 (en) 2021-07-21
EP3759590A1 (en) 2021-01-06

Similar Documents

Publication Publication Date Title
JP7285850B2 (ja) コンパイルデバイス及び方法
JP5643894B2 (ja) サイドチャネル攻撃および反復起動攻撃に耐える動的可変タイミング演算パスのシステムおよび方法
US10180824B2 (en) Computing device comprising a table network
JP5851074B2 (ja) 関数の計算のためのルックアップテーブルを記憶した計算装置
JP7132926B2 (ja) コンパイルデバイス及びコンパイル方法
US9594769B2 (en) Computing device configured with a table network
Wang et al. Mitigating power side channels during compilation
EP3729306B1 (en) Compiling device and method
US11227033B2 (en) Efficient obfuscation of program control flow
Agosta et al. The MEET approach: Securing cryptographic embedded software against side channel attacks
JP2019523492A (ja) 難読化算術を実行するためのデバイス及び方法
WO2017137507A1 (en) Secure code optimization method and system
EP3818458B1 (en) A compiler device with masking function
Seuschek et al. Side-channel leakage aware instruction scheduling
JP2017509942A (ja) 暗号アルゴリズムで使用されるときに秘密データを保護する方法
JP7079711B2 (ja) 変換装置、変換方法、変換プログラム及び難読プログラム
US11210135B2 (en) Lightweight dispatcher for program control flow flattening
CN116226881A (zh) 一种基于编译型语言的源码加密方法
CN108021790B (zh) 文件保护方法、装置、计算设备及计算机存储介质
CN105095698A (zh) 基于最近执行的程序代码的程序代码模糊处理
Banescu Characterizing the strength of software obfuscation against automated attacks
Kosky Software Executable Fingerprinting: Literature Review and a Case Study
Breuer An Obfuscating Compiler

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220216

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230307

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230411

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: 20230424

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230523

R150 Certificate of patent or registration of utility model

Ref document number: 7285850

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150