(57)【特許請求の範囲】
【請求項１】
回路情報を読み込んで論理回路を内部に構築する揮発性のプログラム可能な汎用論理回路部と不揮発性の補助回路部とから構成される汎用論理回路であって、
前記補助回路部は、同期クロックを発生する同期クロック発生手段と、この同期クロックに基づいてタイミングを決定して動作し第１の乱数を発生する第１の乱数発生手段とを備え、
前記プログラム可能な汎用論理回路部は、前記同期クロックに基づいてタイミングを決定して動作し前記第１の乱数発生手段と等価なアルゴリズムをもって第２の乱数を発生する第２の乱数発生手段と、第１および第２の乱数が一致するか判定し一致しない場合に異常検出を出力する比較手段と、この異常検出を受けて動作し前記プログラム可能な汎用論理回路部の動作を強制的に停止する停止手段とを備え、
前記同期クロック発生手段は、前記補助回路部の動作クロックの周波数とは異なる周波数を規定する要素を内部に有し、前記同期クロックを前記動作クロックの周波数より低い周波数とするものである
ことを特徴とする汎用論理回路。
【請求項２】
前記同期クロック発生手段は、一定の遅延時間をもって信号を遅延する遅延要素と、この遅延要素の出力信号を反転して遅延要素の入力信号として伝達するループとを有するものであることを特徴とする請求項１記載の汎用論理回路。
【請求項３】
前記同期クロック発生手段は、前記遅延要素およびループを複数段重畳して構成されるものであることを特徴とする請求項２記載の汎用論理回路。
【請求項４】
前記同期クロックの周波数を検出しこの周波数が所定範囲から外れたときに異常検出を前記停止手段に出力する周波数検出手段を前記プログラム可能な汎用論理回路部に備えたことを特徴とする請求項１から３のいずれか１項に記載の汎用論理回路。
【請求項５】
少なくとも初期状態において動作し前記第１および第２の乱数発生手段の初期化情報を生成して第１および第２の乱数発生手段に出力する初期化情報生成手段を前記プログラム可能な汎用論理回路部および補助回路部のいずれかに備えたことを特徴とする請求項１から４のいずれか１項に記載の汎用論理回路。
【請求項６】
前記初期化情報生成手段は、初期状態における動作後も定期的に動作するものであることを特徴とする請求項５記載の汎用論理回路。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）やＣＰＬＤ（Ｃｏｍｐｌｅｘ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）などのプログラム可能な汎用論理回路に関し、特に揮発性の汎用論理回路に読み込む回路情報を保護する技術に関する。
【背景技術】
【０００２】
一般にプログラム可能な汎用論理回路としては回路規模が大きい場合、もっぱら揮発性のＦＰＧＡやＣＰＬＤ等が用いられる。揮発性のＦＰＧＡ等は電源投入時に外部から回路情報をロードして使うので、回路情報が複製されて盗用されるおそれを伴う。このため回路情報を保護する技術が従来から種々提供されている。
【０００３】
この種の従来の技術として、たとえば特許文献１に記載される技術がある。同文献中の図１の符号を引用してこの技術を説明すると、ＲＯＭ７は、復号回路構成情報格納部９と回路情報暗号化データ格納部１０を備えている。復号回路構成情報格納部９には、暗号化データを復号する復号回路を構築するための復号回路構成データが格納されている。回路情報暗号化データ格納部１０には、ＦＰＧＡ８の回路情報を暗号化した回路情報暗号化データが格納されている。一方、ＦＰＧＡ８は、制御部１１や鍵データ格納部１２、回路情報記憶用ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１３を備えている。制御部１１は、外部に対するデータ入出力動作や回路内部の各部の制御を行うものである。鍵データ格納部１２には、暗号化データの復号に必要な鍵データが格納されている。回路情報記憶用ＳＲＡＭ１３は、復号した回路情報を格納するメモリ領域を提供する。
【０００４】
電源起動時に制御部１１は、ＲＯＭ７からまず復号回路構成データを読み出し、このデータを用いてＦＰＧＡ内部に復号回路を構築する。さらに制御部１１は、鍵データを復号回路に入力すると共に、ＲＯＭ７から回路情報暗号化データを読み出し、読み出したデータを復号回路により復号して回路情報記憶用ＳＲＡＭ１３に格納する。このようにして取得した回路情報に従って制御部１１は、ＦＰＧＡ７上に論理回路を構築（プログラミング）し、しかる後、所定の大規模論理回路として機能する。
【０００５】
またこの種の従来の技術として、特許文献２に記載されるものもある。同文献中の図１の符号を引用してこの技術を説明すると、ＦＰＧＡ１２は所定のプロトコルでＣＰＬＤ１４との間でデータ送受信を継続的に行って正当性をチェックしながら動作を行うものとしている。
【０００６】
すなわちＦＰＧＡ１２は、呼び掛けシーケンスジェネレータ１６や応答シーケンス比較素子１８、応答シーケンスジェネレータ２０、解読素子２２を備えている。ＣＰＬＤ１４は、応答シーケンスジェネレータ２４やランダムビットジェネレータ２６、暗号化素子２８を備えている。
【０００７】
ランダムビットジェネレータ２６は、低周波クロックを用いて高周波発振器の出力をサンプリングして動作し、不規則なビットを発生蓄積して応答シーケンスジェネレータ２４の初期状態ｘを生成する。この初期状態ｘは応答シーケンスジェネレータ２４に与えられる他、暗号化素子２８にも出力される。暗号化素子２８は初期状態ｘを暗号化したうえでＦＰＧＡ１２に出力する。ＦＰＧＡ１２においてこの初期状態ｘは解読素子２２により復号され、応答シーケンスジェネレータ２０に与えられる。
【０００８】
一方、呼び掛けシーケンスジェネレータ１６は所定のタイミングで応答シーケンスを発生し、この呼び掛けシーケンスに応答して応答シーケンスジェネレータ２０，２４がそれぞれ応答シーケンスを発生出力する。これらの応答シーケンスを応答シーケンス比較素子１８が比較し、両者の一致を確認してＦＰＧＡ１２の動作を許容する。もし両者の不一致が見つかればＦＰＧＡ１２はＣＰＬＤ１４に動作終了を指示したうえでＦＰＧＡ１２自体も動作を終了する。
【特許文献１】特開２００１−３２５１５３号公報
【特許文献２】特開２００３−８４８５３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら特許文献１に記載される技術では、電源起動時にＦＰＧＡ内部に回路情報を読み込む段階において、回路情報を暗号化したうえでＲＯＭから読み出すこととして回路情報の保護を図るものであるが、ＦＰＧＡの動作中における不正なアクセスを排除することはできないという問題がある。さらに、暗号化した回路情報そのものをコピーすれば、回路が複製されてしまうおそれがある。
【００１０】
一方、特許文献２に記載される技術では、ＦＰＧＡとＣＰＬＤのそれぞれで生成した応答シーケンスを突き合わせてチェックを行うことによりＦＰＧＡの動作時におけるチェックを継続的に行うことが可能であるが、ランダムビットジェネレータが発生するランダムビットの生成パターンが把握されてしまうと、応答シーケンス生成の基となる応答シーケンスジェネレータの初期状態が把握されてしまう。このため、応答シーケンスの発生出力を模倣して応答シーケンスのチェックをくぐり抜けることにより、ＦＰＧＡに不正にアクセスすることを許してしまうおそれがある。
【００１１】
この発明は、かかる事情に鑑み、プログラム可能な汎用論理回路に対するアクセスの正当性を継続的に監視する技術において、正当なアクセスを模倣する困難性を高めてセキュリティを向上させた技術を提供することを課題とする。
【課題を解決するための手段】
【００１２】
上記の課題を解決するために、本発明は、回路情報を読み込んで論理回路を内部に構築する揮発性のプログラム可能な汎用論理回路部と不揮発性の補助回路部とから構成される汎用論理回路であって、次の要件を備えたものを提供する。
前記補助回路部は、同期クロックを発生する同期クロック発生手段と、この同期クロックに基づいてタイミングを決定して動作し第１の乱数を発生する第１の乱数発生手段とを備える。
前記プログラム可能な汎用論理回路部は、前記同期クロックに基づいてタイミングを決定して動作し前記第１の乱数発生手段と等価なアルゴリズムをもって第２の乱数を発生する第２の乱数発生手段と、第１および第２の乱数が一致するか判定し一致しない場合に異常検出を出力する比較手段と、この異常検出を受けて動作し前記プログラム可能な汎用論理回路部の動作を強制的に停止する停止手段とを備える。
【００１３】
また本発明は、上記の汎用論理回路において、前記同期クロック発生手段として、前記補助回路部の動作クロックの周波数とは異なる周波数を規定する要素を内部に有し、前記同期クロックを前記動作クロックの周波数より低い周波数とするものを用いたものを提供する。
【００１４】
また本発明は、上記の汎用論理回路において、前記同期クロック発生手段として、一定の遅延時間をもって信号を遅延する遅延要素と、この遅延要素の出力信号を反転して遅延要素の入力信号として伝達するループとを有するものを用いたものを提供する。
【００１５】
また本発明は、上記の汎用論理回路において、前記同期クロック発生手段として、前記遅延要素およびループを複数段重畳して構成されるものを用いたものを提供する。
【００１６】
また本発明は、上記の汎用論理回路において、前記同期クロックの周波数を検出しこの周波数が所定範囲から外れたときに異常検出を前記停止手段に出力する周波数検出手段を前記プログラム可能な汎用論理回路部に備えたものを提供する。
【００１７】
また本発明は、上記の汎用論理回路において、少なくとも初期状態において動作し前記第１および第２の乱数発生手段の初期化情報を生成して第１および第２の乱数発生手段に出力する初期化情報生成手段を前記プログラム可能な汎用論理回路部および補助回路部のいずれかに備えたものを提供する。
【００１８】
また本発明は、上記の汎用論理回路において、前記初期化情報生成手段として、初期状態における動作後も定期的に動作するものを用いたものを提供する。
【発明の効果】
【００１９】
この発明によれば、プログラム可能な汎用論理回路部側および補助回路部側にて等価なアルゴリズムをもって同期して乱数を発生し、この乱数が一致する場合に限り汎用論理回路の動作の継続を許容する。このような構成とすることにより、周期の長い乱数を発生する既存の手法を採用できるし、同期クロックを低速にすることも可能であるから、乱数が一回りするのに要する時間を十分に確保できる。このため、乱数の吸い上げ等に対して、多大な時間がかかるという困難性をもって対処できる利点がある。
【００２０】
また同期クロックを発生するにあたり、補助回路部の動作クロックの周波数とは異なる周波数を規定する要素を用いることにより、補助回路部がクロックアップされても乱数の発生が高速化することがなく、上記の困難性を維持できる利点がある。さらに、乱数発生回路に用いるクロックを低速にすることで、乱数生成アルゴリズムの解析とコピーを困難にすることができる利点がある
【００２１】
またプログラム可能な汎用論理回路部側において周波数検出手段を備え、同期クロックの周波数の異常を検出すると汎用論理回路の動作を強制停止することで、汎用論理回路側の乱数発生タイミングをクロックアップする企てにも対処できる利点がある。
【００２２】
またプログラム可能な汎用論理回路部側および補助回路部側の乱数発生手段を定期的に初期化することにより、それまで乱数が吸い上げられていたとしても、かかる乱数を無効化することができる利点がある。
【発明を実施するための最良の形態】
【００２３】
以下、図面を用いてこの発明の実施形態を説明する。
図１は、この発明の実施形態に係るＦＰＧＡの要部概略を示すブロック図である。同図に示すようにこの回路は、揮発性のＦＰＧＡ１の外部回路としてＦＰＧＡプログラム（Ｃｏｎｆｉｇｕｒａｔｉｏｎ）回路２とセキュリティ回路３を備えている。クロックモジュール４は、高速クロックを発生してセキュリティ回路３に出力するものである。
【００２４】
ＦＰＧＡ１はＳＲＡＭ等で構成される揮発性の回路であり、電源投入時、ＦＰＧＡプログラム回路２から回路情報を読み込んで、内部に任意の論理回路を構築するものである。セキュリティ回路３は不揮発性のＦＰＧＡやＬＳＩ等で構成される回路である。不揮発性のＦＰＧＡとしてはＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）タイプやアンチヒューズタイプ、フラッシュＲＯＭ等を採用できる。なお、この実施形態において「ＦＰＧＡ」はＣＰＬＤを含むプログラム可能な汎用論理回路一般を意味するものとして使用する。
【００２５】
ＦＰＧＡ１やセキュリティ回路３には、この実施形態に係るセキュリティ機能を実現するための回路が構築されている。セキュリティ回路３には、クロック分周器３１や乱数発生回路３２が構築されている。クロック分周器３１は、高速クロックを分周して低速クロックを発生するものであり、具体例を後で詳細に説明するが、高速クロックの周波数が高くなっても低速クロックの周波数は一定の範囲となるように構成されている。
【００２６】
乱数発生回路３２は、上記の低速クロックにより動作し、所定の手法により周期の長い乱数を発生させる回路である。ここではＭ系列による乱数を発生する手法を採用した例を示し、乱数発生回路３２内にはＭ系列の乱数発生係数を格納するレジスタ３３を有するものとする。この係数は、後述するようにＦＰＧＡ１から与えられる。クロック分周器３１が発生した低速クロックと、乱数発生回路３２が発生した乱数はＦＰＧＡ１に出力される。
【００２７】
ＦＰＧＡ１には、周波数検出回路１１や乱数発生回路１２、比較器１３、停止回路１４が構築されている。周波数検出回路１１は、低速クロックの周波数を検出して所定の周波数範囲を外れた場合、特に周波数が正常範囲以上に高くなった場合に異常検出を出力するものである。乱数発生回路１２は、乱数発生回路３２と等価なアルゴリズムをもって乱数を発生する回路であり、さらに乱数発生機能を利用してＭ系列の乱数発生係数を発生する機能が付加されている。発生した乱数発生係数は、乱数発生回路１２自体のレジスタ１５に格納される他、セキュリティ回路３に送信され、乱数発生回路３２のレジスタ３３にも格納される。
【００２８】
比較器１３は、乱数発生回路１２，３２がそれぞれ発生する乱数を突き合わせて一致・不一致を判定し、不一致の場合、異常検出を出力するものである。停止回路１４は、周波数検出回路１１または比較器１３から異常検出を受けて動作し、ＦＰＧＡ１とセキュリティ回路３の動作を強制的に停止するものである。
【００２９】
次に、この回路の動作を説明する。図２は、図１の回路の動作の概略を示すフローチャートである。図１，２を用いて説明すると、電源投入時、ＦＰＧＡ１やセキュリティ回路３その他の回路が立ち上がり（Ｓ１１，Ｓ３１）、ＦＰＧＡ１には回路情報が読み込まれてコンフィグレーション（プログラミング）が行われる（Ｓ１２）。コンフィグレーションが終了して回路情報に基づく所定の回路構成が構築されると、通常のＦＰＧＡと同様にその回路構成による演算動作を開始する。
【００３０】
このときこの実施形態に係るＦＰＧＡ１は、上記の演算動作の他、ＦＰＧＡ１へのアクセスの正当性の判定動作も実行し、アクセスの正当性が認められなければ演算動作を停止する。セキュリティ回路３は、前述のように不揮発性のＦＰＧＡ等で構成されているので回路情報のコピーは困難である。ＦＰＧＡ１の回路情報については、このようにしてＦＰＧＡ１への不正なアクセスを阻止することによりコピーを困難とする。
【００３１】
アクセスの正当性は第１に、ＦＰＧＡ１側の乱数とセキュリティ回路３側の乱数が一致することで判定する。すなわち、初期状態において乱数発生回路１２はＭ系列の乱数発生係数を発生し、自己のレジスタ１５に格納（初期化）すると共にセキュリティ回路３に送信する（Ｓ１３）。セキュリティ回路３において、受信した乱数発生係数は、乱数発生回路３２のレジスタ３３に格納（初期化）される。この後、乱数発生回路１２，３２は低速クロックに基づいて同期して乱数発生動作を開始し、同一の乱数発生係数を用いて乱数を発生する（Ｓ１４，Ｓ３３）。なお、乱数を発生する演算自体は高速クロックに基づいて動作する。高速クロックは、セキュリティ回路３の最高動作周波数を上回らない範囲で、なるべく高速な周波数に設定されている。
【００３２】
乱数発生回路３２が発生した乱数は、ＦＰＧＡ１に送信される。この後、ＦＰＧＡ１において比較器１３は、乱数発生回路１２が発生した乱数と、セキュリティ回路３から受信した乱数とを比較して一致していることを確認する（Ｓ１５）。もしセキュリティ回路３から受信する乱数がＦＰＧＡ１の内部で発生した乱数と一致しない場合は、異常検出として停止回路１４が起動し、ＦＰＧＡ１とセキュリティ回路３の動作が強制停止することになる（Ｓ１６）。
【００３３】
上記の乱数発生動作は、クロック分周器３１により分周された低速クロックに基づいて極めて低速な周波数をもって実行される。Ｍ系列の乱数発生の１周期における乱数の個数を十分に大きく設定すると共に、乱数発生動作の起動周期を十分長く設定することにより、乱数が１周りするのに要する期間がたとえば数ヶ月から１年といったスパンをとるように設定する形態をとることもできる。このことにより、仮にセキュリティ回路３が出力する乱数を吸い上げたとしても、１周期分の乱数を吸い上げるのに多大な時間を要する困難性が生じる。
【００３４】
また乱数発生係数の初期化処理を定期的に行って乱数発生係数を更新する形態をとることにより、吸い上げた乱数を無効化することもできる。この係数初期化処理の実行周期は、上記の乱数が１回りする回路動作時間を考慮して適宜設定すればよい。
【００３５】
また仮にセキュリティ回路３に入力される高速クロックの周波数をクロックアップして乱数の発生周期を短くしようと試みようとしても、高速クロック自体がセキュリティ回路３の最高動作周波数に近いものであるから、セキュリティ回路３の動作が高速化するマージンはあまりないし、さらにクロック分周器３１において、動作周波数の上限を設定しておけば、出力する低速クロックは高速クロックをクロックアップしても高速にはならないので、乱数発生周期の高速化の試みは失敗に終わる。また、ＦＰＧＡ１に入力する低速クロックをクロックアップしても、周波数検出回路１１がこれを検出して異常検出を出力し、この異常検出を受けて停止回路１４が起動してＦＰＧＡ１やセキュリティ回路３の動作が停止する。
【００３６】
ここで、クロック分周器の具体例について説明する。図３は、クロック分周器の基本構成を示すブロック図である。同図に示すように、このクロック分周器３１は、フリップフロップ回路５と遅延要素６と加算要素７から構成される。フリップフロップ回路５は、ｎ個のフリップフロップを構成する回路である。遅延要素６は、フリップフロップ出力Ｑ１〜Ｑｎをそれぞれ遅延するものであり、その遅延時間は高速クロックに依存せずに一定になるように設定されている。加算要素７は、遅延要素６の出力Ａ１〜Ａｎを入力とし、１を加算してＳ１〜Ｓｎとして出力するものであり、ｎビットのカウンタを構成する。この構成により２のｎ乗の分周率による分周出力を得ることができる。
【００３７】
ここで説明の便宜上、ｎ＝２とした場合のクロック分周器の構成を説明する。図４は、クロック分周器の構成を示すブロック図である。同図に示すように、フリップフロップ回路５１は２個のフリップフロップを構成する回路である。遅延回路６１，６２はそれぞれフリップフロップ回路５１の出力Ｑ１，Ｑ２を遅延する回路である。加算回路７１は、入力Ｂ１，Ａ１を加算して出力Ｓ１とし、Ｂ１とＡ１を加算した時のキャリーとＡ２を加算して出力Ｓ２とするものであり、入力Ｂ１は「１」に固定され、入力Ａ１，Ａ２には遅延回路６１，６２の出力が加えられ、出力Ｓ１，Ｓ２はフリップフロップ回路５１に入力Ｄ１，Ｄ２として加えられる。なお信号の論理については、「１」＝「Ｈ」（ハイレベル）、「０」＝「Ｌ」（ローレベル）に統一して説明を進める。
【００３８】
表１は加算回路７１の演算内容を示す真理表である。
【００３９】
【表１】
0004586755.tif 000002
【００４０】
この加算回路７１の演算内容をみると、表１から判るように、出力Ｓ１は入力Ａ１の否定をとったものとなっており、出力Ｓ２は入力Ａ１，Ａ２のＥＯＲ（排他的論理和）をとったものとなっている。したがって、このような論理を有する組み合わせ回路を構成して加算回路７１と置き換える形態をとっても構わない。
【００４１】
次にこのクロック分周器の動作を説明する。図５は、図４のクロック分周器の各部の信号を示すタイムチャートである。同図において矢印は遅延回路による信号の遅延（ここではクロックの周期より若干短い遅延時間を例示）を示す。
【００４２】
図５に示すように、１段目のフリップフロップにおいて、出力Ｑ１を遅延させた信号Ａ１に反転を加えた信号を入力Ｄ１として帰還することにより、クロックを１／２に分周したパルスを生成する。また２段目のフリップフロップにおいて、出力Ｑ２を遅延させた信号を入力Ａ２に帰還し、この帰還信号を入力Ａ１（１／２分周パルス）とＢを加算したキャリーとを加算することにより、さらに１／２に分周したパルスを生成する。出力Ｑ２を分周出力とすることにより１／４分周クロックを出力することができる。
【００４３】
上記の説明から明らかなように、このクロック分周器の分周率は基本的に遅延回路の遅延時間に依存する。ここでは説明の便宜上、クロック周波数より若干短い遅延時間を例示したが、通常の動作時に分周が可能な範囲でなるべく大きな遅延時間に設定する形態が望ましい。
【００４４】
ここで、図４のクロック分周器に約２倍の周波数のクロックが入力されたときの動作を説明する。図６は、図４のクロック分周器に倍の周波数のクロックが入力されたときの各部の信号を示すタイムチャートである。
【００４５】
図６に示すように、フリップフロップ５１の出力Ｑ１，Ｑ２に現れるパルスの周期は遅延回路の遅延時間に依存して決定されるので、クロック周波数が倍になっても分周出力の周波数はほとんど影響を受けない。分周出力Ｑ２は、図５の例と比較すると同一の周波数であることが判る。
【００４６】
以上、この発明の実施形態を詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の種々の設計等も含まれる。
【図面の簡単な説明】
【００４７】
【図１】この発明の実施形態に係るＦＰＧＡの要部概略を示すブロック図である。
【図２】図１の回路の動作の概略を示すフローチャートである。
【図３】クロック分周器の基本構成を示すブロック図である。
【図４】クロック分周器の具体例の構成を示すブロック図である。
【図５】図４のクロック分周器の各部の信号を示すタイムチャートである。
【図６】図４のクロック分周器に倍の周波数のクロックが入力されたときの各部の信号を示すタイムチャートである。
【符号の説明】
【００４８】
１…ＦＰＧＡ  ２…ＦＰＧＡプログラム回路  ３…セキュリティ回路  ４…クロックモジュール  ３１…クロック分周器  ３２…乱数発生回路  ３３…レジスタ  １１…周波数検出回路  １２…乱数発生回路  １３…比較器  １４…停止回路  １５…レジスタ  ５…フリップフロップ回路  ６…遅延要素  ７…加算要素  ５１…フリップフロップ回路  ６１，６２…遅延回路  ７１…加算回路
【図１】
0004586755.tif 000003
【図２】
0004586755.tif 000004
【図３】
0004586755.tif 000005
【図４】
0004586755.tif 000006
【図５】
0004586755.tif 000007
【図６】
0004586755.tif 000008