JP2013535725A - ソフトウェアの完全性を保証するためのプロセッサにより実施される方法 - Google Patents

ソフトウェアの完全性を保証するためのプロセッサにより実施される方法 Download PDF

Info

Publication number
JP2013535725A
JP2013535725A JP2013519968A JP2013519968A JP2013535725A JP 2013535725 A JP2013535725 A JP 2013535725A JP 2013519968 A JP2013519968 A JP 2013519968A JP 2013519968 A JP2013519968 A JP 2013519968A JP 2013535725 A JP2013535725 A JP 2013535725A
Authority
JP
Japan
Prior art keywords
instruction
key
encrypted
current
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.)
Granted
Application number
JP2013519968A
Other languages
English (en)
Other versions
JP5616528B2 (ja
Inventor
マクシュティ,マルコ
クデルスキィ,アンリ
Original Assignee
ナグラビジョン エス アー
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 ナグラビジョン エス アー filed Critical ナグラビジョン エス アー
Publication of JP2013535725A publication Critical patent/JP2013535725A/ja
Application granted granted Critical
Publication of JP5616528B2 publication Critical patent/JP5616528B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/72Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits

Abstract

本発明は、1つ又は複数の前の命令の全部又は一部に基づいてキーを使用してプログラムの各命令の全部又は一部を暗号化し、命令ごとに異なる暗号化キーをもたらすことによって、ソフトウェア・プログラムの完全性を保証する問題に解決策を提供する。本発明は、構造が事実上必ずしも木状であるというわけではないソフトウェア・プログラムに適用できて、プログラムがループ、ジャンプ、呼び出し、又はブレークなどを含むときにも適用できる。本発明では、暗号化された命令が誤って解読されるときに、例外がフラグを立てられるのを可能にする。命令キーが必要に応じて適切に初期化されることができるので、第1の命令は平文である必要がない。本発明は、ソフトウェアで、又は完全にハードウェアにおいて実現されて、このことにより、解読された命令又は解読キーをインターセプトする第三者の可能性を排除することができる。

Description

本発明は、ソフトウェア保護の領域、より詳細にはソフトウェアの改ざんを防止して、ソフトウェアの完全性を保証するための装置及び手段に関する。
安全なデータ処理の領域において、処理が安全な方法で行われうる改ざんに抵抗力がある環境を提供することが必要である。アプリケーション・セキュリティの問題に取り組む第1の方法は、その中にソフトウェアが収納されたハードウェアをできるだけ安全に生成しようと努力することに集中した。その時改ざん防止の概念は、この種のハードウェアを開くのが困難であるか、又は一旦開くと、安全なソフトウェアが存在するチップを破壊することを意味した。しかしながら、今日では、アプリケーション・セキュリティを達成するためのソフトウェア技術がより多くの柔軟性及び低いコストを提供して、実際、良好なアプリケーション・セキュリティが、ソフトウェアが改ざんされなかったことを保証することを意味するほとんどの場合に、ソフトウェア及びハードウェア方法の組合せが使われることが、一般的に認識されている。
アプリケーションが動作する典型的システムは、一般に、処理ユニット、複数の周辺機器、及びメモリを含む。セキュリティが必要とされるほとんどの場合に、暗号化方式が用いられる。この種の方式において、安全に保たれることを必要とする情報、即ち作業データ又は実行コードは暗号化される。暗号化は、通常、システムの一部を形成するセキュリティ・モジュール内で行われる。セキュリティ・モジュールは、様々な方法で、例えば、マイクロプロセッサ・カード、スマートカード、あるいはバッジ又はキーの形のいかなる電子モジュールでも実施することができる。これらのモジュールは、通常、持ち歩けて、レシーバーから着脱可能であり、そして改ざんされないように設計されている。一般に用いられる形は電気接点を有するが、ISO14443タイプのコンタクトレスのバージョンも存在する。
セキュリティ・モジュールの別の実施態様は、それがレシーバー内で直接はんだ付けされる所に存在し、これの変形は、SIMモジュールのようなソケット又はコネクタ上の回路である。更に別の実施態様は、別の機能を有するチップに、例えば、デスクランブル・モジュールに、又はデコーダーのマイクロプロセッサ・モジュールに集積化されたセキュリティ・モジュールを備えていることである。セキュリティ・モジュールはソフトウェアでも実施することができる。
理学修士の学位論文「ソフトウェア保護のための改ざんに対する抵抗」、Ping Wang、2005年
最新の安全な処理システムにおけるセキュリティ・モジュール及び高度な暗号化技術の使用にもかかわらず、この種のシステムは、依然として、セキュリティを破る試みにとってかなりの魅力を示している。この種のシステムのセキュリティを破るために用いた技術は、例えば、関係するハードウェアのリバース・エンジニアリングあるいはそこで使用するソフトウェアの動的又は静的分析及びこの種のソフトウェアによる次の改ざんを含む。静的分析によって、それはある種の非実行コードの逆アセンブリ又は逆コンパイルを意味する。動的分析によって、それは、即ちソフトウェアが動作している間に特定の信号を観察することによって、コードが動作している間の分析を意味する。この種の分析は改ざんにつながり、それによって、ソフトウェアは、例えば、分岐・ジャミング・アタックを実行することにより変更され、そこでは、現在の条件がこの種の実行を定めないときに、無条件のジャンプが条件つきのジャンプの代わりに導入されて、分岐に実行を強制する。一般的に、この種のアタックは、例えば認識番号又はパスワードの照合のような認証ステップをバイパスすることをプログラムに強制する。
非特許文献1において、ピン・ワン(Ping Wang)はマルチブロック暗号化の技術を記述しており、そこにおいて、ソフトウェア・プログラムはプログラムの流れに従って多くの独立ブロックに分けられている。プログラムの各ブロックは次に暗号化されて、各ブロックは異なる暗号化キーを有する。各ブロックの暗号化キーは、プログラムの流れに従った前のブロックのハッシュ値である。この技術は木状構造を有するプログラムにおいて機能し、そこではブロックが、1つのブロックが別のブロックにつながる階層方式で配置される。この技術において、実行される第1のブロックは平文でなければならない。解読ルーチンを呼び出すコードは各ブロック内に置かれて、動的な完全性検査を実施するプログラム・コントローラはプログラムの末端部に加えられる。敵対者がプログラムの一部を変えようとする場合は、プログラムの変更部分を含むブロックのハッシュ値は異なり、それで次のブロックは適切に解読されず、そしてプログラムはクラッシュする。
この方式には、各ブロックが従って2回読み込まれることを必要とするという欠点がある。それには、暗号化が命令ベースによる命令よりはむしろブロックベースのブロックで行われて、1つの解読キーが全ブロックにあてはまるという点で更なる欠点がある。これは、1つのキーの発見がソフトウェアの完全なブロックを攻撃されやすいままにしておくことを意味する。この設計で、定義上は、1つのブロックは1つのループの全体を含まなければならないので、最小限のブロックのサイズは1つのループを完全に含んでいる最も小さいブロックにより決定される。ループがなかった場合には、プログラムが1ブロックにつき1つの命令に減らされることが可能であったとしても、その方法を実施する際の結果として生じるオーバーヘッドによって、最終結果が実行のサイズ及び速度に関して扱いにくくなる。更にまた、人はあり得るアタックを想像することがあり得て、そこでは、変更がブロックに対して行われ、そして対応する変化がプログラム・コントローラに対して行われて、それがブロックに対して行われる変更に関して適当なハッシュ値を算出するという方法で変更を補償し、このことによりプログラムの認められた完全性を保存できる。
本発明は、実行コードが暗号化されたフォーマットの中に存在することを可能にし、暗号化は命令ベースによる命令で行われて、命令が2回読み込まれることが必要ではない。この方式は、暗号化キーはそれらがインターセプトされやすいかもしれない所には決して現れないという固有の利点を有するハードウェアにおいて完全に実現されることができる。ソフトウェア・オーバーヘッドがなく、従って実行の速度は非常に増大する。従来技術においては、次のブロックの暗号化キーは前のブロックの内容だけに依存していた。本発明において、暗号化キーは多くの前の暗号化キーの値の累算に依存できる。例えば、次の命令を解読するキーは、2つの前の命令のキーの累算と組み合わせた現行命令に基づくことがあり得る。
本発明は、ソフトウェアの分析及び前記ソフトウェアのその後の改ざんによって生じるセキュリティの問題を解決し、その一方で、解決案を達成するためにオーバーヘッドを最小化して、それを柔軟性があるものとし、多くのいろいろな構造タイプのソフトウェアを使用するシステムに適用できるようにすることを目的とする。これは、プログラムメモリ内のソフトウェアの完全性を保証するためのプロセッサにより実施される方法を使用して達成され、前記ソフトウェアは複数の暗号化された命令を含み、1つの命令は少なくとも1つの演算コードを含み、前記方法は初期化された命令キーを使用して次のステップを含む:
現行の暗号化された命令を読み込むステップ、
現行の暗号化された命令を解読するために命令キーを使用するステップ、
読み込まれる次の暗号化された命令が更新された命令キーで解読されることができるように、命令キーの現行値及び現行命令のダイジェストに基づいて算出を使用して命令キーを更新するステップ、
現行命令を実行するステップ。
本発明は、構造が事実上必ずしも木状であるというわけではなく、そしてソフトウェアで、又は完全にハードウェアで実現されて、このことにより、解読された命令又は解読キーをインターセプトする第三者の可能性を排除できるプログラムに適用されることができる。
本発明は、添付の図面と関連して読まれるとき、好ましい実施形態についての以下の詳細な説明を参照することによって最も良く理解される。
本発明の実施形態の簡略ブロック図である。 本発明の実施形態のフロー図である。 ソフトウェア・ジャンプ又は分岐が、どのように本発明の実施形態により処理されることができるか示している簡略ブロック図である。
上記したように、本発明は、安全な方法でソフトウェアを実行するための手段を提供することを目的とし、それによって、ソフトウェアは暗号化された形でメモリに格納されて、モニタされる可能性を避けて、セキュア・プロセッサ内で命令ベースによる命令で解読され、実行される。現行命令の解読のキーは適切に復号化されていた少なくとも1つの前の命令に依存し、その一方で、次の命令の解読のキーは現行命令の正しい解読に依存する。このようにして、ソフトウェアの完全性を保証するための自己チェック手段は達成される。1つの命令になされる変更が次の命令を解読する能力を無効にして、プログラムの早い終了、又は少なくともプログラム実行トレースの破損になるので、単なる成功したソフトウェアの実行は、流れも内容も改ざんされなかったという保証である。本発明において使用する方式はソフトウェアで実現されることができるが、それがハードウェアで完全に実現され、それによって、平文の命令をインターセプトするか、又は関係する解読キーのいずれかをインターセプトする第三者の可能性を排除できる点に留意する必要がある。本発明は、最新技術の解決策と比較して、ほとんどオーバーヘッドをもたらさない。この方式は、ジャンプ及びブレークを有するそれらを含むさまざまな異なるアーキテクチャ又は構造のソフトウェアに適用されることができて、ツリー構造として公知の構造に限定されない。
本発明は従って、少なくとも、暗号化されたプログラム命令(INSTP′、INSTC′、INSTF′)を保持するプログラムメモリと、前記プログラム命令を解読する解読モジュール(DECR)と、解読されたプログラム命令(INSTP、INSTC、INSTF)を実行するデータ処理ユニット(SCPU)と、暗号化されたプログラム命令を解読するための、命令キー(KP、KC、KF)として公知である、解読キーを構築する手段とを備えるシステムにおいて、改ざん防止ソフトウェア実行を保証する方法を提供する。命令キーを構築するための手段は、もちろんデータ処理ユニット内にあってもよい。解読モジュール及びデータ処理ユニットは、最新技術において周知であるタイプのいずれかのセキュリティ・モジュール内にあることが好ましい。
暗号化されたプログラムの実行中に、図1に示すように、現行の暗号化された命令(INSTC′)は、プログラム・メモリ(PMEM)から読み込まれ、そして解読(DECR)されて、一方では前の解読キー(KC)のダイジェスト及び他方では前に実行された命令(DIG(INSTRP))のダイジェストの組合せ(Fn)から構築される現行の解読キー(KC)を使用して現行命令(INSTC)を与える。「ダイジェスト」によって、オペランドの全部又は一部に適用されて、出力を生じるいかなる動作も意味する。ダイジェストが、オペランドで実行されるときに、オペランド自体に等しい出力を生じることができる点に注目する価値がある。本発明の一実施形態によれば、ダイジェストはオペランドに一方向性関数を含む。これは、後戻りして、前のキー又は前の命令を演繹する第三者によるいかなる試みも更に妨げることを可能にする。ハッシュ関数は、この種の一方向性関数の例(例えばSHA2、MD5)である。「組合せ」によって、それが論理的であるか算術的であるか暗号かどうかにかかわらず、前述のオペランドの組合せのいかなる形も意味する。このように、現行の暗号化された命令がプログラムの作成者により意図された命令ではない場合は、現行の解読キー(KC)が、現行の暗号化された命令を解読するために用いるときに、ある他の意図されない値を生ずるので、プログラムの流れ及び内容は保証される。このようにして、我々は、ソフトウェアの完全性がその成功する実行だけによって保証されるので、それ自体を検査するソフトウェアを得る。ソフトウェアが改ざんされていた場合、それは実行するのに失敗する。
図2は、本発明の上記実施形態を表すフロー図を示す。この表示は、その現行の解読キーを有する現行命令及びその前のキーを有する前の命令などについて話をするよりはむしろ、本発明を時間におけるスナップショットの観点から記載し、それは、各命令が実行されるとき更新される命令キー(Kl)だけに関連する。いかなる処理ユニットにおいても正常であるように、実行される次の命令の位置を示すためにプログラム・カウンタ(PC)が用いられる。前記命令が単純な増加以外の更新の異なる形を指示する場合は、プログラム・カウンタは命令の実行の後に増加するか又は更新される。例えば、命令がレジスタから値をロードするコマンドを含む場合は、プログラム・カウンタは通常次の位置を示すために単に増加する。また一方、命令が特定の位置へのジャンプを含む場合は、プログラム・カウンタはジャンプにより示される位置の値により更新される。
プログラム・カウンタ(PC)及び命令キー(KI)は、最初に初期化される(IN IPC、IN IKl)。暗号化された命令は、プログラム・カウンタ(RDINST′c.f.PC)により示される位置でプログラムメモリから読み込まれ、そして命令キー(DCPTINST、Kl)を使用して解読される。命令は実行され(EX INST)、そしてプログラム・カウンタは、命令により指図されるように、単純な増加によって、又は新しい値に置換することにより更新される(UPD PC)。命令キーは、実行された命令のダイジェストを使用して更新される(UPD Kl、INST)。従って、命令キーの更新では、ちょうど今実行された命令だけでなく、命令を解読するために用いたキーの値も考慮する。次に、前の命令を解読するために前に用いた命令キーは、前の命令及びそれの前に命令を解読するために用いた命令キーから構築された。このようにして、命令キーの値は、最後の実行された命令だけでなくて、組み合わさったすべての前に実行された命令にも依存する。実際に、本発明の実施形態において、命令キーの更新では、最後の実行された命令の値及び少なくとも2つの前の実行された命令の値を考慮する。例えば、命令4を解読するためのキーは、命令3のダイジェスト、命令2のダイジェスト、及び命令1のダイジェストの組み合わせであり得る。
図2に示すように、本発明の方法は、命令キーが前に実行された命令を使用して更新されるループを含む。これは、プログラムで第1の命令をどのようにして解読するかに関する質問につながる。前に実行された命令がない場合は、第1の命令キーはどのようにして算出されるか? 本発明の一実施形態では、他の全ての命令が暗号化されるのに対して、プログラムの第1の命令は平文のままである。第1の命令は従って直接実行され、それによりループを開始し、そして第2の命令は第1の命令その他に基づいて命令キーを使用して解読される。本発明の別の実施形態において、全プログラムは、第1の命令を含んで暗号化され、そして命令キーは第1の命令を解読する値を使用して初期化される。この値は、セキュリティ・モジュールに構築されるか、又は外部からセキュリティ・モジュールに伝えられるマスターキーであり得る。
プログラムの実行中に、現行のメモリ位置(C)にある現行命令(INSTC′)が、複数の前の命令(INSTP1、INSTP2)により参照されることができる状況が発生することがある。換言すれば、例えば、分岐タイプ命令(例えば、ジャンプ、分岐、又は呼び出しを含む)に出会うときに、現行命令又は呼ばれる側は複数の呼び出し側により参照されることができる。図3は、2つの呼び出し側(c aller)(INSTP1、INSTP2)が1つの呼ばれる側(callee)(INSTC)を参照するシナリオを例示する。この場合、命令キーのための2つの異なる値がいろいろな可能性がある履歴からみて可能であるので、これは、キーのうちどちらが暗号化された呼ばれる側を解読するために用いるかに依存して、2つの異なる結果を生じる。暗号化された呼ばれる側が1つのキーだけでしか暗号化されることができなかったので、これはもちろん望ましい状況ではない。この問題を回避するために、変更(CORR1、CORR2)が、呼ばれる側を正しく解読するために結果として生じる命令キーを必要な値にするよう強制するために、算出に対して行われる。例えば、位置Cにある呼ばれる側は、位置P1及びP2にある2つの異なる呼び出し側により参照される。位置C(INSTC′)にある暗号化された命令を適切に解読するために必要とする命令キーはKCINである。しかしながら、P1(INSTP1)にある命令の実行に続く命令キーの値はKP1OUTであり、そしてP2(INSTP2)にある命令の実行に続く命令キーの値はKP2OUTである。更にまた、KP1OUTはKP2OUTに等しくなくて、KP1OUTもKP2OUTもKCINに等しくないと仮定することが合理的である。従って、この方法は、分岐タイプの命令が実行されるときはいつでも、変更(CORR1、CORR2)がこのように行われて、命令キーの値を必要な値にすることができることを必要とする。呼ばれる側を解読するために必要であるキーの値が公知であり(即ちKCIN)、そして呼び出し側の実行後のキーの値が公知であるので、各呼び出し側のための変更値を予測することは可能であり、そこにおいて、その変更値は、算出において使われるときに、命令キーを必要な値にする。適当な変更値は次に、このタイプの命令が使われるたびに命令キーに対して必要な変更を行うために、各分岐タイプで実施され、異なる変更が呼び出し側ごとになされる。本発明の実施形態によれば、変更値は、上記のように、前の解読キーと前の命令のダイジェストの組合せで更なるオペランドとして導入される。
上記の命令キーに対する変更がどのようになされるかの実施例として、我々はジャンプ命令を考慮する。本発明の好ましい実施形態において、ジャンプ命令は、通常のジャンプ命令の場合のように、宛先パラメータを含み、そして変更パラメータ、例えばJMP C,#CORR1を更に含む。変更値(#CORR1)は、次に、前の命令キーと前の命令の全部又は一部との組合せで付加的なパラメータとして使われる。変更値を命令から抽出して、組合せステップにおいて、それをエクストラ・パラメータとして使用するよりはむしろ、ジャンプ命令のダイジェストが変更値をすでに考慮に入れることができる点に注意することは有用である。次の表1は、プログラムの実行が上記のタイプの変更されたジャンプ命令によって展開するときの、命令キーの状態を例示する。表は、命令を解読するために必要とするキーの値、並びに命令の実行及び新しいキーの算出の後のキーの値を含む。ラベル1で命令を解読するために必要とするキーの値が公知であるので、適当な訂正値CORR1又はCORR2が、変更されない値K4又はK14を必要な値K91にするために算出されることができるという結果になる。
Figure 2013535725
本発明の別の実施形態において、例えば、変更されたジャンプ命令を有する代わりに、標準ジャンプ命令が使われて、上記の命令キーに対する変更はパラメータとして変更値を有する専用「変更」命令により行われる。この種の変更命令の機能は、変更値に基づいて命令キーに直接作用することである。変更命令は分岐又はジャンプ・タイプの命令の直ぐ前に配置され、従って命令キーが呼ばれる側を適切に解読するために適切に更新されるのを可能にする。上記の通りの「変更」機能が、実際には、命令キーの値について所望の変更動作を実行するように設計されている複数の命令である点に注意することは有用である。例えば、呼ばれる側を適切に解読するために必要とされる命令キーの値が#39である場合は、ジャンプ命令を述べる直前に、変更値(CORR1)を見つけるために#39を、そして新しい(訂正)KI値を与えるために次にCORR及びKIの追加を有する命令キー(KI)のXORがあり得る。
別の実施例として、呼ばれる側「ラベル1」の命令キーは値K91を有する。プログラム・フローがいろいろな経路から届くことができるという事実のため、命令キーが予め定められた値K90に更新されるように、訂正命令Inst_CORRはジャンプの直前に加えられる。分岐タイプの命令(それはこの場合ジャンプである)の実行は、命令キーをK90からK91へ変更する。それが下記の表2において明らかであるように、訂正命令(Inst_CORR)と関連した訂正値(C1、C2)は、現行の命令キー(K3、K13)を所定値K90に変更することを意図する。結果として、ジャンプの実行は命令キーをK90からK91(呼ばれる側で命令を解読するために用いる値)(ラベル1)へ更新する。
例えば、命令が短い分岐BRAであるときに、分岐タイプの命令が異なる値を有する場合には、この命令によって生じるダイジェストはジャンプ命令によって生じるダイジェストとは異なる。結果として、分岐命令を実行することがジャンプ命令に関してと同じでない一方で、訂正命令Inst_CORRにアタッチした訂正値C3は、違い及び命令キーを考慮する必要がある。しかしながら、訂正値C3により、短い分岐命令の実行の後の最終的な値はまだK91である。
Figure 2013535725
次の表3は、プログラムの実行が条件つきのジャンプ命令によって展開するときの、命令キーの状態を例示し、そこにおいて、2つの異なる宛先、ラベル1及びラベル2は、条件つきのジャンプの実行の後に可能である。この場合、両方の宛先で命令を解読するために必要とするキーは同じでなければならない。この表は、命令を解読するために必要とするキーの値並びに命令の実行及び新しいキーの算出の後のキーの値を含む。
Figure 2013535725
1つの呼ばれる側が複数の呼び出し側により参照されることができる別の状況は、このように呼ばれる側を適切に解読するために命令キーになされる変更を必要として、関数呼出し又はサブルーチン呼び出しである。一般的に、この種の呼び出しの間、パラメータは呼び出しの間に渡され、このことにより関数又はサブルーチン内のいろいろな可能な流れの数、従って関数又はサブルーチンの実行後の可能な成果の数を増加させることができる。この種の呼び出しに出会うときに、その状態が関数又はサブルーチンの初めに公知であり得るように、変更が命令キーになされ、そして更なる変更は、呼び出しから戻ると、即ち関数又はサブルーチンから出てくる直前になされる。
本発明との関連で、上記の通りの変更はまた、1つのキーの別のキーによる置換えを伴うこともあり得る点に注意する価値がある。
データ処理技術に熟練した人々には公知のように、1つの命令は少なくとも1つの実行される演算を定める演算コードを含む。命令はこれのみを含んでもよいが、又は、その上で演算が実行されることになっている1つ又は複数のオペランドを更に含んでいてもよい。更に演算コード及び1つのオペランド又はそれらが存在する場合は複数のオペランドに関して、命令は、完全性指数としても知られる認証タグを含むことができ、それは命令の妥当性を点検する方法として使われる。従って、本発明の別の実施形態で、命令の実行の前に、命令は、上記の通りに認証タグを使用して最初に確認されることができる。認証タグは、チェックサムあるいは演算コード及びオペランドの全部又は一部のハッシュ値という形をとることができる。ほとんどの場合、認証タグは演算コードのシグネチャとみなされることができる。命令の全部又は一部を暗号化することにおいて、我々は、従って、演算コードだけ、又は認証タグを有する演算コードを暗号化するべきであるか、あるいはオペランドを同様に含むべきかどうかの選択に直面する。認証タグが潜在的アタッカーに演算コードがどんなものであるかの手掛かりを与えることができるので、上記のいかなる組合せも、しかしながら、プログラムの内容を第三者から隠すことが重要である場合に動作し、本発明は演算コード及び認証タグを暗号化する方を好む。本発明のこの実施形態において、使用する方法は、従って、現行の暗号化された命令を読み込むこと、命令キーを使用して、現行の暗号化された命令及び認証タグを解読すること、このようにして抽出した認証タグを確認すること、読み込まれる次の暗号化された命令が更新された命令キーで解読されることができるように、命令キー(又はそのダイジェスト)の現在の値及び現行命令のダイジェストに基づいた算出を使用して命令キーを更新すること、認証タグが有効であるとわかったという条件で現行命令を実行することを含む。認証タグが有効であるとわからない場合は、即ち適当な警報を発生させると共に、プログラムは優雅に終わるようにすることができる。
本発明が実施されうるいくつかの場合に、目的は、第三者がソフトウェアを複製できるのを防止することでは必ずしもなく、単にその第三者がこの種の変更が検出されずにソフトウェアを変更するのを防止するだけであるので、命令の演算コードが平文のままであり、そして認証タグだけが暗号化される本発明の一実施形態が存在する。これは、本発明によってもたらされるソフトウェア完全性を保証する目的を達成するのに十分である。同様に、別の実施形態で、オペランドが存在する場合には、それらだけを暗号化することが可能である。同じように、演算コード、オペランド、若しくは認証タグ、又は他のいかなるそれらの組み合わせのいずれかの暗号化は可能である。
同様に、本発明の実施形態で、演算コード及びオペランドを平文のままにしておいて、認証タグの部分だけを暗号化することは可能である。それからジャンプの場合、上記の通りに変更値を使用する代わりに、ジャンプ命令の後に認証タグのチェックを単に停止させることが可能である。この解決策の利点は、ジャンプ命令がその場合変更値を必要としないということである。
本発明は、従って、1つ又は複数の前の命令の全部又は一部に基づいてキーを使用してプログラムの各命令の全部又は一部を暗号化し、従って命令ごとに異なる暗号化キーをもたらすことによって、ソフトウェア・プログラムの完全性を保証する問題に対する解決策を提供する。本発明は、構造が事実上必ずしも木状ではないソフトウェア・プログラムに適用できて、プログラムがループ、ジャンプ、呼び出し、又はブレークなどを含むときにも適用できる。本発明では、暗号化された命令が誤って解読されるときに、例外が警告されることが可能である。命令キーが必要に応じて適切に初期化されることができるので、第1の命令は必ずしも平文である必要がない。本発明は、ソフトウェアで、又は完全にハードウェアにおいて実現されて、このことにより、解読された命令又は解読キーをインターセプトする第三者の可能性を排除できる。
命令の暗号化は、広範囲の暗号化アルゴリズムの1つ、例えば、ストリーム暗号、ブロック暗号、一度だけしか使わない暗号表、あるいはビット反転、ビットシフト、ビットスワッピング、パリティ・アルゴリズム、又は周期冗長コードのようなスクランブラを使用できる。

Claims (12)

  1. プログラムメモリ内のソフトウェアの完全性を保証するためのプロセッサにより実施される方法において、前記ソフトウェアは複数の暗号化された命令を含み、1つの命令は少なくとも1つの演算コードを含み、前記方法は初期化された命令キーを使用する方法であって、
    現行の暗号化された命令を読み込むステップと、
    前記現行の暗号化された命令の少なくとも一部を解読するために前記命令キーを使用するステップと、
    前記命令キーの現行値のダイジェスト及び前記現行命令のダイジェストに基づいて算出を使用して前記命令キーを更新するステップであって、その結果、読み込まれた前記次の暗号化される命令は前記更新された命令キーで解読することができるステップと、
    前記現行命令を実行するステップと、
    を含む方法。
  2. 前記プログラムメモリ内の第1の命令が暗号化されていない請求項1記載の方法。
  3. 前記現行命令が認証タグを更に含み、前記認証タグは実行の前に前記命令を認証するために用いる請求項1又は2に記載の方法。
  4. 変更が前記命令キーに対して行われ、前記変更によって、実行可能な命令を与えるために前記変更された命令キーを使用して前記次の暗号化された命令の解読が可能になる請求項1〜3のいずれか1項に記載の方法。
  5. 前記現行命令が前記変更を達成する際に使われる変更値を更に含み、前記変更値は前記命令値から抽出され、そして次の暗号化キーを決定すると共に前記更新ステップに作用する請求項4の方法。
  6. 暗号化された命令を解読すること、前記命令キーを更新すること、前記現行命令を認証すること、又は前記現行命令を実行するプロセスのいずれか又は全部が、セキュリティ・モジュール内で実行される請求項1〜5のいずれか1項に記載の方法。
  7. 前記ダイジェストが前記現行命令の全部又は一部に適用された関数の結果であり、前記関数は、論理関数、数学関数、暗号関数、又は一方向性関数から選択される請求項1〜6のいずれか1項に記載の方法。
  8. 前記命令キーの前記更新が変更値に更に基づき、前記変更値は前記命令キーを公知の値にするために用いる請求項1〜7のいずれか1項に記載の方法。
  9. マスターキーが前記命令キーを初期化するために用いられる請求項1〜8のいずれか1項に記載の方法。
  10. プログラム・カウンタ(PC)と、暗号化されたプログラムを格納するためのプログラムメモリ(PMEM)とを備える装置であって、前記暗号化されたプログラムは複数の暗号化された命令(INST′)を含み、前記命令は少なくとも1つの演算コードを含み、前記装置は解読モジュール(DECR)及びデータ処理ユニット(SCPU)を更に備え、前記装置は初期化された命令キー(KI)にアクセスする装置において、前記命令キーの全部又は一部及び少なくとも1つの前に実行された命令のダイジェストに基づいて、前記命令キー(KI)を再帰的に更新する手段を更に備えることを特徴とする装置。
  11. 前記命令キーを再帰的に更新するための前記手段がハードウェアにおいて実現される請求項10記載の装置。
  12. 前記命令キーの前記更新が変更値に更に基づき、前記変更値は前記命令キーを周知の値にするために用いる請求項10又は11に記載の装置。
JP2013519968A 2010-07-22 2010-07-22 ソフトウェアの完全性を保証するためのプロセッサにより実施される方法 Active JP5616528B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/EP2010/060603 WO2012010205A1 (en) 2010-07-22 2010-07-22 A processor-implemented method for ensuring software integrity

Publications (2)

Publication Number Publication Date
JP2013535725A true JP2013535725A (ja) 2013-09-12
JP5616528B2 JP5616528B2 (ja) 2014-10-29

Family

ID=43297003

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013519968A Active JP5616528B2 (ja) 2010-07-22 2010-07-22 ソフトウェアの完全性を保証するためのプロセッサにより実施される方法

Country Status (6)

Country Link
JP (1) JP5616528B2 (ja)
KR (1) KR101687439B1 (ja)
CN (1) CN102959556B (ja)
BR (1) BR112012031052B1 (ja)
RU (1) RU2541196C2 (ja)
WO (1) WO2012010205A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016167662A (ja) * 2015-03-09 2016-09-15 Kddi株式会社 情報処理装置、情報処理方法、及びコンピュータプログラム

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103902858A (zh) * 2013-12-25 2014-07-02 武汉安天信息技术有限责任公司 一种apk应用加固的方法及系统
US10552619B2 (en) * 2015-07-20 2020-02-04 Intel Corporation Technologies for secure trusted I/O access control
US10073977B2 (en) 2015-07-20 2018-09-11 Intel Corporation Technologies for integrity, anti-replay, and authenticity assurance for I/O data
CN106789006A (zh) * 2016-11-28 2017-05-31 范睿心 一种解密方法及系统
KR101953444B1 (ko) * 2016-12-26 2019-05-17 포항공과대학교 산학협력단 하드웨어 수준 보안을 보장하는 가상화 기반 소프트웨어 보안 방법 및 이를 이용하는 장치
FR3071121B1 (fr) 2017-09-14 2020-09-18 Commissariat Energie Atomique Procede d'execution d'un code binaire d'une fonction securisee par un microprocesseur
FR3071122B1 (fr) 2017-09-14 2019-09-13 Commissariat A L'energie Atomique Et Aux Energies Alternatives Procede d'execution d'un code binaire d'une fonction securisee par un microprocesseur
RU179302U1 (ru) * 2017-11-21 2018-05-07 Александра Владимировна Харжевская Устройство динамического контроля выполнения специальных вычислений
FR3094107B1 (fr) 2019-03-21 2021-02-26 Commissariat Energie Atomique Procédé d'exécution d'un code binaire d'une fonction sécurisée par un microprocesseur
CN110515652B (zh) * 2019-08-30 2021-10-15 腾讯科技(深圳)有限公司 代码摘要的生成方法、装置和存储介质
CN111565002A (zh) * 2020-05-22 2020-08-21 北京合康新能变频技术有限公司 一种变频器的控制系统
CN111881467B (zh) * 2020-06-12 2022-10-28 海光信息技术股份有限公司 利用安全处理器保护文件的方法、装置、cpu和计算机设备
EP4002165A1 (en) * 2020-11-18 2022-05-25 Thales DIS France SA Code flow protection with error propagation

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002353960A (ja) * 2001-05-30 2002-12-06 Fujitsu Ltd コード実行装置およびコード配布方法
JP2007506187A (ja) * 2003-09-18 2007-03-15 アップル コンピュータ、インコーポレイテッド インクリメンタルなコード署名の方法及び装置
JP2009211292A (ja) * 2008-03-03 2009-09-17 Oki Electric Ind Co Ltd 暗号化方法、復号化方法、暗号化装置、復号化装置
JP2010140473A (ja) * 2008-12-15 2010-06-24 Thomson Licensing 命令レベルのソフトウェア暗号化のための方法及び装置

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5675645A (en) * 1995-04-18 1997-10-07 Ricoh Company, Ltd. Method and apparatus for securing executable programs against copying
US6061449A (en) * 1997-10-10 2000-05-09 General Instrument Corporation Secure processor with external memory using block chaining and block re-ordering
US6715085B2 (en) * 2002-04-18 2004-03-30 International Business Machines Corporation Initializing, maintaining, updating and recovering secure operation within an integrated system employing a data access control function
US6948067B2 (en) * 2002-07-24 2005-09-20 Qualcomm, Inc. Efficient encryption and authentication for data processing systems
US7370319B2 (en) * 2003-02-11 2008-05-06 V.I. Laboratories, Inc. System and method for regulating execution of computer software
EP1855476A3 (en) * 2006-05-11 2010-10-27 Broadcom Corporation System and method for trusted data processing
KR100922862B1 (ko) * 2007-11-14 2009-10-20 성균관대학교산학협력단 명령어의 부호화를 통한 시스템 보안방법
CN101452514B (zh) * 2007-12-06 2011-06-29 中国长城计算机深圳股份有限公司 一种安全计算机的用户数据保护方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002353960A (ja) * 2001-05-30 2002-12-06 Fujitsu Ltd コード実行装置およびコード配布方法
JP2007506187A (ja) * 2003-09-18 2007-03-15 アップル コンピュータ、インコーポレイテッド インクリメンタルなコード署名の方法及び装置
JP2009211292A (ja) * 2008-03-03 2009-09-17 Oki Electric Ind Co Ltd 暗号化方法、復号化方法、暗号化装置、復号化装置
JP2010140473A (ja) * 2008-12-15 2010-06-24 Thomson Licensing 命令レベルのソフトウェア暗号化のための方法及び装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016167662A (ja) * 2015-03-09 2016-09-15 Kddi株式会社 情報処理装置、情報処理方法、及びコンピュータプログラム

Also Published As

Publication number Publication date
RU2541196C2 (ru) 2015-02-10
JP5616528B2 (ja) 2014-10-29
CN102959556B (zh) 2015-12-16
KR101687439B1 (ko) 2016-12-16
BR112012031052A2 (pt) 2016-10-25
KR20130120985A (ko) 2013-11-05
BR112012031052B1 (pt) 2020-12-01
CN102959556A (zh) 2013-03-06
RU2013104050A (ru) 2014-08-27
WO2012010205A1 (en) 2012-01-26

Similar Documents

Publication Publication Date Title
JP5616528B2 (ja) ソフトウェアの完全性を保証するためのプロセッサにより実施される方法
US8683224B2 (en) Processor-implemented method for ensuring software integrity
CN111052115B (zh) 取决于调用路径的认证的数据处理装置和方法
US10354064B2 (en) Computer implemented method and a system for controlling dynamically the execution of a code
KR101256149B1 (ko) 프로그램 카운터 인코딩을 이용한 간접 함수 호출 보호 방법 및 보호 장치
Werner et al. Sponge-based control-flow protection for IoT devices
US9602289B2 (en) Steganographic embedding of executable code
KR101216995B1 (ko) 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법
US8745408B2 (en) Instruction encryption/decryption arrangement and method with iterative encryption/decryption key update
US9892661B2 (en) Steganographic embedding of hidden payload
US20110271350A1 (en) method for protecting software
JP2006107274A (ja) ハッシュ関数演算システム、暗号化システムおよび不正解析・改竄防止システム
US10862682B2 (en) Nonce generation for encryption and decryption
US10120987B2 (en) Device and method for executing protected iOS software modules
US9177111B1 (en) Systems and methods for protecting software
JP2009169489A (ja) 暗号化方法、復号化方法、暗号化装置、復号化装置
US11442738B2 (en) Method for executing a machine code of a secure function
CN107205001A (zh) python脚本的更新方法及装置、客户端、服务器
US20210143978A1 (en) Method to secure a software code performing accesses to look-up tables
KR100978605B1 (ko) 시스템 보안용 침해탐지방법 및 침해 탐지기
Forte Automatic Binary Analysis and Instrumentation of Embedded Firmware for a Control-Flow Integrity Solution
EP3451214A1 (en) Computing device with computer program bounded thereto
Centenaro et al. Type-based Analysis of Financial APIs

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130614

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140328

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140430

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20140725

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20140801

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140819

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140911

R150 Certificate of patent or registration of utility model

Ref document number: 5616528

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

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