説明

情報処理装置、命令コードの暗号化方法および暗号化命令コードの復号化方法

【課題】少ないオーバーヘッドでソフトウェアの保護を実現可能にする。
【解決手段】例えば、予め作成された暗号化コードCD’が格納されるメモリMEMと、それを復号化する復号化モジュールDE_MDなどを設ける。DE_MDは、例えば、3段のパイプラインと、このパイプラインの各段の出力の中から1個を選択するセレクタSEL1を備えている。仮に分岐命令が発生し、それ以降パイプラインの入力がCD’1、CD’2、…の順であった場合、DE_MDは、CD’1に対して1段分のパイプライン処理を行って復号化コードCD1[1]を出力する。次いで、CD’2に対しては、2段分のパイプライン処理を行って復号化コードCD2[2]を出力し、CD’3(それ以降も同様)に対しては、3段分のパイプライン処理を行って復号化コードCD3[3]を出力する。従って、特にCD’1に対するオーバーヘッドが低減できる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は情報処理装置、命令コードの暗号化方法および暗号化命令コードの復号化方法に関し、特に、予めメモリに格納された暗号化命令コードをリアルタイムで復号化しながら所望の処理を行う情報処理装置に適用して有益な技術に関するものである。
【背景技術】
【0002】
例えば、特許文献1には、外部記憶装置にコンピュータの実行プログラムを暗号化して記憶し、それを復号化しながら実行するデータ保護装置が記載されている。このデータ保護装置では、外部記憶装置のアドレス空間を例えば4アドレス毎に区切って暗号化を行っている。アドレスの下位2ビットが“11”の暗号化データは、一つ前となる下位2ビットが“10”の暗号化データを用いて作成され、同様に、“10”および“01”の暗号化データは、それぞれ、“01”および“00”の暗号化データを用いて作成され、“00”の暗号化データは初期値を用いて作成される。そして、例えば、分岐命令に伴ってアドレスの下記2ビットが“10”のデータ列を実行する場合には、その2つ前となる“00”の暗号化データから順次復号化を行い、“10”の暗号化データに達するまでウエイトする。
【0003】
また、特許文献2には、暗号化された命令を受け、それを復号化しながら実行する際のパイプライン処理を、ストールの発生を抑えて実行可能なマイクロプロセッサが記載されている。具体的には、命令フェッチ部の中に、2段のパイプラインを設けて、前段で命令フェッチ、後段で暗号化命令の復号化を実行する。
【特許文献1】特開平7−129473号公報
【特許文献2】特開2005−18434号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
近年、ゲームソフト、映像コンテンツなどを代表にデジタルコンテンツの保護の重要性が増してきている。これらのデジタルコンテンツの保護は、暗号化や署名、その他様々な技術を用いて確保されているが、それらを制御するソフトウェア(ファームウェア)が改変されると、保護機能が無効化される恐れがある。例えば、DVDドライブのファームウェアを解析および改変することで著作権保護機能を無効化したり、ゲーム機のファームウェアを解析および改変することで違法ソフトのチェック機能を無効化することができ、映像コンテンツやゲームソフトの違法コピーなどが実現可能となる。
【0005】
このようなファームウェアに対する保護技術としては、例えば、プログラムを難読化した上でROM(Read Only Memory)に格納する方式や、特許文献1などに記載されているように、暗号化した上でROMに格納し、実行時に復号化する方式などが知られている。プログラムの難読化を行う方式では、例えば単純な1行の命令を判り難い複数行の命令に変換するなどで外部からの解析を困難にしているが、その分命令実行の際のオーバーヘッドが増加する。また、この方式の場合、改竄や複製に対する保護も十分とは言えない。一方、暗号化を行う方式では、解析、改竄および複製共に十分な保護を行うことが可能となるが、この場合には、相応の暗号強度を備える必要がある。ただし、一般的に、暗号強度を上げると、強度に比例してオーバーヘッドが増加するため、その両立をどのように図るかが重要となる。
【0006】
こうした中、特許文献1の技術では、一つ前の暗号化コードを利用して次の暗号化コードを生成するような暗号化方式を用いることで、比較的高い暗号強度を実現している。ただし、この技術では、分岐命令が発生した場合に、その分岐先アドレスの値に応じて大きさが異なるオーバーヘッドが生じるため、オーバーヘッドが大きい分岐先アドレスに向けた分岐命令が多くなるほど、リアルタイムな処理が困難となる恐れがある。
【0007】
そこで、本発明の目的の一つは、少ないオーバーヘッドでソフトウェアの保護を実現可能な情報処理装置、命令コードの暗号化方法および暗号化命令コードの復号化方法を提供することにある。なお、本発明の前記ならびにそれ以外の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【0008】
本願において開示される発明の代表的な実施の形態の概要を簡単に説明すれば、次のとおりである。
【0009】
本発明の一実施の形態による情報処理装置は、暗号化コードが格納されるメモリと、この暗号化コードを復号化して復号化コードを生成する復号化部と、この復号化コードを実行する命令実行部とを備えたものとなっている。そして、復号化部は、命令実行部が分岐命令を発生した際に、その分岐先の暗号化コードに対しては低い暗号強度に対応する復号化を行うことで復号化コードを生成し、その後、命令実行部が分岐先からの処理を進めるにつれて段階的に高い暗号強度に対応する復号化を行うことで復号化コードを生成するものとなっている。
【0010】
したがって、仮に、暗号強度を常に同等とした場合には、分岐命令発生後の最初の命令コードを実行するまでにある程度のオーバーヘッドが必要となるが、前述したような構成を用いることで、このオーバーヘッドを低減できる。これによって、例えば組み込み機器などにおいて、リアルタイムな処理が実現可能になる。さらに、この最初の命令コード以降は、段階的に暗号強度が高まっていくため、命令コード全体として見た場合に、十分な暗号強度を保つことができる。
【0011】
また、前述した復号化部は、例えば、各段毎に鍵を用いた復号化処理を行う複数段のパイプラインと、この複数段のパイプラインの各段の出力の中からいずれか1個を選択して命令実行部に出力する選択回路と、命令実行部が分岐命令を発生したことを検知しながらこの選択回路を制御する制御回路とを有するものとなっている。このような構成を用いると、分岐命令発生直後は小さいパイプライン段数の出力を選択することで、暗号強度を低くした分少ないオーバーヘッドで復号化コードを生成できる。また、その後は、出力を選択するパイプライン段数を段階的に大きくしていくことで、高い暗号強度を実現できると共に、パイプライン処理によって効率的な時間で復号化コードを生成できる。
【0012】
また、本発明の一実施の形態による命令コードの暗号化方法は、コンピュータシステムによるプログラム処理を用いて、予め作成されたソースコードを変換して暗号化コードを生成するものとなっている。この際に、コンピュータシステムは、まず、各アドレスに割り付けられた各ソースコードが分岐命令か否かを判別すると共に、その分岐先のアドレスを認識する。次いで、この分岐先アドレスのソースコードを第1暗号化アルゴリズムを用いて変換することで第1暗号化コードを生成し、更に、この分岐先アドレスの次のアドレスのソースコードを第2暗号化アルゴリズムを用いて変換することで第2暗号化コードを生成する。ここで、第2暗号化アルゴリズムは、第1暗号化アルゴリズムに比べて暗号強度が高いものとなっている。このような暗号化方法を用いて暗号化コードを生成し、それを前述した情報処理装置のメモリに格納することで前述したような効果を得ることが可能となる。
【発明の効果】
【0013】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すると、少ないオーバーヘッドでソフトウェアの保護が実現可能となる。
【発明を実施するための最良の形態】
【0014】
以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良い。また、以下の実施の形態において、その構成要素(要素ステップ等も含む)は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
【0015】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【0016】
図1は、本発明の一実施の形態による情報処理装置において、その構成概要の一例を示すブロック図である。図1の情報処理装置SYSは、例えば、DVD機器、ゲーム機、携帯電話機器等を代表とする所謂組み込み機器に備わった情報処理部などである。この情報処理装置SYSは、バスBSと、BSによって相互に接続された揮発性メモリ(RAM:Random Access Memory)、不揮発性メモリ(ROM)、プロセッサ(CPU:Central Processing Unit)を含んでいる。ROMは、代表的には、フラッシュメモリやEEPROM(Electrically Erasable and Programmable Read Only Memory)などである。
【0017】
ROMには、組み込み機器の制御を行うためのプログラム(即ちファームウェア)が格納されている。このファームウェアは、予め、パーソナルコンピュータ等を代表とする外部装置PCを用いて暗号化された上で格納される。すなわち、外部装置PCは、ソースコードSCに対してソフトウェアとなる暗号化コンパイラCP_ENを用いて暗号化を行い、これによって生成された暗号化ソースコードSC_ENをROMに格納する。
【0018】
CPUは、復号化モジュールDE_MDと、秘密鍵KEYと、プロセッサモジュールCPU_MDを含んでいる。復号化モジュールDE_MDは、詳細は後述するが、ROMに格納された暗号化コードであるメモリ出力コードICDmを受け、これを秘密鍵KEYを用いて復号化し、その結果となる復号化コードをCPU命令コードICDcとしてCPU_MDに出力する。CPU_MDは、一般的なプロセッサが行うように、この復号化されたCPU命令コードICDc(すなわちソースコードSCと等価)のフェッチ、デコード、実行等によって所定の処理を行う。秘密鍵KEYは、例えば、CPU内部で、ハードウェア回路や不揮発性メモリ等を用いて予め設定される。
【0019】
図2は、図1の情報処理装置において、その復号化モジュールDE_MDの概略的な構成例および動作例を表す概念図である。図2に示すように、復号化モジュールDE_MDは、バッファBF1〜BF3、復号化回路DE1〜DE3、秘密鍵KEY1〜KEY3、セレクタSEL1などによって構成される。DE1は、BF1の出力をKEY1を用いて復号化した上でBF2に伝達し、DE2は、BF2の出力をKEY2を用いて復号化した上でBF3に伝達する。DE3は、BF3の出力をKEY3を用いて復号化する。セレクタSEL1は、DE1の出力、DE2の出力、DE3の出力の中からいずれか一つを選択して出力する。
【0020】
このように、DE_MDは、複数段(ここでは3段)のパイプラインと、パイプラインの各段の出力を選択するセレクタSEL1を備えたことが主要な特徴となっている。このような場合、パイプラインの段数を経過する(すなわちDE1からDE3に向かう)ほど暗号強度が強くなるが、その分、例えば分岐命令発生直後の最初の出力を取り出すまでのオーバーヘッドが増大することになる。そこで、セレクタSEL1によって暗号強度を変えた出力を取り出せるようにし、これによってオーバーヘッドの低減を図る。
【0021】
すなわち、例えば、分岐命令発生直後、メモリMEM(例えば図1のROMに対応)からのメモリ出力コードICDmとして、サイクルt=0で暗号化コードCD’1が入力され、続いて、サイクルt=1、t=2、t=3で暗号化コードCD’2、CD’3、CD’4が順次入力された場合を想定する。この暗号化コードCD’1〜CD’4は、順次バッファBF1に入力され、パイプラインで処理される。
【0022】
ここで、DE_MDは、1番目の入力コードとなるCD’1に対しては、1段目のパイプライン(復号化回路DE1)を介して復号化した後にセレクタSEL1によって復号化コードCD1[1]を出力する。次いで、2番目の入力コードとなるCD’2に対しては、2段目のパイプライン(復号化回路DE1,DE2)を介して復号化した後にSEL1によって復号化コードCD2[2]を出力する。その後、3番目以降の入力コードとなるCD’3,CD’4に対しては、3段目のパイプライン(復号化回路DE1〜DE3)を介して復号化した後にSEL1によって復号化コードCD3[3],CD4[3]を出力する。なお、CDn[k]の[k]はパイプラインの段数(暗号強度)を表している。
【0023】
このような動作を用いると、CD1[1]はt=1で出力され、CD2[2]はt=3で出力され、CD3[3]、CD4[3]は、それぞれt=5、t=6で出力されることになる。一方、仮に、暗号強度を変えない場合には、CD1[3]がt=3で出力され、以降CD2[3]〜CD4[3]がt=4〜t=6で順次出力されることになる。したがって、1番目と2番目の入力コード(CD’1,CD’2)に対しては、暗号強度を弱めた分、オーバーヘッドを低減でき、3番目以降の入力コード(CD’3,CD’4)に対しては、パイプライン処理に伴い特にオーバーヘッドもなく暗号強度を高めることができる。これによって、全体として見た場合に、少ないオーバーヘッドで高い暗号強度を実現可能となる。
【0024】
なお、パイプラインの段数は、勿論、3段に限定されるものではなく、2段以上であればよい。例えば4段とした場合は、CD1[1]がt=1で出力され、CD2[2]がt=3で出力され、CD3[3]がt=5で出力され、CD4[4]がt=7で出力され、以降、CD5[4]、CD6[4]、…が、t=8、t=9、…で出力されることになる。この場合、CD’1〜CD’3の復号化に伴うオーバーヘッドを低減できる。このように、パイプラインの段数を多くする程、オーバーヘッドを低減可能なコード数が増加するため、本実施の形態の効果がより顕著なものとなる。また、分岐命令発生直後に少ない数の命令コードを実行して復帰するようなプログラムの場合にも、前述した効果がより顕著なものとなる。
【0025】
図3は、図1の情報処理装置において、その復号化モジュールDE_MDの詳細な構成例を示すブロック図である。図3の復号化モジュールDE_MDは、暗号強度制御ブロックCTL_BK、復号化ブロックDE_BK、およびセレクタSEL2を備えている。暗号強度制御ブロックCTL_BKは、プロセッサモジュールCPU_MDからの入力信号として、条件分岐発生信号BRc、無条件分岐発生信号JPc、バスコマンド信号BCMDc、アドレス信号ADRc、データ信号DATc、命令フェッチ信号IFcなどを受ける。BRcおよびJPcは、CPU_MDのプログラム実行過程で分岐が行われた場合にCPU_MDによって出力される。BCMDc、ADRc、DATcは、メモリに向けたアクセス信号に該当する。IFcは、メモリに対するデータアクセスではなく、命令コードアクセスの場合に出力される。なお、命令コードアクセスの場合、メモリは、図1のROMか、命令コードをRAMに展開して使用する場合には図1のRAMに該当することになる。
【0026】
CTL_BKは、これらの入力信号をCPU_MDから受け、命令コードアクセスの場合に、メモリに対してBCMDc、ADRcに対応するバスコマンド信号BCMDmおよびアドレス信号ADRmを発行して命令コードアクセスを行う。メモリは、このBCMDmおよびADRmを受けて、メモリ出力コード(すなわち暗号化コード)ICDmおよびバス準備信号BRDYmを出力する。このメモリ出力コード(暗号化コード)ICDmは、復号化ブロックDE_BKに入力され、バス準備信号BRDYmはCTL_BKに入力される。なお、バス準備信号BRDYmは、メモリからメモリ出力コードICDmが読み出される毎に、当該サイクルで生成される信号である。
【0027】
復号化ブロックDE_BKは、ICDmを復号化した後、セレクタSEL2の一方の入力に出力する。この復号化の際に、CTL_BKは、図2で述べたような暗号強度(パイプライン段数)を制御するための選択信号Sと、復号化の鍵の一部として利用するアドレス信号ADRmをDE_BKに出力する。なお、セレクタSEL2の他方の入力には、ICDmがDE_BKを介さずに伝送される。CTL_BKは、この選択信号Sを用いて暗号強度を制御する際に、条件分岐発生信号BRc、無条件分岐発生信号JPc、およびバス準備信号BRDYmを用いて制御を行う。すなわち、CTL_BKは、図2で述べたように、BRc,JPcを受けた際、その直後にメモリから読み出した命令コードの暗号強度を弱め、その後、BRDYmを受ける毎に暗号強度を強めていくような制御を行う。
【0028】
また、CTL_BKは、セレクタSEL2を選択信号Sdtによって制御すると共に、復号化ブロックDE_BKからSEL2を介してCPU命令コード(すなわち復号化コード)ICDcが出力される際には、当該サイクル毎にバス準備信号BRDYcを出力する。プロセッサモジュールCPU_MDは、このCPU命令コードICDcとバス準備信号BRDYcを受けることで、所定の処理を行う。なお、SEL2は、復号化を行わないサイクル(例えばメモリに対するデータアクセスなど)に対応するために備わっている。
【0029】
図4は、図3の復号化モジュールDE_MDにおいて、その復号化ブロックDE_BKの詳細な構成例を示す回路図である。図4の復号化ブロックDE_BKは、レジスタREG40,REG41a〜REG43a,REG41b〜REG43b、排他的論理和(EXOR)回路EOR40,EOR41a〜EOR43a,EOR41b〜EOR43b、非線形変換回路NL1〜NL3、セレクタSEL1,SEL41〜SEL44などによって構成される。
【0030】
EOR40は、メモリ出力コードICDmと当該コードが格納されていたアドレス信号ADRmとのEXOR演算を行う。この演算は、復号化アルゴリズム(暗号化アルゴリズム)の一部となる演算である。なお、ここでは、ADRmから圧縮回路CPRを経てEOR40に対する入力が行われているが、この圧縮回路CPRは、ADRmとICDmのビット幅を等しくするものであり、元々等しい場合には特に必要ない。REG40は、暗号化コードフェッチ用の回路であり、このEOR40の演算結果をラッチする。
【0031】
REG40の出力は、EOR41aとNL1とEOR41bの処理を経ることで1段階目の復号化が行われる。EOR41aは、REG40の出力と秘密鍵KEY1とのEXOR演算を行い、NL1は、このEXOR演算結果を非線形変換し、EOR41bは、この非線形変換結果とREG41aに格納されている前サイクルのコードとをEXOR演算する。NL1は、特に限定はされないが、例えば、テーブル等を用いて、あるビット列を他のビット列に変換する方式などが知られている。REG41aには、REG40の出力がSEL41の一方の入力を介して伝送される。また、REG41aの出力は、SEL44の一方の入力を介してEOR41bに伝送される。
【0032】
1段階目の復号化処理結果となるEOR41bの出力は、EOR42aとNL2とEOR42bの処理を経ることで2段階目の復号化が行われる。EOR42aは、EOR41bの出力と秘密鍵KEY2とのEXOR演算を行い、NL2は、このEXOR演算結果を非線形変換し、EOR42bは、この非線形変換結果とREG42aに格納されている前サイクルのコードとをEXOR演算する。REG42aには、EOR41bの出力がSEL42の一方の入力を介して伝送される。また、REG42aの出力は、EOR42bに伝送される。
【0033】
2段階目の復号化処理結果となるEOR42bの出力は、EOR43aとNL3とEOR43bの処理を経ることで3段階目の復号化が行われる。EOR43aは、EOR42bの出力と秘密鍵KEY3とのEXOR演算を行い、NL3は、このEXOR演算結果を非線形変換し、EOR43bは、この非線形変換結果とREG43aに格納されている前サイクルのコードとをEXOR演算する。REG43aには、EOR42bの出力がSEL43の一方の入力を介して伝送される。また、REG43aの出力は、EOR43bに伝送される。
【0034】
SEL1は、1段階目の復号化処理結果(EOR41bの出力)、2段階目の復号化処理結果(EOR42bの出力)、および3段階目の復号化処理結果(EOR43bの出力)の中からいずれか一つを選択し、それをCPU命令コードICDcとして出力する。選択信号S1が入力された場合には、EOR41bの出力が選択され、選択信号S2が入力された場合には、EOR42bの出力が選択され、選択信号S3が入力された場合には、EOR43bの出力が選択される。なお、SEL44の他方の入力は初期値IVとなっており、この初期値IVは、分岐命令発生直後の最初の命令コードに対して1段階目の復号化処理を行う際に、前サイクルのコードの代わりに用いられる。
【0035】
また、REG41b〜REG43bは、復号化処理の過程で割り込み命令が発生した際の退避レジスタとして用いられる。すなわち、割り込み命令が発生した際、REG41bは、REG41aの出力(SEL44の出力)をラッチし、REG42bは、REG42aの出力をラッチし、REG43bは、REG43aの出力をラッチする。一方、割り込み命令から復帰する際には、REG41bの出力が、SEL41の他方の入力を介してREG41aに戻され、REG42bの出力が、SEL42の他方の入力を介してREG42aに戻され、REG43bの出力が、SEL43の他方の入力を介してREG43aに戻される。
【0036】
図5は、図4の復号化ブロックDE_BKの動作例を示す説明図である。図5において、f1は、図4のKEY1によるEXOR演算とその後のNL1による非線形演算を表し、同様に、f2は、KEY2によるEXOR演算とNL2による非線形演算を表し、f3は、KEY3によるEXOR演算とNL3による非線形演算を表す。図4のREG40の出力として、例えば、サイクルt=0で暗号化コードCD’1、t=1でCD’2、…、t=6でCD’7が入力された場合を想定する。
【0037】
この場合、1段階目の復号化処理結果として、t=1で復号化コード「CD1[1]=f1(CD’1)+CD’0」(ここでCD’0=IV)が出力され、t=2で「CD2[1]=f1(CD’2)+CD’1」が出力され、以降同様にして、式(1)で与えられる復号化コードが出力される。
【0038】
CDn[1]=f1(CD’n)+CD’n−1 (1)
また、これらの処理と並行してパイプラインで2段階目の復号化処理が行われる。2段階目の復号化処理結果としては、t=2で復号化コード「CD1[2]=f2(CD1[1])+xx(ここでxx=不定)が出力され、t=3で「CD2[2]=f2(CD2[1])+CD1[1]」が出力され、以降同様にして、式(2)で与えられる復号化コードが出力される。
【0039】
CDn[2]=f2(CDn[1])+CDn−1[1] (2)
さらに、これらの処理と並行してパイプラインで3段階目の復号化処理が行われる。3段階目の復号化処理結果としては、t=3で復号化コード「CD1[3]=f3(CD1[2])+xx(ここでxx=不定)が出力され、t=4で「CD2[3]=f3(CD2[2])+CD1[2]」が出力され、以降同様にして、式(3)で与えられる復号化コードが出力される。
【0040】
CDn[3]=f3(CDn[2])+CDn−1[2] (3)
したがって、例えば、t=6の復号化コードCD4[3]を得るためには、f3に加えてその前サイクル(t=5)および前々サイクル(t=4)のCD4[2]およびCD3[2]が必要となる。更に、例えば、このt=4のCD3[2]を得るためには、f2に加えて、その前サイクル(t=3)および前々サイクル(t=2)のCD3[1]およびCD2[1]が必要となる。更に、例えば、このt=2のCD2[1]を得るためには、f1に加えて、CD’2およびCD’1が必要となる。このようにして、CD4[3]を得るためには、結果的にf1〜f3と、CD’1〜CD’4が必要となるため、高い暗号強度を実現できる。また、図5において、暗号化コードCD’1が分岐命令直後の最初の命令コードである場合、CPU命令コードICDcとしては、図4のセレクタSEL1によってt=1でCD1[1]、t=3でCD2[2]、t=5でCD3[3]、t=6でCD4[3]、t=7でCD5[3]が得られる。
【0041】
図6は、図3の復号化モジュールDE_MDにおいて、その暗号強度制御ブロックCTL_BKの主要部の構成例を示すブロック図である。図6の暗号強度制御ブロックCTL_BKは、カウンタ部CUNT、選択信号制御部SEL_CTL、プロセッサ命令フェッチ制御部IF_CTLなどを備えている。これらは、例えば、ステートマシーンなどによって実現可能である。カウンタ部CUNTは、プロセッサモジュールCPU_MDからの条件分岐発生信号BRcと無条件分岐発生信号JPcの論理和(OR6)出力を受けて、レジスタREG60の値をリセット(RST)する。そして、クロック信号CLKとバス準備信号BRDYmの論理積(AD6)出力を受けて、BRDYmが入力される(すなわちメモリから暗号化コードが到達する)サイクル毎に、加算回路ADDを介してREG60の値に「1」を加える。
【0042】
選択信号制御部SEL_CTLは、REG60のカウンタ値が「0」の場合、「2」の場合、「4」の場合にそれぞれ選択信号S1、S2、S3を出力し、以降「5」、「6」、…の場合に選択信号S3を出力する。プロセッサ命令フェッチ制御部IF_CTLも、REG60のカウンタ値が「0」の場合、「2」の場合、「4」の場合に、バス準備信号BRDYcとしてそれぞれ‘1’を出力し、以降「5」、「6」、…の場合にも‘1’を出力する。また、IF_CTLは、カウンタ値が「1」、「3」の場合にはBRDYcとして‘0’を出力する。
【0043】
図7は、図3の復号化モジュールDE_MDにおいて、図4および図6の構成例を用いた場合の動作例を示すシーケンス図である。図7においては、サイクルt=1、t=2、t=3、…で、フェッチ暗号化コード(図4のFF40の出力)がそれぞれ、CD’1、CD’2、CD’3、…であった場合を想定する。t=1では、暗号強度制御ブロックCTL_BKより選択信号S1とバス準備信号BRDYc=‘1’が出力され、復号化ブロックDE_BKは、選択信号S1に伴い、CD’1に対応する復号化コードCD1[1]を出力する。t=3では、CTL_BKより選択信号S2とBRDYc=‘1’が出力され、DE_BKは、S2に伴い、CD’2に対応する復号化コードCD2[2]を出力する。
【0044】
t=5では、CTL_BKより選択信号S3とBRDYc=‘1’が出力され、DE_BKは、S3に伴い、CD’3に対応する復号化コードCD3[3]を出力する。t=6以降では、連続する各サイクル毎にCTL_BKより選択信号S3とBRDYc=‘1’が出力され、DE_BKは、この各サイクル毎に、CD’4、CD’5、…にそれぞれ対応する復号化コードCD4[3]、CD5[3]、…を順次出力する。プロセッサモジュールCPU_MDは、このBRDYc=‘1’のサイクルの復号化コード(すなわちソースコードと等価)をフェッチすることで所定の処理を行う。
【0045】
図8は、図1の情報処理装置において、暗号化コードを生成する際に用いる暗号化コンパイラCP_ENの動作例を示すフロー図である。図9は、図8の補足図である。図9に示すように、まず、暗号化前のソースコードSCとして、外部装置PCの処理テーブルTBL上に、アドレス信号ADRmの値「0〜57、…」と、各ADRmの値に順次割り付けられるソースコード「CD1〜CD58、…」が予め作成されているものとする。暗号化コンパイラCP_ENは、この処理テーブルTBLを入力として暗号化処理を行い、アドレス信号ADRmの値「0〜57、…」毎に暗号化コード「CD’1〜CD’58、…」を生成する。
【0046】
暗号化コンパイラCP_ENは、図8に示すように、まず、「j=1、ADRm=0」とおく(S801)。次いで、当該ADRmのソースコードが、分岐境界の先頭となるコードか否かを判定する。すなわち、図9において、例えば、ADRm=4のソースコードCD5がADRm=52のサブルーチンへ無条件分岐する命令であり、ADRm=55のソースコードCD56がサブルーチンから復帰する命令であったとする。このような場合、最初のコードとなるCD1を含めて、サブルーチン復帰後の最初のコードとなるADRm=5のCD6と、サブルーチン分岐後の最初のコードとなるADRm=52のCD53と、何らかの形で分岐した後の最初のコードとなるADRm=56のCD57とが分岐境界の先頭コード(STA0〜STA3)となる。
【0047】
図8において、CP_ENは、分岐境界の先頭であった場合にはj=1とし(S807)、そうでない場合は、図4のEOR40に復号化処理に対応する暗号化演算「CDn=ADRm+CDn」を行う(S803)。次いで、jの値を判別し、その値に応じた暗号化コードCD’nを生成する(S804)。この際に、(a)j=1(すなわち、分岐境界の先頭アドレスのコード)の場合には、式(1)’を用いて1段階目の暗号化コードCD’n=CD’n[1]を生成する。ここで、式(1)’のf1’は、図5で説明したf1の逆演算であり、非線形逆変換を行った後にKEY1よるEXOR演算を行うことを意味する。また、このj=1の場合、式(1)’のCDn−1は図5で説明した初期値IVとする。
【0048】
CD’n[1]=f1’(CDn)+CDn−1 (1)’
また、S804において、(b)j=2(すなわち、「分岐境界の先頭アドレス+1」のコード)の場合には、式(2)’を用いて2段階目の暗号化コードCD’n=CD’n[2]を生成する。ここで、式(2)’のf2’は、図5で説明したf2の逆演算であり、非線形逆変換を行った後にKEY2よるEXOR演算を行うことを意味する。また、この際の演算には、対象となっているソースコードに対する1段階目の暗号化コードとなるCD’n[1]とその前サイクルのソースコードに対する1段階目の暗号化コードとなるCD’n−1[1]を用いることになる。これらは式(1)’で与えられる。
【0049】
CD’n[2]=f2’(CD’n[1])+CD’n−1[1] (2)’
更に、S804において、(c)j≧3(すなわち、「分岐境界の先頭+2」以上のコード)の場合には、式(3)’を用いて3段階目の暗号化コードCD’n=CD’n[3]を生成する。ここで、式(3)’のf3’は、図5で説明したf3の逆演算であり、非線形逆変換を行った後にKEY3よるEXOR演算を行うことを意味する。また、この際の演算には、対象となっているソースコードに対する2段階目の暗号化コードとなるCD’n[2]とその前サイクルのソースコードに対する2段階目の暗号化コードとなるCD’n−1[2]を用いることになる。これらは式(2)’で与えられる。また、この式(2)’の演算を行うためには式(1)’を用いることになる。
【0050】
CD’n[3]=f3’(CD’n[2])+CD’n−1[2] (3)’
次いで、S805において、「j=j+1、ADRm=ADRm+1」を行い、S806において、ADRmが最終アドレスか否かの判定を行う。最終アドレスの場合には暗号化の処理が終了となり、そうでない場合にはS802に戻って、次のADRmのソースコードを対象に同様の処理を行う。そして、このようにして生成された暗号化ソースコードSC_ENが図1の情報処理装置SYS内のROMに格納される。
【0051】
図10は、本発明の一実施の形態による暗号化命令コードの復号化方法において、その処理の一例を示すフロー図である。図10の復号化方法は、前述した図8の暗号化方法の逆演算を行うものであり、図2〜図7で説明した復号化動作を例えばプロセッサを用いたプログラム処理等によって行うような場合の処理フローとなる。図10に示す各処理内容S1001〜S1007は、図8で説明した各処理内容S801〜S807とほぼ同様であり、図8のS803に対応するS1003と、図8のS804に対応するS1004のみが異なっている。
【0052】
すなわち、S1003では、暗号化コードCD’nとそのアドレス信号ADRmを受けて、図4のEOR40に該当する復号化演算「CD’n=ADRm+CD’n」を行う。また、S1004において、(a)j=1の場合には、図5で説明した式(1)を用いて1段階目の復号化コードCDn=CDn[1]を生成する。同様に、(b)j=2の場合には、式(2)を用いて2段階目の復号化コードCDn=CDn[2]を生成し、(c)j≧3の場合には、式(3)を用いて3段階目の復号化コードCDn=CDn[3]を生成する。
【0053】
なお、図10において、分岐命令からの距離に応じてjの値(暗号強度)を決定する処理(すなわちS1001、S1002、S1005、S1007に該当)は、図1の情報処理装置を用いた場合、図6の暗号強度制御ブロックCTL_BKによって行われる。また、図10の処理を例えばプログラム処理で行う場合、アドレス信号ADRmの増加(すなわちS1005に該当)はプログラムカウンタ等の処理となる。
【0054】
このようにプログラム処理によって復号化処理を行う場合、図4のような専用のハードウェアを用いる場合に比べると保護機能および実行速度共に低下するが、秘密鍵KEYを解読されない限り保護機能は確保できる。また、プログラム処理を用いた場合もハードウェア処理の場合と同様に、分岐命令発生直後から段階的に暗号強度が強まる(すなわち演算量が増えていく)ような復号化アルゴリズムとなっているため、分岐命令発生直後のオーバーヘッドを低減でき、高速化が図れる。
【0055】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【0056】
例えば、前述した実施の形態では、3段のパイプラインを用いて、分岐命令発生後に、CD1[1]、CD2[2]、CD3[3]、CD4[3]、…という順で復号化コードを生成する例を示したが、分岐命令発生直後の処理段数が小さく、その後、命令実行サイクルを経過する毎に処理段数を増やしていくような構成であれば種々変更可能である。例えば、4段のパイプラインを用いて、分岐命令発生後に2段目のパイプラインから出力させ、CD1[2]、CD2[3]、CD3[4]、CD4[4]、…という順で復号化コードを出力させることも可能である。また、例えば、例えば、5段のパイプラインを用いて、分岐命令発生後に1段飛ばしで処理段数を増やしていき、CD1[1]、CD2[3]、CD3[5]、CD4[5]、…という順で復号化コードを出力させることも可能である。
【産業上の利用可能性】
【0057】
本発明の一実施の形態による情報処理装置は、ROMに格納されたファームウェアを用いて所望のハードウェア制御を行う組み込み機器などに適用して特に有益な技術であり、これに限らず、セキュリティが求められる情報処理機器全般に対して広く適用可能である。
【図面の簡単な説明】
【0058】
【図1】本発明の一実施の形態による情報処理装置において、その構成概要の一例を示すブロック図である。
【図2】図1の情報処理装置において、その復号化モジュールの概略的な構成例および動作例を表す概念図である。
【図3】図1の情報処理装置において、その復号化モジュールの詳細な構成例を示すブロック図である。
【図4】図3の復号化モジュールにおいて、その復号化ブロックの詳細な構成例を示す回路図である。
【図5】図4の復号化ブロックの動作例を示す説明図である。
【図6】図3の復号化モジュールにおいて、その暗号強度制御ブロックの主要部の構成例を示すブロック図である。
【図7】図3の復号化モジュールにおいて、図4および図6の構成例を用いた場合の動作例を示すシーケンス図である。
【図8】図1の情報処理装置において、暗号化コードを生成する際に用いる暗号化コンパイラの動作例を示すフロー図である。
【図9】図8の補足図である。
【図10】本発明の一実施の形態による暗号化命令の復号化処理方法において、その処理の一例を示すフロー図である。
【符号の説明】
【0059】
PC 外部装置
SC ソースコード
CP_EN 暗号化コンパイラ
SC_EN 暗号化ソースコード
SYS 情報処理装置
BS バス
CPU_MD プロセッサモジュール
DE_MD 復号化モジュール
KEY 秘密鍵
ICDm メモリ出力コード
ICDc CPU命令コード
BF バッファ
DE 復号化回路
CD’ 暗号化コード
CD 復号化コード
SEL セレクタ
CTL_BK 暗号強度制御ブロック
DE_BK 復号化ブロック
BR 条件分岐発生信号
JP 無条件分岐発生信号
BCMD バスコマンド信号
ADR アドレス信号
DAT データ信号
IF 命令フェッチ信号
BRDY バス準備信号
S 選択信号
REG レジスタ
EOR 排他的論理和回路
NL 非線形変換回路
CPR 圧縮回路
CUNT カウンタ部
SEL_CTL 選択信号制御部
ADD 加算回路
AD 論理積回路
OR 論理和回路
CLK クロック信号
SEL_CTL 選択信号制御部
IF_CTL プロセッサ命令フェッチ制御部

【特許請求の範囲】
【請求項1】
暗号化された命令コードとなる暗号化コードが格納されるメモリと、
前記暗号化コードに対して、第1段階および前記第1段階を経て行われる第2段階を含む複数段階の復号化処理を行い、更に、前記複数段階のいずれかの段階となる第k段階を設定して、前記第k段階の復号化処理を経た命令コードを復号化コードとして出力する復号化部と、
前記復号化コードを実行する命令実行部とを備え、
前記復号化部は、前記命令実行部が前記復号化コードの実行サイクルの過程で分岐命令を発生した場合に、その分岐先の前記暗号化コードに対しては前記第k段階の「k」を小さい値に設定し、その後、前記命令実行部の実行サイクルが経過する毎に前記「k」の値を大きい値に変化させながら前記復号化コードを出力することを特徴とする情報処理装置。
【請求項2】
請求項1記載の情報処理装置において、
前記復号化部は、
複数段のパイプラインを含み、前記暗号化コードを受けて前記複数段のパイプラインの各段毎に鍵を用いた復号化処理を行う復号化処理回路と、
選択信号に応じて前記複数段のパイプラインの各段の出力の中からいずれか1個の出力を選択して前記命令実行部に出力する選択回路と、
前記命令実行部が分岐命令を発生したことを検知しながら前記選択信号を生成する制御回路とを有することを特徴とする情報処理装置。
【請求項3】
請求項2記載の情報処理装置において、
前記復号化処理回路は、
前記暗号化コードが伝送される第1ノードと、
前記第1ノードと第2ノードの間に設けられた第1段目のパイプラインと、
前記第2ノードと第3ノードの間に設けられた第2段目のパイプラインとを含み、
前記第1段目のパイプラインは、
前記第1ノードと第1鍵を入力として排他的論理和の演算を行う第1EXOR回路と、
前記第1EXOR回路の出力を非線形変換する第1変換回路と、
前記第1ノードの信号を所定のサイクル数遅延される第1レジスタと、
前記第1変換回路の出力と前記第1レジスタの出力を入力として排他的論理和の演算を行い、この演算結果を前記第2ノードに出力する第2EXOR回路とを備え、
前記第2段目のパイプラインは、
前記第2ノードと第2鍵を入力として排他的論理和の演算を行う第3EXOR回路と、
前記第3EXOR回路の出力を非線形変換する第2変換回路と、
前記第2ノードの信号を所定のサイクル数遅延される第2レジスタと、
前記第2変換回路の出力と前記第2レジスタの出力を入力として排他的論理和の演算を行い、この演算結果を前記第3ノードに出力する第4EXOR回路とを備えることを特徴とする情報処理装置。
【請求項4】
請求項2記載の情報処理装置において、
前記制御回路は、
カウンタ回路と、
前記カウンタ回路のカウント値に応じて前記選択信号を出力する選択信号生成回路と、
前記カウンタ回路のカウント値に応じて第1信号を出力することで、前記命令実行部に対して前記復号化コードを出力するサイクルを通知する第1信号生成回路とを含み、
前記カウンタ回路は、前記メモリから前記暗号化コードを受信するサイクルが発生する毎にカウント動作を行い、更に、前記命令実行部が分岐命令を発生したことを検知した際にはカウント値を初期化することを特徴とする情報処理装置。
【請求項5】
請求項2記載の情報処理装置において、
前記複数段のパイプラインの各段毎の鍵は、それぞれ異なることを特徴とする情報処理装置。
【請求項6】
復号化回路を用い、各サイクル毎に入力された暗号化命令コードを順次変換しながら復号化命令コードを順次生成する暗号化命令コードの復号化方法であって、
前記復号化回路は、
各サイクル毎に入力された前記暗号化命令コードが分岐命令か否かを判別する第1処理と、
前記第1処理で前記暗号化命令コードが分岐命令であった場合に、前記暗号化命令コードが入力されたサイクルに続く第1サイクルで入力された第1暗号化命令コードに対して第1復号化処理を行い、第1復号化命令コードを生成する第2処理と、
前記第1サイクルに続く第2サイクルで入力された第2暗号化命令コードに対して、前記第1復号化処理が備える暗号強度よりも高い暗号強度を備えた第2復号化処理を行い、第2復号化命令コードを生成する第3処理と、を実行することを特徴とする暗号化命令コードの復号化方法。
【請求項7】
請求項6記載の暗号化命令コードの復号化方法において、
前記第1復号化処理は、第1鍵を用いた演算処理を行うことで復号化を行い、
前記第2復号化処理は、前記第1鍵を用いた演算処理に加えて第2鍵を用いた演算処理を行うことで復号化を行うことを特徴とする暗号化命令コードの復号化方法。
【請求項8】
コンピュータシステムによるプログラム処理を用い、予め作成されたソース命令コードを変換して暗号化命令コードを生成する命令コードの暗号化方法であって、
前記コンピュータシステムは、
複数のアドレスに割り付けられる複数の前記ソース命令コードがそれぞれ分岐命令か否かを判別し、分岐命令であった場合にその分岐先となる第1アドレスと前記第1アドレスに割り付けられた第1ソース命令コードを認識する第1ステップと、
前記第1ソース命令コードを第1暗号化アルゴリズムを用いて変換し、第1暗号化命令コードを生成する第2ステップと、
前記第1アドレスの次に実行される第2アドレスに割り付けられた第2ソース命令コードを、前記第1暗号化アルゴリズムよりも暗号強度が高い第2暗号化アルゴリズムを用いて変換し、第2暗号化命令コードを生成する第3ステップと、を実行することを特徴とする命令コードの暗号化方法。
【請求項9】
請求項8記載の命令コードの暗号化方法において、
前記第1暗号化アルゴリズムは、第1鍵を用いた演算処理を行うことで暗号化を行い、
前記第2暗号化アルゴリズムは、前記第1鍵を用いた演算処理に加えて第2鍵を用いた演算処理を行うことで暗号化を行うことを特徴とする命令コードの暗号化方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2009−251794(P2009−251794A)
【公開日】平成21年10月29日(2009.10.29)
【国際特許分類】
【出願番号】特願2008−97139(P2008−97139)
【出願日】平成20年4月3日(2008.4.3)
【出願人】(503121103)株式会社ルネサステクノロジ (4,790)
【Fターム(参考)】