(58)【調査した分野】(Int.Cl.,DB名)
前記制御部は、前記回路データが前記メモリから前記プログラマブルデバイスに再び読み込まれるときに、前記第2の領域に退避された前記一部分のデータと前記第1の領域に記憶された前記他のデータ以外の部分のデータとに基づいて前記回路データを再現する
請求項1に記載の電子機器。
前記制御部は、前記第1の領域の中で前記一部分のデータが記憶されていた位置を示す位置情報を記憶する記憶部を有し、前記位置情報に基づいて前記回路データを再現する
請求項2に記載の電子機器。
前記制御部は、前記第1の領域の中の前記他のデータを前記第2の領域に退避された前記一部分のデータで上書きすることで前記第1の領域に前記回路データを再現し、前記プログラマブルデバイスが前記第1の領域から前記回路データを読み込むことを可能にする
請求項2又は3に記載の電子機器。
第1及び第2の領域を含み前記第1の領域に回路データを記憶したメモリから、前記回路データに応じた回路として動作するプログラマブルデバイスに、前記回路データが読み込まれたことを検出する検出部と、
前記回路データの読み込みが検出された後、前記第1の領域の中から前記回路データの一部分を選択し、選択した一部分のデータを前記第2の領域に退避し、前記第1の領域の中の前記一部分のデータを他のデータに書き換える書き換え部と
を有する回路データ保護装置。
【発明を実施するための形態】
【0015】
以下、図面を参照しながら実施の形態について説明する。
[第1の実施の形態]
第1の実施の形態について説明する。
【0016】
図1は、第1の実施の形態に係る不正防止装置の例を示した図である。
図1に示すように、電子機器1は、プログラマブルデバイス2、メモリ3、及び制御部7を有する。プログラマブルデバイス2は、回路データ6に応じた回路として動作する。FPGAは、プログラマブルデバイス2の一例である。プログラマブルデバイス2は、動作時にコンフィグレーションと呼ばれる初期化を行い、自身の回路構成を設定する。コンフィグレーション時に、プログラマブルデバイス2は、メモリ3に記憶された回路データ6を読み込み、回路データ6が示す回路として動作できるようにする。従って、メモリ3に記憶される回路データ6を入れ替えることで、プログラマブルデバイス2の動作を変更することができる。
【0017】
メモリ3は、第1及び第2の領域4、5を含み、第1の領域4に回路データ6を記憶する。第1の領域4は、例えば、コンフィグレーション時にプログラマブルデバイス2が通常読み込むように設定された回路データ6を記憶するための記憶領域である。一方、第2の領域5は、例えば、コンフィグレーション時にプログラマブルデバイス2が参照しないか、回路データ6の格納用としては使用しない未使用領域である。
【0018】
制御部7は、回路データ6がメモリ3からプログラマブルデバイス2に読み込まれたことを検出する。さらに、制御部7は、回路データ6の読み込みを検出した後、第1の領域4の中から回路データの一部分6aを選択し、選択した一部分のデータ6aを第2の領域5に退避する。そして、制御部7は、第1の領域4の中の一部分のデータ6aを他のデータ8に書き換える。
【0019】
他のデータ8としては、例えば、一部分のデータ6aのビット値を反転させたデータ、ランダムに生成したデータ、或いは、予め用意された固定のデータなどが利用される。一部分のデータ6aは第2の領域5に退避されているため、他のデータ8に書き換えられても、第1の領域4に記憶されているデータと第2の領域5に記憶されている一部分のデータ6aとを用いて元の回路データ6を復元することが可能である。
【0020】
また、プログラマブルデバイス2が回路データ6を読み込んだ後で、回路データ6の書き換えを実行するため、プログラマブルデバイス2は正常に動作する。その一方、回路データ6の一部分が他のデータ8に書き換えられるため、メモリ3が窃取され、他のプログラマブルデバイスに接続されても、他のプログラマブルデバイスは第1の領域4に記憶された回路データ6を読み込むため、意図した動作をしない。
【0021】
また、回路データ6の全体を書き換えているわけではないため、一見して回路データ6に秘匿化処理が施されていることは判明しにくく、不正に使用する者が秘匿化処理に気づいて秘匿化方法の解析を行うことを回避又は遅らせることができる。その結果、メモリ3が窃取されるなどして回路データ6が不正利用されるリスクを低減することが可能になる。
【0022】
以上、第1の実施の形態について説明した。
[第2の実施の形態]
第2の実施の形態について説明する。以下ではFPGAを例に挙げて説明するが、第2の実施の形態に係る技術は、ある記憶手段に格納された書き換え可能な回路情報に基づいて回路構成が決定される任意の集積回路に対して適用可能である。
【0023】
(FPGA及びその周辺回路)
FPGAは、例えば、携帯電話、パーソナルコンピュータ、映像機器、通信機器などの身近な電子機器の基板に搭載されている他、ワークステーションやサーバと呼ばれる高性能なコンピュータの基板にも搭載されている。基板のレイアウトや回路構成はデバイスの種類によって異なるが、以下では説明の都合上、
図2のような単純化した基板の例を想定して説明を進める。
図2は、第2の実施の形態に係るFPGAが配置された基板の例を示した図である。
【0024】
図2に示すように、基板10には、電源11と、コンフィグレーションメモリ12と、FPGA13とが搭載されている。電源11がオンになると、基板10に搭載されている回路に電力が供給される。コンフィグレーションメモリ12には、FPGA13の回路構成を決める回路情報が格納されている。FPGA13は、電源11がオンになり電力が供給されると初期化動作であるコンフィグレーションを実行する。このとき、FPGA13は、コンフィグレーションメモリ12から回路情報を読み出し、読み出した回路情報に基づいて自身の回路構成を設定する。以下、FPGA13の仕組みやコンフィグレーション時の動作に関する機能などについて順次説明する。
【0025】
(FPGAの仕組み)
FPGA13の仕組みについて説明する。FPGA13は、主に、汎用ロジック、I/O(Input/Output)エレメント、PLL(Phase Locked Loop)ブロック、及びインターコネクトを含む。
【0026】
汎用ロジックは、後述するロジックエレメントの集合である。I/Oエレメントは、FPGA13の内部と外部とで信号をやり取りするための要素である。PLLブロックは、FPGA13内の要素が動作する際に用いるクロック信号を供給する回路である。インターコネクトは、FPGA13内部の要素を繋ぐ配線及び配線の接続関係を規定するパストランジスタである。
【0027】
なお、FPGA13には、マルチプライヤ、RAM(Random Access Memory)ブロック、プロセッサコアなどの要素が含まれていてもよい。マルチプライヤは、2つの値を高速で乗算するための回路(乗算器)である。RAMブロックは、ソフトウェアやデータの格納に利用される。プロセッサコアは、例えば、RAMブロックに格納されたソフトウェアに基づいて処理を実行し、FPGA13の機能を拡張する目的などに利用される。
【0028】
ここで、
図3を参照しながら、ロジックエレメントについてさらに説明する。
図3は、第2の実施の形態に係るFPGAに含まれるロジックエレメントの例を示した図である。
図3に示したロジックエレメント20は3入力1出力型の回路である。つまり、3つの信号A、B、Cをロジックエレメント20に対して入力すると1つの出力OUTが得られる。ロジックエレメント20は、論理回路21及びレジスタ22を含む。論理回路21は、ルックアップテーブル(LUT:Look-Up Table)を有する。論理回路21は、入力値(A、B、C)の組み合わせと1つの出力値(OUT)とを対応付けたルックアップテーブルを参照し、入力値(A、B、C)の組み合わせに応じて出力値(OUT)を出力する。
【0029】
レジスタ22は、例えば、フリップフロップ(FF:FlipFlop)回路で形成される。レジスタ22のD入力には、論理回路21の出力値(OUT)が入力される。レジスタ22のクロック入力端子には、PLLブロックから供給されるクロック信号(CLK)が入力される。レジスタ22は、クロック信号(CLK)に応じたタイミングでD入力の値(OUT)をQ出力から出力する。なお、
図3に示したロジックエレメント20の場合、論理回路21の出力値OUTがレジスタ22を介さずに出力される経路も設けられている。これらの出力値OUTは、インターコネクトを通じて他のロジックエレメント20に送られるか、I/Oエレメントを通じて外部に出力される。
【0030】
上記のように、ロジックエレメント20の入力値と出力値との関係(以下、論理)は、論理回路21が有するルックアップテーブルの内容に依存する。一例として、3入力のAND回路及びOR回路を形成する場合の論理回路21が有するルックアップテーブルについて
図4及び
図5を参照しながら説明する。
【0031】
図4は、第2の実施の形態に係るロジックエレメントに含まれるルックアップテーブルの例(3入力AND)を示した図である。この例では、入力値Aが0、入力値Bが0、入力値Cが1の場合、出力値OUTは0となる。同様に、入力値A、B、Cのうち少なくとも1つの値が0の場合、出力値OUTは0となる。一方、入力値A、B、Cが全て1の場合、出力値OUTは1となる。つまり、
図4に例示した内容でルックアップテーブルが設定された場合、ロジックエレメント20は、3入力のAND回路として動作する。
【0032】
図5は、第2の実施の形態に係るロジックエレメントに含まれるルックアップテーブルの例(3入力OR)を示した図である。この例では、入力値Aが0、入力値Bが0、入力値Cが1の場合、出力値OUTは1となる。同様に、入力値A、B、Cのうち少なくとも1つの値が1の場合、出力値OUTは1となる。一方、入力値A、B、Cが全て0の場合、出力値OUTは0となる。つまり、
図5に例示した内容でルックアップテーブルが設定された場合、ロジックエレメント20は、3入力のOR回路として動作する。
【0033】
上記のように、ロジックエレメント20は、論理回路21が有するルックアップテーブルの内容を書き換えることで論理を変更することができる。例えば、上述したAND回路やOR回路の他、NOT回路、XOR回路、NOR回路、NAND回路、或いは、レジスタ回路として個々のロジックエレメント20を動作させることができる。さらに、インターコネクトのパストランジスタを切り替えることで、ロジックエレメント20間の接続関係が変更され、FPGA13全体として様々な機能を実現することができる。このような仕組みにより、FPGA13は、ルックアップテーブルの内容及びパストランジスタの設定内容に応じて所望の回路を自由に構築することができるのである。
【0034】
FPGA13に回路を構築する初期化動作はコンフィグレーションと呼ばれる。そして、コンフィグレーション時にFPGA13に与えられるルックアップテーブルの内容及びパストランジスタの設定内容はコンフィグレーションメモリ12に格納された回路情報に含まれる。以上説明した内容を踏まえ、第2の実施の形態に係るFPGA13についてさらに説明する。
【0035】
(第2の実施の形態に係るFPGAの例)
図6は、第2の実施の形態に係るFPGAの例を示したブロック図である。
図6に示すように、第2の実施の形態に係るFPGA13は、入出力部31と、ユーザ回路32と、コンフィグレーション回路33と、不正防止回路34とを有する。
【0036】
入出力部31は、コンフィグレーションメモリ12に格納された情報にアクセスするためのインターフェースである。例えば、入出力部31は、コンフィグレーションメモリ12から回路情報を読み出す際に利用される。また、入出力部31は、コンフィグレーションメモリ12に格納された回路情報に変更を加える際に利用される。さらに、入出力部31は、コンフィグレーションメモリ12に情報を書き込む際に利用される。例えば、入出力部31は、I/Oエレメントなどの機能を利用して実現される。
【0037】
ユーザ回路32は、回路情報に基づいて論理が構築される集積回路である。ユーザ回路32は、ロジックエレメント20及びインターコネクトなどにより形成される。コンフィグレーション回路33は、回路情報に基づいてコンフィグレーションを実行する回路である。電源11がオンになると、コンフィグレーション回路33は、入出力部31を介してコンフィグレーションメモリ12から回路情報を読み出し、読み出した回路情報が示すルックアップテーブルの内容及びパストランジスタの設定内容でユーザ回路32に回路を構築する。また、コンフィグレーション回路33は、不正防止回路34による制御を受けて動作する場合もある。
【0038】
不正防止回路34は、コンフィグレーションメモリ12に格納された回路情報が窃取されて不正に利用されることを防止するために回路情報を書き換える回路である。不正防止回路34は、コンフィグレーションメモリ12に格納された回路情報の一部を書き換える。但し、不正防止回路34は、書き換え前の回路情報のうち、書き換え区間の回路情報をコンフィグレーションメモリ12の未使用領域に退避させる。なお、未使用領域とは、コンフィグレーション時にコンフィグレーション回路33が参照する回路情報を格納するための記憶領域(以下、使用領域)以外の記憶領域である。
【0039】
不正防止回路34は、コンフィグレーション時に、コンフィグレーションメモリ12に格納された回路情報を書き換え前の内容に復元させる。例えば、不正防止回路34は、コンフィグレーションメモリ12の未使用領域に退避させた書き換え区間の回路情報で、使用領域に格納されている回路情報の該当部分を上書きすることにより回路情報を書き換え前の内容に復元させる。そして、不正防止回路34は、コンフィグレーション回路33を制御して復元後の回路情報に基づくコンフィグレーションを実行させる。
【0040】
(不正防止回路の機能)
ここで、
図7を参照しながら、不正防止回路34についてさらに説明する。
図7は、第2の実施の形態に係る不正防止回路の機能を示したブロック図である。
【0041】
図7に示すように、不正防止回路34は、フラグ管理部131と、書き換え部132と、記憶部133と、復元部134と、再実行指示部135とを有する。
(フラグ管理部131)
フラグ管理部131は、コンフィグレーションメモリ12の未使用領域に格納された書き換えフラグを変更する。例えば、フラグ管理部131は、コンフィグレーションメモリ12に格納された回路情報が書き換えられた際に書き換えフラグを1に設定する。また、フラグ管理部131は、コンフィグレーションメモリ12に格納された回路情報が書き換え前の内容に復元された際に書き換えフラグを0に設定する。このような設定を行うことにより、書き換えフラグを参照することで、コンフィグレーションメモリ12に格納された回路情報の書き換え済みか否かを容易に把握することが可能になる。
【0042】
(書き換え部132)
書き換え部132は、コンフィグレーション回路33によりコンフィグレーションメモリ12に格納された回路情報が読み込まれたことを検出し、コンフィグレーションメモリ12に格納された回路情報の一部を書き換える。回路情報の一部を書き換える際、書き換え部132は、書き換え区間を決定する。そして、書き換え部132は、コンフィグレーションメモリ12の使用領域において書き換え区間を特定するためのアドレス情報(例えば、開始位置及び終了位置を示すアドレス情報や、開始位置及び区間長を示す情報)を記憶部133に格納する。その後、書き換え部132は、コンフィグレーションメモリ12の使用領域に格納された回路情報のうち、書き換え区間の回路情報(以下、復元用回路情報)を未使用領域に格納する。
【0043】
復元用回路情報を未使用領域に格納した書き換え部132は、使用領域に格納された回路情報の書き換え区間を書き換える。例えば、書き換え部132は、固定値で上書きする方法、ビット値を反転させる方法、ランダムなビット値で上書きする方法など、所定の方法で書き換え区間の回路情報を書き換える。回路情報を書き換えた書き換え部132は、書き換えが完了した旨をフラグ管理部131に通知する。
【0044】
(記憶部133)
記憶部133には、書き換え部132により回路情報の書き換え区間を示すアドレス情報などが格納される。例えば、記憶部133には、コンフィグレーションメモリ12の使用領域における書き換え区間の始点及び終点のアドレス情報が格納される。
【0045】
(復元部134)
復元部134は、書き換え後の回路情報を書き換え前の回路情報に復元する。復元部134は、記憶部133から書き換え区間を示すアドレス情報を読み出し、読み出したアドレス情報に基づいて書き換え区間を認識する。書き換え区間を認識した復元部134は、コンフィグレーションメモリ12の未使用領域に格納された復元用回路情報を読み出し、使用領域に格納された回路情報の書き換え区間を復元用回路情報で上書きして書き換え前の回路情報を復元する。回路情報を復元した復元部134は、回路情報の復元が完了した旨をフラグ管理部131及び再実行指示部135に通知する。
【0046】
(再実行指示部135)
再実行指示部135は、復元部134から通知を受けた場合に、コンフィグレーション回路33に対してコンフィグレーションを再実行するように指示する。コンフィグレーション回路33によるコンフィグレーションの再実行が完了した後、再実行指示部135は、書き換え部132に対してコンフィグレーションの再実行が完了した旨を通知する。
【0047】
以上、不正防止回路34の機能について説明した。
(コンフィグレーションメモリの内容)
ここで、
図8を参照しながら、コンフィグレーションメモリ12に格納される情報についてさらに説明する。
図8は、第2の実施の形態に係るコンフィグレーションメモリに格納される情報の例を示した図である。
【0048】
図8に示すように、コンフィグレーションメモリ12は、回路情報を格納するための使用領域と、使用領域以外の未使用領域とに分けられる。使用領域は、コンフィグレーション回路33によりアクセスされる領域である。一方、未使用領域は、予備的に設けられる領域である。なお、FPGA13にプロセッサコアなどを搭載している場合に、プロセッサコアなどがアクセス可能な領域として未使用領域が用意されることもある。
【0049】
使用領域には、回路情報が格納される。回路情報には、ロジックエレメント20のルックアップテーブルに格納する情報やパストランジスタの設定内容(パス情報)などが含まれる。また、使用領域には、回路情報のサイズや格納日時などが含まれるヘッダ情報や、回路情報に対する誤り検査符号(CRC:Cyclic Redundancy Check)も格納される。使用領域のサイズは、例えば、ユーザ回路32の回路規模に応じて設定される。例えば、ユーザ回路32に含まれるルックアップテーブルの数やサイズ、或いは、パストランジスタの数に応じて回路情報のサイズが変わる。そのため、使用領域のサイズは、ユーザ回路32の回路規模に応じた回路情報のサイズを考慮して決められる。
【0050】
未使用領域には、少なくとも書き換えフラグ及び復元用回路情報が格納される。書き換えフラグは、例えば、1ビットの値(0又は1)で表現される。復元用回路情報は、使用領域の回路情報を書き換える際に未使用領域に退避させた書き換え区間の回路情報である。復元用回路情報のサイズは、回路情報を書き換える度に不正防止回路34により設定されるか、或いは、予めユーザにより設定される。但し、復元用回路情報のサイズは、未使用領域のサイズを考慮して決められる。なお、未使用領域をFPGA13に搭載されたプロセッサコアなどが使用する場合、未使用領域にはプロセッサコアが利用する情報も格納される。
【0051】
以上、コンフィグレーションメモリ12に格納される情報について説明した。
(コンフィグレーションメモリの書き換え動作)
ここで、回路情報の書き換え動作についてさらに説明する。
図9は、第2の実施の形態に係るコンフィグレーション時のメモリ書き換え動作について説明した第1の図である。
【0052】
回路情報の書き換えを行う場合、不正防止回路34は、所定の方法で回路情報の書き換え区間を決める。所定の方法としては、例えば、予め設定した同じ位置及び同じサイズの区間を書き換え区間とする方法が考えられる。また、書き換え区間のサイズを固定とし、書き換え区間の位置をランダムに決める方法が考えられる。さらに、書き換え区間の位置を固定とし、書き換え区間のサイズをランダムに決める方法が考えられる。そして、書き換え区間のサイズ及び位置をそれぞれランダムに決める方法が考えられる。
【0053】
その他、あるルックアップテーブルを有するロジックエレメント20が異なる論理で動作するように回路情報を書き換えることを意図して、あるルックアップテーブルの情報に対応する区間を書き換え区間に決める方法も考えられる。また、書き換え区間とする区間の候補を複数用意しておき、回路情報の書き換えを行う度にランダムに1つ又は複数の候補を選択して書き換え区間とする方法も考えられる。また、パストランジスタの設定内容を規定する区間だけを選択的に書き換え区間とする方法なども考えられる。
【0054】
上記のような方法で書き換え区間を決めた不正防止回路34は、書き換え区間のアドレス情報(例えば、開始アドレスa
1及び終了アドレスa
2など。)を保持する。なお、
図9の例では連続する複数のビットを書き換え区間としているが、不連続な複数の区間を書き換え区間としてもよい。アドレス情報を保持した不正防止回路34は、書き換え区間の回路情報を復元用回路情報として未使用領域に格納する。そして、不正防止回路34は、
図10に示すように、所定の書き換え方法で書き換え区間の回路情報を書き換える。
図10は、第2の実施の形態に係るコンフィグレーション時のメモリ書き換え動作について説明した第2の図である。
【0055】
所定の書き換え方法としては、
図10に示すように、値を反転させる方法が考えられる。この方法では、書き換え区間に含まれる各ビットについてビット値1が0に変換され、ビット値0が1に変換される。なお、回路情報が3値(−1、0、+1)のシンボルで表現されている場合には、書き換え区間に含まれる各シンボルについてシンボル値−1が+1に変換され、シンボル値0はそのまま維持され、シンボル値+1が−1に変換される。値を反転させる方法の他にも、例えば、書き換え区間の値を全て固定値に書き換える方法やランダムに選択された値で上書きする方法などが考えられる。
【0056】
その他にも、あるルックアップテーブルを有するロジックエレメント20が異なる論理で動作するように回路情報を書き換える方法が考えられる。例えば、ロジックエレメント20を3入力のAND回路として動作させるルックアップテーブル(
図4)の内容が記載された区間を、3入力のOR回路として動作させるルックアップテーブル(
図5)の内容に書き換える方法が考えられる。この方法によれば、書き換え後の回路情報を用いてFPGA13を動作させた場合に、一見正常動作しているかのようにFPGA13が動作する可能性が高い。そのため、回路情報が書き換えられていることが露見しにくい。
【0057】
不正な目的でコンフィグレーションメモリ12を抜き取り、他のFPGAに接続して不正利用する者は、回路情報が書き換えられていることに気づくと何らかの方法で回路情報の復元を試みると考えられる。しかし、回路情報が書き換えられていることに気づかれなければ、回路情報の復元が試みられず、正しい回路情報が不正利用されるリスクが低下する。また、回路情報の書き換えを検出するための作業工程を不正利用者に課すことで、不正利用の難易度を上げ、結果としてセキュリティを向上させることに寄与する。なお、ルックアップテーブルの書き換えに限らず、パストランジスタの設定内容などを変更して、正しい動作はしないが一見正常動作しているように見える動作をさせる回路情報に書き換える方法も考えられる。
【0058】
回路情報を書き換えた不正防止回路34は、コンフィグレーションメモリ12の未使用領域に格納された書き換えフラグを1(書き換え後の状態を示す値)に変更する。書き換えフラグの変更を終えると、回路情報の書き換え動作は終了する。
【0059】
以上、回路情報の書き換え動作について説明した。
(コンフィグレーション時の動作(書き換えフラグ0の場合))
ここで、コンフィグレーション時におけるFPGA13の動作(書き換えフラグが0の場合)について説明する。
図11は、第2の実施の形態に係るFPGAのコンフィグレーション時における動作の例を示した第1のシーケンス図である。
【0060】
(S101)コンフィグレーション回路33は、コンフィグレーションメモリ12の使用領域に格納された回路情報を読み出す。
(S102)コンフィグレーション回路33は、S101の動作で読み出した回路情報をユーザ回路32に設定する。例えば、コンフィグレーション回路33は、回路情報に含まれるルックアップテーブルの情報をユーザ回路32のロジックエレメント20が有するルックアップテーブルに書き込む。また、コンフィグレーション回路33は、回路情報に含まれるパストランジスタの設定内容に従ってユーザ回路32を形成するパストランジスタを設定する。つまり、コンフィグレーション回路33は、ユーザ回路32に回路情報に基づく回路を構築する。
【0061】
(S103)回路の構築を終えたコンフィグレーション回路33は、ユーザ回路32に対する回路の構築を終えた旨を不正防止回路34に通知する。つまり、コンフィグレーション回路33は、コンフィグレーションの完了を不正防止回路34に通知する。
【0062】
(S104)コンフィグレーションの完了が通知された不正防止回路34は、コンフィグレーションメモリ12の未使用領域から書き換えフラグを読み出す。
図11の例では書き換えフラグが0であるため、不正防止回路34は、コンフィグレーションメモリ12の使用領域に格納された回路情報が未書き換えの状態にあると認識する。
【0063】
(S105)不正防止回路34は、回路情報の書き換え区間を決定し、コンフィグレーションメモリ12の使用領域に格納された回路情報のうち、書き換え区間の回路情報を未使用領域に格納する。つまり、不正防止回路34は、書き換え区間の回路情報を復元用回路情報として未使用領域にバックアップする。
【0064】
(S106)復元用回路情報をバックアップした不正防止回路34は、コンフィグレーションメモリ12の使用領域に格納された回路情報の書き換え区間を書き換える。
(S107)回路情報の書き換え区間を書き換えた不正防止回路34は、コンフィグレーションメモリ12の未使用領域に格納された書き換えフラグを1(書き換え済みを示す値)に変更する。S107の動作を終えると、コンフィグレーション時におけるFPGA13の動作は終了する。
【0065】
(コンフィグレーション時の動作(書き換えフラグ1の場合))
次に、コンフィグレーション時におけるFPGA13の動作(書き換えフラグが1の場合)について説明する。
図12は、第2の実施の形態に係るFPGAのコンフィグレーション時における動作の例を示した第2のシーケンス図である。
【0066】
(S111)コンフィグレーション回路33は、コンフィグレーションメモリ12の使用領域に格納された回路情報を読み出す。
(S112)コンフィグレーション回路33は、S111の動作で読み出した回路情報をユーザ回路32に設定する。例えば、コンフィグレーション回路33は、回路情報に含まれるルックアップテーブルの情報をユーザ回路32のロジックエレメント20が有するルックアップテーブルに書き込む。また、コンフィグレーション回路33は、回路情報に含まれるパストランジスタの設定内容に従ってユーザ回路32を形成するパストランジスタを設定する。つまり、コンフィグレーション回路33は、ユーザ回路32に回路情報に基づく回路を構築する。
【0067】
(S113)回路の構築を終えたコンフィグレーション回路33は、ユーザ回路32に対する回路の構築を終えた旨を不正防止回路34に通知する。つまり、コンフィグレーション回路33は、コンフィグレーションの完了を不正防止回路34に通知する。
【0068】
(S114)コンフィグレーションの完了が通知された不正防止回路34は、コンフィグレーションメモリ12の未使用領域から書き換えフラグを読み出す。
図12の例では書き換えフラグが1であるため、不正防止回路34は、コンフィグレーションメモリ12の使用領域に格納された回路情報が書き換え済みの状態にあると認識する。
【0069】
(S115)不正防止回路34は、コンフィグレーションメモリ12の未使用領域に格納された復元用回路情報を読み出す。そして、不正防止回路34は、コンフィグレーションメモリ12の使用領域に格納された回路情報の書き換え区間を復元用回路情報で上書きして書き換え前の回路情報を復元する。
【0070】
(S116)回路情報を復元した不正防止回路34は、コンフィグレーションメモリ12の未使用領域に格納された書き換えフラグを0(未書き換えを示す値)に変更する。
(S117)書き換えフラグを0に変更した不正防止回路34は、コンフィグレーション回路33に対してコンフィグレーションを再実行するように指示する。つまり、不正防止回路34は、復元した回路情報に基づいて再度コンフィグレーションを実行するようにコンフィグレーション回路33を制御する。
【0071】
(S118)コンフィグレーション回路33は、コンフィグレーションメモリ12の使用領域に格納された回路情報を読み出す。S118の動作で読み出される回路情報は、不正防止回路34により書き換え前の状態に復元された回路情報である。
【0072】
(S119)コンフィグレーション回路33は、S118の動作で読み出した回路情報をユーザ回路32に設定する。例えば、コンフィグレーション回路33は、回路情報に含まれるルックアップテーブルの情報をユーザ回路32のロジックエレメント20が有するルックアップテーブルに書き込む。また、コンフィグレーション回路33は、回路情報に含まれるパストランジスタの設定内容に従ってユーザ回路32を形成するパストランジスタを設定する。つまり、コンフィグレーション回路33は、S115の動作で復元された回路情報に基づいてユーザ回路32に再び回路を構築する。
【0073】
(S120)回路の再構築を終えたコンフィグレーション回路33は、ユーザ回路32に対する回路の再構築を終えた旨を不正防止回路34に通知する。つまり、コンフィグレーション回路33は、コンフィグレーションの完了を不正防止回路34に通知する。
【0074】
(S121)コンフィグレーションの完了が通知された不正防止回路34は、コンフィグレーションメモリ12の未使用領域から書き換えフラグを読み出す。
図12の例では書き換えフラグが0であるため、不正防止回路34は、コンフィグレーションメモリ12の使用領域に格納された回路情報が未書き換えの状態にあると認識する。
【0075】
(S122)不正防止回路34は、回路情報の書き換え区間を決定し、コンフィグレーションメモリ12の使用領域に格納された回路情報のうち、書き換え区間の回路情報を未使用領域に格納する。つまり、不正防止回路34は、書き換え区間の回路情報を復元用回路情報として未使用領域にバックアップする。
【0076】
(S123)復元用回路情報をバックアップした不正防止回路34は、コンフィグレーションメモリ12の使用領域に格納された回路情報の書き換え区間を書き換える。なお、回路情報の書き換え区間は、S115の処理で復元用回路情報を上書きした区間と異なる区間であってもよい。例えば、書き換え区間は、書き換えの度にランダムに選択されてもよい。
【0077】
(S124)回路情報の書き換え区間を書き換えた不正防止回路34は、コンフィグレーションメモリ12の未使用領域に格納された書き換えフラグを1(書き換え済みを示す値)に変更する。S123の動作を終えると、コンフィグレーション時におけるFPGA13の動作は終了する。
【0078】
(コンフィグレーション回路33の動作について)
次に、コンフィグレーション回路33の動作について、フロー図を参照しながら説明する。
図13は、第2の実施の形態に係るコンフィグレーション回路の動作を示したフロー図である。
【0079】
(S201)コンフィグレーション回路33は、電源11がオンになったか否かを監視し、電源11がオンになったことを検知した場合に、S202の動作に移る。
(S202)コンフィグレーション回路33は、コンフィグレーションメモリ12の使用領域に格納された回路情報を読み出す。
【0080】
(S203)コンフィグレーション回路33は、S202の動作で読み出した回路情報をユーザ回路32に設定して回路情報に基づく回路を構築する。例えば、コンフィグレーション回路33は、回路情報に含まれるルックアップテーブルの情報をユーザ回路32のロジックエレメント20が有するルックアップテーブルに書き込む。また、コンフィグレーション回路33は、回路情報に含まれるパストランジスタの設定内容に従ってユーザ回路32を形成するパストランジスタを設定する。
【0081】
(S204)コンフィグレーション回路33は、コンフィグレーションを再実行する旨の指示を不正防止回路34から受信したか否かを判定する。不正防止回路34から指示を受信した場合、コンフィグレーション回路33は、S202の動作に移る。一方、不正防止回路34から指示を受信していない場合、コンフィグレーション回路33は、S205の動作に移る。
【0082】
(S205)コンフィグレーション回路33は、電源11がオフになったか否かを監視する。電源11がオフになったことを検知した場合、コンフィグレーション回路33は、動作を終了する。一方、電源11がオフの状態にない場合、コンフィグレーション回路33は、再びS204の動作に移る。
【0083】
以上、コンフィグレーション回路33の動作について説明した。
(不正防止回路34の動作について)
次に、不正防止回路34の動作について、フロー図を参照しながら説明する。
図14は、第2の実施の形態に係る不正防止回路の動作を示した第1のフロー図である。
【0084】
(S211)不正防止回路34は、電源11がオンになったか否かを監視し、電源11がオンになったことを検知した場合に、S212の動作に移る。
(S212)不正防止回路34は、コンフィグレーションが完了したか否かを判定する。電源11がオンになった場合にコンフィグレーション回路33により実行されるコンフィグレーションが完了すると、不正防止回路34は、コンフィグレーションが完了した旨の通知をコンフィグレーション回路33から受信する。この通知を受信した場合、不正防止回路34は、S213の動作に移る。一方、この通知を受信していない場合、不正防止回路34は、再びS212の動作に移る。
【0085】
(S213)不正防止回路34は、フラグ管理部131により、コンフィグレーションメモリ12の未使用領域に格納された書き換えフラグを読み出す。
(S214)不正防止回路34は、フラグ管理部131により、S213の動作で読み出した書き換えフラグが1(書き換え済みを示す値)であるか否かを判定する。書き換えフラグが1である場合、不正防止回路34は、S215の動作に移る。一方、書き換えフラグが0(未書き換えを示す値)である場合、不正防止回路34は、S217の動作に移る。
【0086】
(S215)不正防止回路34は、復元部134により、コンフィグレーションメモリ12の未使用領域に格納された復元用回路情報を用いて、使用領域に格納された回路情報を書き換え前の内容に復元する。なお、S215の動作については、後段において
図15を参照しながらさらに説明する。
【0087】
(S216)不正防止回路34は、再実行指示部135により、コンフィグレーション回路33に対して再度コンフィグレーションを実行するように指示する。
(S217)不正防止回路34は、書き換え部132により、コンフィグレーションメモリ12の使用領域に格納された回路情報の一部(書き換え区間)を書き換える。なお、S217の動作については、後段において
図16を参照しながらさらに説明する。S217の動作を終えると、コンフィグレーション時における不正防止回路34の動作は終了する。
【0088】
(回路情報の復元動作(S215)について)
ここで、回路情報の復元時における不正防止回路34の動作についてさらに説明する。
図15は、第2の実施の形態に係る不正防止回路の動作を示した第2のフロー図である。
【0089】
(S221)回路情報の復元動作を開始した不正防止回路34は、復元部134により、コンフィグレーションメモリ12の未使用領域に格納された復元用回路情報を読み出す。
【0090】
(S222)復元用回路情報を読み出した不正防止回路34は、復元部134により、コンフィグレーションメモリ12の使用領域に格納されている回路情報の書き換え区間に復元用回路情報を上書きして書き換え前の回路情報を復元する。このとき、復元部134は、記憶部133に記憶されている回路情報の書き換え区間を示すアドレス情報を参照する。
【0091】
(S223)回路情報を復元した不正防止回路34は、フラグ管理部131により、コンフィグレーションメモリ12の未使用領域に格納された書き換えフラグを0(書き換え済みを示す値)に変更する。S223の動作を終えると、回路情報の復元動作は終了する。
【0092】
(回路情報の書き換え動作(S217)について)
ここで、回路情報の書き換え時における不正防止回路34の動作についてさらに説明する。
図16は、第2の実施の形態に係る不正防止回路の動作を示した第3のフロー図である。
【0093】
(S231)回路情報の書き換え動作を開始した不正防止回路34は、書き換え部132により、回路情報の書き換え区間を決定する。つまり、書き換え部132は、書き換え区間の位置及びサイズ(始点及び終点)を決定する。書き換え区間の決定方法としては、例えば、書き換え区間の位置及びサイズを予め設定された固定値に決める方法や、書き換え区間の位置及びサイズの一方又は両方をランダムに決める方法などが考えられる。その他にも、あるルックアップテーブルの情報が記載された区間を書き換え区間とする方法や、パストランジスタの設定内容を記載した区間を選択して書き換え区間とする方法などが考えられる。
【0094】
(S232)書き換え区間を決定した不正防止回路34は、書き換え部132により、コンフィグレーションメモリ12における書き換え区間の位置を示すアドレス情報を記憶部133に保存する。
【0095】
(S233)不正防止回路34は、書き換え部132により、コンフィグレーションメモリ12の使用領域に格納された書き換え前の回路情報のうち、書き換え区間の回路情報を復元用回路情報として未使用領域に格納する。つまり、書き換え部132は、書き換え区間の回路情報を未使用領域に退避させる。
【0096】
(S234)不正防止回路34は、書き換え部132により、コンフィグレーションメモリ12の使用領域に格納された回路情報のうち、書き換え区間の回路情報を書き換える。書き換え方法としては、例えば、書き換え区間のビット値又はシンボル値を反転させる方法や、予め設定した固定値で書き換え区間の値を上書きする方法が考えられる。その他にも、書き換え区間の回路情報がルックアップテーブルの内容を示す場合、そのルックアップテーブルで実現される論理とは異なる論理となるように書き換え区間の回路情報を書き換える方法などが考えられる。
【0097】
(S235)回路情報を書き換えた不正防止回路34は、フラグ管理部131により、コンフィグレーションメモリ12の未使用領域に格納された書き換えフラグを1(書き換え済みを示す値)に変更する。S235の動作を終えると、回路情報の書き換え動作は終了する。
【0098】
以上、不正防止回路34の動作について説明した。
[変形例:不正防止回路をFPGAの外部に設ける例]
ここで、第2の実施の形態に係るFPGA13の一変形例について説明する。
図17は、第2の実施の形態に係る不正防止回路の一変形例を示した第1の図である。
図18は、第2の実施の形態に係る不正防止回路の一変形例を示した第2の図である。これまで、FPGA13に不正防止回路34が設けられていることを前提に説明を進めてきた。しかし、
図17及び
図18に示すように、不正防止回路34をFPGA13とは別体として設けることも可能である。
【0099】
図17の例では、入出力部31及びコンフィグレーション回路33にアクセスできるように不正防止回路34が配線されている。この例は、コンフィグレーション回路33とコンフィグレーションメモリ12とを接続する配線に不正防止回路34の入出力を割り込ませる例である。一方、
図18の例では、FPGA13とコンフィグレーションメモリ12とを接続する配線の途中に不正防止回路34が設けられている。このような変形例についても第2の実施の形態の技術的範囲に属する。
【0100】
以上、第2の実施の形態及びその変形例について説明した。第2の実施の形態によれば、コンフィグレーションメモリ12とは別に復元用回路情報を格納する記憶手段を設けなくとも、コンフィグレーションメモリ12の使用領域に格納される回路情報の秘匿化及び復元が可能になる。さらに、コンフィグレーションが完了した後は回路情報の一部が書き換えられるため、コンフィグレーションメモリ12が窃取されても、容易に不正利用されることがなくなる。つまり、第2の実施の形態によれば、記憶手段の追加による回路規模の増大を回避しつつ、回路情報の不正利用に対する耐性を向上させることができる。