(57)【要約】ＦＰＧＡデバイスをプログラムするために用いられるデータストリームを暗号化するための方法および装置において、データストリーム内に少なくとも１つのギャップが存在するか否かが判断され、データストリーム内の前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされるか否かが判断され、前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされれば、前記データストリームが暗号化される。ＦＰＧＡデバイスをプログラムするために用いられる暗号化されたデータストリームを解読するための方法および装置において、データストリーム内に少なくとも１つのギャップが存在するか否かが判断され、データストリーム内の前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされたか否かが判断され、前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされたならば、前記データストリームが解読される。
2005518691.tif 000002
【特許請求の範囲】
【請求項１】
ＦＰＧＡデバイスをプログラムするために用いられるデータストリームを暗号化するための方法であって、
データストリーム内に少なくとも１つのギャップが存在するか否かを判断することと、
データストリーム内の前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされるか否かを判断することと、
前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされれば、前記データストリームを暗号化することと
を具備することを特徴とする方法。
【請求項２】
前記データストリームを暗号化する動作は、次の少なくとも１つのギャップの始まりまで、該データストリームの８ビット毎に補完を行うことをさらに具備することを特徴とする請求項１に記載の方法。
【請求項３】
前記ＦＰＧＡデバイスにより前記データストリームを受信することと、
データストリーム内に少なくとも１つのギャップが存在するか否かを判断することと、
前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされれば、前記データストリームを解読することと、
前記データストリームを、ＦＰＧＡデバイス内の複数のＲＡＭセルへ送信することと
をさらに具備することを特徴とする請求項１に記載の方法。
【請求項４】
前記データストリームを解読する動作は、次の少なくとも１つのギャップの始まりまで、該データストリームの８ビット毎に補完を行うことをさらに具備することを特徴とする請求項１に記載の方法。
【請求項５】
少なくとも１つのギャップは暗号化されず、かつ、該暗号化されないギャップは圧縮されることを特徴とする請求項１に記載の方法。
【請求項６】
少なくとも１つのギャップにわたって、該ギャップの一連続的セグメントは暗号化され、かつ、該ギャップの他の連続的セグメントは圧縮されることを特徴とする請求項１に記載の方法。
【請求項７】
前記少なくとも１つのギャップ内に、ランダムなビットが挿入されることを特徴とする請求項１に記載の方法。
【請求項８】
前記少なくとも１つのギャップ内に、ランダムではないビットが挿入されることを特徴とする請求項１に記載の方法。
【請求項９】
ＦＰＧＡデバイスをプログラムするために用いられる暗号化されたデータストリームを解読するための方法であって、
データストリーム内に少なくとも１つのギャップが存在するか否かを判断することと、
データストリーム内の前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされたか否かを判断することと、
前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされたならば、前記データストリームを解読することと
を具備することを特徴とする方法。
【請求項１０】
機械により読み取り可能なプログラム記憶デバイスにして、ＦＰＧＡデバイスをプログラムするために用いられるデータストリームを暗号化するための方法を実行するための、機械により実行可能な命令のプログラムを明確に具体化するプログラム記憶デバイスであって、
前記方法は、
データストリーム内に少なくとも１つのギャップが存在するか否かを判断することと、
データストリーム内の前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされるか否かを判断することと、
前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされれば、前記データストリームを暗号化することと
を具備することを特徴とするプログラム記憶デバイス。
【請求項１１】
前記データストリームを暗号化する動作は、次の少なくとも１つのギャップの始まりまで、該データストリームの８ビット毎に補完を行うことをさらに具備することを特徴とする請求項１０に記載のプログラム記憶デバイス。
【請求項１２】
前記データストリームを暗号化するための方法は、
前記ＦＰＧＡデバイスにより前記データストリームを受信することと、
データストリーム内に少なくとも１つのギャップが存在するか否かを判断することと、
前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされれば、前記データストリームを解読することと、
前記データストリームを、ＦＰＧＡデバイス内の複数のＲＡＭセルへ送信することと
をさらに具備することを特徴とする請求項１０に記載のプログラム記憶デバイス。
【請求項１３】
前記データストリームを解読する動作は、次の少なくとも１つのギャップの始まりまで、該データストリームの８ビット毎に補完を行うことをさらに具備することを特徴とする請求項１２に記載のプログラム記憶デバイス。
【請求項１４】
前記データストリームを暗号化するための方法は、少なくとも１つのギャップは暗号化されず、かつ、該暗号化されないギャップは圧縮される、という動作をさらに具備することを特徴とする請求項１０に記載のプログラム記憶デバイス。
【請求項１５】
前記データストリームを暗号化するための方法は、少なくとも１つのギャップにわたって、該ギャップの一連続的セグメントは暗号化され、かつ、該ギャップの他の連続的セグメントは圧縮される、という動作をさらに具備することを特徴とする請求項１０に記載のプログラム記憶デバイス。
【請求項１６】
前記データストリームを暗号化するための方法は、暗号化の前に、前記少なくとも１つのギャップ内に、ランダムなビットが挿入される、という動作をさらに具備することを特徴とする請求項１０に記載のプログラム記憶デバイス。
【請求項１７】
前記データストリームを暗号化するための方法は、暗号化の前に、前記少なくとも１つのギャップ内に、ランダムではないビットが挿入される、という動作をさらに具備することを特徴とする請求項１０に記載のプログラム記憶デバイス。
【請求項１８】
機械により読み取り可能なプログラム記憶デバイスにして、ＦＰＧＡデバイスをプログラムするために用いられる暗号化されたデータストリームを解読するための方法を実行するための、機械により実行可能な命令のプログラムを明確に具体化するプログラム記憶デバイスであって、
前記方法は、
データストリーム内に少なくとも１つのギャップが存在するか否かを判断することと、
データストリーム内の前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされたか否かを判断することと、
前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされたならば、前記データストリームを解読することと
を具備することを特徴とするプログラム記憶デバイス。
【請求項１９】
ＦＰＧＡデバイスをプログラムするために用いられるデータストリームを暗号化するための装置であって、
データストリーム内に少なくとも１つのギャップが存在するか否かを判断する手段と、
データストリーム内の前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされるか否かを判断する手段と、
前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされれば、前記データストリームを暗号化する手段と
を具備することを特徴とする装置。
【請求項２０】
前記暗号化する手段は、次の少なくとも１つのギャップの始まりまで、該データストリームの８ビット毎に補完を行う手段をさらに具備することを特徴とする請求項１９に記載の装置。
【請求項２１】
前記ＦＰＧＡデバイスにより前記データストリームを受信する手段と、
データストリーム内に少なくとも１つのギャップが存在するか否かを判断する手段と、
前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされれば、前記データストリームを解読する手段と、
前記データストリームを、ＦＰＧＡデバイス内の複数のＲＡＭセルへ送信する手段と
をさらに具備することを特徴とする請求項１９に記載の装置。
【請求項２２】
前記解読する手段は、次の少なくとも１つのギャップの始まりまで、該データストリームの８ビット毎に補完を行う手段をさらに具備することを特徴とする請求項２１に記載の装置。
【請求項２３】
少なくとも１つの暗号化されないギャップを圧縮する手段をさらに具備することを特徴とする請求項１９に記載の装置。
【請求項２４】
前記ギャップの一連続的セグメントを暗号化する手段と、該ギャップの他の連続的セグメントを圧縮する手段とをさらに具備することを特徴とする請求項１９に記載の装置。
【請求項２５】
暗号化の前に、前記少なくとも１つのギャップ内に、ランダムなビットを挿入する手段をさらに具備することを特徴とする請求項１９に記載の装置。
【請求項２６】
暗号化の前に、前記少なくとも１つのギャップ内に、ランダムではないビットを挿入する手段をさらに具備することを特徴とする請求項１９に記載の装置。
【請求項２７】
ＦＰＧＡデバイスをプログラムするために用いられる暗号化されたデータストリームを解読するための装置であって、
データストリーム内に少なくとも１つのギャップが存在するか否かを判断する手段と、
データストリーム内の前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされたか否かを判断する手段と、
前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされたならば、前記データストリームを解読する手段と
を具備することを特徴とする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）集積回路に関する。より詳細には、本発明は、ＦＰＧＡデバイスをプログラムするために用いられるデータストリームを暗号化するための方法および装置に関する。
【背景技術】
【０００２】
フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）は、セルまたはブロックと称されかつプログラム可能な機能を有する汎用論理回路からなる２次元アレイを含む集積回路（ＩＣ）である。これらのセルは、プログラム可能なバスにより互いに連結される。セルのタイプは、少数の変数からなる全てのブール関数を実現することが可能な小型の多機能回路（または、構成設定可能な機能ブロックまたはグループ）であり得る。セルのタイプは、ゲートに制約されるものではない。例えば、構成設定可能な機能グループは、通常は、加算、減算などの論理関数をＦＰＧＡの内部で構成設定するために用いることができるメモリセルおよび接続トランジスタを含む。セルは、フリップフロップのような順次素子をさらに含み得る。ＦＰＧＡ内に見られる２つのタイプの論理セルは、多重化器に基づいたもの、および、プログラム可能な読み出し専用メモリ（ＰＲＯＭ）テーブル−ルックアップメモリに基づいたものである。消去可能なＦＰＧＡについては、何度も再プログラムすることができる。この技術は、新製品および製造のために試作品のデザインを開発およびデバッグする場合に、特に便利である。
【０００３】
ＦＰＧＡは、通常は、回路のアレイと、中立のルーティング相互接続（uncommitted routing interconnects）の組と、該回路および該ルーティング相互接続の両方と関連づけられた、ユーザーによりプログラム可能なスイッチの組とを含む物理テンプレートを含み得る。これらのスイッチが適切にプログラムされる（オンまたはオフ状態に設定される）場合に、ＦＰＧＡのテンプレートまたは根元的な回路／相互接続は、特定のカスタマイズされた機能を実行するために、カスタマイズまたは構成設定される。これらのスイッチのオン−オフ状態を再プログラムすることにより、ＦＰＧＡは、多くの様々な機能を実行することができる。いったん、ＦＰＧＡの特定の構成設定が決定されると、ある特定の機能を実行するようにＦＰＧＡを構成設定することができる。
【０００４】
ＦＰＧＡにおける、ユーザーによりプログラム可能なスイッチについては、ＯＮＯアンチヒューズ、Ｍ−Ｍアンチヒューズ、ＳＲＡＭメモリセル、フラッシュＥＰＲＯＭメモリセル、および、ＥＥＰＲＯＭメモリセルのような様々な技術の形で実施することができる。ヒューズまたはアンチヒューズをスイッチとして用いるＦＰＧＡについては、１度しかプログラムすることができない。ＦＰＧＡの、メモリセルにより制御されるスイッチという実施手段については、反復的に再プログラムすることができる。この筋書においては、回路内の選択された点（Ａ，Ｂ）を接続するかまたは未接続のままにするためのスイッチとして、ＮＭＯＳトランジスタを用いることができる。トランジスタのソースおよびドレインノードについては、点Ａ，Ｂにそれぞれ接続することができ、かつ、ゲートノードについては、メモリセルに直接的または間接的に接続することができる。メモリセルの状態を論理“１”または論理“０”に設定することにより、スイッチをターンオンまたはターンオフさせることができるので、点Ａ，Ｂは、接続されるか、または、未接続のままにされる。こうして、これらのスイッチをプログラムするための能力は、非常に柔軟性のあるデバイスを提供する。
【０００５】
ＦＰＧＡは、実施すべき回路を決定するプログラムを、ＦＰＧＡチップ上のＲＡＭまたはＰＲＯＭに記憶することができる。この構成設定メモリ（configuration memory）（ＣＭ）内のデータのパターンは、セルの機能と、これらの相互接続の配線とを決定する。ＣＭの各ビットは、セルの機能を選択できるかまたは接続を行う（または、遮断する）ことができる対象回路内のトランジスタスイッチを制御する。ＣＭの内容を取り替えることにより、設計者は、設計の変更を行うことができ、または、設計上の誤りを訂正することができる。ＣＭについては、外部ソースからダウンロードすることができるか、または、チップ上に記憶することができる。このタイプのＦＰＧＡについては、反復的に再プログラムすることができ、このことは、開発および製造上のコストを著しく低減させる。
【０００６】
ＦＰＧＡをプログラムするために、デザインソフトウェア（design software）を用いることができる。デザインソフトウェアは、プログラム可能なスイッチについての、エンドユーザーが希望する特定の構成設定を、ＦＰＧＡ構成設定データの形にコンパイルすることができる。デザインソフトウェアは、構成設定データを、ビットストリーム（すなわち、ＦＰＧＡに供給され、かつ、プログラム可能なスイッチのための構成設定メモリをプログラムするために用いられる、１または０からなるストリーム）の形にアセンブルする。ビットストリームは、各メモリセルが“１”を記憶しているのか、または、“０”を記憶しているのかを判断するＣＭ内にロードすべきデータパターンである。各ＣＭ内に記憶されたビットは、自身に関連づけられたトランジスタスイッチがターンオンされるのか、または、ターンオフされるのかを制御する。エンドユーザーは、通常は、自分たちがＦＰＧＡのためのデザインをシミュレートしかつテストした後に、ソフトウェアを用いてビットストリームを作成する。
【０００７】
図１のフローチャートを参照すると、設計者またはエンドユーザーは、ＦＰＧＡをプログラムする（１００）。デザインソフトウェアは、構成設定データを、データストリームの形にアセンブルする（１１０）。この動作については、ソフトウェア人員により実行することもできる。データストリームについては、ＦＰＧＡの外部にあるソース上に記憶することができる（１２０）。始動に基づいて、外部ソースは、データストリームをＦＰＧＡへ送信する（１３０）。いったんＦＰＧＡ内に入ると、データストリームは、ＦＰＧＡ内のＲＡＭまたはＰＲＯＭを構成設定する。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
外部ソースからダウンロードされるデータストリームを用いるＦＰＧＡにおいて、図１の動作１２０，１３０との間に、データストリームがＦＰＧＡ上にロードされている際に、ある人物は、データストリームを傍受することができてしまう。このことは、このような人物がデータストリームを読み取ることができる場合に、該人物が集積回路を逆行分析する（reverse-enginner）ことを可能にしてしまう。
【課題を解決するための手段】
【０００９】
本発明は、ＦＰＧＡデバイスをプログラムするために用いられるデータストリームを暗号化するための方法および装置であって、データストリーム内に少なくとも１つのギャップが存在するか否かを判断することと、データストリーム内の前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされるか否かを判断することと、前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされれば、前記データストリームを暗号化することとを具備する方法および装置に向けられる。
【００１０】
さらに、本発明は、ＦＰＧＡデバイスをプログラムするために用いられる暗号化されたデータストリームを解読するための方法および装置であって、データストリーム内に少なくとも１つのギャップが存在するか否かを判断することと、データストリーム内の前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされたか否かを判断することと、前記少なくとも１つのギャップにわたって暗号化がイネーブル状態にされたならば、前記データストリームを解読することとを具備する方法および装置に向けられる。
【発明を実施するための最良の形態】
【００１１】
本発明についての以下の説明が例示的なものに過ぎず、かつ、決して制限的なものではないことを、当業者は理解するだろう。本発明の他の実施例が、当業者には容易に想到されるだろう。
【００１２】
図２は、開示された方法の一実施例について説明するフローチャートを指す。最初の動作２００において、設計者またはユーザーは、ＦＰＧＡをプログラムする（２００）。デザインソフトウェアは、構成設定データを、データストリームの形にアセンブルする（２１０）。デザインソフトウェアは、設計者またはユーザーがデータストリームの暗号化を希望するか否かについて質問する。設計者またはユーザーがデータストリームの暗号化を希望すれば、該設計者またはユーザーは、動作２２０において、暗号化のための選択肢を選択することができる。データストリームは、動作２３０において暗号化される。この動作２３０については、ソフトウェア人員により実行することもできる。データストリームについては、ＦＰＧＡの外部にあるソース上に記憶することができる（２４０）。外部データソースは、ＰＲＯＭ、ＣＰＵ、または、他の任意のメモリデバイスであり得る。始動に基づいて、外部ソースは、データストリームを、ＦＰＧＡへ送信する（２５０）。ＦＰＧＡは、ＲＡＭまたはＰＲＯＭを構成設定する前に、データストリームを解読することができる（２６０）。いったん解読されると、データストリームは、ＦＰＧＡ内のＲＡＭまたはＰＲＯＭを構成設定する（２７０）。ＦＰＧＡ上の各プログラム可能なトランジスタと関連づけられたＲＡＭは、ＲＡＭセル（RAM CELLS）とも称され得る。
【００１３】
多くのシステムにおいて、データストリームは、水平方向および垂直方向に走るＸ，Ｙアドレス線によりアドレス指定されるＣＭ内にロードされる。構成設定中に、データストリームビットは、列（Ｙ）ずつ順次的にロードされる。１列内において、データストリームは、最上部から最下部へ（全てのまたはＸ個の行を貫通して）１ビットずつロードされる。Ｘ，Ｙ線またはアドレスの交点の中には物理ＣＭビットを持たないものもあるが、その理由は、これらの位置が論理モジュールまたは他の構成要素により用いられることがあるためである。ＦＰＧＡデバイス上において、データストリームビットを備えない位置が存在しないことがあるが、データストリームは、これらの空白位置に対応する１または０の形式のデータをなおも含む。
【００１４】
アドレス指定空間における連続的な空白位置は、“ギャップ（ＧＡＰ）”と称され得る。ギャップ内部のストリームデータは、ＣＭに書き込まれないので、構成設定されたＦＰＧＡの機能性には何の影響も及ぼさない。アドレス復号器は、このようなギャップの始まりと、さらに終わりとを、信号で伝えることができる。ギャップの終わりにおいて、この時点までにロードされた構成設定データの無欠性を、チップ上の１６ビット巡回冗長検査（ＣＲＣ）回路によりチェックすることができる。１６ビットＣＲＣを用いる開示されたシステムの他の実施例において、最小のギャップサイズは１７ビットであり得る。ギャップ内部の最初のビットは、“暗号化イネーブル（Encryption Enable）”ビットであり得る。暗号化イネーブルビットが設定されれば、データストリームの後続セクションが暗号化される。このセクションについては、暗号化イネーブルビットの後から、次のギャップの始まりまでの全てのビットとして定義することができる。しかしながら、セクションについては、他の方法で定義することもできる。暗号化がイネーブル状態にされれば、８ビット毎に補完を行う（“１”から“０”に、および、“０”から“１”に変更する）ことができる。８番目のビットのみが補完される必要はなく、他のビットを補完することができ、データのランダムなパターンまたはランダムではないパターンを、データストリームのギャップ内に挿入することができる。暗号化されたデータストリームがＦＰＧＡのＣＭ内にロードされれば、ＦＰＧＡは正確に機能しないことがある。従って、データストリームについては、ＣＭに入る前に、しかし、ＦＰＧＡデバイスに入った後に、解読することができる。暗号化については、各セクションにわたって、任意選択的に“オン”または“オフ”に設定することができるので、様々なオン／オフ設定を備えた特定のデザインのために、データストリームファイルは非常に様々な形で出現することができ、これにより、逆行分析をより困難なものにする。
【００１５】
図３を参照すると、前記システムの一実施例の例示が示される。前記システムは、動作３１０において、データストリームを受信する。前記システムは、質問３２０において、自身がギャップの始まりを受信したか否かを判断する。開示されたシステムの一実施例において、ギャップは、２ビットのような小さなものであり得る。開示されたシステムの他の実施例において、ギャップは、少なくとも１７ビットの長さから、少なくとも６４ビットの長さであり得る。最小の１７ビットは、１６ビットＣＲＣを用いることに起因し得る。次に、前記システムは、質問３３０において、このギャップにわたって暗号化がイネーブル状態にされたか否かを判断する。暗号化がイネーブル状態にされたならば、前記システムは、動作３４０において、次のギャップの始まりまで、８ビット毎に補完を行う。前記システムは、質問３５０において、自身がデータストリームの終わりに到達したと判断するまで、この方法を実行する。
【００１６】
図４を参照すると、開示された方法の他の実施例が示される。前記ＦＰＧＡは、動作４１０において、外部ソースから、暗号化されたデータストリームを受信する。次に、前記システムは、質問４２０において、自身がギャップの始まりを受信したか否かを判断する。前記システムは、自身がギャップの始まりを受信したと判断すれば、質問４３０において、暗号化がイネーブル状態にされたか否かを判断する。暗号化がイネーブル状態にされたならば、前記システムは、動作４４０において、次のギャップの始まりまで、８ビット毎に（あるいは、８以外の数が用いられたならば、他のｎビット毎に）補完を行う。動作４４０は、事実上、データストリームを解読する。次に、前記システムは、質問４５０において、自身がデータストリームの終わりを受信したか否かを判断する。前記システムは、自身がデータストリームの終わりを受信したと判断すれば、動作４６０において、解読されたデータストリームによって、ＦＰＧＡのＲＡＭおよび／またはＰＲＯＭを構成設定する。
【００１７】
本発明の他の実施例において、データストリームの一部分を圧縮し、かつ、データストリームの他の部分を暗号化することができ、これにより、データストリームをさらに部分的に変更し、データストリームを逆行分析しようと試み得る人物を妨害する。
【００１８】
本発明の他の実施例において、データストリームの逆行分析を希望し得る人物をさらに妨害するために、データストリームのギャップ内に、ランダムなビットを挿入することができる。
【００１９】
本発明の実施例および適用について示しかつ説明してきた一方で、本明細書における発明的概念から逸脱することなく、前述以外の多くの修正がさらに可能であることが、当業者には明らかとなるだろう。従って、本発明は、添付の請求項の真意以外に制約されるべきではない。これらの請求項はデータストリームをＦＰＧＡ上のＲＡＭセルへ送信することについて言及しているが、当業者は、開示されたシステムが、ＦＰＧＡに配置された他のメモリデバイス（ＰＲＯＭを含むが、これに制限されるものではない）を備えたデバイスにも適用されることに気づくだろう。
【図面の簡単な説明】
【００２０】
【図１】従来技術を示すフローチャートである。
【図２】開示されたシステムの一実施例を示すフローチャートである。
【図３】開示されたシステムの一実施例を示すフローチャートである。
【図４】開示されたシステムの一実施例を示すフローチャートである。
【図１】
2005518691.tif 000003
【図２】
2005518691.tif 000004
【図３】
2005518691.tif 000005
【図４】
2005518691.tif 000006
【国際調査報告】
2005518691.tif 000007