(57)【要約】【課題】プログラマブルデバイスを設定するための回路データが解析されるリスクを低減すること。【解決手段】プログラマブルデバイス２、メモリ３、及び制御部７を有する電子機器１が提供される。プログラマブルデバイス２は、回路データ６に応じた回路として動作する。メモリ３は、第１及び第２の領域４、５を含み、第１の領域４に回路データ６を記憶する。制御部７は、回路データ６がメモリ３からプログラマブルデバイス２に読み込まれたことを検出し、回路データ６の読み込みが検出された後、第１の領域４の中から回路データの一部分６ａを選択し、選択した一部分のデータ６ａを第２の領域５に退避し、第１の領域４の中の一部分のデータ６ａを他のデータ８に書き換える。【選択図】図１
2014178809.tif 000002
【特許請求の範囲】
【請求項１】
回路データに応じた回路として動作するプログラマブルデバイスと、
第１及び第２の領域を含み、前記第１の領域に前記回路データを記憶したメモリと、
前記回路データが前記メモリから前記プログラマブルデバイスに読み込まれたことを検出し、前記回路データの読み込みが検出された後、前記第１の領域の中から前記回路データの一部分を選択し、選択した一部分のデータを前記第２の領域に退避し、前記第１の領域の中の前記一部分のデータを他のデータに書き換える制御部と
を有する電子機器。
【請求項２】
前記制御部は、前記回路データが前記メモリから前記プログラマブルデバイスに再び読み込まれるときに、前記第２の領域に退避された前記一部分のデータと前記第１の領域に記憶された前記他のデータ以外の部分のデータとに基づいて前記回路データを再現する
請求項１に記載の電子機器。
【請求項３】
前記制御部は、前記第１の領域の中で前記一部分のデータが記憶されていた位置を示す位置情報を記憶する記憶部を有し、前記位置情報に基づいて前記回路データを再現する
請求項２に記載の電子機器。
【請求項４】
前記制御部は、前記第１の領域の中の前記他のデータを前記第２の領域に退避された前記一部分のデータで上書きすることで前記第１の領域に前記回路データを再現し、前記プログラマブルデバイスが前記第１の領域から前記回路データを読み込むことを可能にする
請求項２又は３に記載の電子機器。
【請求項５】
前記制御部は、前記他のデータに書き換えられる前記一部分のデータを、前記第１の領域の中からランダムに選択する
請求項１乃至４の何れか一項に記載の電子機器。
【請求項６】
第１及び第２の領域を含み前記第１の領域に回路データを記憶したメモリから、前記回路データに応じた回路として動作するプログラマブルデバイスに、前記回路データが読み込まれたことを検出する検出部と、
前記回路データの読み込みが検出された後、前記第１の領域の中から前記回路データの一部分を選択し、選択した一部分のデータを前記第２の領域に退避し、前記第１の領域の中の前記一部分のデータを他のデータに書き換える書き換え部と
を有する回路データ保護装置。
【請求項７】
回路データに応じた回路として動作するプログラマブルデバイスを備えた電子機器が実行する回路データ保護方法であって、
第１及び第２の領域を含み前記第１の領域に前記回路データを記憶したメモリから、前記プログラマブルデバイスに、前記回路データが読み込まれたことを検出し、
前記回路データの読み込みが検出された後、前記第１の領域の中から前記回路データの一部分を選択し、選択した一部分のデータを前記第２の領域に退避し、
前記第１の領域の中の前記一部分のデータを他のデータに書き換える
回路データ保護方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子機器、回路データ保護装置、及び回路データ保護方法に関する。
【背景技術】
【０００２】
最近の電子機器には、製造時までにハードウェアとしての回路構成が固定される通常の集積回路とは異なり、製造後に回路構成を変更できるプログラマブルデバイスが多く利用されている。プログラマブルデバイスは、リコンフィギュラブルデバイスやプログラマブルロジックデバイスと呼ばれることもある。プログラマブルデバイスの一例として、最近はＦＰＧＡ（Field-Programmable Gate Array）が利用されることが多い。プログラマブルデバイスは、動作時にコンフィグレーションと呼ばれる初期化を行い、自身の回路構成を設定する。コンフィグレーションにおいては、プログラマブルデバイスは、コンフィグレーションメモリに記憶された回路データを読み込み、回路データが示す回路として動作できるようにする。コンフィグレーションメモリに記憶される回路データを入れ替えることで、プログラマブルデバイスの動作を変更することができる。
【０００３】
同じ種類のプログラマブルデバイスに同じ回路データを読み込ませれば、同じ動作を行う回路を再現することができる。また、回路データを解析すると、プログラマブルデバイスに実行させる信号処理のアルゴリズムを知ることができる場合がある。そのため、電子機器の供給者から許可を得ていない者が、電子機器に搭載されたコンフィグレーションメモリから回路データを窃取し、その電子機器以外の用途に回路データを利用してしまうおそれがある。例えば、窃取された回路データを流用して、その電子機器の模倣品が製造される可能性がある。また、例えば、回路データから信号処理のアルゴリズムが解析され、解析されたアルゴリズムを利用して別の電子機器が製造される可能性がある。
【０００４】
重要情報を秘匿する技術としては、次のようなものが提案されている。例えば、マイクロプロセッサと、ＲＯＭ（Read Only Memory）などのプログラムメモリと、データ変換回路とを有するデバイスが提案されている。このプログラムメモリには、８次の原始多項式を用いて予め隠蔽化されたプログラムが記憶されている。マイクロプロセッサが隠蔽化されたプログラムを実行するときには、データ変換回路がハードウェア処理によって隠蔽化を解除する。また、例えば、プロセッサと不揮発性メモリとを繋ぐデータバスの途中に設けられるデータ処理装置が提案されている。このデータ処理装置は、プロセッサから複数の信号線を介して入力されるビット列の中で、ビット位置を所定の入れ替え方法に従って入れ替え、ビット位置が入れ替わったビット列を不揮発性メモリに保存する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−２６５４５９号公報
【特許文献２】特開２０１１−１２８６６３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
プログラマブルデバイスを設定するための回路データを保護する方法としては、上記の提案方法を採用して予め回路データを所定の秘匿化方法によって秘匿化し、秘匿化された回路データをメモリに格納しておく方法も考えられる。秘匿化された回路データは、その秘匿化方法に対応した変換回路を備えない電子機器ではそのまま利用することが難しい。
【０００７】
しかし、上記の提案方法を採用して回路データを秘匿化しても、秘匿化された回路データが解析されてしまうリスクが依然として存在する。すなわち、メモリの内容を見ると、意味のある回路データそのものではなく、所定の秘匿化方法によって全体が秘匿化されているものが格納されていることが判明しやすい。一方で、上記の提案方法では、電子機器に固定の変換回路が搭載されることになる。よって、回路データを窃取しようとする者に秘匿化方法を分析する動機を与え、回路データの解析という攻撃を受けやすくなる。
【０００８】
そして、固定の変換回路の存在を前提として予め秘匿化を行っておく上記の提案方法では、秘匿化方法が不正に解明されてしまうと、既に製造された電子機器が引き続き回路データを保護できるように柔軟に対応することは難しい。これは、同じ種類の変換回路を搭載した電子機器が数多く製造されるような場合に特に問題となる。
【０００９】
そこで、１つの側面では、本発明は、プログラマブルデバイスを設定するための回路データが解析されるリスクを低減することが可能な電子機器、回路データ保護装置、及び回路データ保護方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの側面では、回路データに応じた回路として動作するプログラマブルデバイスと、第１及び第２の領域を含み、第１の領域に回路データを記憶したメモリと、回路データがメモリからプログラマブルデバイスに読み込まれたことを検出し、回路データの読み込みが検出された後、第１の領域の中から回路データの一部分を選択し、選択した一部分のデータを第２の領域に退避し、第１の領域の中の一部分のデータを他のデータに書き換える制御部とを有する電子機器が提供される。
【００１１】
他の１つの側面では、第１及び第２の領域を含み第１の領域に回路データを記憶したメモリから、回路データに応じた回路として動作するプログラマブルデバイスに、回路データが読み込まれたことを検出する検出部と、回路データの読み込みが検出された後、第１の領域の中から回路データの一部分を選択し、選択した一部分のデータを第２の領域に退避し、第１の領域の中の一部分のデータを他のデータに書き換える書き換え部とを有する回路データ保護装置が提供される。
【００１２】
他の１つの側面では、回路データに応じた回路として動作するプログラマブルデバイスを備えた電子機器が実行する回路データ保護方法が提供される。当該回路データ保護方法は、第１及び第２の領域を含み第１の領域に回路データを記憶したメモリから、プログラマブルデバイスに、回路データが読み込まれたことを検出し、回路データの読み込みが検出された後、第１の領域の中から回路データの一部分を選択し、選択した一部分のデータを第２の領域に退避し、第１の領域の中の一部分のデータを他のデータに書き換えるものである。
【発明の効果】
【００１３】
本発明の１つの側面によれば、プログラマブルデバイスを設定するための回路データが解析されるリスクを低減することが可能になる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態に係る不正防止装置の例を示した図である。
【図２】第２の実施の形態に係るＦＰＧＡが配置された基板の例を示した図である。
【図３】第２の実施の形態に係るＦＰＧＡに含まれるロジックエレメントの例を示した図である。
【図４】第２の実施の形態に係るロジックエレメントに含まれるルックアップテーブルの例（３入力ＡＮＤ）を示した図である。
【図５】第２の実施の形態に係るロジックエレメントに含まれるルックアップテーブルの例（３入力ＯＲ）を示した図である。
【図６】第２の実施の形態に係るＦＰＧＡの例を示したブロック図である。
【図７】第２の実施の形態に係る不正防止回路の機能を示したブロック図である。
【図８】第２の実施の形態に係るコンフィグレーションメモリに格納される情報の例を示した図である。
【図９】第２の実施の形態に係るコンフィグレーション時のメモリ書き換え動作について説明した第１の図である。
【図１０】第２の実施の形態に係るコンフィグレーション時のメモリ書き換え動作について説明した第２の図である。
【図１１】第２の実施の形態に係るＦＰＧＡのコンフィグレーション時における動作の例を示した第１のシーケンス図である。
【図１２】第２の実施の形態に係るＦＰＧＡのコンフィグレーション時における動作の例を示した第２のシーケンス図である。
【図１３】第２の実施の形態に係るコンフィグレーション回路の動作を示したフロー図である。
【図１４】第２の実施の形態に係る不正防止回路の動作を示した第１のフロー図である。
【図１５】第２の実施の形態に係る不正防止回路の動作を示した第２のフロー図である。
【図１６】第２の実施の形態に係る不正防止回路の動作を示した第３のフロー図である。
【図１７】第２の実施の形態に係る不正防止回路の一変形例を示した第１の図である。
【図１８】第２の実施の形態に係る不正防止回路の一変形例を示した第２の図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照しながら実施の形態について説明する。
［第１の実施の形態］
第１の実施の形態について説明する。
【００１６】
図１は、第１の実施の形態に係る不正防止装置の例を示した図である。
図１に示すように、電子機器１は、プログラマブルデバイス２、メモリ３、及び制御部７を有する。プログラマブルデバイス２は、回路データ６に応じた回路として動作する。ＦＰＧＡは、プログラマブルデバイス２の一例である。プログラマブルデバイス２は、動作時にコンフィグレーションと呼ばれる初期化を行い、自身の回路構成を設定する。コンフィグレーション時に、プログラマブルデバイス２は、メモリ３に記憶された回路データ６を読み込み、回路データ６が示す回路として動作できるようにする。従って、メモリ３に記憶される回路データ６を入れ替えることで、プログラマブルデバイス２の動作を変更することができる。
【００１７】
メモリ３は、第１及び第２の領域４、５を含み、第１の領域４に回路データ６を記憶する。第１の領域４は、例えば、コンフィグレーション時にプログラマブルデバイス２が通常読み込むように設定された回路データ６を記憶するための記憶領域である。一方、第２の領域５は、例えば、コンフィグレーション時にプログラマブルデバイス２が参照しないか、回路データ６の格納用としては使用しない未使用領域である。
【００１８】
制御部７は、回路データ６がメモリ３からプログラマブルデバイス２に読み込まれたことを検出する。さらに、制御部７は、回路データ６の読み込みを検出した後、第１の領域４の中から回路データの一部分６ａを選択し、選択した一部分のデータ６ａを第２の領域５に退避する。そして、制御部７は、第１の領域４の中の一部分のデータ６ａを他のデータ８に書き換える。
【００１９】
他のデータ８としては、例えば、一部分のデータ６ａのビット値を反転させたデータ、ランダムに生成したデータ、或いは、予め用意された固定のデータなどが利用される。一部分のデータ６ａは第２の領域５に退避されているため、他のデータ８に書き換えられても、第１の領域４に記憶されているデータと第２の領域５に記憶されている一部分のデータ６ａとを用いて元の回路データ６を復元することが可能である。
【００２０】
また、プログラマブルデバイス２が回路データ６を読み込んだ後で、回路データ６の書き換えを実行するため、プログラマブルデバイス２は正常に動作する。その一方、回路データ６の一部分が他のデータ８に書き換えられるため、メモリ３が窃取され、他のプログラマブルデバイスに接続されても、他のプログラマブルデバイスは第１の領域４に記憶された回路データ６を読み込むため、意図した動作をしない。
【００２１】
また、回路データ６の全体を書き換えているわけではないため、一見して回路データ６に秘匿化処理が施されていることは判明しにくく、不正に使用する者が秘匿化処理に気づいて秘匿化方法の解析を行うことを回避又は遅らせることができる。その結果、メモリ３が窃取されるなどして回路データ６が不正利用されるリスクを低減することが可能になる。
【００２２】
以上、第１の実施の形態について説明した。
［第２の実施の形態］
第２の実施の形態について説明する。以下ではＦＰＧＡを例に挙げて説明するが、第２の実施の形態に係る技術は、ある記憶手段に格納された書き換え可能な回路情報に基づいて回路構成が決定される任意の集積回路に対して適用可能である。
【００２３】
（ＦＰＧＡ及びその周辺回路）
ＦＰＧＡは、例えば、携帯電話、パーソナルコンピュータ、映像機器、通信機器などの身近な電子機器の基板に搭載されている他、ワークステーションやサーバと呼ばれる高性能なコンピュータの基板にも搭載されている。基板のレイアウトや回路構成はデバイスの種類によって異なるが、以下では説明の都合上、図２のような単純化した基板の例を想定して説明を進める。図２は、第２の実施の形態に係るＦＰＧＡが配置された基板の例を示した図である。
【００２４】
図２に示すように、基板１０には、電源１１と、コンフィグレーションメモリ１２と、ＦＰＧＡ１３とが搭載されている。電源１１がオンになると、基板１０に搭載されている回路に電力が供給される。コンフィグレーションメモリ１２には、ＦＰＧＡ１３の回路構成を決める回路情報が格納されている。ＦＰＧＡ１３は、電源１１がオンになり電力が供給されると初期化動作であるコンフィグレーションを実行する。このとき、ＦＰＧＡ１３は、コンフィグレーションメモリ１２から回路情報を読み出し、読み出した回路情報に基づいて自身の回路構成を設定する。以下、ＦＰＧＡ１３の仕組みやコンフィグレーション時の動作に関する機能などについて順次説明する。
【００２５】
（ＦＰＧＡの仕組み）
ＦＰＧＡ１３の仕組みについて説明する。ＦＰＧＡ１３は、主に、汎用ロジック、Ｉ／Ｏ（Input/Output）エレメント、ＰＬＬ（Phase Locked Loop）ブロック、及びインターコネクトを含む。
【００２６】
汎用ロジックは、後述するロジックエレメントの集合である。Ｉ／Ｏエレメントは、ＦＰＧＡ１３の内部と外部とで信号をやり取りするための要素である。ＰＬＬブロックは、ＦＰＧＡ１３内の要素が動作する際に用いるクロック信号を供給する回路である。インターコネクトは、ＦＰＧＡ１３内部の要素を繋ぐ配線及び配線の接続関係を規定するパストランジスタである。
【００２７】
なお、ＦＰＧＡ１３には、マルチプライヤ、ＲＡＭ（Random Access Memory）ブロック、プロセッサコアなどの要素が含まれていてもよい。マルチプライヤは、２つの値を高速で乗算するための回路（乗算器）である。ＲＡＭブロックは、ソフトウェアやデータの格納に利用される。プロセッサコアは、例えば、ＲＡＭブロックに格納されたソフトウェアに基づいて処理を実行し、ＦＰＧＡ１３の機能を拡張する目的などに利用される。
【００２８】
ここで、図３を参照しながら、ロジックエレメントについてさらに説明する。図３は、第２の実施の形態に係るＦＰＧＡに含まれるロジックエレメントの例を示した図である。
図３に示したロジックエレメント２０は３入力１出力型の回路である。つまり、３つの信号Ａ、Ｂ、Ｃをロジックエレメント２０に対して入力すると１つの出力ＯＵＴが得られる。ロジックエレメント２０は、論理回路２１及びレジスタ２２を含む。論理回路２１は、ルックアップテーブル（ＬＵＴ：Look-Up Table）を有する。論理回路２１は、入力値（Ａ、Ｂ、Ｃ）の組み合わせと１つの出力値（ＯＵＴ）とを対応付けたルックアップテーブルを参照し、入力値（Ａ、Ｂ、Ｃ）の組み合わせに応じて出力値（ＯＵＴ）を出力する。
【００２９】
レジスタ２２は、例えば、フリップフロップ（ＦＦ:FlipFlop）回路で形成される。レジスタ２２のＤ入力には、論理回路２１の出力値（ＯＵＴ）が入力される。レジスタ２２のクロック入力端子には、ＰＬＬブロックから供給されるクロック信号（ＣＬＫ）が入力される。レジスタ２２は、クロック信号（ＣＬＫ）に応じたタイミングでＤ入力の値（ＯＵＴ）をＱ出力から出力する。なお、図３に示したロジックエレメント２０の場合、論理回路２１の出力値ＯＵＴがレジスタ２２を介さずに出力される経路も設けられている。これらの出力値ＯＵＴは、インターコネクトを通じて他のロジックエレメント２０に送られるか、Ｉ／Ｏエレメントを通じて外部に出力される。
【００３０】
上記のように、ロジックエレメント２０の入力値と出力値との関係（以下、論理）は、論理回路２１が有するルックアップテーブルの内容に依存する。一例として、３入力のＡＮＤ回路及びＯＲ回路を形成する場合の論理回路２１が有するルックアップテーブルについて図４及び図５を参照しながら説明する。
【００３１】
図４は、第２の実施の形態に係るロジックエレメントに含まれるルックアップテーブルの例（３入力ＡＮＤ）を示した図である。この例では、入力値Ａが０、入力値Ｂが０、入力値Ｃが１の場合、出力値ＯＵＴは０となる。同様に、入力値Ａ、Ｂ、Ｃのうち少なくとも１つの値が０の場合、出力値ＯＵＴは０となる。一方、入力値Ａ、Ｂ、Ｃが全て１の場合、出力値ＯＵＴは１となる。つまり、図４に例示した内容でルックアップテーブルが設定された場合、ロジックエレメント２０は、３入力のＡＮＤ回路として動作する。
【００３２】
図５は、第２の実施の形態に係るロジックエレメントに含まれるルックアップテーブルの例（３入力ＯＲ）を示した図である。この例では、入力値Ａが０、入力値Ｂが０、入力値Ｃが１の場合、出力値ＯＵＴは１となる。同様に、入力値Ａ、Ｂ、Ｃのうち少なくとも１つの値が１の場合、出力値ＯＵＴは１となる。一方、入力値Ａ、Ｂ、Ｃが全て０の場合、出力値ＯＵＴは０となる。つまり、図５に例示した内容でルックアップテーブルが設定された場合、ロジックエレメント２０は、３入力のＯＲ回路として動作する。
【００３３】
上記のように、ロジックエレメント２０は、論理回路２１が有するルックアップテーブルの内容を書き換えることで論理を変更することができる。例えば、上述したＡＮＤ回路やＯＲ回路の他、ＮＯＴ回路、ＸＯＲ回路、ＮＯＲ回路、ＮＡＮＤ回路、或いは、レジスタ回路として個々のロジックエレメント２０を動作させることができる。さらに、インターコネクトのパストランジスタを切り替えることで、ロジックエレメント２０間の接続関係が変更され、ＦＰＧＡ１３全体として様々な機能を実現することができる。このような仕組みにより、ＦＰＧＡ１３は、ルックアップテーブルの内容及びパストランジスタの設定内容に応じて所望の回路を自由に構築することができるのである。
【００３４】
ＦＰＧＡ１３に回路を構築する初期化動作はコンフィグレーションと呼ばれる。そして、コンフィグレーション時にＦＰＧＡ１３に与えられるルックアップテーブルの内容及びパストランジスタの設定内容はコンフィグレーションメモリ１２に格納された回路情報に含まれる。以上説明した内容を踏まえ、第２の実施の形態に係るＦＰＧＡ１３についてさらに説明する。
【００３５】
（第２の実施の形態に係るＦＰＧＡの例）
図６は、第２の実施の形態に係るＦＰＧＡの例を示したブロック図である。図６に示すように、第２の実施の形態に係るＦＰＧＡ１３は、入出力部３１と、ユーザ回路３２と、コンフィグレーション回路３３と、不正防止回路３４とを有する。
【００３６】
入出力部３１は、コンフィグレーションメモリ１２に格納された情報にアクセスするためのインターフェースである。例えば、入出力部３１は、コンフィグレーションメモリ１２から回路情報を読み出す際に利用される。また、入出力部３１は、コンフィグレーションメモリ１２に格納された回路情報に変更を加える際に利用される。さらに、入出力部３１は、コンフィグレーションメモリ１２に情報を書き込む際に利用される。例えば、入出力部３１は、Ｉ／Ｏエレメントなどの機能を利用して実現される。
【００３７】
ユーザ回路３２は、回路情報に基づいて論理が構築される集積回路である。ユーザ回路３２は、ロジックエレメント２０及びインターコネクトなどにより形成される。コンフィグレーション回路３３は、回路情報に基づいてコンフィグレーションを実行する回路である。電源１１がオンになると、コンフィグレーション回路３３は、入出力部３１を介してコンフィグレーションメモリ１２から回路情報を読み出し、読み出した回路情報が示すルックアップテーブルの内容及びパストランジスタの設定内容でユーザ回路３２に回路を構築する。また、コンフィグレーション回路３３は、不正防止回路３４による制御を受けて動作する場合もある。
【００３８】
不正防止回路３４は、コンフィグレーションメモリ１２に格納された回路情報が窃取されて不正に利用されることを防止するために回路情報を書き換える回路である。不正防止回路３４は、コンフィグレーションメモリ１２に格納された回路情報の一部を書き換える。但し、不正防止回路３４は、書き換え前の回路情報のうち、書き換え区間の回路情報をコンフィグレーションメモリ１２の未使用領域に退避させる。なお、未使用領域とは、コンフィグレーション時にコンフィグレーション回路３３が参照する回路情報を格納するための記憶領域（以下、使用領域）以外の記憶領域である。
【００３９】
不正防止回路３４は、コンフィグレーション時に、コンフィグレーションメモリ１２に格納された回路情報を書き換え前の内容に復元させる。例えば、不正防止回路３４は、コンフィグレーションメモリ１２の未使用領域に退避させた書き換え区間の回路情報で、使用領域に格納されている回路情報の該当部分を上書きすることにより回路情報を書き換え前の内容に復元させる。そして、不正防止回路３４は、コンフィグレーション回路３３を制御して復元後の回路情報に基づくコンフィグレーションを実行させる。
【００４０】
（不正防止回路の機能）
ここで、図７を参照しながら、不正防止回路３４についてさらに説明する。図７は、第２の実施の形態に係る不正防止回路の機能を示したブロック図である。
【００４１】
図７に示すように、不正防止回路３４は、フラグ管理部１３１と、書き換え部１３２と、記憶部１３３と、復元部１３４と、再実行指示部１３５とを有する。
（フラグ管理部１３１）
フラグ管理部１３１は、コンフィグレーションメモリ１２の未使用領域に格納された書き換えフラグを変更する。例えば、フラグ管理部１３１は、コンフィグレーションメモリ１２に格納された回路情報が書き換えられた際に書き換えフラグを１に設定する。また、フラグ管理部１３１は、コンフィグレーションメモリ１２に格納された回路情報が書き換え前の内容に復元された際に書き換えフラグを０に設定する。このような設定を行うことにより、書き換えフラグを参照することで、コンフィグレーションメモリ１２に格納された回路情報の書き換え済みか否かを容易に把握することが可能になる。
【００４２】
（書き換え部１３２）
書き換え部１３２は、コンフィグレーション回路３３によりコンフィグレーションメモリ１２に格納された回路情報が読み込まれたことを検出し、コンフィグレーションメモリ１２に格納された回路情報の一部を書き換える。回路情報の一部を書き換える際、書き換え部１３２は、書き換え区間を決定する。そして、書き換え部１３２は、コンフィグレーションメモリ１２の使用領域において書き換え区間を特定するためのアドレス情報（例えば、開始位置及び終了位置を示すアドレス情報や、開始位置及び区間長を示す情報）を記憶部１３３に格納する。その後、書き換え部１３２は、コンフィグレーションメモリ１２の使用領域に格納された回路情報のうち、書き換え区間の回路情報（以下、復元用回路情報）を未使用領域に格納する。
【００４３】
復元用回路情報を未使用領域に格納した書き換え部１３２は、使用領域に格納された回路情報の書き換え区間を書き換える。例えば、書き換え部１３２は、固定値で上書きする方法、ビット値を反転させる方法、ランダムなビット値で上書きする方法など、所定の方法で書き換え区間の回路情報を書き換える。回路情報を書き換えた書き換え部１３２は、書き換えが完了した旨をフラグ管理部１３１に通知する。
【００４４】
（記憶部１３３）
記憶部１３３には、書き換え部１３２により回路情報の書き換え区間を示すアドレス情報などが格納される。例えば、記憶部１３３には、コンフィグレーションメモリ１２の使用領域における書き換え区間の始点及び終点のアドレス情報が格納される。
【００４５】
（復元部１３４）
復元部１３４は、書き換え後の回路情報を書き換え前の回路情報に復元する。復元部１３４は、記憶部１３３から書き換え区間を示すアドレス情報を読み出し、読み出したアドレス情報に基づいて書き換え区間を認識する。書き換え区間を認識した復元部１３４は、コンフィグレーションメモリ１２の未使用領域に格納された復元用回路情報を読み出し、使用領域に格納された回路情報の書き換え区間を復元用回路情報で上書きして書き換え前の回路情報を復元する。回路情報を復元した復元部１３４は、回路情報の復元が完了した旨をフラグ管理部１３１及び再実行指示部１３５に通知する。
【００４６】
（再実行指示部１３５）
再実行指示部１３５は、復元部１３４から通知を受けた場合に、コンフィグレーション回路３３に対してコンフィグレーションを再実行するように指示する。コンフィグレーション回路３３によるコンフィグレーションの再実行が完了した後、再実行指示部１３５は、書き換え部１３２に対してコンフィグレーションの再実行が完了した旨を通知する。
【００４７】
以上、不正防止回路３４の機能について説明した。
（コンフィグレーションメモリの内容）
ここで、図８を参照しながら、コンフィグレーションメモリ１２に格納される情報についてさらに説明する。図８は、第２の実施の形態に係るコンフィグレーションメモリに格納される情報の例を示した図である。
【００４８】
図８に示すように、コンフィグレーションメモリ１２は、回路情報を格納するための使用領域と、使用領域以外の未使用領域とに分けられる。使用領域は、コンフィグレーション回路３３によりアクセスされる領域である。一方、未使用領域は、予備的に設けられる領域である。なお、ＦＰＧＡ１３にプロセッサコアなどを搭載している場合に、プロセッサコアなどがアクセス可能な領域として未使用領域が用意されることもある。
【００４９】
使用領域には、回路情報が格納される。回路情報には、ロジックエレメント２０のルックアップテーブルに格納する情報やパストランジスタの設定内容（パス情報）などが含まれる。また、使用領域には、回路情報のサイズや格納日時などが含まれるヘッダ情報や、回路情報に対する誤り検査符号（ＣＲＣ：Cyclic Redundancy Check）も格納される。使用領域のサイズは、例えば、ユーザ回路３２の回路規模に応じて設定される。例えば、ユーザ回路３２に含まれるルックアップテーブルの数やサイズ、或いは、パストランジスタの数に応じて回路情報のサイズが変わる。そのため、使用領域のサイズは、ユーザ回路３２の回路規模に応じた回路情報のサイズを考慮して決められる。
【００５０】
未使用領域には、少なくとも書き換えフラグ及び復元用回路情報が格納される。書き換えフラグは、例えば、１ビットの値（０又は１）で表現される。復元用回路情報は、使用領域の回路情報を書き換える際に未使用領域に退避させた書き換え区間の回路情報である。復元用回路情報のサイズは、回路情報を書き換える度に不正防止回路３４により設定されるか、或いは、予めユーザにより設定される。但し、復元用回路情報のサイズは、未使用領域のサイズを考慮して決められる。なお、未使用領域をＦＰＧＡ１３に搭載されたプロセッサコアなどが使用する場合、未使用領域にはプロセッサコアが利用する情報も格納される。
【００５１】
以上、コンフィグレーションメモリ１２に格納される情報について説明した。
（コンフィグレーションメモリの書き換え動作）
ここで、回路情報の書き換え動作についてさらに説明する。図９は、第２の実施の形態に係るコンフィグレーション時のメモリ書き換え動作について説明した第１の図である。
【００５２】
回路情報の書き換えを行う場合、不正防止回路３４は、所定の方法で回路情報の書き換え区間を決める。所定の方法としては、例えば、予め設定した同じ位置及び同じサイズの区間を書き換え区間とする方法が考えられる。また、書き換え区間のサイズを固定とし、書き換え区間の位置をランダムに決める方法が考えられる。さらに、書き換え区間の位置を固定とし、書き換え区間のサイズをランダムに決める方法が考えられる。そして、書き換え区間のサイズ及び位置をそれぞれランダムに決める方法が考えられる。
【００５３】
その他、あるルックアップテーブルを有するロジックエレメント２０が異なる論理で動作するように回路情報を書き換えることを意図して、あるルックアップテーブルの情報に対応する区間を書き換え区間に決める方法も考えられる。また、書き換え区間とする区間の候補を複数用意しておき、回路情報の書き換えを行う度にランダムに１つ又は複数の候補を選択して書き換え区間とする方法も考えられる。また、パストランジスタの設定内容を規定する区間だけを選択的に書き換え区間とする方法なども考えられる。
【００５４】
上記のような方法で書き換え区間を決めた不正防止回路３４は、書き換え区間のアドレス情報（例えば、開始アドレスａ1及び終了アドレスａ2など。）を保持する。なお、図９の例では連続する複数のビットを書き換え区間としているが、不連続な複数の区間を書き換え区間としてもよい。アドレス情報を保持した不正防止回路３４は、書き換え区間の回路情報を復元用回路情報として未使用領域に格納する。そして、不正防止回路３４は、図１０に示すように、所定の書き換え方法で書き換え区間の回路情報を書き換える。図１０は、第２の実施の形態に係るコンフィグレーション時のメモリ書き換え動作について説明した第２の図である。
【００５５】
所定の書き換え方法としては、図１０に示すように、値を反転させる方法が考えられる。この方法では、書き換え区間に含まれる各ビットについてビット値１が０に変換され、ビット値０が１に変換される。なお、回路情報が３値（−１、０、＋１）のシンボルで表現されている場合には、書き換え区間に含まれる各シンボルについてシンボル値−１が＋１に変換され、シンボル値０はそのまま維持され、シンボル値＋１が−１に変換される。値を反転させる方法の他にも、例えば、書き換え区間の値を全て固定値に書き換える方法やランダムに選択された値で上書きする方法などが考えられる。
【００５６】
その他にも、あるルックアップテーブルを有するロジックエレメント２０が異なる論理で動作するように回路情報を書き換える方法が考えられる。例えば、ロジックエレメント２０を３入力のＡＮＤ回路として動作させるルックアップテーブル（図４）の内容が記載された区間を、３入力のＯＲ回路として動作させるルックアップテーブル（図５）の内容に書き換える方法が考えられる。この方法によれば、書き換え後の回路情報を用いてＦＰＧＡ１３を動作させた場合に、一見正常動作しているかのようにＦＰＧＡ１３が動作する可能性が高い。そのため、回路情報が書き換えられていることが露見しにくい。
【００５７】
不正な目的でコンフィグレーションメモリ１２を抜き取り、他のＦＰＧＡに接続して不正利用する者は、回路情報が書き換えられていることに気づくと何らかの方法で回路情報の復元を試みると考えられる。しかし、回路情報が書き換えられていることに気づかれなければ、回路情報の復元が試みられず、正しい回路情報が不正利用されるリスクが低下する。また、回路情報の書き換えを検出するための作業工程を不正利用者に課すことで、不正利用の難易度を上げ、結果としてセキュリティを向上させることに寄与する。なお、ルックアップテーブルの書き換えに限らず、パストランジスタの設定内容などを変更して、正しい動作はしないが一見正常動作しているように見える動作をさせる回路情報に書き換える方法も考えられる。
【００５８】
回路情報を書き換えた不正防止回路３４は、コンフィグレーションメモリ１２の未使用領域に格納された書き換えフラグを１（書き換え後の状態を示す値）に変更する。書き換えフラグの変更を終えると、回路情報の書き換え動作は終了する。
【００５９】
以上、回路情報の書き換え動作について説明した。
（コンフィグレーション時の動作（書き換えフラグ０の場合））
ここで、コンフィグレーション時におけるＦＰＧＡ１３の動作（書き換えフラグが０の場合）について説明する。図１１は、第２の実施の形態に係るＦＰＧＡのコンフィグレーション時における動作の例を示した第１のシーケンス図である。
【００６０】
（Ｓ１０１）コンフィグレーション回路３３は、コンフィグレーションメモリ１２の使用領域に格納された回路情報を読み出す。
（Ｓ１０２）コンフィグレーション回路３３は、Ｓ１０１の動作で読み出した回路情報をユーザ回路３２に設定する。例えば、コンフィグレーション回路３３は、回路情報に含まれるルックアップテーブルの情報をユーザ回路３２のロジックエレメント２０が有するルックアップテーブルに書き込む。また、コンフィグレーション回路３３は、回路情報に含まれるパストランジスタの設定内容に従ってユーザ回路３２を形成するパストランジスタを設定する。つまり、コンフィグレーション回路３３は、ユーザ回路３２に回路情報に基づく回路を構築する。
【００６１】
（Ｓ１０３）回路の構築を終えたコンフィグレーション回路３３は、ユーザ回路３２に対する回路の構築を終えた旨を不正防止回路３４に通知する。つまり、コンフィグレーション回路３３は、コンフィグレーションの完了を不正防止回路３４に通知する。
【００６２】
（Ｓ１０４）コンフィグレーションの完了が通知された不正防止回路３４は、コンフィグレーションメモリ１２の未使用領域から書き換えフラグを読み出す。図１１の例では書き換えフラグが０であるため、不正防止回路３４は、コンフィグレーションメモリ１２の使用領域に格納された回路情報が未書き換えの状態にあると認識する。
【００６３】
（Ｓ１０５）不正防止回路３４は、回路情報の書き換え区間を決定し、コンフィグレーションメモリ１２の使用領域に格納された回路情報のうち、書き換え区間の回路情報を未使用領域に格納する。つまり、不正防止回路３４は、書き換え区間の回路情報を復元用回路情報として未使用領域にバックアップする。
【００６４】
（Ｓ１０６）復元用回路情報をバックアップした不正防止回路３４は、コンフィグレーションメモリ１２の使用領域に格納された回路情報の書き換え区間を書き換える。
（Ｓ１０７）回路情報の書き換え区間を書き換えた不正防止回路３４は、コンフィグレーションメモリ１２の未使用領域に格納された書き換えフラグを１（書き換え済みを示す値）に変更する。Ｓ１０７の動作を終えると、コンフィグレーション時におけるＦＰＧＡ１３の動作は終了する。
【００６５】
（コンフィグレーション時の動作（書き換えフラグ１の場合））
次に、コンフィグレーション時におけるＦＰＧＡ１３の動作（書き換えフラグが１の場合）について説明する。図１２は、第２の実施の形態に係るＦＰＧＡのコンフィグレーション時における動作の例を示した第２のシーケンス図である。
【００６６】
（Ｓ１１１）コンフィグレーション回路３３は、コンフィグレーションメモリ１２の使用領域に格納された回路情報を読み出す。
（Ｓ１１２）コンフィグレーション回路３３は、Ｓ１１１の動作で読み出した回路情報をユーザ回路３２に設定する。例えば、コンフィグレーション回路３３は、回路情報に含まれるルックアップテーブルの情報をユーザ回路３２のロジックエレメント２０が有するルックアップテーブルに書き込む。また、コンフィグレーション回路３３は、回路情報に含まれるパストランジスタの設定内容に従ってユーザ回路３２を形成するパストランジスタを設定する。つまり、コンフィグレーション回路３３は、ユーザ回路３２に回路情報に基づく回路を構築する。
【００６７】
（Ｓ１１３）回路の構築を終えたコンフィグレーション回路３３は、ユーザ回路３２に対する回路の構築を終えた旨を不正防止回路３４に通知する。つまり、コンフィグレーション回路３３は、コンフィグレーションの完了を不正防止回路３４に通知する。
【００６８】
（Ｓ１１４）コンフィグレーションの完了が通知された不正防止回路３４は、コンフィグレーションメモリ１２の未使用領域から書き換えフラグを読み出す。図１２の例では書き換えフラグが１であるため、不正防止回路３４は、コンフィグレーションメモリ１２の使用領域に格納された回路情報が書き換え済みの状態にあると認識する。
【００６９】
（Ｓ１１５）不正防止回路３４は、コンフィグレーションメモリ１２の未使用領域に格納された復元用回路情報を読み出す。そして、不正防止回路３４は、コンフィグレーションメモリ１２の使用領域に格納された回路情報の書き換え区間を復元用回路情報で上書きして書き換え前の回路情報を復元する。
【００７０】
（Ｓ１１６）回路情報を復元した不正防止回路３４は、コンフィグレーションメモリ１２の未使用領域に格納された書き換えフラグを０（未書き換えを示す値）に変更する。
（Ｓ１１７）書き換えフラグを０に変更した不正防止回路３４は、コンフィグレーション回路３３に対してコンフィグレーションを再実行するように指示する。つまり、不正防止回路３４は、復元した回路情報に基づいて再度コンフィグレーションを実行するようにコンフィグレーション回路３３を制御する。
【００７１】
（Ｓ１１８）コンフィグレーション回路３３は、コンフィグレーションメモリ１２の使用領域に格納された回路情報を読み出す。Ｓ１１８の動作で読み出される回路情報は、不正防止回路３４により書き換え前の状態に復元された回路情報である。
【００７２】
（Ｓ１１９）コンフィグレーション回路３３は、Ｓ１１８の動作で読み出した回路情報をユーザ回路３２に設定する。例えば、コンフィグレーション回路３３は、回路情報に含まれるルックアップテーブルの情報をユーザ回路３２のロジックエレメント２０が有するルックアップテーブルに書き込む。また、コンフィグレーション回路３３は、回路情報に含まれるパストランジスタの設定内容に従ってユーザ回路３２を形成するパストランジスタを設定する。つまり、コンフィグレーション回路３３は、Ｓ１１５の動作で復元された回路情報に基づいてユーザ回路３２に再び回路を構築する。
【００７３】
（Ｓ１２０）回路の再構築を終えたコンフィグレーション回路３３は、ユーザ回路３２に対する回路の再構築を終えた旨を不正防止回路３４に通知する。つまり、コンフィグレーション回路３３は、コンフィグレーションの完了を不正防止回路３４に通知する。
【００７４】
（Ｓ１２１）コンフィグレーションの完了が通知された不正防止回路３４は、コンフィグレーションメモリ１２の未使用領域から書き換えフラグを読み出す。図１２の例では書き換えフラグが０であるため、不正防止回路３４は、コンフィグレーションメモリ１２の使用領域に格納された回路情報が未書き換えの状態にあると認識する。
【００７５】
（Ｓ１２２）不正防止回路３４は、回路情報の書き換え区間を決定し、コンフィグレーションメモリ１２の使用領域に格納された回路情報のうち、書き換え区間の回路情報を未使用領域に格納する。つまり、不正防止回路３４は、書き換え区間の回路情報を復元用回路情報として未使用領域にバックアップする。
【００７６】
（Ｓ１２３）復元用回路情報をバックアップした不正防止回路３４は、コンフィグレーションメモリ１２の使用領域に格納された回路情報の書き換え区間を書き換える。なお、回路情報の書き換え区間は、Ｓ１１５の処理で復元用回路情報を上書きした区間と異なる区間であってもよい。例えば、書き換え区間は、書き換えの度にランダムに選択されてもよい。
【００７７】
（Ｓ１２４）回路情報の書き換え区間を書き換えた不正防止回路３４は、コンフィグレーションメモリ１２の未使用領域に格納された書き換えフラグを１（書き換え済みを示す値）に変更する。Ｓ１２３の動作を終えると、コンフィグレーション時におけるＦＰＧＡ１３の動作は終了する。
【００７８】
（コンフィグレーション回路３３の動作について）
次に、コンフィグレーション回路３３の動作について、フロー図を参照しながら説明する。図１３は、第２の実施の形態に係るコンフィグレーション回路の動作を示したフロー図である。
【００７９】
（Ｓ２０１）コンフィグレーション回路３３は、電源１１がオンになったか否かを監視し、電源１１がオンになったことを検知した場合に、Ｓ２０２の動作に移る。
（Ｓ２０２）コンフィグレーション回路３３は、コンフィグレーションメモリ１２の使用領域に格納された回路情報を読み出す。
【００８０】
（Ｓ２０３）コンフィグレーション回路３３は、Ｓ２０２の動作で読み出した回路情報をユーザ回路３２に設定して回路情報に基づく回路を構築する。例えば、コンフィグレーション回路３３は、回路情報に含まれるルックアップテーブルの情報をユーザ回路３２のロジックエレメント２０が有するルックアップテーブルに書き込む。また、コンフィグレーション回路３３は、回路情報に含まれるパストランジスタの設定内容に従ってユーザ回路３２を形成するパストランジスタを設定する。
【００８１】
（Ｓ２０４）コンフィグレーション回路３３は、コンフィグレーションを再実行する旨の指示を不正防止回路３４から受信したか否かを判定する。不正防止回路３４から指示を受信した場合、コンフィグレーション回路３３は、Ｓ２０２の動作に移る。一方、不正防止回路３４から指示を受信していない場合、コンフィグレーション回路３３は、Ｓ２０５の動作に移る。
【００８２】
（Ｓ２０５）コンフィグレーション回路３３は、電源１１がオフになったか否かを監視する。電源１１がオフになったことを検知した場合、コンフィグレーション回路３３は、動作を終了する。一方、電源１１がオフの状態にない場合、コンフィグレーション回路３３は、再びＳ２０４の動作に移る。
【００８３】
以上、コンフィグレーション回路３３の動作について説明した。
（不正防止回路３４の動作について）
次に、不正防止回路３４の動作について、フロー図を参照しながら説明する。図１４は、第２の実施の形態に係る不正防止回路の動作を示した第１のフロー図である。
【００８４】
（Ｓ２１１）不正防止回路３４は、電源１１がオンになったか否かを監視し、電源１１がオンになったことを検知した場合に、Ｓ２１２の動作に移る。
（Ｓ２１２）不正防止回路３４は、コンフィグレーションが完了したか否かを判定する。電源１１がオンになった場合にコンフィグレーション回路３３により実行されるコンフィグレーションが完了すると、不正防止回路３４は、コンフィグレーションが完了した旨の通知をコンフィグレーション回路３３から受信する。この通知を受信した場合、不正防止回路３４は、Ｓ２１３の動作に移る。一方、この通知を受信していない場合、不正防止回路３４は、再びＳ２１２の動作に移る。
【００８５】
（Ｓ２１３）不正防止回路３４は、フラグ管理部１３１により、コンフィグレーションメモリ１２の未使用領域に格納された書き換えフラグを読み出す。
（Ｓ２１４）不正防止回路３４は、フラグ管理部１３１により、Ｓ２１３の動作で読み出した書き換えフラグが１（書き換え済みを示す値）であるか否かを判定する。書き換えフラグが１である場合、不正防止回路３４は、Ｓ２１５の動作に移る。一方、書き換えフラグが０（未書き換えを示す値）である場合、不正防止回路３４は、Ｓ２１７の動作に移る。
【００８６】
（Ｓ２１５）不正防止回路３４は、復元部１３４により、コンフィグレーションメモリ１２の未使用領域に格納された復元用回路情報を用いて、使用領域に格納された回路情報を書き換え前の内容に復元する。なお、Ｓ２１５の動作については、後段において図１５を参照しながらさらに説明する。
【００８７】
（Ｓ２１６）不正防止回路３４は、再実行指示部１３５により、コンフィグレーション回路３３に対して再度コンフィグレーションを実行するように指示する。
（Ｓ２１７）不正防止回路３４は、書き換え部１３２により、コンフィグレーションメモリ１２の使用領域に格納された回路情報の一部（書き換え区間）を書き換える。なお、Ｓ２１７の動作については、後段において図１６を参照しながらさらに説明する。Ｓ２１７の動作を終えると、コンフィグレーション時における不正防止回路３４の動作は終了する。
【００８８】
（回路情報の復元動作（Ｓ２１５）について）
ここで、回路情報の復元時における不正防止回路３４の動作についてさらに説明する。図１５は、第２の実施の形態に係る不正防止回路の動作を示した第２のフロー図である。
【００８９】
（Ｓ２２１）回路情報の復元動作を開始した不正防止回路３４は、復元部１３４により、コンフィグレーションメモリ１２の未使用領域に格納された復元用回路情報を読み出す。
【００９０】
（Ｓ２２２）復元用回路情報を読み出した不正防止回路３４は、復元部１３４により、コンフィグレーションメモリ１２の使用領域に格納されている回路情報の書き換え区間に復元用回路情報を上書きして書き換え前の回路情報を復元する。このとき、復元部１３４は、記憶部１３３に記憶されている回路情報の書き換え区間を示すアドレス情報を参照する。
【００９１】
（Ｓ２２３）回路情報を復元した不正防止回路３４は、フラグ管理部１３１により、コンフィグレーションメモリ１２の未使用領域に格納された書き換えフラグを０（書き換え済みを示す値）に変更する。Ｓ２２３の動作を終えると、回路情報の復元動作は終了する。
【００９２】
（回路情報の書き換え動作（Ｓ２１７）について）
ここで、回路情報の書き換え時における不正防止回路３４の動作についてさらに説明する。図１６は、第２の実施の形態に係る不正防止回路の動作を示した第３のフロー図である。
【００９３】
（Ｓ２３１）回路情報の書き換え動作を開始した不正防止回路３４は、書き換え部１３２により、回路情報の書き換え区間を決定する。つまり、書き換え部１３２は、書き換え区間の位置及びサイズ（始点及び終点）を決定する。書き換え区間の決定方法としては、例えば、書き換え区間の位置及びサイズを予め設定された固定値に決める方法や、書き換え区間の位置及びサイズの一方又は両方をランダムに決める方法などが考えられる。その他にも、あるルックアップテーブルの情報が記載された区間を書き換え区間とする方法や、パストランジスタの設定内容を記載した区間を選択して書き換え区間とする方法などが考えられる。
【００９４】
（Ｓ２３２）書き換え区間を決定した不正防止回路３４は、書き換え部１３２により、コンフィグレーションメモリ１２における書き換え区間の位置を示すアドレス情報を記憶部１３３に保存する。
【００９５】
（Ｓ２３３）不正防止回路３４は、書き換え部１３２により、コンフィグレーションメモリ１２の使用領域に格納された書き換え前の回路情報のうち、書き換え区間の回路情報を復元用回路情報として未使用領域に格納する。つまり、書き換え部１３２は、書き換え区間の回路情報を未使用領域に退避させる。
【００９６】
（Ｓ２３４）不正防止回路３４は、書き換え部１３２により、コンフィグレーションメモリ１２の使用領域に格納された回路情報のうち、書き換え区間の回路情報を書き換える。書き換え方法としては、例えば、書き換え区間のビット値又はシンボル値を反転させる方法や、予め設定した固定値で書き換え区間の値を上書きする方法が考えられる。その他にも、書き換え区間の回路情報がルックアップテーブルの内容を示す場合、そのルックアップテーブルで実現される論理とは異なる論理となるように書き換え区間の回路情報を書き換える方法などが考えられる。
【００９７】
（Ｓ２３５）回路情報を書き換えた不正防止回路３４は、フラグ管理部１３１により、コンフィグレーションメモリ１２の未使用領域に格納された書き換えフラグを１（書き換え済みを示す値）に変更する。Ｓ２３５の動作を終えると、回路情報の書き換え動作は終了する。
【００９８】
以上、不正防止回路３４の動作について説明した。
［変形例：不正防止回路をＦＰＧＡの外部に設ける例］
ここで、第２の実施の形態に係るＦＰＧＡ１３の一変形例について説明する。図１７は、第２の実施の形態に係る不正防止回路の一変形例を示した第１の図である。図１８は、第２の実施の形態に係る不正防止回路の一変形例を示した第２の図である。これまで、ＦＰＧＡ１３に不正防止回路３４が設けられていることを前提に説明を進めてきた。しかし、図１７及び図１８に示すように、不正防止回路３４をＦＰＧＡ１３とは別体として設けることも可能である。
【００９９】
図１７の例では、入出力部３１及びコンフィグレーション回路３３にアクセスできるように不正防止回路３４が配線されている。この例は、コンフィグレーション回路３３とコンフィグレーションメモリ１２とを接続する配線に不正防止回路３４の入出力を割り込ませる例である。一方、図１８の例では、ＦＰＧＡ１３とコンフィグレーションメモリ１２とを接続する配線の途中に不正防止回路３４が設けられている。このような変形例についても第２の実施の形態の技術的範囲に属する。
【０１００】
以上、第２の実施の形態及びその変形例について説明した。第２の実施の形態によれば、コンフィグレーションメモリ１２とは別に復元用回路情報を格納する記憶手段を設けなくとも、コンフィグレーションメモリ１２の使用領域に格納される回路情報の秘匿化及び復元が可能になる。さらに、コンフィグレーションが完了した後は回路情報の一部が書き換えられるため、コンフィグレーションメモリ１２が窃取されても、容易に不正利用されることがなくなる。つまり、第２の実施の形態によれば、記憶手段の追加による回路規模の増大を回避しつつ、回路情報の不正利用に対する耐性を向上させることができる。
【符号の説明】
【０１０１】
１  電子機器
２  プログラマブルデバイス
３  メモリ
４  第１の領域
５  第２の領域
６  回路データ
６ａ  一部分のデータ
７  制御部
８  他のデータ
１０  基板
１１  電源
１２  コンフィグレーションメモリ
１３  ＦＰＧＡ
２０  ロジックエレメント
２１  論理回路
２２  レジスタ
３１  入出力部
３２  ユーザ回路
３３  コンフィグレーション回路
３４  不正防止回路
１３１  フラグ管理部
１３２  書き換え部
１３３  記憶部
１３４  復元部
１３５  再実行指示部
【図１】
2014178809.tif 000003
【図２】
2014178809.tif 000004
【図３】
2014178809.tif 000005
【図４】
2014178809.tif 000006
【図５】
2014178809.tif 000007
【図６】
2014178809.tif 000008
【図７】
2014178809.tif 000009
【図８】
2014178809.tif 000010
【図９】
2014178809.tif 000011
【図１０】
2014178809.tif 000012
【図１１】
2014178809.tif 000013
【図１２】
2014178809.tif 000014
【図１３】
2014178809.tif 000015
【図１４】
2014178809.tif 000016
【図１５】
2014178809.tif 000017
【図１６】
2014178809.tif 000018
【図１７】
2014178809.tif 000019
【図１８】
2014178809.tif 000020