(57)【要約】フィールドプログラマブルゲートアレイ（ＦＰＧＡ）と解読回路が共通の集積回路（ＩＣ）内に、又は、共通のＩＣパッケージ内に封入された個別の各ＩＣ内に実装されている。解読回路は、特定の暗号キーに関連して暗号化された入力ＦＰＧＡプログラムを解読し、そして、解読されたＦＰＧＡプログラムをＦＰＧＡに書き込む。したがって、特定の暗号キーに関連して暗号化されたＦＰＧＡプログラムは、その特定の暗号キーに関連して暗号化されたＦＰＧＡプログラムをデコードできる解読回路に連結したこれらのＦＰＧＡのみをプログラムするために使用される。解読回路とＦＰＧＡが同じ集積回路（ＩＣ）内に、又は、同じＩＣパッケージ内に実装されているので、解読回路が生成する解読されたＦＰＧＡプログラムは容易に不当受信されたり複製されたりすることがない。
2004519111.tif 000002
【特許請求の範囲】
【請求項１】
入力信号に対して論理操作を実行して出力信号を生成する装置であって、前記論理操作がそこに入力として供給される暗号化された第１のプログラムによって定義されているものであり、前記装置が、
前記第１のプログラムを受け取ってそのプログラムを解読して第２のプログラムを生成するための第１の回路手段と、
前記第２のプログラムを受け取ってそのプログラムを記憶し、更に、前記入力信号に対して論理操作を実行して前記出力信号を生成するための第２の回路手段を具備していて、前記論理操作が前記第２のプログラムによって定義されていることを特徴とする装置。
【請求項２】
前記第２の回路手段がフィールドプログラマブルゲートアレイを有することを特徴とする前記請求項１に記載の装置。
【請求項３】
前記第１の回路手段と前記第２の回路手段が、共通の集積回路内内に実装されていることを特徴とする前記請求項１に記載の装置。
【請求項４】
集積回路パッケージを更に具備しており、前記第１の回路手段と前記第２の回路手段が、前記集積回路パッケージ内に収容されていることを特徴とする前記請求項１に記載の装置。
【請求項５】
前記第１の回路手段に入力暗号キーを提供するための第３の手段を更に具備しており、前記第１の回路手段が前記暗号キーによって決定される方法において前記第１のプログラムを解読することを特徴とする前記請求項１に記載の装置。
【請求項６】
前記第３の手段が不揮発性メモリを有することを特徴とする前記請求項５に記載の装置。
【請求項７】
前記第１の回路手段に入力暗号キーを提供するための第３の手段であって、前記第１の回路手段が前記暗号キーによって決定される方法において前記第１のプログラムを解読するものと、
集積回路パッケージであって、前記第１の回路手段と前記第２の回路手段と前記第３の手段を含んでいるものをさらに具備していることを特徴とする前記請求項１に記載の装置。
【請求項８】
前記第２の回路手段がフィールドプログラマブルゲートアレイを有することを特徴とする前記請求項７に記載の装置。
【請求項９】
前記第３の手段が不揮発性メモリを有することを特徴とする前記請求項８に記載の装置。
【請求項１０】
入力信号に対して論理操作を実行して出力信号を生成する装置であって、前記論理操作がそこに入力として供給される第１のプログラムによって定義されているものであり、前記装置が、
前記第１のプログラムを暗号化して暗号化された第２のプログラムを生成するための手段と、
前記暗号化された第２のプログラムを受け取ってその暗号化された第２のプログラムを解読して前記第１のプログラムの複製を生成するための第１の回路手段と、
前記第１のプログラムの前記複製を受け取って、更に、前記入力信号に対して論理操作を実行して前記出力信号を生成するための第２の回路手段を具備していて、前記論理操作が前記第１のプログラムの前記複製によって定義されていることを特徴とする装置。
【請求項１１】
前記第２の回路手段がフィールドプログラマブルゲートアレイを有することを特徴とする前記請求項１０に記載の装置。
【請求項１２】
前記第１の回路手段と前記第２の回路手段が、共通の集積回路内内に実装されていることを特徴とする前記請求項１０に記載の装置。
【請求項１３】
集積回路パッケージを更に具備しており、前記第１の回路手段と前記第２の回路手段が、前記集積回路パッケージ内に内蔵されていることを特徴とする前記請求項１０に記載の装置。
【請求項１４】
前記第１の回路手段に入力暗号キーを提供するための第３の手段を更に具備しており、前記暗号化のための手段が前記暗号キーによって決定される方法において前記第１のプログラムを暗号化し、更に、前記第１の回路手段が前記暗号キーによって決定される方法において前記第２のプログラムを解読することを特徴とする前記請求項１０に記載の装置。
【請求項１５】
前記第３の手段が不揮発性メモリを有することを特徴とする前記請求項１４に記載の装置。
【請求項１６】
集積回路パッケージを更に具備しており、前記第１の回路手段と前記第２の回路手段が、前記集積回路パッケージ内に内蔵されていることを特徴とする前記請求項１４に記載の装置。
【請求項１７】
前記第１の回路手段と前記第２の回路手段が、共通の集積回路内内に実装されていることを特徴とする前記請求項１４に記載の装置。
【請求項１８】
入力信号に対して論理操作を実行して出力信号を生成するための装置をプログラムする方法であって、前記論理操作がそこに入力として供給される第１のプログラムによって定義されているものであり、前記方法が、
キーの値によって決定される方法で前記第１のプログラムを暗号化して暗号化された第２のプログラムを生成する工程と、
前記暗号化された第２のプログラムを前記キーの前記値によって決定された方法で解読して前記第１のプログラムの複製を生成する工程と、
前記第１のプログラムの前記複製を入力として前記装置に供給する工程とからなる方法。
【発明の詳細な説明】
【０００１】
発明の背景
発明の技術分野
本発明は、一般的には、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）プログラムをコード化して、そのプログラムをデコードすることが可能な特定の組のＦＰＧＡのみをプログラムするためにそれが使用されるようにするシステムに関する。
【０００２】
関連技術の説明
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、互いに連結されていると共に信号ルーティングデバイスを介してＦＰＧＡ入出力（Ｉ／Ｏ）ターミナルとも連結している多数の論理ブロックを有する。ＦＰＧＡに記憶されたルーティングデータは、その論理ブロックとＦＰＧＡのＩ／Ｏターミナルの間にどのようにデータを転送するのかをルーティングデバイスに命じることによって、その入力信号に対してＦＰＧＡが実行する論理を制御してその出力信号を生成する。したがって、ＦＰＧＡプログラムは、ＦＰＧＡのプログラミングターミナルへ入力として供給される単なる一連のルーティングデータである。我々は、主に、ルーティングデータを含むデータファイルをＦＰＧＡプログラミングデバイスに供給し、そのデバイスがそのルーティングデータをＦＰＧＡに書き込むことによって、ＦＰＧＡをプログラム（又は再プログラム）する。
【０００３】
ＦＰＧＡプログラムの開発者又は販売者は、それらのＦＰＧＡプログラムのライセンスされていない使用を阻止することに関心を有している。例えば、あるＦＰＧＡプログラムの開発者又は販売者は、顧客がＦＰＧＡプログラムをパブリックなインターネットサイトからダウンロードすることを可能にすることを都合がよいと思うかもしれないが、しかし、多分他人がまず第１にライセンスを取得しないでそれらのプログラムを使用することを阻止したいでしょう。さもなくば、あるＦＰＧＡプログラムの開発者が顧客に対して特定の組のＦＰＧＡのみをプログラムするようにライセンス許諾したときには、そのＦＰＧＡプログラムの開発者はその顧客又は他の誰かがそのＦＰＧＡプログラムを使用して他のＦＰＧＡをプログラムすることを阻止したいでしょう。
【０００４】
いくつかのコンピュータプログラムは、暗号化されており、特定のコード（暗号キー）によって決定される方法によってまず解読されない限り、それらはコンピュータをプログラムするためには使用することができない。顧客がソフトウェアを使用するためにライセンスを購入すると、ライセンサーはその顧客に適正な暗号キーを提供する。その後、その顧客がそのソフトウェアを取得し、そのインストールプログラムを呼び出すとき、そのインストールプログラムは顧客に対して暗号キーについて問い合わせをする。そして、そのインストールプログラムは、そのキーに関連してそのプログラムを解読し、顧客のコンピュータに解読されたバージョンのプログラムをインストールする。したがって、たとえその顧客以外の誰かが暗号化されたプログラムをダウンロードできたとしても、その者は、インストールプログラムに適正な暗号キーを提供することができない限り、そのプログラムをコンピュータにインストールすることはできない。
【０００５】
同様の暗号化システムは、利用者に適切な暗号キーを提供するように要求する解読回路又は解読プログラムをＦＰＧＡプログラミングデバイスに装備することによって、ＦＰＧＡプログラムを暗号化するために使用される。しかし、このような暗号システムはＦＰＧＡプログラムが顧客以外の誰かによって使用される機会を減少する一方で、暗号キーにアクセスした顧客又はそれ以外の誰かはそのＦＰＧＡプログラムを使用して任意の数のＦＰＧＡをプログラムすることができる。また、解読されたバージョンのＦＰＧＡプログラムは、ＦＰＧＡプログラミングデバイスの出力時に不当に受信され、その後解読を必要とすることなくＦＰＧＡをプログラムするために使用されてしまう。
【０００６】
必要なのは、誰もがＦＰＧＡプログラムを使用して特定の組のＦＰＧＡ以外のＦＰＧＡをプログラムすることを阻止するためのシステムである。
【０００７】
発明の要約
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、ＦＰＧＡに書き込まれたＦＰＧＡプログラム（データシーケンス）によって制御される論理を実現する。本発明のひとつの局面に関連して、そのメモリアレイに書き込まれるべきＦＰＧＡプログラムはまず暗号化されて、ＦＰＧＡに書き込まれる前に所定の暗号キーに関連して解読されねばならない。
【０００８】
本発明の他の局面に関連して、暗号化されたＦＰＧＡプログラムによってプログラムされるべきＦＰＧＡを実装する集積回路（ＩＣ）は、暗号化されたＦＰＧＡプログラムを受け取ってそれを適切な暗号キーに関連して解読して解読されたＦＰＧＡプログラムを生成する内部解読回路を有する。そして、解読回路は、解読されたＦＰＧＡプログラムをＦＰＧＡの内部メモリアレイに書き込む。したがって、暗号化されたＦＰＧＡプログラムは、適正な暗号キーに関連してＦＰＧＡプログラムを解読することのできる解読回路を装備していないＦＰＧＡをプログラムするためには使用され得ない。また、解読回路とＦＰＧＡが同じＩＣ内に実装されているので、解読回路の出力ターミナルは容易にはアクセスできない。したがって、解読回路の解読されたＦＰＧＡプログラム出力は、それほど容易に不当受信されたり複製されたりはできない。
【０００９】
本発明の他の実施の形態においては、解読回路とＦＰＧＡは個別のＩＣチップに実装されているが、しかし、それらのチップは相互接続されて同じＩＣパッケージ内に収容されており、解読回路の解読されたＦＰＧＡプログラム出力は容易にはアクセスされ得ない。
【００１０】
したがって、ＦＰＧＡプログラムが意図する特定の組のＦＰＧＡ以外のＦＰＧＡをプログラムするためのＦＰＧＡプログラムの使用を阻止するためのシステムを提供することが本発明の目的である。
【００１１】
本明細書の結論部分は本発明の主題を特に指摘し明確に権利を主張している。しかし、当該業界において通常の知識を有する者は、同じ参照符号が同じ部材を指し示している添付の図面を参照して、本明細書の残りの部分を読むことによって、本発明の機構と操作方法の双方を、さらにその効果と目的と共に、最もよく理解する。
【００１２】
好適な実施の形態の説明
フィールドプログラマブルゲートアレイ（ＦＰＧＡ）は、互いに連結されていると共に信号ルーティングデバイスを介してＦＰＧＡ入出力（Ｉ／Ｏ）ターミナルとも連結している多数の論理ブロックを有する。ＦＰＧＡに記憶されたルーティングデータは、その論理ブロックとＦＰＧＡのＩ／Ｏターミナルの間にどのようにデータを転送するのかをルーティングデバイスに命じて、その入力信号に対してＦＰＧＡが実行する論理を制御してその出力信号を生成する。ＦＰＧＡ「プログラム」は、ＦＰＧＡのプログラミングターミナルへの入力として供給される単なる一連のルーティングデータである。我々は、主に、ルーティングデータを含むデータファイルを発生してそれを従来のＦＰＧＡプログラミングデバイスに供給し、そのデバイスがそのルーティングデータをＦＰＧＡに書き込むことによって、ＦＰＧＡをプログラム（又は再プログラム）する。本発明は、ＦＰＧＡプログラムを暗号化して、そのプログラムを解読するのに適合した特定の組のＦＰＧＡのみをプログラムするために使用されるＦＰＧＡプログラム暗号化システムに関する。
【００１３】
図１は、本発明に関するＦＰＧＡプログラム暗号化システム１０をブロック図形式で図示している。システム１０は、ＦＰＧＡ入力信号（ＩＮＳＩＧ）とその出力信号（ＯＵＴＳＩＧ）の間の論理関係を制御するためにＦＰＧＡプログラム１４を受信してそれを記憶することができる従来のＦＰＧＡ１２を有する。本発明に関連して、従来の暗号プログラム１６が連続するＦＰＧＡのプログラムのワードをそれぞれ暗号化して、ＦＰＧＡプログラム１４の暗号化されたバージョン１８の対応するワードを生成する。暗号プログラム１６は、入力暗号キー（キー）をその暗号の基礎とする。ここに図示されたように、暗号プログラム１６は、８ビットのＦＰＧＡプログラムワードを受け取って、８ビットの出力暗号化ＦＰＧＡプログラムワードを生成し、更に、８ビットの暗号キーを用いる。しかし、キーおよびワードサイズは、そのシステムの別の実施例においてはもっと大きくてもよいし、小さくてもよい。
【００１４】
ＦＰＧＡ１２は、暗号化ＦＰＧＡプログラム１８を解読して結果の解読されたＦＰＧＡプログラムをそのプログラミング入力（ＰＩ）を介してＦＰＧＡ１２にロードすることのできる他の回路（２４−３２）と共に集積回路（ＩＣ）２０に組み込まれている。（ＩＣ）２０に対して外部の従来のＦＰＧＡプログラミングデバイス２２は、リセット信号ＲＥＳＥＴをシーケンサ２６に送り、そして、暗号化ＦＰＧＡプログラムのそれぞれのビットをシリアル−パラレルシフトレジスタ２４にシリアルにシフトして、それぞれのビットがシフトレジスタ入力時に利用可能になった時点で、クロック信号出力ＣＬＯＣＫをパルスにする。シーケンサ２６は、ＦＰＧＡ１２に対して入力ＦＰＧＡプログラムを受け取る準備をするように命じて、ＦＰＧＡ１２のリセット入力をパルスにすることによってリセット信号ＲＥＳＥＴに応答する。その後、シーケンサ２６は、その入力クロック信号ＣＬＯＣＫの各パルスに応じてシフトレジスタ２４のシフトイン（ＳＩ）入力をパルスにし、コード化されたＦＰＧＡプログラム１８のそれぞれの入力ビットをシフトレジスタ２４にシフトする。シフトレジスタ２４は、そのシリアル入力ＦＰＧＡプログラムを一連の８ビットワードにアセンブルし、そして、それらを解読回路２８に供給する。暗号化ＦＰＧＡプログラム１８を作るときに暗号プログラム１６が使用したと同じ暗号キー（キー）を使用して、解読回路２８は、それぞれの暗号プログラムの８ビットのワードを解読してオリジナルの未暗号化ＦＰＧＡプログラム１４の対応する８ビットのワードを再生する。ＩＣ２０に内蔵された従来の不揮発性メモリ３２は、また、暗号キーを記憶し、そして、それを解読回路２８に提供する。
【００１５】
解読回路２８は、それぞれの解読されたＦＰＧＡプログラムワード出力を入力としてパラレル−シリアルシフトレジスタ３０に提供する。シーケンサ２６は、シフトレジスタ３０のシフトイン（ＳＩ）入力をパルスにして、連続的に解読されたＦＰＧＡプログラムワードをそれぞれシフトレジスタ３０にロ−ドし、そして、そのシフトアウト入力（ＳＯ）を連続的にパルスにして、シフトレジスタ３０にそのワードのそれぞれのビットをＦＰＧＡ１２のプログラミング入力（ＰＩ）に連続的にシフトする。シーケンサ２６は、また、ＦＰＧＡ１２に解読されたＦＰＧＡプログラムワードのそれぞれのビットを記憶するように命じるＦＰＧＡ１２のロード入力ＬＯＡＤを連続的にパルスにする。したがって、各デバイス２４−３２は、暗号化ＦＰＧＡプログラム１８のそれぞれのワードを解読し、そして、その結果をＦＰＧＡ１２に書き込んで、それによって、未暗号化ＦＰＧＡプログラム１４に関連してそれをプログラムする。
【００１６】
暗号化システム１０は、ＦＰＧＡプログラムの開発者又は販売者にＦＰＧＡプログラム１４の非ライセンス使用を阻止することを可能にする。例えば、ＦＰＧＡプログラム開発者は、顧客に対して、暗号化ＦＰＧＡプログラム１８だけでなく、プログラムされるべきＦＰＧＡ１２を内蔵するＩＣ２０も提供することができる。そのＩＣを顧客に販売する前に、開発者は、適切な暗号キーをその不揮発性メモリ３２に書き込んでおく。したがって、顧客、又は、暗号化ＦＰＧＡプログラム１８の複製を取得する他の誰かは、ＦＰＧＡプログラムを使用して、ＦＰＧＡプログラムを適正に解読することができる解読回路２８を有する特定のＩＣ２０に内蔵されたＦＰＧＡ１２のみをプログラムすることができる。解読回路２８がＩＣ２０に埋め込まれているので、その出力ターミナルが容易にアクセスできないことに留意してください。したがって、顧客はそれがＦＰＧＡ１２に供給する解読されたＦＰＧＡプログラムを容易に不当受信できないし、それを使用して適正な解読システムを装備していない従来のＦＰＧＡをプログラムすることもできない。また、暗号キーがＩＣ２０に埋め込まれているので、それは顧客又は他の誰かに容易に利用できない。このように開発者のみがそのキーを知っており、そして、開発者のみがＩＣ２０のためのプログラムを適正に暗号化できることとなる。したがって、顧客がＦＰＧＡ１２を再プログラムして異なる論理を実行するようにしたいときには、顧客は他のソースよりもむしろその開発者から適正に暗号化されたプログラムを手に入れなければならない。
【００１７】
暗号プログラム及び解読回路
図２は、暗号プログラム１６として使用するのに適した単純な暗号プログラムを図示している。はじめにステップ３２において、暗号プログラム１６が未暗号化プログラム１４の次（最初）のワードを読み込み、そして、対応ビットの暗号キーによって未暗号化ワードのそれぞれのビットに排他的論理和演算（ＸＯＲ）を行い、暗号化プログラム１８出力のワードを生成する（ステップ３４）。最後に処理された未暗号化ワードが未暗号化ＦＰＧＡプログラム１４の最後のワードではないとき（ステップ３６）には、暗号プログラム１６がステップ３２と３４を繰り返して、ＦＰＧＡプログラム１４の次の未暗号化ワードを取得してそれをＸＯＲし、暗号化プログラム１８の対応するワードを生成する。暗号プログラム１６は、未暗号化ＦＰＧＡプログラム１４の最後のワードが暗号化されたときにステップ３６の後で終了する。
【００１８】
図３は、図２のプログラム１６の出力を解読するのに適切な図１の解読回路２８の単純な実装例を図示している。解読回路２８は、８個一組の排他的論理和演算（ＸＯＲ）ゲート３７を有する。それぞれのＸＯＲゲート３７は、８ビットの暗号キー（キー）の対応するワードによって８ビットの暗号化ワードのビットをＸＯＲして、解読データの対応するワードを生成する。例えば、未暗号化ＦＰＧＡプログラム１４の８ビットのワードが二進数値（１００１１０１１）を有し、８ビットの暗号キーが値（１１０１００１０）を有するものと想定することとする。暗号プログラム１６は２つの８ビットの値を論理和演算して、次のような値を有する暗号化ＦＰＧＡプログラム１８のワードを生成する。
すなわち、
暗号化＝未暗号化            ＸＯＲ    キー
（０１０００００１）＝（１００１１０１１）ＸＯＲ  （１１０１００１０）である。解読回路２８がその暗号化ワード（０１０００００１）を受け取って、それを元の暗号キーの値（１１０１００１０）でＸＯＲすると、それは次のような元の未暗号化ワードを再生する。
すなわち、
未暗号化＝暗号化              ＸＯＲ    キー
（１００１１０１１）＝（０１０００００１）ＸＯＲ  （１１０１００１０）である。８ビットの暗号キーは、２８個の異なる暗号キーの値を見積もれる。例えば、暗号キーのサイズを１６ビットに増加して２１６個の可能な値にすることもできる。そのようにするためには、暗号プログラム１６のデータワード入出力の幅と、シフトレジスタ２４とシフトレジスタ３０の間のデータパスの幅と、図３の解読回路２８のゲート３７の数を単純に１６ビット又は１６個に増加する。
【００１９】
複数チップモジュールバージョン
図４は、暗号化ＦＰＧＡプログラムを解読するための図１のデバイス２４−３２がＦＰＧＡ１２を内蔵していないチップ３８内に実装された本発明の別の実施の形態を図示している。しかし、ＦＰＧＡ１２とＩＣチップ３８は、従来の複数チップモジュール技術を用いて、共通のＩＣパッケージ４０内に実装されている。ＦＰＧＡ１２とＩＣチップ３８の間の接続がパッケージ４０内で行われているので、それはＩＣチップ３８によって生成された解読出力シーケンスを複製したい者にとっても容易にアクセスできない。
【００２０】
別の設計
上記の明細書は本発明の好適な実施の形態を説明してきたが、当該業界において通常の知識を有する者は、本発明から逸脱することなくその広範な諸相において前記好適な実施の形態に対して多くの改作をすることができる。例えば、１ビットよりもワイドなプログラミング入力（ＰＩ）を有するＦＰＧＡに対しては、シフトレジスタ３０は十分ワイドな出力を提供するように改変することもできる。データを暗号化して解読するための多くの周知のシステムが、図１の暗号プログラム１６と解読回路２８の機能を実現するために使用され得る。フラッシュメモリセルやフューズ技術を含むいくつかの周知技術のいずれも不揮発性メモリ３２を実装するのに使用され得る。それとは別に、解読回路２８への暗号キーの数値入力は、ＩＣ２０内の揮発性メモリ（レジスタやフリップフロップやＳＲＡＭなど）に記憶されて、ＩＣ製造中のマスクレベルでＩＣ２０を適正にプログラムすることによって、解読回路２８への「ハードウェア」入力としても提供され得る。暗号キーは、また、ＩＣ２０の外部のソースから解読回路２８に提供されることも可能である。また、前記の暗号化システムの好適な実施の形態は、ＦＰＧＡに関連して使用されるものとしてここでは説明されてきたけれども、同様の暗号化システムが、入力データシーケンスによってプログラムされた他の種類の論理デバイスに関連しても使用され得ることは理解されるべきである。したがって、添付の特許請求の範囲は、本発明の真の範囲内及び本発明の精神の範囲内にあるそのようなすべての改作を保護することを意図している。
【図面の簡単な説明】
【図１】
本発明のＦＰＧＡプログラム暗号化システムをブロック図形式で図示している。
【図２】
図１の暗号プログラムをフローチャート形式で図示している。
【図３】
図１の解読回路の適切な実装例を略図形式で図示している。
【図４】
本発明のＦＰＧＡプログラム暗号化システムの別の実施の形態を図示している。
【図１】
2004519111.tif 000003
【図２】
2004519111.tif 000004
【図３】
2004519111.tif 000005
【図４】
2004519111.tif 000006
【国際公開パンフレット】
2004519111.tif 000007
2004519111.tif 000008
2004519111.tif 000009
2004519111.tif 000010
2004519111.tif 000011
2004519111.tif 000012
2004519111.tif 000013
2004519111.tif 000014
2004519111.tif 000015
2004519111.tif 000016
2004519111.tif 000017
2004519111.tif 000018
2004519111.tif 000019
2004519111.tif 000020
2004519111.tif 000021
【国際調査報告】
2004519111.tif 000022