JP6203028B2 - 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法 - Google Patents

疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法 Download PDF

Info

Publication number
JP6203028B2
JP6203028B2 JP2013258128A JP2013258128A JP6203028B2 JP 6203028 B2 JP6203028 B2 JP 6203028B2 JP 2013258128 A JP2013258128 A JP 2013258128A JP 2013258128 A JP2013258128 A JP 2013258128A JP 6203028 B2 JP6203028 B2 JP 6203028B2
Authority
JP
Japan
Prior art keywords
conversion table
program
instruction
virtual machine
variable
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
JP2013258128A
Other languages
English (en)
Other versions
JP2015114964A (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.)
KDDI Corp
Original Assignee
KDDI Corp
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 KDDI Corp filed Critical KDDI Corp
Priority to JP2013258128A priority Critical patent/JP6203028B2/ja
Publication of JP2015114964A publication Critical patent/JP2015114964A/ja
Application granted granted Critical
Publication of JP6203028B2 publication Critical patent/JP6203028B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Description

本発明は、疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法に関する。
従来より、シミュレーション実験やゲーム等に利用される乱数の生成について、様々な生成法が開示されている。例えば、真の乱数生成法として、原子核崩壊等を活用する自然乱数生成法がある。また、時刻等をシードとしてプログラムを用いて生成する疑似乱数生成法がある。
非特許文献1は、高品質の疑似乱数を高速に生成する疑似乱数生成器を開示する。
M. Matsumoto and T. Nishimura, Mersenne twister: A 623−dimensionally equidistributed uniform pseudorandom number generator, ACM Trans. on Modeling and Computer Simulations, 1998.
しかしながら、原子核崩壊等を活用する方法では、特別な装置を必要とし、装置が高価であるという問題点があった。また、プログラムによる疑似乱数を生成する方法では、プログラムが解析された場合、乱数の生成手法が明らかとなり、乱数性が損なわれる(攻撃者にとって予測可能となる)可能性があった。さらに、プログラムの解析を防ぐ手法として難読化が考案されているが、逆コンパイルにより、元のソースコードに近いコードが復元されるような状況では、十分な安全性を有していなかった。
そこで、プログラムによって疑似乱数を生成し、かつ、そのプログラムが解析されても乱数性が損なわれない疑似乱数を生成する装置が求められている。また、プログラムの解析を困難にする装置が求められている。
本発明は、プログラムによって疑似乱数を生成し、かつ、そのプログラムが解析されても乱数性が損なわれない疑似乱数を生成する疑似乱数生成装置及び方法、並びに、プログラムの解析を困難にするプログラム難読化装置及び方法を提供することを目的とする。
本発明は、コンピュータ上で疑似乱数を生成する手法であって、次のような特徴を有する。
(a)プログラムは、ある固定の疑似乱数生成ロジックを持つ。
(b)プログラムは、ある仮想マシン(VM)上で実行される。
(c)仮想マシンは、起動時にランダムに命令変換表を作成し、プログラムの実行命令を命令変換表に基づいて変換して実行する。
(d)また、特定の変数についても、仮想マシン上において乱数を足し合わせる等の変形を行い実行する。なお、命令変換表を作成するための乱数や、変数についての乱数は、仮想マシンが従来方式により生成する。
(e)命令変換表を固定とすることで、環境ごとに異なる指紋データを生成可能である。すなわち、命令変換表自体又は生成した疑似乱数自体が各環境の識別子として活用できる。これにより、実行環境の検証データ(どの実行環境で実行されたかの証拠データ)を生成することができる。
(f)また、命令変換表を固定としその表を秘匿して保管することで、プログラムを見ただけではその動作を解析することができない難読化手法を実現する。
(g)さらに、上記の難読化手法において、仮想マシンが命令変換表を動的にダウンロードする手法を具備することにより安全性を向上させることができる。
(h)さらに、上記の難読化手法において、サーバ上から命令変換表を削除することで、プログラムを正しく実行できなくすることができるようになる。
具体的には、以下のような解決手段を提供する。
(1) 疑似乱数を生成する疑似乱数生成装置であって、疑似乱数を生成するための疑似乱数生成プログラムを実行する仮想マシンを起動する起動手段を備え、前記仮想マシンは、前記疑似乱数生成プログラムを記憶するプログラム記憶手段と、プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表と、前記疑似乱数生成プログラムの少なくとも一部の実行命令を、前記命令変換表に基づいて変換し、変換した実行命令を実行する実行制御手段とを備える、疑似乱数生成装置。
(1)の構成によれば、(1)に係る疑似乱数生成装置は、疑似乱数を生成するための疑似乱数生成プログラムを実行する仮想マシンを起動する。仮想マシンは、疑似乱数生成プログラムを記憶するプログラム記憶手段と、プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表とを備え、疑似乱数生成プログラムの少なくとも一部の実行命令を、命令変換表に基づいて変換し、変換した実行命令を実行する。
すなわち、疑似乱数生成プログラムは、疑似乱数生成装置の仮想マシン上で、少なくとも一部の実行命令が命令変換表に基づいて変換されて実行される。
したがって、(1)に係る疑似乱数生成装置は、プログラムによって疑似乱数を生成し、かつ、そのプログラムが解析されても乱数性が損なわれない疑似乱数を生成することができる。
(2) 前記仮想マシンは、前記起動手段によって起動されると、前記命令変換表における実行命令の対応付けを変更する変更手段を、さらに備える(1)に記載の疑似乱数生成装置。
したがって、(2)に係る疑似乱数生成装置は、疑似乱数生成プログラムの実行命令について、変換の対応付けを変更するので、疑似乱数生成プログラムが解析されても乱数性がより損なわれない疑似乱数を生成することができる。
(3) 前記仮想マシンは、前記疑似乱数生成プログラムで用いられる変数と、その変数に記憶される変数値の変換方法とを対応付けて記憶する変数変換表と、前記疑似乱数生成プログラムで用いられる少なくとも一部の変数に記憶される変数値を、前記変数変換表に基づいて変換し、変換した変数値を前記変数に記憶させる変数制御手段とを、さらに備える(1)又は(2)に記載の疑似乱数生成装置。
したがって、(3)に係る疑似乱数生成装置は、疑似乱数生成プログラムの実行において変数値を変換して記憶させるので、疑似乱数生成プログラムが解析されても乱数性がより損なわれない疑似乱数を生成することができる。
(4) (1)に記載の疑似乱数生成装置が実行する方法であって、前記起動手段が、前記疑似乱数生成プログラムを実行する仮想マシンを起動する起動ステップと、前記仮想マシンの前記実行制御手段が、前記疑似乱数生成プログラムの少なくとも一部の実行命令を、前記命令変換表に基づいて変換し、変換した実行命令を実行する実行制御ステップとを備える、方法。
したがって、(4)に係る方法は、プログラムによって疑似乱数を生成し、かつ、そのプログラムが解析されても乱数性が損なわれない疑似乱数を生成することができる。
また、以下のようなプログラム難読化装置によりプログラムの難読化を実現することができる。
(a)固定の命令変換表又は変数変換表を作成し、仮想マシンソフトウェアに安全な形で埋め込んでおく。仮想マシンソフトウェアは解析されないものとする。
(b)保護したいプログラムを固定の命令変換表又は変数変換表に基づいて変換する。その後、この変換されたプログラムや仮想マシンは、利用者のもとに配布される。
(c)プログラムは、命令変換表又は変数変換表が埋め込まれた仮想マシン(VM)上で実行される。不正者が変換されたプログラムを解析しようとした場合、命令変換表又は変数変換表によりプログラムが変更されているため、命令変換表又は変数変換表を知らない攻撃者は解析できない。一方で、命令変換表又は変数変換表を内蔵した仮想マシンソフトウェアでは、各演算命令が命令変換表又は変数変換表により元の形に変換されて実行されるため、変換前のプログラムの動作と同じ動作をすることが保証される。
(d)なお、命令変換表又は変数変換表を動的に安全にダウンロード(例えば、管理するサーバからダウンロード)する機構を仮想マシンソフトウェアに具備すれば、当該プログラム実行時のみ動的に命令変換表又は変数変換表をダウンロードして実行することができるため、仮想マシンソフトウェアを解析されたとしても命令変換表又は変数変換表が漏洩することは無い。また、この仕組みを応用することにより、命令変換表又は変数変換表を削除(例えば、管理するサーバから削除)してしまえばダウンロードできなくなるため、プログラムを実行できなくすることができるようになる。
具体的には、以下のような解決手段を提供する。
(5) 仮想マシン上で動作するプログラムを難読化するプログラム難読化装置であって、プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表を作成する変換表作成手段と、前記変換表作成手段によって作成された前記命令変換表を仮想マシンソフトウェアに組み入れて、前記命令変換表を組み入れた仮想マシンソフトウェアを作成する仮想マシンソフトウェア作成手段と、プログラムを前記命令変換表に基づいて変換するプログラム変換手段と、前記仮想マシンソフトウェア作成手段によって作成された前記仮想マシンソフトウェアと、前記プログラム変換手段によって変換されたプログラムとを、前記仮想マシンソフトウェアを組み込む装置であって前記変換されたプログラムを実行する装置に配布する配布手段と、を備えるプログラム難読化装置。
すなわち、(5)に係るプログラム難読化装置は、プログラムを命令変換表に基づいて変換し、命令変換表を仮想マシンソフトウェアに組み入れ、変換したプログラムと仮想マシンソフトウェアとを配布する。
したがって、(5)に係るプログラム難読化装置は、プログラムの解析を困難にすることができる。
(6) 前記仮想マシンソフトウェア作成手段は、前記命令変換表を仮想マシンソフトウェアに組み入れることに替えて、前記命令変換表をダウンロードするように、仮想マシンソフトウェアに組み入れる、(5)に記載のプログラム難読化装置。
したがって、(6)に係るプログラム難読化装置は、プログラムの解析をさらに困難にすることができる。
(7) (5)に記載のプログラム難読化装置が実行する方法であって、前記変換表作成手段が、プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表を作成する変換表作成ステップと、前記仮想マシンソフトウェア作成手段が、前記変換表作成ステップによって作成された前記命令変換表を仮想マシンソフトウェアに組み入れて、前記命令変換表を組み入れた仮想マシンソフトウェアを作成する仮想マシンソフトウェア作成ステップと、前記プログラム変換手段が、プログラムを前記命令変換表に基づいて変換するプログラム変換ステップと、前記配布手段が、前記仮想マシンソフトウェア作成ステップによって作成された前記仮想マシンソフトウェアと、前記プログラム変換ステップによって変換されたプログラムとを、前記仮想マシンソフトウェアを組み込む装置であって前記変換されたプログラムを実行する装置に配布する配布ステップと、を備える方法。
したがって、(7)に係る方法は、プログラムの解析を困難にすることができる。
本発明によれば、プログラム解析に対して安全な疑似乱数生成や、実行環境の検証機能、プログラムの難読化を実現することができる。
本発明の一実施形態に係る疑似乱数生成装置の構成を示す図である。 本発明の一実施形態に係る疑似乱数生成装置の命令変換表の例を示す図である。 本発明の一実施形態に係る疑似乱数生成装置の変数変換表の例を示す図である。 本発明の一実施形態に係る疑似乱数生成装置の処理を示すフローチャートである。 本発明の一実施形態に係る疑似乱数生成装置の仮想マシンの処理を示すフローチャートである。 本発明の一実施形態に係るプログラム難読化装置の構成を示す図である。 本発明の一実施形態に係るプログラム難読化装置の処理を示すフローチャートである。
疑似乱数生成装置10は、CPUのアーキテクチャ(例えば、仮想化支援機能を備えるCPU)や、仮想マシンソフトウェアによって、リソース(例えば、ハードディスクやメモリの記憶領域、物理的あるいは論理的に内部の情報を読み取られることに対する耐性の高い、ICカード等の耐タンパデバイス等)を割り当てて、仮想マシン20を作動させることができる。
仮想マシン20は、コンピュータの動作をエミュレートするソフトウェアであり、割り当てられたリソースを管理し、プログラムを実行する。
疑似乱数生成プログラムは、常に仮想環境である仮想マシン20を介して、実行環境のリソースを活用し演算をコンピュータに実行させる。
疑似乱数生成装置10が実行する実行手順は、以下の通りである。
1.仮想マシン20の起動時にランダムに命令変換表32を作成する。例えば、加算、減算、乗算、除算の各命令をランダムに並び替え、プログラムが加算を実行しようとしたときには、仮想マシン20がローカル環境に対して、乗算を実行するように命令し、結果をプログラムに返す、等の処理を行う。また、特定の変数についても、変数変換表33を用意し、仮想マシン20が生成した乱数を加算する等の処理を変数変換表33にて定義しておく。これらの命令変換表32及び変数変換表33を作成するための乱数は、仮想マシン20が従来方式により生成してよい。
2.プログラムは、ある特定の演算を実行することで疑似乱数を生成する。適当なシードを入力として、仮想マシン20を経由して演算を実行するが、その際、仮想マシン20の起動時に生成した命令変換表32及び変数変換表33により命令の変換及び変数変換が実行され、そのまま計算した値とは別の値が演算結果として得られる。
3.仮想マシン20を起動するごとに命令変換表32及び変数変換表33を作り直せば、演算は毎回異なることとなり、毎回異なる疑似乱数が生成される。一方で、攻撃者は、プログラムを解析しても、疑似乱数生成の挙動が予測できず、攻撃することができない。
4.また、固定の命令変換表32及び変数変換表33を仮想マシンソフトウェアに埋め込んでおけば、一種のフォレンジックデータとして活用することも可能である。すなわち、生成した疑似乱数を見れば、プログラムがどの環境で実行されたのかを特定することができる。
以上の効果により、安全な疑似乱数生成を実現する。本機能は、単に疑似乱数生成だけではなく鍵生成等様々な応用が可能である。
以下、本発明の実施形態について図に従ってさらに説明する。図1は、本発明の一実施形態に係る疑似乱数生成装置10の構成を示す図である。
疑似乱数生成装置10は、起動手段11を備える。
起動手段11は、疑似乱数生成プログラムを実行する仮想マシン20を起動する。具体的には、起動手段11は、仮想マシンソフトウェアの機能によって、仮想マシン20を起動する。
仮想マシン20は、プログラム記憶手段30と、秘匿記憶領域31と、命令変換表32と、変数変換表33と、変更手段21と、実行制御手段22と、変数制御手段23とを備える。仮想マシン20は、割り当てられたリソース(メモリや、耐タンパデバイス等)上に、プログラム記憶手段30と、秘匿記憶領域31と、命令変換表32と、変数変換表33とを設ける。各手段ごとに説明する。
プログラム記憶手段30は、疑似乱数を生成するための疑似乱数生成プログラムを記憶する。疑似乱数生成プログラムは、所定の疑似乱数生成ロジックを有するプログラムである。
秘匿記憶領域31は、一定のアクセス権がないとアクセスできないように管理されている領域である。後述する命令変換表32及び変数変換表33は、秘匿記憶領域31上に設けられる。
命令変換表32は、プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する。具体的には、後述する図2で示すように、命令変換表32は、疑似乱数生成プログラムにおける、例えば演算命令等の実行命令と、その実行命令とは異なる、例えば別の演算命令である変換命令とを対応付けて記憶する。
変数変換表33は、疑似乱数生成プログラムで用いられる変数と、その変数に記憶される変数値の変換方法とを対応付けて記憶する。具体的には、後述する図3で示すように、変数変換表33は、疑似乱数生成プログラムで用いられる変数に、変換方法(例えば、記憶される変数値に乱数を加算する等)を対応付けて記憶する。
変更手段21は、起動手段11によって起動されると、命令変換表32における実行命令の対応付けを変更する。具体的には、変更手段21は、起動手段11によって起動されるごとに、乱数に基づいて命令変換表32における実行命令と変換命令との対応付けを変更する。さらに、変更手段21は、起動手段11によって起動されるごとに、乱数に基づいて変数変換表33における変数と変換方法との対応付けを変更するとしてもよい。なお、この場合の乱数は、仮想マシン20によって従来方式により生成されるとしてよい。
実行制御手段22は、疑似乱数生成プログラムの実行命令を、命令変換表32に基づいて変換し、変換した実行命令を実行する。具体的には、実行制御手段22は、疑似乱数生成プログラムを実行中に、命令変換表32に記憶されている実行命令をフェッチすると、命令変換表32に基づいて変換して実行する。
さらに、実行制御手段22は、疑似乱数生成プログラムを実行中に、特定の命令から特定の命令までの間(例えば、疑似乱数生成プログラムには出現しないはずのI/O命令等の命令をフェッチした後から、次にI/O命令等をフェッチするまでの間)でのみ、命令変換表32に記憶されている実行命令をフェッチすると、命令変換表32に基づいて変換して実行するとしてもよい。
変数制御手段23は、疑似乱数生成プログラムで用いられる少なくとも一部の変数に記憶される変数値を、変数変換表33に基づいて変換し、変換した変数値を変数に記憶させる。具体的には、変数制御手段23は、疑似乱数生成プログラムを実行中にフェッチした命令の変数について、変数変換表33に記憶されている変数に対応する変換方法に基づいて、記憶させる変数値を変換し(例えば、従来方式により生成した乱数値を加え)、変換した変数値を変数に記憶させる。さらに、変数制御手段23は、実行制御手段22と同様に、特定の命令から特定の命令までの間でのみ、変数変換表33に基づいて変数値を変換するとしてもよい。
このように、疑似乱数生成装置10は、仮想マシン20において、疑似乱数生成プログラムによって疑似乱数を生成し、かつ、その疑似乱数生成プログラムが解析されても乱数性が損なわれない(すなわち、攻撃者にとって予測不可能な)疑似乱数を生成する。
図2は、本発明の一実施形態に係る疑似乱数生成装置10の命令変換表32の例を示す図である。図2の例が示すように、命令変換表32は、実行命令と変換命令とを対応付けて記憶する。実行命令は、例えば、疑似乱数生成プログラムにおいて出現する実行命令である。変換命令は、実行命令とは異なる命令である。例えば、命令変換表32は、演算命令(例えば、「+」)を別の演算命令(例えば、「×」)に対応付け、特定の入出力命令(例えば、「print」)を別の演算命令(例えば、「2乗」)に対応付ける。
図3は、本発明の一実施形態に係る疑似乱数生成装置10の変数変換表33の例を示す図である。図3の例が示すように、変数変換表33は、変数と変換方法とを対応付けて記憶する。変数は、例えば、疑似乱数生成プログラムにおいて出現する変数である。変換方法は、変数に記憶される変数値についての変換方法である。
例えば、変数変換表33の例に基づいて、変数制御手段23は、疑似乱数生成プログラムで用いられる変数1に記憶させる変数値を、変数1に対応する「+」によって、変数値に乱数(従来方式により生成した乱数)を加算し、加算した変数値を変数1に記憶させる。
図4は、本発明の一実施形態に係る疑似乱数生成装置10の処理を示すフローチャートである。疑似乱数生成装置10は、コンピュータ及びその周辺装置が備えるハードウェア並びに該ハードウェアを制御するソフトウェアによって構成され、以下の処理は、制御部(例えば、CPU)が所定のソフトウェアに従い実行する処理である。
ステップS101において、CPU(起動手段11)は、仮想マシン20を起動する。
図5は、本発明の一実施形態に係る疑似乱数生成装置10の仮想マシン20の処理を示すフローチャートである。仮想マシン20は、疑似乱数生成装置10の仮想マシンソフトウェアによって、リソースが割り当てられて起動される。
ステップS201において、CPU(変更手段21)は、命令変換表32及び変数変換表33の対応付けをランダムに変更する。
ステップS202において、CPU(実行制御手段22、変数制御手段23)は、疑似乱数生成プログラムを命令変換表32及び変数変換表33に基づいて変換し、実行する。
ステップS203において、CPUは、生成した疑似乱数を出力する。
<プログラム難読化装置>
図6は、本発明の一実施形態に係るプログラム難読化装置40の構成を示す図である。プログラム難読化装置40は、変換表作成手段41と、仮想マシンソフトウェア作成手段42と、プログラム変換手段43と、配布手段44とを備える。各手段ごとに説明する。
変換表作成手段41は、プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表32を作成する。さらに、変換表作成手段41は、変数変換表33をも作成するとしてもよい。
仮想マシンソフトウェア作成手段42は、変換表作成手段41によって作成された命令変換表32を、仮想マシンソフトウェアに組み入れて、命令変換表32を組み入れた仮想マシンソフトウェアを作成する。さらに、仮想マシンソフトウェア作成手段42は、作成された変数変換表33をも組み入れるとしてもよい。
さらに、仮想マシンソフトウェア作成手段42は、命令変換表32を仮想マシンソフトウェアに組み入れることに替えて、命令変換表32をダウンロードするように、仮想マシンソフトウェアに組み入れるとしてもよい。また、仮想マシンソフトウェア作成手段42は、変数変換表33をもダウンロードするように組み入れるとしてもよい。
ダウンロードが組み入れられると、仮想マシン20は、例えば、命令変換表32及び変数変換表33を安全に管理するサーバ(図示せず)から、命令変換表32及び変数変換表33をダウンロードする。
プログラム変換手段43は、プログラムを命令変換表32に基づいて変換する。さらに、プログラム変換手段43は、プログラムを変数変換表33に基づいて変換するとしてもよい。
配布手段44は、仮想マシンソフトウェア作成手段42によって作成された仮想マシンソフトウェアと、プログラム変換手段43によって変換されたプログラムとを、仮想マシンソフトウェアを組み込む装置であって変換されたプログラムを実行する装置に配布する。プログラムを実行する装置は、命令変換表32及び変数変換表33に基づいてプログラムを元の形に変換し、実行する。
図7は、本発明の一実施形態に係るプログラム難読化装置40の処理を示すフローチャートである。プログラム難読化装置40は、コンピュータ及びその周辺装置が備えるハードウェア並びに該ハードウェアを制御するソフトウェアによって構成され、以下の処理は、制御部(例えば、CPU)が所定のソフトウェアに従い実行する処理である。
ステップS301において、CPU(変換表作成手段41)は、命令変換表32及び変数変換表33を作成する。
ステップS302において、CPU(仮想マシンソフトウェア作成手段42)は、ステップS301において作成された命令変換表32及び変数変換表33を組み入れた仮想マシンソフトウェアを作成する。
ステップS303において、CPU(プログラム変換手段43)は、プログラムを命令変換表32及び変数変換表33に基づいて変換する。
ステップS304において、CPU(配布手段44)は、ステップS302において作成された仮想マシンソフトウェアと、ステップS303において変換されたプログラムとを、仮想マシンソフトウェアを組み込む装置であって変換されたプログラムを実行する装置に配布する。
本実施形態によれば、疑似乱数生成装置10は、疑似乱数生成プログラムを実行する仮想マシン20を起動する。仮想マシン20は、疑似乱数を生成するための疑似乱数生成プログラムを記憶するプログラム記憶手段30と、プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表32と、疑似乱数生成プログラムで用いられる変数と、その変数に記憶される変数値の変換方法とを対応付けて記憶する変数変換表33とを備え、疑似乱数生成プログラムの少なくとも一部の実行命令及び少なくとも一部の変数に記憶される変数値を、命令変換表32及び変数変換表33に基づいて変換し、変換した実行命令を実行し、変換した変数値を記憶させる。さらに、疑似乱数生成装置10において、仮想マシン20は、起動されるごとに、命令変換表32及び変数変換表33における対応付けをランダムに変更する。したがって、疑似乱数生成装置10は、プログラムによって疑似乱数を生成し、かつ、そのプログラムが解析されても乱数性が損なわれない疑似乱数を生成することができる。
本実施形態によれば、プログラム難読化装置40は、命令変換表32及び変数変換表33を作成し、作成した命令変換表32及び変数変換表33を組み入れた仮想マシンソフトウェアを作成すると共に、プログラムを命令変換表32及び変数変換表33に基づいて変換し、作成した仮想マシンソフトウェアと、変換したプログラムとを、仮想マシンソフトウェアを組み込む装置であって変換されたプログラムを実行する装置に配布する。さらに、プログラム難読化装置40は、命令変換表32及び変数変換表33をダウンロードするように、仮想マシンソフトウェアに組み入れる。
したがって、プログラム難読化装置40は、プログラムの解析を困難にすることができる。
以上、本発明の実施形態について説明したが、本発明は上述した実施形態に限るものではない。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態に記載されたものに限定されるものではない。
10 疑似乱数生成装置
11 起動手段
20 仮想マシン
21 変更手段
22 実行制御手段
23 変数制御手段
30 プログラム記憶手段
31 秘匿記憶領域
32 命令変換表
33 変数変換表
40 プログラム難読化装置
41 変換表作成手段
42 仮想マシンソフトウェア作成手段
43 プログラム変換手段
44 配布手段

Claims (7)

  1. 疑似乱数を生成する疑似乱数生成装置であって、
    疑似乱数を生成するための疑似乱数生成プログラムを実行する仮想マシンを起動する起動手段を備え、
    前記仮想マシンは、
    前記疑似乱数生成プログラムを記憶するプログラム記憶手段と、
    プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表と、
    前記疑似乱数生成プログラムの少なくとも一部の実行命令を、前記命令変換表に基づいて変換し、変換した実行命令を実行する実行制御手段とを備える、
    疑似乱数生成装置。
  2. 前記仮想マシンは、
    前記起動手段によって起動されると、前記命令変換表における実行命令の対応付けを変更する変更手段を、さらに備える請求項1に記載の疑似乱数生成装置。
  3. 前記仮想マシンは、
    前記疑似乱数生成プログラムで用いられる変数と、その変数に記憶される変数値の変換方法とを対応付けて記憶する変数変換表と、
    前記疑似乱数生成プログラムで用いられる少なくとも一部の変数に記憶される変数値を、前記変数変換表に基づいて変換し、変換した変数値を前記変数に記憶させる変数制御手段とを、さらに備える請求項1又は2に記載の疑似乱数生成装置。
  4. 請求項1に記載の疑似乱数生成装置が実行する方法であって、
    前記起動手段が、前記疑似乱数生成プログラムを実行する仮想マシンを起動する起動ステップと、
    前記仮想マシンの前記実行制御手段が、前記疑似乱数生成プログラムの少なくとも一部の実行命令を、前記命令変換表に基づいて変換し、変換した実行命令を実行する実行制御ステップと、
    を備える方法。
  5. 仮想マシン上で動作するプログラムを難読化するプログラム難読化装置であって、
    前記プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表又は、前記命令変換表及び前記プログラムで用いられる少なくとも一部の変数と、その変数に記憶される変数値の変換方法とを対応付けて記憶する変数変換表を作成する変換表作成手段と、
    前記変換表作成手段によって作成された前記命令変換表又は、前記命令変換表及び前記変数変換表を仮想マシンソフトウェアに組み入れて、前記命令変換表又は、前記命令変換表及び前記変数変換表を組み入れた仮想マシンソフトウェアを作成する仮想マシンソフトウェア作成手段と、
    前記プログラムを前記命令変換表又は、前記命令変換表及び前記変数変換表に基づいて変換するプログラム変換手段と、
    前記仮想マシンソフトウェア作成手段によって作成された前記仮想マシンソフトウェアと、前記プログラム変換手段によって変換されたプログラムとを、前記仮想マシンソフトウェアを組み込む装置であって前記変換されたプログラムを実行する装置に配布する配布手段と、
    を備えるプログラム難読化装置。
  6. 前記仮想マシンソフトウェア作成手段は、前記命令変換表又は、前記命令変換表及び前記変数変換表を仮想マシンソフトウェアに組み入れることに替えて、前記命令変換表又は、前記命令変換表及び前記変数変換表をダウンロードするように、仮想マシンソフトウェアに組み入れる、請求項5に記載のプログラム難読化装置。
  7. コンピュータが実行するプログラム難読化方法であって、
    前記コンピュータにより、
    プログラムの実行命令と、その実行命令とは異なる命令とを対応付けて記憶する命令変換表又は、前記命令変換表及び前記プログラムで用いられる少なくとも一部の変数と、その変数に記憶される変数値の変換方法とを対応付けて記憶する変数変換表を作成する変換表作成ステップと、
    前記変換表作成ステップにおいて作成された前記命令変換表又は、前記命令変換表及び前記変数変換表を仮想マシンソフトウェアに組み入れて、前記命令変換表又は、前記命令変換表及び前記変数変換表を組み入れた仮想マシンソフトウェアを作成する仮想マシンソフトウェア作成ステップと、
    前記プログラムを前記命令変換表又は、前記命令変換表及び前記変数変換表に基づいて変換するプログラム変換ステップと、
    前記仮想マシンソフトウェア作成ステップにおいて作成された前記仮想マシンソフトウェアと、前記プログラム変換ステップにおいて変換されたプログラムとを、前記仮想マシンソフトウェアを組み込む装置であって前記変換されたプログラムを実行する装置に配布する配布ステップと、
    を備えるプログラム難読化方法。
JP2013258128A 2013-12-13 2013-12-13 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法 Active JP6203028B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013258128A JP6203028B2 (ja) 2013-12-13 2013-12-13 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013258128A JP6203028B2 (ja) 2013-12-13 2013-12-13 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法

Publications (2)

Publication Number Publication Date
JP2015114964A JP2015114964A (ja) 2015-06-22
JP6203028B2 true JP6203028B2 (ja) 2017-09-27

Family

ID=53528678

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013258128A Active JP6203028B2 (ja) 2013-12-13 2013-12-13 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法

Country Status (1)

Country Link
JP (1) JP6203028B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR3079638B1 (fr) * 2018-03-29 2021-04-09 Airtag Procede de mise en oeuvre d'une fonction cryptographique pour une cle secrete

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003140758A (ja) * 2001-11-07 2003-05-16 Hitachi Ltd プログラム暗号化方法、復号化方法および実行方法
US7383443B2 (en) * 2002-06-27 2008-06-03 Microsoft Corporation System and method for obfuscating code using instruction replacement scheme
FR2841997B1 (fr) * 2002-07-08 2005-11-11 Gemplus Card Int Securisation d'application telechargee notamment dans une carte a puce
EP1850261A1 (en) * 2005-02-10 2007-10-31 Matsushita Electric Industrial Co., Ltd. Program conversion device and program execution device
JP4971200B2 (ja) * 2006-02-06 2012-07-11 パナソニック株式会社 プログラム難読化装置
JP2007304726A (ja) * 2006-05-09 2007-11-22 Fuji Xerox Co Ltd プログラム難読化装置、難読化方法及び難読化プログラム
JP4470982B2 (ja) * 2007-09-19 2010-06-02 富士ゼロックス株式会社 情報処理装置及び情報処理プログラム
JP2009104589A (ja) * 2007-10-05 2009-05-14 Canon Inc 情報処理装置及びその方法、プログラム、記録媒体
JP2009223778A (ja) * 2008-03-18 2009-10-01 Hitachi Software Eng Co Ltd 仮想マシンイメージによるプログラム配布装置
JP5149061B2 (ja) * 2008-04-25 2013-02-20 Kddi株式会社 プログラム難読化装置、プログラム難読化方法およびプログラム
JP5477994B2 (ja) * 2010-04-13 2014-04-23 Kddi株式会社 自己書き換え処理装置、自己書き換え処理方法、およびプログラム
JP5627444B2 (ja) * 2010-12-24 2014-11-19 Kddi株式会社 ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム
JP2012208655A (ja) * 2011-03-29 2012-10-25 Kddi Corp 自己書き換え処理装置、自己書き換え処理方法、およびプログラム
JP2013045277A (ja) * 2011-08-24 2013-03-04 Hitachi Solutions Ltd プログラム難読化方法およびリモートデバッグシステム

Also Published As

Publication number Publication date
JP2015114964A (ja) 2015-06-22

Similar Documents

Publication Publication Date Title
JP7101761B2 (ja) コール・パス依存認証
RU2439669C2 (ru) Способ предотвращения обратного инжиниринга программного обеспечения, неавторизованной модификации и перехвата данных во время выполнения
US6463538B1 (en) Method of software protection using a random code generator
JP5808019B2 (ja) ホワイトボックス暗号化技術を用いるインターロックされたバイナリ保護
EP2398182B1 (en) A device and a method for generating software code
US20170116410A1 (en) Software protection
KR101504857B1 (ko) 보안 시스템에서 랜덤하게 할당된 메모리 범위로 jit를 지원하는 시스템 및 방법
KR20090024804A (ko) 난수 발생기 시스템, 난수 생성 방법 및 컴퓨터 판독가능 매체
WO2013181196A1 (en) Stochastic processing
WO2014210277A1 (en) Diversified instruction set processing to enhance security
US20170068804A1 (en) Method for Protecting a Computer Program From Being Influenced, and Computer System
US10303885B2 (en) Methods and systems for securely executing untrusted software
Averbuch et al. Truly-protect: An efficient VM-based software protection
JP6698774B2 (ja) 共通中間言語のための保安提供装置と方法、及び保安実行装置と方法
Averbuch et al. An efficient vm-based software protection
CN107871066B (zh) 基于安卓系统的代码编译方法及装置
JP6203028B2 (ja) 疑似乱数生成装置及び方法、並びにプログラム難読化装置及び方法
CN110535642B (zh) 一种分散存储密钥的方法、智能终端及存储介质
KR20160108427A (ko) 암호화 알고리즘에 사용될 때 비밀 데이터를 보호하는 방법
WO2013175368A1 (en) Method, system and device for protection against reverse engineering and/or tampering with programs
JP7079711B2 (ja) 変換装置、変換方法、変換プログラム及び難読プログラム
EP3380974B1 (en) Method to generate a secure code
KR101630791B1 (ko) 의사 난수로부터 진성 난수를 생성하는 방법 및 이 방법을 컴퓨터상에서 실행할 수 있는 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체
Hua et al. MMGuard: Automatically Protecting On-Device Deep Learning Models in Android Apps
JP3970856B2 (ja) プログラム難読化装置、プログラム配布システム、コンピュータプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160721

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170530

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170613

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170721

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170829

R150 Certificate of patent or registration of utility model

Ref document number: 6203028

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150