(57)【要約】プログラマブルロジックデバイス（ＰＬＤ）に実現される設計の複製を防ぐために、ＰＬＤ自体が、設計者がロードした解読鍵を記憶し、暗号化された構成ビットストリームがＰＬＤにロードされる際にこれを解読するための解読器を含む。ＰＬＤはまた、ビットストリームが暗号化されているかどうかを示すヘッダ情報を読出すためのロジックを含み、暗号化されたビットストリームも暗号化されないビットストリームも受付けることができる。暗号化鍵は、不揮発性メモリに記憶されてもよく、または電源が抜かれたときに保持されるように電池でバックアップされてもよい。
2004515001.tif 000002
【特許請求の範囲】
【請求項１】
暗号化されたビットストリームを解読するための解読器と、解読器によって用いられる鍵とを有するＰＬＤにおいて、ＰＬＤを用いる方法であって、
ＰＬＤを非安全モードにするステップと、
鍵をＰＬＤにロードするステップとを含む、方法。
【請求項２】
鍵をロードするステップの後にＰＬＤを安全モードにするステップをさらに含む、請求項１に記載のＰＬＤを使用する方法。
【請求項３】
構成メモリにより構成される構成可能ロジックと、
ＰＬＤの外部源からビットストリームを受けるための構造と、
解読鍵を記憶するための鍵メモリと、
鍵を用いてビットストリーム中の暗号化された構成ビットを解読することにより構成データを形成するための解読アルゴリズムを有する解読器と、
構成データを構成メモリにロードするための構造とを含む、プログラマブルロジックデバイス（ＰＬＤ）。
【請求項４】
構成データを構成メモリにロードするための構造は、ＣＲＣチェックサム計算回路を含む、請求項３に記載のＰＬＤ。
【請求項５】
構成メモリから構成をリードバックするための構造と、
ビットストリームが暗号化されたデータを含むことをヘッダ情報が示すとき構成をリードバックするための構造を不能化するための構造とをさらに含む、請求項３に記載のＰＬＤ。
【請求項６】
ＰＬＤが構成された後ＰＬＤを再構成するための構造と、
ビットストリームが暗号化されたデータを含むことをヘッダ情報が示すときＰＬＤを再構成するための構造を不能化するための構造とをさらに含む、請求項３に記載のＰＬＤ。
【請求項７】
解読器は、複数個の解読鍵を記憶するためのレジスタの１つから、解読のために別の鍵も使用されるかどうかを示す値を読出す、請求項３に記載のＰＬＤ。
【請求項８】
解読器は、鍵によって特定される態様と異なったように鍵を用いようとするならば、解読を中止するための回路を含む、請求項３に記載のＰＬＤ。
【請求項９】
鍵は、鍵の組のうち最初の鍵か、中間の鍵か、最後の鍵か、または唯一の鍵かを特定する、請求項３に記載のＰＬＤ。
【発明の詳細な説明】
【０００１】
［発明の分野］
この発明はＰＬＤに関し、より特定的にはビットストリームによりＰＬＤにロードされた設計の保護に関する。
【０００２】
［発明の背景］
ＰＬＤ（プログラマブルロジックデバイス）は、設計者によって選択されるデジタル論理機能を行なう集積回路構造である。ＰＬＤは、論理ブロックおよび配線を含み、典型的には論理ブロックも配線もプログラム可能である。ＰＬＤの一般的なタイプの１つはＦＰＧＡ（フィールドプログラマブルロジックデバイス）で、論理ブロックが、典型的にはルックアップテーブルおよびフリップフロップを含み、典型的にはそれらの入力信号のいかなる機能も生成し記憶することができる。別のタイプはＣＰＬＤ（コンプレックスプログラマブルロジックデバイス）で、論理ブロックがＡＮＤ機能およびＯＲ機能を行ない、入力信号の選択がプログラム可能である。
【０００３】
ＰＬＤの外部のビットストリームを記憶することの問題
ＰＬＤにおいて実現される設計は複雑になってきており、設計を完成しデバックしＰＬＤ内で実現するのに何ヶ月もかかることがしばしばある。設計が、ＰＬＤが一部であるシステムとなり、利潤を得るために販売される場合、設計者はこの設計努力の結果が他人に複製されることを望まない。設計者はその設計をトレードシークレットにすることをしばしば望む。多くのＰＬＤ、特にＦＰＧＡは、ＰＬＤに電源が投入されるたびに、ＰＲＯＭなどの外部装置からロードされなければならない揮発性構成メモリを使用する。構成データはＰＬＤの外部に記憶され構成アクセスポートを介して送信されなければならないので、たとえば基板パターン上にプローブを置くことで、構成アクセスポート上のデータをモニタする攻撃者により設計のプライバシーはたやすく侵害されかねない。
【０００４】
現在の解決策およびその欠点
設計を暗号化する努力がなされてきたが、設計を攻撃者から安全にしかつ合法的ユーザによって使用しやすくすることは困難である。暗号化アルゴリズムは問題ではない。いくつかの暗号化アルゴリズム、たとえば、標準データ暗号化規格（ＤＥＳ）およびより安全な高度暗号化規格（ＡＥＳ）アルゴリズムが、データのブロックを暗号化するものとして公知である。暗号化されていないデータワードと次の暗号化されたデータワードとの排他的論理和を取りその後に解読をする暗号ブロック連鎖（ＣＢＣ）のプロセスにより、ＤＥＳまたはＡＥＳは、データの直列ストリームを暗号化することができ、したがってこれらはビットストリームを暗号化してＰＬＤを構成するのに適切である。設計を暗号化するために使用される鍵は、ＰＬＤと設計を解読する構造との間で安全な態様で何らかの形でやり取りされなければならないので、その設計は、ＰＬＤを構成するために使用される前にＰＬＤによって解読され得る。そして、暗号化されていない設計を用いて一旦ＰＬＤが構成されてしまうと、設計は引続き無許可の発見から保護されなければならない。
【０００５】
ザイリンクス・インコーポレイテッド（Ｘｉｌｉｎｘ， Ｉｎｃ．）のＰｅｔｅｒ Ａｌｆｋｅによる、「構成の問題：電源投入、揮発性、安全性、電池バックアップ」（“Ｃｏｎｆｉｇｕｒａｔｉｏｎ Ｉｓｓｕｅｓ： Ｐｏｗｅｒ−ｕｐ， Ｖｏｌａｔｉｌｉｔｙ， Ｓｅｃｕｒｉｔｙ， Ｂａｔｔｅｒｙ Ｂａｃｋ−ｕｐ”）と題する１９９７年１１月２４日付の刊行物は、ＦＰＧＡ内に設計を保護するための特定のアーキテクチャ的特徴を持たない既存のＦＰＧＡデバイス内の設計を保護するために取り得るいくつかのステップを記載する。１つの方法は、設計構成データをＦＰＧＡにロードし、次に構成データのソースを除去するが、電池を用いてＦＰＧＡへ連続的な電源を維持しながらＦＰＧＡを待機非動作モードに保持することである。しかしながら、電池に対する電源要求のため、この方法は大規模なＦＰＧＡデバイスには実践的でない。
【０００６】
別の可能性は、不揮発性構成メモリである。デバイスを販売する前に設計を工場でロードする場合、構成されたＰＬＤデバイスの購入者が、設計が何であるかを判断することは難しい。しかしながら、リバースエンジニアリング工程により、すなわち、プログラムされたデバイスの覆いを取除き、金属層を除去し、不揮発性メモリセルを化学的に処理することで、どのメモリセルが充電されているのかが暴露され、そのため攻撃者は設計を知ることができてしまう。さらに、不揮発性メモリは、標準のＣＭＯＳプロセス技術よりもより複雑でより高価なプロセス技術を必要とし、市場に投入するのに時間がかかる。
【０００７】
解読鍵をＰＬＤの不揮発性メモリに記憶し、暗号化されたビットストリームをＰＬＤにロードし、ＰＬＤ内の鍵を用いてそのビットストリームを解読することも公知である。これにより、攻撃者は、ＰＬＤにロードされているときにビットストリームを読出すことができず、ＰＬＤから電源が引抜かれたとき鍵を保持できる。そのような構成は、米国特許第５，３８８，１５７５号においてＡｕｓｔｉｎにより記載される。しかし、この構造は、ユーザの設計を攻撃のすべてのモードから保護しない。
【０００８】
設計保護に加えて、ユーザの中にはデータ保護を必要とする者もいる。彼らは、ＰＬＤが電源を失うとき失われるべきでないデータをＰＬＤ内に生成したかもしれない。そのようなデータを保護することが望まれる。
【０００９】
便利で確実かつ安全な設計保護方法が依然必要とされている。
［発明の概要］
この発明は、無許可の使用およびデータ損失からＰＬＤを保護するためのいくつかの構造および方法を提供する。
【００１０】
電源投入時にロードされなければならないスタティックＲＡＭメモリによってＰＬＤが構成される場合、構成データは、デバイスにロードされているときに保護されなければならない。先行技術におけるように、これは、構成データを暗号化しそれを集積回路装置の外部のメモリに記憶し、１つ以上の解読鍵をＰＬＤにロードし、電源が切られたときＰＬＤにその鍵を維持し、鍵を用いて構成データを解読する解読回路をＰＬＤ内に含め、ＰＬＤ内で解読された構成データを生成し、解読された構成データを用いてＰＬＤを構成することにより達成される。
【００１１】
追加のセキュリティのため、不揮発性メモリを用いて鍵を保存するのではなく、この発明は好ましくは、ＰＬＤに接続される電池を用いて、電源がＰＬＤから引抜かれたとき鍵を保存する。鍵を不揮発性メモリに記憶するＰＬＤを取外し、ＰＬＤの覆いを取除き、不揮発性ビットのうちどれが論理１にプログラムされどれが論理０にプログラムされているのかを観察することが可能であるが、スタティックメモリセルにのみ記憶された鍵の内容を判断することは非常に困難であると考えられる、というのも鍵を記憶するためにさえも、鍵を記憶するメモリセルの電源が維持されなければならず、動作電源がＰＬＤに対して連続している状態で、ＰＬＤの覆いを取除き層を除去しプローブを行なわなければならないはずだからである。
【００１２】
ＰＬＤにロードされた設計を攻撃者が盗み得る態様
鍵が十分なセキュリティを提供しなければ、攻撃者は暗号化コードを解読し、鍵の値を判定してしまうであろう。周知のデータ暗号化規格ＤＥＳは５６ビットの暗号化鍵を用いており、高度なコンピュータで数時間のうちに解読されてしまい鍵を暴露してしまう。ＤＥＳは、Ｊｏｈｎ Ｗｉｌｅｙ ＆ Ｓｏｎｓ， Ｉｎｃ．により発行された「応用暗号手法第二版：プロトコル、アルゴリズム、およびＣ言語でのソースコード」（“Ａｐｐｌｉｅｄ Ｃｒｙｐｔｏｇｒａｐｈｙ Ｓｅｃｏｎｄ Ｅｄｉｔｉｏｎ： ｐｒｏｔｏｃｏｌｓ， ａｌｇｏｒｉｔｈｍｓ， ａｎｄ ｓｏｕｒｃｅ ｃｏｄｅ ｉｎ Ｃ”）著作権 １９９６年 の ２６５〜２７８頁においてＢｒｕｃｅ Ｓｃｈｎｅｉｅｒにより記載される。そのような周知の暗号化規格を用いることが望ましい場合、セキュリティを増強するために、構成データは、毎回異なった鍵を用いて何回も暗号化され得り、暗号化が繰返されるたびに約２５６だけ暗号化コードを強化する。もしくは、それは、第１の鍵を用いて暗号化され、第２の鍵を用いて解読され、第３の鍵を用いて暗号化されてもよく、三重ＤＥＳ規格の一部である組合せであってもよい。他の暗号化アルゴリズムを用いてもよく、セキュリティは鍵にあるのでアルゴリズムを秘密にする必要はない。暗号化方法が対称的であるとき、暗号化に使用されるのと同じ鍵をＰＬＤに記憶し逆の順で用いて解読を行なう。
【００１３】
複数の鍵を提供するＰＬＤにおいて、使用されるべき鍵の数およびすべての鍵のアドレスが、暗号化されていないビットストリームで与えられるならば、攻撃者は、一度に１つ鍵を攻撃して鍵の値をより簡単に判断できてしまうであろう。そのような攻撃を回避するために、いくつの鍵が使用されのか、および鍵がある組のうち最後の鍵であるのかまたはさらに以下に続くのかの表示を、ビットストリームではなく鍵の中に記憶することにより、さらなるセキュリティが達成される。
【００１４】
ビットストリームがＰＬＤにロードされた後ビットストリームをリードバックするというオプションをＰＬＤが提供する場合、攻撃者が用い得る別の方法は、このビットストリームをリードバックすることである。設計を攻撃するこの方法を回避するために、ある実施例では、リードバックを提供しかつ暗号化も提供するＰＬＤは、暗号化が使用されてしまうとリードバック特徴を不能化する能力を含む。別の実施例では、リードバックする能力を提供するＰＬＤは、リードバックされる前に構成データを暗号化する。
【００１５】
さらに、いくつかのＰＬＤは、部分的構成（設計のいくつかの部分をロードするためにいくつかの構成アドレスが特定される）、および部分的再構成（既存の設計が消去されてから新しい設計データがロードされる）というオプションを提供する。ＰＬＤがこれらのオプションを提供する場合、攻撃者は、ＰＬＤを部分的に再構成し、設計の連続部分を見えるようにして、おそらくは設計全体を知ることが可能である。そのような攻撃を回避するために、ある実施例では、暗号化された設計がロードされたＰＬＤの部分的構成および再構成は不能化される。別の実施例では、いくつかの構成アドレスが特定され得るが、アドレスは暗号化される。
【００１６】
攻撃のさらに別のモードは、ＰＬＤのセキュリティ状態を示すビットを反転しようとすることである。動作電圧を低下または上昇させ、温度を変化させ、ノイズをある種のポートに与えることが想定される。そのようなビット反転から保護するために、ＰＬＤが暗号化されたビットストリームで作動しているとき、安全モードフラグがセットされ、ある実施例では、このフラグが設定解除されると、すべての構成データが消去される。デバイスが作動している間でも再構成を許可しない別の実施例では、構成データは、ビットストリームが送信される前に消去される。
【００１７】
攻撃の別のモードは、暗号化されたビットストリームの一部を再配置し、それらが非暗号化されるとき、設計者が意図しないＰＬＤの見える部分に置かれるようにすることである。この再配置を防ぐために、暗号化および解読プロセスにおいてアドレス情報を用いて、暗号化されたビットストリームの一部を、設計者が意図したものと異なるＰＬＤ場所に送信することにより、それが意味を有さないデータに異なって解読される。暗号ブロック連鎖（ＣＢＣ）は、この結果を達成する効果的な手段の１つである。暗号ブロック連作において、解読されたデータパケット（ブロック）は、排他的論理和関数を用いて次のデータブロックと組合され、その後に次のブロックを解読し、そのため各データブロックごとの暗号化されたデータは、それに先行するあらゆるブロックおよびこれらのブロックの順番に依存する。データの同一のブロックは、それらに先行するデータブロックの値に依存して異なった値に暗号化される。このように、もしブロックの順序が変更されるならばビットストリームは正しく解読されない、というのも暗号化されたビットストリームが再配置される場所が後続のデータにスクランブルをかけるからである。さらに、初期ＣＢＣ値を修正してデータのアドレスを組込み解読されたデータが特定の位置に置かれるようにして正しく解読を行なうことができる。
【００１８】
代替的に、ＰＬＤが、設計の一部が暗号化され一部が暗号化されないことを可能にしているならば、攻撃者は、設計の暗号化された部分についての情報を読出そうとする暗号化されていない部分を暗号化された部分に加えるかもしれない。したがって、設計が完全に暗号化されるかまたは完全に暗号化されないことを許可するが、これらが混ざらないようにすることにより、さらなるセキュリティが達成される。さらにまた、ある実施例では、データが暗号化されているとき、構成データの単一の開始アドレスの後に単一のフルチップ構成のみを許可することにより、追加のセキュリティが提供される。
【００１９】
さらに、便利な検査およびデバックを可能にし、かつＰＬＤ製造者がその顧客（設計を製造しＰＬＤを構成する設計者）と自由にやり取りすることを可能とするために、ＰＬＤは、動作の暗号化モードおよび非暗号化モードの両方を有し、暗号化モードで動作するとき、ＰＬＤへの構成データのロードを制御する構成ビットストリームの一部はまだ暗号化されない。
【００２０】
攻撃の別のモードとして、ＰＬＤ製造業者が、構成データをロードするためのヘッダ情報およびアドレスを含む、構成ビットストリームフォーマットについての情報を自由に与え、使用された暗号化方法についての情報を与える場合、この周知の情報を暗号化することで、暗号化鍵が暴かれるかもしれない。そのような暴露は、実際の構成データのみを暗号化し制御情報を非暗号化のままにすることにより回避される。
【００２１】
ＰＬＤ製造業者が、鍵メモリが安全モードおよび非安全モードの両方で使用されることを可能にしている場合、攻撃者は、鍵メモリを非安全モードにし鍵を読出すことにより、鍵を簡単に知ることができるかもしれない。そのような攻撃を回避するため、ＰＬＤ製造業者は、鍵メモリが非安全モードに移されると、ＰＬＤにロードされたすべての鍵およびいずれの構成データも消去されるようにする回路を含める。
【００２２】
［詳細な説明］
図１は、ＦＰＧＡ１０の先行技術の構造を示す。ＦＰＧＡはプログラマブルロジック１１を含み、プログラマブルロジック１１は典型的には、（１）ルックアップテーブル組合せ論理関数生成器と、ルックアップテーブルの出力および他の値を記憶するためのフリップフロップと、プログラマブルロジックの論理能力を向上させるためのマルチプレクサおよび論理ゲートとを有する論理ブロックと、（２）信号をＦＰＧＡのまわりに経路付けるための経路およびプログラマブル相互接続点と、（３）経路とＦＰＧＡの外部ピンとの間で信号を駆動するための入力／出力ブロックとを含む。
【００２３】
ＦＰＧＡはまた、経路選択トランジスタをオンにし、マルチプレクサを制御し、ルックアップテーブルを記憶し、入力／出力ブロックを制御するための構成メモリ１２を含み、このすべては、ＦＰＧＡを構成し設計者の所望する機能を行なうするためのものである。バス１６は、構成メモリ１２をプログラマブルロジック１１に接続し、典型的には、ＦＰＧＡ全体にわたっている制御線の分布された組である。いくつかのザイリンクス・インコーポレイテッドの製品（たとえばＸＣ６２００）は、プログラマブルロジック１１により構成ロジック１４がプログラミング情報を構成メモリ１２に送るバス１７を含んでいる。そのような構造は、米国特許第５，７０５，９３８号においてＫｅａｎによって記載される。
【００２４】
ＦＰＧＡ１０はさらに、ＪＴＡＧポート２０とインターフェイスし、特にＦＰＧＡが置かれる基板の検査を意図したＪＴＡＧ論理ブロック１３を含む。ＪＴＡＧ論理ブロック１３は、ＩＥＥＥ規格１１４９．１のスーパーセットであるＩＥＥＥ規格１５３２を実現する。ＪＴＡＧは基板レベルでの設計のデバッグを可能にする。
【００２５】
最後に、ＦＰＧＡ１０は、構成アクセスポート２１で外部源１５からの構成ビットストリームに応答し、ＪＴＡＧ論理ブロック１３とインターフェイスする構成ロジック１４を含む。構成アクセスポート２１上のビットストリームは、ワード、ある実施例では３２ビットのワードとして扱われる。通常ビットストリームの開始または開始付近でのワードのいくつかは、構成プロセスを設定するために用いられ、たとえば構成メモリフレームの長さ、および構成データの開始アドレスを含む。バス１９は、構成ロジック１４とＪＴＡＧ論理ブロック１３との通信を可能にし、ＪＴＡＧポートを別の構成アクセスポートとして用いることができる。バス１８は、構成論理ブロック１４と構成メモリ１２との間の通信を可能にする。特に、それは、メモリ１２の構成フレームを選択するためのアドレスと、書込動作および読出動作を行なうための制御信号と、構成メモリ１２にロードするかまたは構成メモリ１２からリードバックするデータとを運ぶ。
【００２６】
構成論理ブロック１４は、命令およびデータを受け、命令に従ってデータを処理する。これらの命令は、ビットストリームとして構成ロジック１４に入る。命令、またはヘッダの後には通常、処理すべきデータが続く。図２ａは、例示のビットストリーム構造を示す。ヘッダＡは処理を特定し、単一のワード、すなわちデータＡが後続することを特定する。ヘッダＢは処理を特定し、この場合には堀すべき４ワードのデータが後続することを特定する。
【００２７】
図２ｂは、ザイリンクス・インコーポレイテッドから入手可能なバーテックス（Ｖｉｒｔｅｘ）（Ｒ）において使用されるビットストリームにおける３２ビットのヘッダワードのデフォルトのフォーマット（フォーマットタイプ００１）である（バーテックス（Ｒ）は、この発明の譲受人であるザイリンクス・インコーポレイテッドの登録商標である）。このフォーマットは、フォーマットタイプ（００１）を示す３ビットと、演算コードを特定するための２ビットと、構成論理レジスタアドレスのための１６ビットと、ワードカウントのための１１ビットとを含む。演算コードは、読出動作、書込動作、または演算なしを指定することができる。たとえば、００は演算なしを指定することができ、０１は読出を指定することができ、１０は書込を指定することができる。ワードカウントのための１１ビットは、２１１ワードまたは２０４８ワードを特定することができる。図２ｃに示すように、ワードカウントがこれよりも大きければ、フォーマットタイプ００１でのワードカウントビットは０００００００００００に設定され、フォーマットタイプ００１のヘッダの後にはフォーマットタイプ２のヘッダが続く。フォーマットタイプ２は２７ビットを用いてワードカウントを特定し、したがって２２７ワードまたは２６８万ワードを特定することができる。
【００２８】
図２ｄは、バーテックス（Ｒ）ビットストリームのヘッダが構成ロジック１４のレジスタにロードすることのできる制御情報の種類を示す。たとえば、構成論理レジスタアドレス００００を有するヘッダ（フォーマット００１）は、次の３２ビットのデータワードが巡回冗長検査（ＣＲＣ）レジスタにロードされるべきことを明示する。（バーテックス（Ｒ）のデバイスは、１６ビットの巡回冗長検査値を用いるので、いくつかのビットは０で埋められる。）ヘッダがアドレス０００１を含む場合、構成メモリ１２中のフレーム（列）を明示してデータを受けたり与えたりするために、次のデータがフレームアドレスレジスタにロードされる。
【００２９】
図２ｂに示す構成論理レジスタアドレス（１６ビット）は、図２ｄの左側の列に示す４ビットの値を与え、この４ビットの値は、次の３２ビットのデータワードを置くべき構成ロジック１４（図１）中のレジスタの１つを選択する。フレーム長レジスタ（アドレス１０１１）は、構成データがロードされるフレームの長さを特定する。（フレーム長、または列高さは、ＰＬＤの寸法に依存する。より大規模なＰＬＤは通常より高い列またはより長いフレームを有する。ＰＬＤに異なった構造を設けてデータワードをフレームに置くのではなく、ビットストリームのフレーム長を特定しフレーム長をレジスタに記憶することで、内部の構成ロジックは異なった寸法のＰＬＤに対して同一のものとなる。）
リードバックに関しては、読出コマンドが演算コードフィールドに置かれ、フレームデータ出力レジスタがアドレスされ、その後にワードカウントが続く（必要であればコマンドヘッダフォーマット２を用いる）。特定の数のワードが、フレームアドレスレジスタに特定されるアドレスから始まって構成メモリ１２からリードバックされ、構成アクセスポート２１またはＪＴＡＧポート２０のいずれかでシフトアウトされる。（リードバックデータは、リードバック命令を発行したポートに返される）。
【００３０】
ビットストリームヘッダまたはヘッダの対にワードカウントを特定することで（図２ｂおよび図２ｃ）、データワードがロードされるときカウントダウンするカウンタを設定する。多くの構成論理レジスタアドレスについて、ワードカウントは１である。ビットストリームヘッダが、構成データがロードまたはリードバックされていることを示す００１０または００１１の構成論理アドレスを有する場合、ワードカウントはもっと大きくなる。これは、図２ｃのヘッダフォーマット２が使用された場合である。フレームデータ入力レジスタ（アドレス００１０）を介して構成メモリ１２にロードされたデータ、またはフレームデータ出力レジスタ（アドレス００１１）を介して読出されたデータは、設計データと呼ばれる、というのもこれは、ＦＰＧＡに設計を実現させたり設計の状態を示したりするからである。他のレジスタデータは制御データである、というのもそれらは、ロジックが構成またはリードバックされている間に構成ロジックがどのように振る舞うかを制御するからである。
【００３１】
バーテックス（Ｒ）デバイスの構成についての一層の詳細は、９５１２４　カリフォルニア州、サン・ノゼ、ロジック・ドライブ、２１００のザイリンクス・インコーポレイテッド（この発明の譲受人）により２０００年１０月９日に出版された「バーテックス構成ガイド」（“Ｖｉｒｔｅｘ Ｃｏｎｆｉｇｕｒａｔｉｏｎ Ｇｕｉｄｅ”）に見出すことができる。
【００３２】
構成ロジック１４は典型的には、入来する構成ビットストリームに対して巡回冗長検査を行ない（Ｅｒｉｃｋｓｏｎの米国特許第５，３２１，７０４号または上に参照された「バーテックス構成ガイド」の３９から４０ページを参照されたい）、構成されている部分のフレーム長および構成データのワードカウントを示すヘッダビットを読出し、構成データをどこにロードすべきかを識別するアドレス情報を読出し、構成データのフレームを収集してそれらをアドレスに示される構成メモリ１２の列にロードする。構成ロジック１４はまた、構成メモリ１２から外部の場所への構成データおよびフリップフロップ値のリードバックを制御する。ザイリンクス・インコーポレイテッドから入手可能なバーテックス（Ｒ）ＦＰＧＡにおいては、リードバックは、ＪＴＡＧポート２０または構成アクセスポート２１のいずれかを介して行なうことができる。
【００３３】
構成ロジック１４はまた、プログラマブルロジック１１から構成データを受けることができる。ＦＰＧＡの一部がＦＰＧＡの別の部分を構成する先行技術のＦＰＧＡ構造についてのさらなる情報は、Ｋｅａｎの米国特許第５，７０５，９３８号に見られる。バーテックス（Ｒ）アーキテクチャと同様のＦＰＧＡのアーキテクチャについての一層多くの情報は、Ｙｏｕｎｇらの米国特許第５，９１４，６１６号に見出せる。この発明の譲受人であるザイリンクス・インコーポレイテッドから入手可能なバーテックス（Ｒ）製品で用いられるビットストリームのフォーマットは、９５１２４　カリフォルニア州、サン・ノゼ、ロジック・ドライブ、２１００のザイリンクス・インコーポレイテッドから入手可能で２０００年１０月４日に発行された「バーテックスＦＰＧＡシリーズの構成およびリードバック」（“Ｖｉｒｔｅｘ ＦＰＧＡ Ｓｅｒｉｅｓ Ｃｏｎｆｉｇｕｒａｔｉｏｎ ａｎｄ Ｒｅａｄｂａｃｋ”）と題するアプリケーションノートＸＡＰＰ１３８に記載される。
【００３４】
解読付きのＰＬＤ
図３は、この発明のある実施例に従うＦＰＧＡ（ＰＬＤの１タイプ）のブロック図を示す。いくつかの要素は図１に示すのと同じであり、同じ参照番号が付与されており、再び説明しない。さらに、図３は、拡張構成論理ユニット２９と、解読器２４と、鍵メモリ２３とを含む。図３は、鍵メモリ２３がバス２５でＪＴＡＧアクセスポート２０からロードされる実施例を示す。他の実施例では、鍵メモリ２３は、別のポートを介してロードされる。バス２５は、書込および読出動作を行なうためのデータ、アドレスおよび制御信号を運び、ＪＴＡＧポート２０からの解読鍵のプログラミングを可能にする。ある実施例では、バス２６は、構成ポートからの鍵のプログラミングを可能にする。別の実施例では、バス２６が削除される。さらに別の実施例では、バス２６が存在しバス２５が削除される。ここにさらに記載する実施例では、バス２６は、鍵メモリ２３から構成ロジック２９へセキュリティデータを運ぶ。ある実施例では、バス２７は、構成ロジック２９から解読器２４へ暗号化された構成データを運び、解読された構成データを構成ロジック２９に戻す。バス２８は、解読器２４が鍵にアクセスしてデータを解読することを可能にする。図３の構造に暗号化されたデータがロードされているとき、ビットストリームがロードされているのをモニタする攻撃者は、暗号化されたビットストリームのみを受信し、この方法によりユーザの設計を知ることができない。
【００３５】
部分的に暗号化されたビットストリーム
この発明の別の局面に従えば、ビットストリームは、２つの部分、すなわち暗号化できるまたはできないユーザの設計を表わすデータ部と、ビットストリームのロードを制御する（たとえば、ビットストリームの連続部分がロードされるＰＬＤの列のアドレスを与え、ローディング動作の信頼性を検査するための巡回冗長検査（ＣＲＣ）コードを与え、暗号ブロック連鎖（ＣＢＣ）、すなわち暗号化されたデータの発生頻度から解読されたデータを導出することができる「辞書攻撃」を防ぐ技術、の開始番号を与える）制御部とを含む。この発明の好ましい実施例では、データ部は暗号化されてもよいが制御部は暗号化されない。これは追加のセキュリティを与える、なぜならＰＬＤ製造業者はビットストリームの制御特徴を自由に記述する必要があり、この比較的よく知られた制御情報が暗号化された場合、攻撃者は、この情報を解読しこの情報を用いてビットストリーム全体を解読できるかもしれないからである。さらに、ビットストリームの制御部を暗号化されない状態にしておくことにより、ＰＬＤは情報を使用しやすくなる。
【００３６】
別の実施例では、構成データがロードされるアドレスの順序が、設計を解析するに当り攻撃者に役立つかもしれない場合に用いられ、構成データのアドレスも暗号化されるが、構成ビットストリームの他の制御情報は暗号化されないままである。
【００３７】
ビットストリームフォーマット
図４ａ〜図４ｄは、図２ａ〜図２ｄに示す先行技術の製品の構成ロジック１４のフォーマットおよびレジスタと比較した構成ロジック２９のビットストリームフォーマットおよびレジスタの違いを示す。図４ａに示すように、ビットストリームはさらに、ヘッダワードと、後続のデータワードとを含む。典型的な構成では、いくつかの構成データワードはレジスタにロードされ、その後に、暗号化された構成データが始まる。図４ａは、３つのヘッダワード、すなわちヘッダＡ、ヘッダＢおよびヘッダＣの各々の後に、３つの暗号化されていない制御データワード、すなわちデータＡ、データＢおよびデータＣが続く例を示す。（実際の構成では、３つより多い制御データワードが設けられる可能性が高い。）次に、ヘッダＤが、暗号化された構成データが後に続くことを明示し、その後には、暗号化された構成データの多数のワード、すなわちデータ１Ｄ、データ２Ｄ、データ３Ｄなどが続く。このデータが暗号化されていることを強調するために、これらのワードは図４ａにおいて斜線が付けられている。
【００３８】
図４ｂおよび図４ｃに示すように、４つの演算コードが追加される。演算なしの値００、解読なしの読出および書込の０１および１０に加えて、新しい値１１は、書込が解読つきであることを明示する（解読が用いられることや、それが演算コードにより特定されることを明示するために、どのようなコードまたはどのような方法が用いられるかは重要でない）。オプションの暗号化および解読が可能とされ示されることにより、設計者がこのオプションを利用できることだけが重要である。図４ｄの実施例では、２つの新しい構成論理レジスタが追加される。アドレス１１００および１１０１で示されるのは、暗号ブロック連鎖（ＣＢＣ）開始値を保持するレジスタと、初期暗号化鍵のアドレスとである。
【００３９】
オプションの暗号化
この発明の別の実施例に従えば、ＰＬＤはビットストリームの暗号化されたデータ部と暗号化されていないデータ部との両方を受付けることができる。ビットストリームの制御部は、ビットストリームのデータ部が暗号化されているかどうかを示す。ビットストリームのデータ部が暗号化されている場合、それはＰＬＤ内で解読器へと進路を変え、解読後にＰＬＤを構成するために用いられる。暗号化されていない場合、それは進路を変えず、ＰＬＤを構成するために直接使用される。
【００４０】
ビットストリームを暗号化しないことが好ましい場合がいくつかある。設計をデバックする際に使用されるある種のテスト動作は、構成情報をリードバックする必要がある。暗号化ステップが行なわれなかったならば（特に設計者が暗号化が問題と関係あるかどうかを判定しようとする場合）構成上の問題を診断することはより簡単である。また、数人の設計者が、ＰＬＤの幾つかの部分で実現されるコードを書いており、ＰＬＤの異なった部分が別々のときに構成される場合、ビットストリームのすべての部分を見える状態にし、ＰＬＤが部分的に再構成されることを可能にする必要があるかもしれない。
【００４１】
図５ａおよび図５ｂは、最初に暗号化されておらず次に暗号化される同じ設計を表わす例示のビットストリーム部を示し、この発明のある実施例における暗号化されていないビットストリームと暗号化されたビットストリームとの違いを示す。実際のビットストリームは、図の右側の０および１を含み、左側の文を含まない。左側の文は、右側のビットの意味を説明するために設けられている。これらのビットストリーム部は、図４ｂ〜図４ｄに示すコマンドを用いる。図５ａの暗号化されていないバージョンと図５ｂの暗号化されたバージョンとの違いを強調するために、この違いは太字で示してある。
【００４２】
図５ａを見ると、ダミーワード（すべて１と解釈される一定のハイの信号である）および１および０の特定のパターンを有する周期ワード（ｓｙｎｃ ｗｏｒｄ）の後の、次のワードは、１０の演算コードを有するタイプ００１であり、０００００００００００１００００のアドレスおよび００００００００００１のワードカウントを有する。したがって、このワードは、コマンドレジスタＣＭＤをアドレスし、１ワードがそこに書込まれることを特定する。図５ａにはビットストリームの左側に、このワードがＴｙｐｅ １であることを示しかつｗｒｉｔｅ １ ｗｏｒｄ ｔｏ ＣＭＤを示す注釈が付けられている。次のワード１１１は、コマンドレジスタＣＭＤに与えられるべきデータであり、ＣＲＣ（巡回冗長検査）レジスタをリセットする（好ましい実施例では、ＰＬＤは、ビットストリームがロードされているときにビットストリームからＣＲＣ値を計算するための、米国特許第５，５９８，４２４号においてＥｒｉｃｋｓｏｎによって記載されるような図示しない回路を含み、正しくないビットがロードされてしまいかねないビットストリーム電圧のグリッチから保護する）。次に、ヘッダワードは、フォーマットがやはりタイプ１であることを明示し、１ワードをフレーム長レジスタＦＬＲに書込むことを明示する。その後に続くデータワード１１００１は、フレーム長（２５ワード）を特定する。同様に、フレームアドレスレジスタＦＡＲに書込まれるべきワードを特定するヘッダを含む、いくつかの追加のヘッダおよびデータワードが続く。この場合には、後に続くデータワードは、データがアドレス０で始まることを示す。最後にこれらのレジスタがロードされてしまった後、コマンドはデータをフレームデータ入力レジスタＦＤＲＩに書込むようになり、多くのデータが書込まれるので、ワードカウントは０００００００００００として与えられ、タイプ２のヘッダは、１０５３０ワードがＦＤＲＩレジスタに書込まれることを特定する。これは、ＰＬＤが構成されるようにする実際の設計データである。したがって、ビットストリームにおける次の１０５３０ワードは設計データである。最後に、データが正しくロードされたことを保証するために、構成データを発生させたデバイスによって計算されたＣＲＣ値がロードされ、ＰＬＤによって計算されたＣＲＣ値と比較される。構成が完全なものであることを示し、かつＰＬＤを演算モードに移すために、さらなるコマンドおよびデータがロードされる。
【００４３】
図５ｂは図５ａと同様であるが、データおよび注釈が太字で示されている点のみが異なる。図５ｂにおいて、データは暗号化されており、追加のコマンドを用いて初期鍵アドレスを与え２ワード（６４ビット）をＣＢＣ（暗号ブロック連鎖）レジスタに書込む。次に、タイプ１ヘッダは、演算コード１１を含み、フレームデータ入力レジスタＦＤＲＩに書込まれる前にデータが解読されることを示す。その後にはタイプ２ヘッダが続き、やはり演算コード１１を有しており、１０５３０ワードが解読されデータ入力レジスタＦＤＲＩに書込まれる旨の命令を与える。１０５３０個の暗号化されたデータワードが次に続く。次に、ＣＲＣワードが続き、（暗号化された）データが正しくロードされたことを確認する。最後に、追加のコマンドおよびデータが送信され、すべて正しいならばＰＬＤを演算モードにする。
【００４４】
解読プロセス
図６は、ある実施例においてオプションの解読が達成される態様を示す。図６は、構成ロジック２９と、解読器２４へ至るバス２７および２８との詳細を示す。バス２７は以下を含む：
・構成ロジック２９のレジスタアドレス１１０１（図４ｄ）から取得された３ビットの初期解読鍵アドレス「Ｉｎｉｔ＿ｋｅｙ＿ａｄｄｒ」
・６４ビットの修正された暗号ブロック連鎖値「ｍｏｄＣＢＣ」。この値は、構成ロジック２９のレジスタアドレス１１００（図４ｄ）から取得された６４ビットのＣＢＣ値の下位ビットをレジスタ０００１に特定される２２ビットのフレームアドレス値と置換することにより形成される。
【００４５】
・ビットストリームから取られ、解読されたデータをロードするための６４本の回線「Ｅｎｃｒｙｐｔｅｄ＿ｄａｔａ」
・解読器２４により生成された解読データを構成ロジック２９に返すための６４本の回線「Ｄｅｃｒｙｐｔｅｄ＿ｄａｔａ」
・データが「Ｅｎｃｒｙｐｔｅｄ＿ｄａｔａ＿ｌｉｎｅｓ」上にあることを解読器２４に示し、かつ解読器２４が解読を開始できることを示す信号のための回線「Ｅｎｃ＿ｄａｔａ＿ｒｄｙ」
・６４ビットのワード上の解読が完了し「Ｄｅｃｒｙｐｔｅｄ＿ｄａｔａ」上で利用可能であることを構成ロジック２９に示す信号のための回線「Ｄｅｃ＿ｄａｔａ＿ｒｄｙ」
・解読器２４により使用され、構成ロジック２９に構成を中止させ、それにともない、たとえば鍵がある組の最初、中間または最後のものであるかを表わす鍵メモリ中のビットにより特定されるとおりに鍵が使用されていないとき、状態レジスタをセットするＢａｄ＿ｋｅｙ＿ｓｅｔ。図４ｄに示す実施例では、状態レジスタはアドレス０１１１にあり、Ｂａｄ＿ｋｅｙ＿ｓｅｔエラーは、論理１をビットの１つに記憶することにより示される。
【００４６】
バス２８は、以下からなる：
・最初にはバス２７から与えられる鍵アドレスであるが、新しい鍵が使用されるたびに更新される、鍵アドレスのための３本の回線
・解読鍵のための５６本の回線、および
・解読鍵が最初、中間、最後または使用される唯一の鍵であるかを示すための２本の回線。
【００４７】
設計再配置の防止
暗号化されたビットストリームにおける設計に対する攻撃の可能性の１つに、暗号化されたビットストリーム中のフレームアドレスレジスタ（開始アドレス）を変更して、それが解読されたとき、ＦＰＧＡが使用されているときに見えるＦＰＧＡの一部にロードされるようにすることがある。いくつかの設計では、ブロックＲＡＭの内容は見える。すべての設計において、入力／出力ポートの構成は見える状態になっており、そのため、構成ビットを判断することができる。したがって、設計の連続部分がＦＰＧＡの見える部分に移動された場合、ＦＰＧＡが適切に機能しなかったとしても、攻撃者は、再配置を繰り返すことで、暗号化されていないビットストリームの内容を知ることができる。
【００４８】
設計の再配置を防ぐために、ある実施例では、ＤＥＳ規格とともに用いられる暗号ブロック連鎖方法によって使用される初期値が修正される。図７ａおよび図７ｂは、この発明に従って修正された、三重ＤＥＳアルゴリズムの暗号化部と解読部とをそれぞれ示す。標準の暗号ブロック連鎖方法は、開始番号（設計者が供給したものであっても、ランダムに生成されたものであってもよい）と暗号化されるべきデータの最初のワードとの排他的論理和を取ることにより暗号化プロセスを開始する。この発明に従えば、乱数の一部が、アドレス情報、この例では構成メモリ１２においてデータがロードされる最初のフレームの２２ビットのアドレスと置換される。開始ＣＢＣ値、すなわち６４ビットの数は、ｘと標識付けされた最下位ビットがｙと標識付けされたフレームアドレスと置換され、データがロードされるアドレスに依存する修正された６４ビット値を生成する。この修正されたＣＢＣ値は構成情報ワード１の最初のワードと排他的論理和が取られる。暗号化アルゴリズムを用いて最初の暗号化されたワード、すなわち暗号化ワード１を生成し、これはビットストリームに与えられる。図７ａは、外部暗号ブロック連鎖を有する三重暗号化アルゴリズムを示し、これは、第１の鍵を用いる暗号化ステップｅｎｃ１と、その後に続く第２の鍵を用いる解読ステップｄｅｃ２と、その後に続く第３の鍵を用いる暗号化ステップｅｎｃ３とを含む。この第１の暗号化されたワード、すなわち暗号化ワード１は、第２の暗号化されていないワード、すなわちワード２との排他的論理和が取られ、暗号化プロセスを繰返して暗号化されたワード２を生成する。すべての構成データが暗号化されてしまうまで排他的論理和連鎖は続く。
【００４９】
図７ｂに示すように、ＰＬＤは、解読されたワードを得るために逆のプロセスを行なわなければならない。上述の暗号化シーケンスについて、解読シーケンスは、鍵３を用いる解読ステップｄｅｃ１と、次に鍵２を用いる暗号化ステップｅｎｃ２と、次に鍵１を用いる解読ステップｄｅｃ３とである。重要なことは、解読ワード１を生成するための初期値の一部は、暗号化についても解読についても同じフレームアドレスを用いることである。ビットストリームではなく、ＰＬＤは、フレームアドレスレジスタに記憶されたフレームアドレスから修正されたＣＢＣ値を生成するが、これはまた、構成データがロードされる構成メモリ１２のフレームを特定するためにも使用される。したがって、攻撃者が、データがロードされるフレームアドレスを変更すると、修正されたＣＢＣ値がそれに伴って変化し、構成データは正しく解読されない。
【００５０】
排他的論理和ステップは、暗号化される前は設計者のビットストリームにあった元々のデータを生成する。たとえば、元のワード１＝解読ワード１である。この解読された構成データは、バス２７（図３）で構成ロジック２９に送られる。
【００５１】
構成ロジック２９
構成ロジック２９は、オプションの暗号化をサポートする構造と、設計再配置および単一鍵攻撃を防止するための構造とを含む。図６に示すように、構成ロジック２９は、保持レジスタ２９２と、制御ロジック２９１と、構成レジスタ（ＦＤＲＩ、ＦＡＲ、ＣＲＣおよびｉｎｉｔＣＢＣが示される）と、解読器２４インターフェイスマルチプレクサ２９４および２９５と、６４ビットのアッセンブリレジスタ２９７と、レジスタ２９８および２９９（構成アクセスポート２２１とインターフェイスする）とを含む。６４ビットのシフトレジスタ２９９は、１ビット幅のデータのための単一のピンであっても、８ビット幅のデータのための８個のピンであってもよい構成アクセスポート２１からデータを受ける。レジスタ２９９がいっぱいになるまでこのデータは６４ビットのシフトレジスタ２９９にロードされる。そして、これらの６４ビットは、好ましくは、６４ビット転送レジスタ２９８に並列にシフトされる。そこから、マルチプレクサ２９６ｂが右側および左側の３２ビットワードを交互に選択し、マルチプレクサ２９６ａが、制御線Ｍによって制御されるように、保持レジスタ２９２へまたはアッセンブリレジスタ２９７の高位部分と低位部分とへ交互に、データを一度に３２ビットずつ移動する。ビットストリームのロードが始まると、回線Ｍおよび図示しないクロック信号により、マルチプレクサ２９６ａおよび２９６ｂは、６４ビット転送レジスタ２９８から保持レジスタ２９２にデータを移動する。そこから、これらのワードは制御ロジック２９１に与えられる。ワードがヘッダである場合、制御ロジック２９１はこのワードを解釈する。演算コードが、後続するデータが暗号化されずに書込まれるべきことを示す場合、制御ロジック２９１は、レジスタを選択するためにバスＧにアドレスを与え、回線Ｌに信号を与えてマルチプレクサ２９４にバスＢからバスＤに接続させ、これに続くワードをバスＢに与える。次のクロック信号（クロック信号は図示しない）で、バスＤ上のデータはアドレスされたレジスタにロードされる。図４ｄに示すすべてのレジスタは、このようにロードされ得る。初期暗号ブロック連鎖値をロードするためのｉｎｉｔＣＢＣレジスタは、６４ビットのレジスタであり、図５ｂに示し上述したように２つの連続した３２ビットワードを受ける。
【００５２】
（１）ｉｎｉｔＣＢＣレジスタに記憶された元のＣＢＣ値と、（２）ＦＡＲレジスタに記憶された初期フレームアドレスとから形成された、修正されたＣＢＣ値は、解読器２４に利用可能となる。ある実施例では、ＦＡＲレジスタ中の初期フレームアドレスは、３２ビット以下を使用するが、ｉｎｉｔＣＢＣ値は６４ビットを用いる。図６の実施例では、修正されたＣＢＣ値を供給する６４ビットのバスは、フレームアドレスレジスタＦＡＲからの２２ビットと、ｉｎｉｔＣＢＣレジスタからの４２ビットとを含む。この発明によって提供されるセキュリティに重要なことには、この値は構成データがロードされるところに依存する。攻撃者が、ＦＡＲレジスタの内容を変えることにより、暗号化されたデータを異なった場所にロードしようとするならば、解読器２４に供給されるｍｏｄＣＢＣ値も変化してしまうだろう。
【００５３】
構成データの多数のワードを解読するための演算コードコマンドが制御ロジック２９１によって受けられると、解読プロセスが始まる。制御線Ｍにより、マルチプレクサ２９６ａは、転送レジスタ２９８からアッセンブリレジスタ２９７に至るバスＡにデータを与える。制御バスＨは、暗号化データレジスタ２９７の高位［３１：０］部および低位［３１：０］部とにバスＡを交互に接続して、解読されるべき６４ビットワードを形成する。制御ロジック２９１は次に、Ｅｎｃ＿ｄａｔａ＿ｒｄｙ信号をアサートし、これにより解読器２４はレジスタ２９７中のデータを解読する。
【００５４】
解読を行なうために、解読器２４は、鍵アドレスＫｅｙ Ａｄｄｒをバス２８で鍵メモリ２３（図３）に与える。これにより、鍵メモリ２３はそのアドレスの５６ビットの鍵を５６ビット鍵線に返す。また、鍵メモリ２３はそのアドレスの鍵データに記憶された２つの追加のビット「Ｏｒｄｅｒ」を返す。第１の解読鍵について、これらの２つのビットは、これが第１の鍵または唯一の鍵であることを示さなければならない。そうでない場合、解読器２４はＢａｄ＿ｋｅｙ＿ｓｅｔ信号をアサートし、これにより制御ロジック２９は構成動作を中止する。これらの２つのビットが、鍵が第１の鍵はまたは唯一の鍵であることを示す場合、解読器２４は、たとえば（Ｓｃｈｎｅｉｅｒにより同書に記載される）周知のＤＥＳアルゴリズムを用いて解読を行なう。鍵が唯一の鍵でなければ、解読器２４は鍵メモリ２３中の次のアドレスの鍵を獲得し、それが中間または最後の鍵かを２つのＯｒｄｅｒビットが示すかどうかを確認する。そうでなければ、Ｂａｄ＿ｋｅｙ＿ｓｅｔ信号がアサートされ構成が中止される。もしそうであれば、解読が行なわれる。それが中間の鍵であるならば、解読の別の一巡が行なわれる。それが最後の鍵であるならば、解読器２４は、解読されたワードと値ｍｏｄＣＢＣとの排他的論理和関数を形成する。解読器２４は次に、得られた値を６４ビットのＤｅｃｒｙｐｔｅｄ＿ｄａｔａバスに与え、Ｄｅｃ＿ｄａｔａ＿ｒｄｙ信号をアサートする。これにより、制御ロジック２９１は信号を制御線Ｋに与えて、マルチプレクサ２９５が６４ビットワードを２つの連続した３２ビットワードに分割するようにする。制御ロジック２９１は信号を回線Ｌに与えて、マルチプレクサ２９４が解読されたデータの３２ビットワードをバスＤに転送するようにする。制御ロジック２９１はまた、アドレス信号をバスＧに与えてフレームデータ入力レジスタＦＤＲＩをアドレスする。次のクロック信号が、解読されたデータをバスＥに移動させ、それはフレームレジスタにロードされ、フレームレジスタが一杯になると、ＦＡＲレジスタに示されるアドレスで構成メモリ１２に最終的にシフトされる。
【００５５】
ｍｏｄＣＢＣ値は、解読動作において１回のみ使用される。暗号化されたデータの後続の６４ビットワードが解読され、先に解読されたデータを用いて連鎖され排他的論理和演算を行なう。（ＦＡＲレジスタに記憶される値も、フレームアドレスを選択するために１回のみ使用される。したがって、フレームが一杯になるたびにフレームアドレスはインクリメントされるだけである。）
動作の流れ
図８は、構成ロジック２９および解読器２４によって行なわれる動作の流れを示す。構成ロジック２９は、ビットストリームヘッダをロードし、対応するデータを図４ｂに示す構成論理レジスタに置くことにより、ビットストリーム長を判断することを含むステップ７０で始まる。ステップ７１で、起動シーケンスの後続の部分として、構成ロジック２９は、最初の構成メモリアドレスを読出す。ビットストリームフォーマットは、暗号化が用いられているかどうかを示す演算コードを含むことを想起されたい。ステップ７２は、演算コード値により分岐する。暗号化が用いられていない場合、この処理は図８の左側部分に示すとおりである。暗号化が用いられている場合、処理は図８の右側に示されるものである。暗号化がない場合、ステップ７３で、構成ロジック２９は、カウンタをビットストリームワードカウント（図４ｃ参照）に等しくセットする。ステップ７４で、構成データの３２ビット（１ワード）が構成メモリ１２のアドレスされたフレームに送られる。カウンタが終了したことをステップ７５が示す場合、ステップ７６でカウンタがデクリメントされ、構成データの次の１ワードが構成メモリ１２に送られる。カウンタが処理を終了した場合、構成ロジック２９は、最終巡回冗長値を読出してビットストリームの最後の値と比較しビットストリームのロードにエラーがあったかどうかを判定することを含むクリーンナップ動作を行なう。
【００５６】
ビットストリームが暗号化されていることをステップ７２が示す場合、カウンタにはワードカウントがロードされ、ステップ８１で、この処理は、初期鍵アドレスを鍵アドレスレジスタ２９３（図６）から解読器２４にロードする。
【００５７】
ステップ８２で、暗号化された構成データの２ワード（６４ビット）が解読器２４にロードされる。ステップ８３で、アドレスされた鍵が解読器２４にロードされる。ある実施例では、６４ビットの数が解読器２４にロードされる。この６４ビットの数は、５６ビットと、それが最初の鍵か、中間の鍵か最後の鍵かまたは唯一の鍵であるかを示す２ビットと、未使用であってもパリティのために使用されても別の目的のために使用されてもよい、いくつかの他のビットとを含む。別の実施例では、６４ビットの鍵データは、それが最後の鍵であるか否かを示す単一ビットを含む。さらに別の実施例では、６４ビット鍵データが次の鍵のアドレスを含むので、鍵はシーケンシャルな順序で使用されなくてもよい。別の実施例では、追加ビットが存在せず、鍵データは６４ビット未満を用いる。さらに別の実施例では、鍵ではなくビットストリームが、いくつの鍵が使用されるべきかを示すが、これは、安全性が低いと考えられる。というのも攻撃者が、いくつの鍵が用いられるかがわかり単一鍵攻撃を行なって、一度に１つの鍵を解読することができるからである。これに対し、いくつの鍵が使用されるべきかを示す鍵を用いれば、この情報は攻撃者に漏れない。
【００５８】
ステップ８４で、解読器２４は、たとえばＤＥＳアルゴリズムを用いて５６ビットの鍵で６４ビットのデータを解読する。ＤＥＳアルゴリズムは、Ｂｒｕｃｅ Ｓｃｈｎｅｉｅｒによる上述の本の２６５から２７８頁に記載されている。たとえば、高度暗号化規格ＡＥＳなどの他の暗号化アルゴリズムを用いてもよい。他のアルゴリズムはより多くの鍵ビットを必要とするかもしれない。たとえば、ＡＥＳは１２８から２５６ビットの鍵を必要とする。
【００５９】
ステップ８５は、より多くの鍵が使用されるかどうかを判断する。鍵が最初、中間、最後または唯一の鍵であるかを示す２ビットを調べて、これが最後の鍵であるかどうかを判定し、そうでなければ、鍵アドレスがインクリメントされ、解読器２４はメモリ２３中の次の鍵をアドレスする。
【００６０】
最後の鍵が使用された後、ステップ８７で、レジスタＦＡＲおよびｉｎｉｔＣＢＣを組合わせることから６４ビット値として図６に示す修正されたＣＢＣ値と、ステップ８７で得られた解読された値との排他的論理和がとられる。ある実施例では、ＣＢＣレジスタにロードされる６４ビットの乱数のうち２２ビットが、ビットストリームの始まりのフレームアドレスと置換される。この暗号化処理の目標は、６４ビットの暗号化された値のあらゆる桁を、鍵に加えてすべての前のビットの関数とすることである。ＣＢＣ値を最初のアドレスと組合せることの目標は、ビットストリームが意図された開始アドレスと異なるアドレスにロードされる場合、解読された値が変わるようにすることである。ステップ８７は、この目標の両方を達成する。次に、新しいＣＢＣ値が記憶される。図６に示すＦＡＲレジスタおよびＣＢＣレジスタに記憶されても、または解読器２４にある別のレジスタに記憶されてもよい。
【００６１】
ステップ８８で、この解読された構成データはバス２７（図３）で構成ロジック２９に送られる。構成ロジック２９は、更新された巡回冗長検査値を計算し、ロード処理の終りにＣＲＣレジスタに記憶された巡回冗長値と比較する。構成ロジック２９が暗号化を用いるように設定されているならば、構成ロジック２９のマルチプレクサは、この解読された構成データを構成メモリ１２のアドレスされた列に転送する。
【００６２】
ステップ８９で、カウンタが検査され、もし終了していなければ、ステップ９６でカウンタはデクリメントされ、処理はステップ８２に戻り、ここで次の６４ビット（２ワード）がビットストリームからロードされる。
【００６３】
最後に、カウンタが終了したことをステップ８９が示す場合、ステップ９０で、ビットストリーム中のＣＲＣ（巡回冗長検査）値が、ビットストリームがロードされるときに計算されたＣＲＣ値と比較される。これらの値が一致するならば、構成は完成しておりＦＰＧＡは動作に入る。これらの値が一致していなければ、ロードの際のエラーが発生しており、構成処理全体が中止される。
【００６４】
鍵の順序の評価−単一鍵攻撃の防止
図９は、鍵の順序を評価するために解読器２４によって実現される状態マシンを示す。状態マシンは、Ｅｎｃ＿ｄａｔａ＿ｒｅａｏｌｙ信号が活性化されるまで状態Ｓ１にある。この信号は、解読が開始可能で決定状態Ｑ１に移ることを示す。決定状態Ｑ１では、解読器２４は、バス２７上のアドレスＩｎｉｔ＿Ｋｅｙ＿ａｄｄｒにより特定されるアドレスをバス２８に与え、鍵および鍵の順序をリードバックし、２ビットの鍵順序データから、鍵が最初または唯一の鍵であるかを判定する。そうでなければ、解読器２４は、Ｂａｄ＿ｋｅｙ＿ｓｅｔ信号を制御ロジック２９１に送り、制御ロジック２９に構成を中止させる。アドレスが最初または唯一のものであれば、解読器２４は状態Ｓ３に入り、データを解読する。そして、状態マシンは決定状態Ｑ２に入り、鍵が最後または唯一のものかを判断する。もしそうであれば、解読が完了し状態Ｓ４で解読器２４は解読されたデータを構成ロジック２９に返す。そうでなければ、状態Ｓ５で、解読器２４は鍵アドレスをインクリメントし、新しい鍵を獲得する。状態マシンは、次の鍵が中間または最後の鍵であるかを判断するための質問Ｑ３を尋ねる。そうでなければ、状態Ｓ２は構成を中止させる。鍵が中間または最後のものであれば、状態マシンは状態Ｓ３に戻りデータを再び解読する。別の実施例では、状態Ｓ４において、解読器２４は、ＣＢＣ値と解読されたデータとの排他的論理和をとるステップも行なう。
【００６５】
鍵の中に鍵の順序を記憶することの利益は、攻撃者が単一鍵攻撃を実現できないことである、というのも、攻撃者は、解読を行なう際、解読器２４が（設計者によって意図される）鍵メモリ２３によって特定される鍵のすべてを用いることを防ぐことができないからである。鍵の順序がＰＬＤ内の鍵データ内に記憶されるので、第２の質問Ｑ２および第３の質問Ｑ３を尋ねて単一鍵攻撃を使用する攻撃者から保護する必要はない。しかしながら、有利には、鍵をロードする設計者または基板検査師は、３つの質問のすべてを尋ねて各鍵がロードされる際に確実に正しく標識付けされるようにする。
【００６６】
ある実施例では、解読器２４は、解読−暗号化−解読シーケンスを備える三重ＤＥＳ規格を用い、別の鍵が使用されるたびにアルゴリズムを（ぼんの少しだけ）交互にする。そのような組合せは、ＡＮＳＩ　Ｘ９．５２　１９９８三重ＤＥＳ規格に従っている。別の実施例では、毎回解読が使用される。
【００６７】
鍵メモリ２３
図１０ａに示す回路は、３つの構成要素、すなわち電池供給スイッチ２２と、制御ロジック２３ａと、鍵レジスタ２３ｂとを含む。制御論理回路２３ａおよび鍵レジスタ２３ｂは図３の鍵メモリ２３を含む。図１０ａの実施例では、鍵レジスタ２３ｂは６個の６４ビットワードを含む。もちろん、他の鍵メモリの寸法がこれに代えて使用されてもよい。他の実施例では、鍵メモリ２３に記憶される鍵は６つよりはるかに多くてもよく、使用される鍵のアドレスを与えるためには３ビットより多くが必要とされる。鍵レジスタ２３ｂの電源は、ラインＶＳＷＩＴＣＨにより電池供給スイッチ２２から来る。鍵メモリ供給電圧ＶＣＣＩが不十分か存在していない場合、電池供給スイッチ２２が電池バックアップ電圧ＶＢＡＴＴをＶＳＷＩＴＣＨラインに与え、これによりＶＳＷＩＴＣＨは正の電圧を担持する。
【００６８】
この実施例では、各鍵レジスタは６４個のメモリセルを有する。各セルはライトイネーブル信号ＷＥを受け、これは高レベルのとき、データがセルに書込まれ、低レベルのときセルのデータが保持される。あるレジスタにおけるセルは共通のライトイネーブル信号ＷＥを有する。ＰＬＤ電源電圧（ＶＣＣＩと異なる）がなくそのためＷＥ信号が活性に駆動されない場合、Ｔ１などの弱いプルダウントランジスタがＷＥ信号をプルダウンして、いずれの鍵メモリレジスタもアドレス不可能とし、いずれのメモリセルも妨害されないようにする。
【００６９】
ある実施例では、ＰＬＤのＪＴＡＧポートは、解読鍵をＰＬＤにロードするために用いられる。メモリセル電源電圧は、通常動作時にはＶＣＣＩのデバイス電圧レベルにあり、ある実施例では、このレベルは３．０と３．６ボルトとの間である。ＪＴＡＧポートに与えられる信号は幾つかの異なった電圧であってもよい。また、いくつかの異なった内部電圧があってもよい。したがって電圧変換が必要である。この電圧変換はメモリセルにおいて行なわれる。メモリセルの詳細は図１０ｂに示される。インバータＩ１およびＩ２を含むラッチには、ＶＳＷＩＴＣＨによって電源が供給され、このためデバイス電源電圧ＶＣＣＩがあってもなくても電源が供給される。ＷＥ信号および反転されたデータ信号ｄａｔａ＿ｂはどちらも１５ボルトのレベルで作用する。これらの信号は、ＮＭＯＳトランジスタＴ４、Ｔ５およびＴ６を駆動し、インバータＩ３を介して（１．５ボルトの電源電圧も用いる）トランジスタＴ７を駆動する。図１０ｂは、ＷＥが低レベルのときトランジスタＴ４およびＴ５がオフであることを示し、インバータＩ１およびＩ２を含むラッチの内容が保持される。ＷＥが高レベルのとき、インバータＩ１およびＩ２の一方が低レベルになり、新しいデータをラッチにロードする。
【００７０】
制御論理回路２３ａはＪＴＡＧバス２５（図３にも示す）から信号を受ける。ＪＴＡＧバス２５は、書込、読出、安全モードを設定するための制御信号ならびにデータバスおよびアドレスバスを含む。このインターフェイスは、ＩＥＥＥ１５３２ＪＴＡＧ規格に準拠している。鍵メモリ２３がＪＴＡＧバス２５を介してアクセス可能となる前に、セキュリティ状態（バス２６）が非安全モードにされるが、これは、ＩＳＣ＿ＰＲＯＧＲＡＭ＿ＳＥＣＵＲＩＴＹ命令（図１０ａを参照）を用いて鍵データバスのビット０に論理１を与えることで行なうことができる。鍵メモリ２３は、ＩＥＥＥ１５３２規格のＩＳＣ＿ＰＲＯＧＲＡＭ命令およびＩＳＣ＿ＲＥＡＤ命令を用いてＪＴＡＧバス２５に書込まれＪＴＡＧバス２５から（検証のために）読出される。制御ロジック２３ａは、ＪＴＡＧバス２５から３ビットのアドレス信号ＡＤＤＲをデコードするデコーダを含み、ＩＳＣ＿ＰＲＯＧＲＡＭ命令がＪＴＡＧバス２５に現われる場合、書込ストローブ線ｗｓ＿ｂ［５：０］のうちアドレスされたものに低レベルになるパルスを生成し、またはＩＳＣ＿ＲＥＡＤ命令がＪＴＡＧバス２５に現われる場合、読出選択線ｒｓｅｌ［５：０］のうちアドレスされたものに高レベルの信号を生成する。６個の６４ビットワードのうちの１つは、高レベルの信号を６本の読出選択線ｒｓｅｌ［５：０］の１本に与え、読出マルチプレクサ２３ｄが選択されたワードを６４本の出力線ｑ［６３：０］に与えることにより、読出すことができる。書込選択線または読出選択線のうち１つのみが一度に選択される。どの読出選択信号もアサートされない場合、高レベルのｐａｒｋ＿ｌｏｗ信号により、６４個のトランジスタ２３ｅが６４本の線ｑ［６３：０］をプルダウンし、これらの回線が浮遊するのを防ぐ。
【００７１】
鍵メモリ２３が非安全モードで作動している場合、６４ビットワードを鍵レジスタ２３ｂからＪＴＡＧバス２５に読出すことができ、ＦＰＧＡの外部で値を調べることができる。レジスタ２３ｂ中の選択された６４ビットワードのうち５６ビットをＤＥＳ解読のための５６ビットの鍵として用いることにより、ＦＰＧＡをこの非安全モードでテストすることができる。ある実施例では、鍵メモリ２３が非安全モードにあるとき、設計がロードする前に暗号化されていたとしてもユーザの設計のリードバックは可能である。これにより、設計者は暗号化された設計でもテストおよびデバッグすることができる。鍵セキュリティ状態の通信はバス２６を介している（図３も参照）。
【００７２】
値が鍵レジスタ２３ｂに書込まれバス２５からの読出動作で確認された後、制御ロジック２３ａは、ＩＳＣ＿ＰＲＯＧＲＡＭ＿ＳＥＣＵＲＩＴＹ命令を用い、ＩＥＥＥ１５３２規格の一部である６４ビットの鍵データバスのビット０に論理０を与えることにより安全モードに置かれる。安全モードでは、いかなる鍵へのアクセスも許されない。
【００７３】
図１１に示すように、ＩＳＣ＿ＰＲＯＧＲＡＭ＿ＳＥＣＵＲＩＴＹ命令を用いて鍵を読出すことにより確実に攻撃者が非安全モードに戻ることができないように、セキュリティが除去された場合（ＩＳＣ＿ＰＲＯＧＲＡＭ＿ＳＥＣＵＲＩＴＹ信号が非安全論理レベルに移る場合）、制御ロジック２３ａの状態マシンは、一度に１ワードずつ、すべての６個のワードに０を書込むことによりすべての鍵を消去する。これは、ステップ１１０で、０をｗｄａｔａ［６３：０］バスに与え、ステップ１１１でｗｓ＿ｂ［０］信号を（論理０値で）アサートし、次にステップ１１２〜１１７で一度に１つずつｗｓ＿ｂ［０：０］信号からｗｓ＿ｂ［５：０］信号を連続的にストローブし、その後ステップ１１８でセキュリティ状態を変更して非安全モードに入り、最後にステップ１１９でｗｄａｔａ［６３：０］論理０値を解放することによりなされる。したがって、電池でバックアップされたメモリ２３を非安全モードにしようとすると、鍵レジスタ２３ｂにある値のすべてが消去されてしまう。
【００７４】
鍵メモリ２３が安全モードにあるかどうかを伝達するために、制御ロジック２３ａは、鍵メモリ２３が安全モードで動作していることを示すために安全モード信号をバス２６（単一の線であってもよい）で構成ロジック２９に送る。この信号が非安全モードに切換わるならば、構成ロジック２９は構成メモリ１２から設計をクリアする。なお、鍵が鍵レジスタ２３ｂに記憶されておりかつ鍵メモリ２３が安全モードにあるとしても、暗号化されていないビットストリームは構成ロジック２９により構成メモリ１２にロードされ得る。
【００７５】
鍵のロード、複数の暗号化鍵
ユーザが設計の詳細を知ることのできない安全モードにＰＬＤが入る前に、解読鍵はＰＬＤにロードされなければならない。図３に示す実施例では、鍵はＪＴＡＧポートを介してロードされる。
【００７６】
この発明の特徴として、暗号化鍵はこのＪＴＡＧポート２０を介してロードされる。ＪＴＡＧプログラマは基板のテスト中に暗号化鍵をロードすることが求められる。鍵を記憶するためのＲＡＭが非安全モードにあるとき、ユーザはそれへの完全なアクセスを有しており、設計が暗号化されていたとしても鍵および設計の両方を読出すことができる。鍵をテストしながら鍵を使用できるのでこれは設計者にとって有用である。そして、設計者が動作に満足すると、別の命令をＪＴＡＧポートを介して送り、鍵メモリを安全モードにすることができる。鍵メモリが安全モードになってしまうと、鍵は読出すことができない。さらに、鍵メモリを安全モードから非安全モードに移すことで、メモリ初期化処理を起動する回路を活性化することにより鍵が消去される。（以下に記載する図１５は、この機能を行なうための状態マシンを示す。）
この発明のある局面に従えば、設計を暗号化するのに２つ以上の鍵が用いられてもよい。たとえば、３つの鍵が用いられる場合、まず第１の鍵を用いてビットストリームを暗号化し、第２の鍵を用いて得られた暗号化されたビットストリームを再び暗号化し、最後に第３の鍵を用いて得られた二重に暗号化されたビットストリームを再び暗号化する。この三重に暗号化されたビットストリームは、たとえば、ＰＬＤを保持するプリント回路基板上のＰＲＯＭまたはフラッシュメモリに記憶される。
【００７７】
解読については、これらの鍵を連続して（逆の順序で）用いて、暗号化されたビットストリームを繰返し解読する。さらに、特定の設計を解読するのに使用されるよりも多くの鍵がＰＬＤに記憶されている場合、暗号化されたビットストリームは、暗号化されていない部分に、いくつの鍵が使用されるべきかの指示と、第１の鍵のアドレスとを含み得る。そのような実施例では、攻撃者は一度に１つの鍵に対処するだけでよいので、攻撃者は容易にビットストリームを解読できてしまうかもしれない。代替的に、鍵自体が、それらが最初の鍵か、中間の鍵か、最後の鍵か、または唯一の鍵であるかを示してもよい。したがって、同じＰＬＤを、異なった機能（異なった設計で構成される）を行なうように何回かに分けてプログラムすることができ、異なった鍵の値についての情報を、設計者の１人にのみまたは幾人かに利用可能とすることができる。したがって、どちらの設計も同じＰＬＤに実現される（何回かに分けて）としても第１の設計者が第２の設計について知らないことがあり得る。
【００７８】
図３に関し、構成ロジック２９は、図１の構成ロジック１４を超える追加のロジックを含む。図１の構造におけるように、構成アクセスポート２１上のビットストリームは、ワードとして、ある実施例では３２ビットのワードとして扱われる。通常、ビットストリームの開始におけるまたはその付近におけるワードのうちのいくつかが、ヘッダ情報、たとえばビットストリームの長さ、構成データの開始アドレスを含む。この発明のビットストリームにとって新しいことは、ビットストリームが暗号化されているかどうかについての指示と、ビットストリーム中の構成データを解読するための鍵のアドレスとである。
【００７９】
電池でバックアップされたメモリ
鍵メモリ２３に記憶される値は好ましくは、ＦＰＧＡの電源が引抜かれるとき電池により保持される。
【００８０】
さらに、暗号化鍵以外のメモリも、スイッチ２２などの電池供給スイッチを用いてバックアップされてもよい。特に、ＰＬＤの電源が切られたときＰＬＤによって生成されたデータを保存することを目的とするならば、ＶＳＷＩＴＣＨ電圧供給がＰＬＤ中のすべてのフリップフロップに経路付けられるＰＬＤを製造することができる。ＰＬＤの電源が切られたときＰＬＤの構成を保存することをも目的とするならば、構成メモリ１２（図３）がその代わりにＶＳＷＩＴＣＨから電源供給されてもよいが、そのような実施例は、ＰＬＤ中のフリップフロップのみに電源供給するよりもかなり大きな電池電源を必要とし、フリップフロップに電源を供給することは、数個の暗号化鍵を記憶するための非常に小さなメモリに電源を供給するよりも大きな電池電源を必要とする。
【００８１】
図１２は、電池供給スイッチ２２の構造を示す。この実施例では、ＶＢＡＴＴレベルシフト回路３１により、ＰＬＤは電池と主電源とで異なった電圧を用いることができる。もちろん、回路の目的は、異なる電圧レベルに対処することである。ある実施例では、電池供給スイッチ２２が、３．６ボルトまでのＶＣＣＩ電圧を扱うことができ、ＶＣＣＩが約１ボルトより下に下がると電池電源に切換わる。電池電圧は１．０と３．６ボルトとの間であり得る。
【００８２】
電池供給スイッチ２２は、４個の出力駆動用ＰチャネルトランジスタＰ０〜Ｐ３を含む。トランジスタＰ０およびＰ１はトランジスタＰ２およびＰ３と同様にともにオンオフする。この回路は、ＶＣＣＩおよびＶＢＡＴＴがともに接続される可能性を回避するために、１つではなく各脚ごとに２つのレジスタを含む。トランジスタＰ０は、トランジスタがオフであるときでも図面の上方に電流を伝導することのできる寄生ダイオード（ドレインと基板との間のｐｎ接合）を含む。そのような電流の流れを防ぐために、トランジスタＰ１が追加され、寄生ダイオードの導通が下方にのみ可能であるようにその基板はドレインに接続される。同様の構成がトランジスタＰ２およびＰ３でなされる。したがって、電流がＶＢＡＴＴからＶＣＣＩへまたはＶＣＣＩからＶＢＡＴＴに伝わる可能性はない。インバータ３３および３４はＶＳＷＩＴＣＨ電圧から電源供給されるので、ＶＣＣＩがオフであるときもそれらは常に作動できる。トランジスタＰ４は常にオンである抵抗器であり、静電気の放電から保護する。ほとんどの場合、トランジスタＰ４により制御される構造は電流を消費しないので、通常トランジスタＰ４での電圧降下はない。
【００８３】
図１３は、ＶＢＡＴＴレベルシフト回路３１のある実施例を示す。端子ＯＵＴでの出力電圧は、信号ＩＮおよびＩＮＢにより制御される。これらの信号は、インバータ３３および３４により生成され、それらの電源電圧をＶＳＷＩＴＣＨノードから得る。したがって、ＶＳＷＩＴＣＨがＶＢＡＴＴにより供給される場合、信号ＩＮおよびＩＮＢの一方は電圧ＶＢＡＴＴとなり他方は接地となる。しかしながら、ＶＳＷＩＴＣＨがＶＣＣＩによって供給される場合、ＩＮおよびＩＮＢの一方がＶＣＣＩ電圧レベルとなる。ＩＮがＶＣＣＩでありＩＮＢが接地である場合、トランジスタ４５はオンになりトランジスタ４６はオフになる。Ｐチャネルトランジスタ４３のゲートはローになり、トランジスタ４３はオンになりインバータ４７の入力をＶＢＡＴＴにする。トランジスタ４８の出力もＶＢＡＴＴとなる。図１２に戻って、トランジスタＰ０のゲートの電圧レベルＶＢＡＴＴはトランジスタＰ０を順方向にオフにする。
【００８４】
図１４は、ＶＣＣＩ検出回路３２を示す。ＶＣＣＩ検出回路３２は、いつラインＶＳＷＩＴＣＨ上の電圧が電池に切換えられ再びＶＣＣＩに切換えられるかを判断する。回路３２のこの実施例は本質的に、一列の５つのインバータ段Ｉ１〜Ｉ５である。切換電圧の制御は主としてインバータ段Ｉ１で行なわれる。トランジスタ５２および５３はＣＭＯＳインバータを形成する。このＣＭＯＳインバータへの電力はＰチャネルトランジスタ５１を通って流れなければならないが、これはＶＣＣＩがトランジスタ５１のしきい値電圧、典型的には０．７〜０．８ボルトに達するまではオンとならない。ＶＣＣＩがゆっくりと数ミリ秒をかけて全電圧に達するならば、トランジスタ５１は回路Ｉ１の活性化を遅らせる。トランジスタ５１がオンになると、トランジスタ５２のソース（上部端子）はＶＣＣＩになる。Ｎチャネルトランジスタ５３も典型的には約０．７〜０．８ボルトのしきい値電圧を有するが、トランジスタ５２に対して弱いトランジスタとなるようにサイズ決めされる。ある実施例では、トランジスタ５３は１／１８の幅／長さ比を有するが、トランジスタ５２は３／２の幅／長さ比を有する。したがって、トランジスタ５３がインバータＩ２の入力を低レベルにして初めてトランジスタ５２はオンになる。ある実施例では、回路Ｉ１は、ＶＣＣＩが約１．０ボルトであるとき、インバータステップＩ２の入力を高レベルにする。そのため、インバータ５４の出力が低レベルになる。インバータステップＩ３はシュミットトリガである。インバータステップＩ３への０ボルト入力がトランジスタ５６および５７をオフにしトランジスタ５５をオンにし、ノードＮ３をＶＣＣＩにし、トランジスタ５８をオンにし、これがノードＮ４をプルアップし、トランジスタ５６がオンになる電圧を上昇させ、ＶＣＣＩにおける小さな変動がノードＮ３の電圧を切換えることを防ぐ。インバータ５９および６０はオプションであり、図１２の電池供給スイッチ２２をＶＢＡＴＴからＶＣＣＩに切換えさせる出力信号ｕｓｅｂａｔｔおよびｕｓｅｂａｔｔｂの急なエッジを生成する。ＶＡＴＴ′信号によって制御されるトランジスタ６１は、弱いプルダウントランジスタであり、ＶＣＣＩがなくそのためインバータ６０から出力信号を供給しないとき、ｕｓｅｂａｔｔｂ線が確実にローに引張られるようにする。
【００８５】
構成されたＰＬＤを含む製品の購入者が利用できない鍵
ＰＬＤを構成するために使用された設計を攻撃者が知ることを防ぐために、いくつかの追加のステップがとられてもよい。
【００８６】
別の局面に従えば、ＰＬＤを組込むシステムの販売の前に鍵をＰＬＤにロードし、ＰＬＤを含むシステムの販売後、設計をＰＬＤにロードして使用することができるが、攻撃者は鍵に記憶された値を知ることができない。したがって、暗号化されていない設計を読出したり複製したりすることはできない。このセキュリティを達成するために、いくつかのステップがとられる。
【００８７】
安全モードの保存（改ざんの証明）
ある実施例では、ＰＬＤの構成ロジック２９には２つのセキュリティフラグがある。一方は、解読鍵が安全にされたかどうかを示し、他方は、設計が解読された設計であり保護されなければならないかどうかを示す。ＪＴＡＧロジック１３（図３）がＩＳＣ＿ＰＲＯＧＲＡＭ＿ＳＥＣＵＲＩＴＹ命令で安全モードを選択する場合、制御ロジック２３ａ（図１０ａ）のｓｅｃｕｒｅ＿ｋｅｙフラグがセットされる。ＰＬＤにロードされるビットストリームが、そのビットストリームの設計データが暗号化されているという指示を有するならば、構成ロジック２９（図示せず）のｓｅｃｕｒｅ＿ｄｅｓｉｇｎフラグがセットされる。いずれかのフラグが後に設定解除されるならば、構成メモリの全体がクリアされ、解読された設計が除去される。ｓｅｃｕｒｅ＿ｋｅｙフラグが（ＩＳＣ＿ＰＲＯＧＲＡＭ＿ＳＥＣＵＲＩＴＹ命令により）リセットされた場合、鍵も消去される。
【００８８】
図１５は、設計クリア機能を行なうための状態マシンを示す。ｓｅｃｕｒｅ＿ｄｅｓｉｇｎフラグがセットされると、状態マシンは状態Ｓ１にはいる。この状態は、ｓｅｃｕｒｅ＿ｄｅｓｉｇｎフラグの安全モードから非安全モードへの変化をモニタする。安全設計モードが持続する限り、状態マシンは状態Ｓ１に留まる。変化が起きると、状態マシンは状態Ｓ２に入り、データを構成メモリ１２にシフトするためのデータシフトレジスタがリセットされ、構成メモリビットのためのすべてのデータ線に０が与えられる。次に、状態マシンは、アドレスされたフレームのワード線がアサートされる状態Ｓ３に移る。この結果、データシフトレジスタ線上の０が、アドレスされたフレームのメモリビットに書込まれる。質問Ｑ１がアドレスされるべきフレームがさらにあることを示す場合、状態マシンは、フレームアドレスが進められる状態Ｓ４に移り、状態マシンは状態Ｓ３に戻る。質問Ｑ１がアドレスされるべきフレームがこれ以上ないことを示すとき、処理は終わり構成メモリがクリアされる。
【００８９】
鍵が攻撃者によってアクセスされるのを保護する必要もある。設計を含むシステムが末端の消費者に利用可能となる前に鍵のロードが行なわれる。設計者が設計を開発する処理をしているとき、彼らは、非安全モードでＰＬＤを動作させてデバッグしたいことがある。このデバッグ操作を可能とし、かつ鍵のセキュリティを保護するために、鍵ロード処理は、すべての鍵レジスタをクリアすることにより非安全モードで始まる。鍵がロードされている間および検証のため鍵がリードバックされている間、安全鍵フラグは非安全モードに維持されなければならない。構成ビットストリームがロードされ解読されている間も、安全鍵フラグは非安全モードに維持されなければならない。しかし、安全鍵フラグが一旦セットされると、安全鍵フラグを非安全モードに戻すことにより、すべての鍵をクリアし、また図１５の状態マシンの動作を起動する。そのため、鍵がクリアされるのみならず構成もクリアされる。
【００９０】
リードバック攻撃およびリードバック不能化
いくつかのＦＰＧＡは、ビットストリームがＦＰＧＡからリードバックされることを可能としており、そのためユーザは設計をデバッグしたりＦＰＧＡのフリップフロップから状態マシン情報を獲得し得る。設計がリードバック動作のために再暗号化されないとすれば、ビットストリームをリードバックする動作が、暗号化されていないビットストリームを見えるように暴露してしまうだろう。
【００９１】
設計のなお一層のセキュリティは、暗号化された設計がＦＰＧＡにロードされるときリードバックを不能化することにより提供される。ある実施例では、解読鍵も安全にされた場合にのみリードバックが不能化される。
【００９２】
図１６は、構成メモリをロードしリードバックするための構造のブロック図を示す。ある実施例では、構成ロジック２９は、以下の２つの条件が存在するときリードバックを防ぐ：（１）データバス２６（図３および図１０を参照）上のセキュリティ状態線が鍵が安全モードにあることを示し、かつ（２）構成ロジック２９が、ビットストリームが暗号化されていることを示す構成ビットストリーム中の演算コードに応答したときである。両方のキーが安全にされていないかまたはビットストリームが暗号化されていない場合に、リードバックを可能化することができる。他の実施例では、異なった条件が、リードバックを可能化するかどうかを制御する。
【００９３】
構成ロジック２９が、リードバックが行なわれるべきことを示すヘッダをビットストリーム中に受けるとき、それは、フレームアドレスレジスタに記憶されたフレームアドレスを線１０７に送り、このフレームアドレスは、バス１０９のアドレスされた線を選択するためにアドレスデコーダ１１０によってデコードされる。次に、線１０８上のワード線可能化信号がアサートされ、これがバス１０９の選択されたワード線をアサートし、選択されたワード線によりアドレスされるメモリセルがその値をｎ本のデータ線１０２に与える（ｎはフレーム長であり構成ロジック２９に記憶される）。そして、構成ロジック２９はライン１０４上のロード信号をアサートして、データのフレームを（並列に）データシフトレジスタ１０１にロードする。次に、構成ロジック２９は、線１０５上のシフト信号をアサートして、これによりデータシフトレジスタ１０１は、バス１０３上の３２ビットのワードのデータのフレームをフレームデータ出力レジスタ（図４ｄ）にシフトアウトし、そこから構成アクセスポート２１（図３）上の出力ビットストリームにシフトアウトする。
【００９４】
解読がビットストリームに示される場合、構成ロジック２９は内部フラグをセットしてこれを示す。これらのフラグがセットされ、かつ鍵メモリ２３がバス２６上のセキュリティ状態信号により示されるように安全モードにある場合、構成ロジック２９は、回線１０８上のワード線可能化信号を不活性に保ち、かつ回線１０４および１０５上のロード信号およびシフト信号を不活性に保ってリードバックを防ぐことにより、ビットストリーム中のリードバックコマンドに応答する。しかしながら、鍵メモリ２７が安全モードになければ、設計が暗号化されていたとしても、リードバックは許可され、テストおよびデバッグが可能となる。
【００９５】
部分的再構成攻撃および防止
いくつかのＦＰＧＡは、ＦＰＧＡの部分的再構成を可能にしたり、別々の開始アドレスおよび別々の書込命令を用いて設計の異なった部分がＦＰＧＡの異なった部分にロードされることを可能にする。攻撃者は、設計を部分的に再構成してブロックＲＡＭまたはフリップフロップの内容を出力ポートに直接読出したり、またはセクションを既存の設計に追加して、設計を知るために使用できる情報を読出すことにより、設計を知ろうと企てるかもしれない。たとえば、攻撃者は、ＰＬＤを暗号化されていない設計で部分的に再構成するかもしれないが、その唯一の目的は暗号化された設計についての情報を抽出することである。そのようなトロイの木馬設計は、別のビットストリームでＰＬＤにロードされるか、既存の暗号化されたビットストリームに付加されるかもしれない。たとえば、攻撃者が、ＦＰＧＡのブロックＲＡＭにロードされた状態マシン設計を知ることに興味を持った場合、トロイの木馬設計は、ブロックＲＡＭのアドレスを循環しブロックＲＡＭデータの内容をパッケージピンに送るロジックを含むかもしれない。
【００９６】
攻撃者がそのような変更を加えることを防ぐために、当初の設計が暗号化される場合、構成ロジック２９は、解読つきの構成が一旦起動されると部分的再構成を禁じる。構成ロジック２９は、解読演算コードを有するヘッダが処理されてしまうと後続の書込命令を禁じる。また、構成ロジック２９は、暗号化なしの構成が行なわれると解読付きの構成を禁じる。構成ロジック２９は、解読命令が受信された後、構成メモリへの書込を行なうヘッダを無視し、設計の暗号化されていない部分がロードされてしまった場合、解読コマンドを有するヘッダを無視することにより、これらの制限を達成する。したがって、いずれかの演算コードが解読付きの書込が用いられていることを示すならば、ＰＬＤは単一の書込命令のみを受付ける。
【００９７】
追加の実施例
図面の上述の説明はいくつかの実施例についての詳細を与えた。しかしながら、多くの追加の実施例も可能である。たとえば、上述した暗号ブロック連鎖アルゴリズムの代わりに、ブロックサイズよりも小さいユニットで、たとえば一度に１個の８ビットバイトでデータを暗号化することのできる暗号フィードバックモードと呼ばれる暗号化方法を用いることができる。この暗号フィードバックモードは、Ｓｃｈｎｅｉｅｒにより同書の２００から２０３頁に記載される。
【００９８】
さらに別の実施例では、暗号化が用いられる場合、アドレス０で始まってすべてのビットストリームがロードされなければならない。この実施例のある実現化例は、暗号化を特定する演算コードが受信されたとき、開始フレームアドレスレジスタＦＡＲ（図６）にロードされたアドレスをアドレス０と置換する。
【００９９】
さらに別の実施例では、開始アドレスおよび設計データの両方を暗号化する。この実施例では、暗号化されていない設計データで可能なように、異なったフレームアドレスで始まる暗号化された設計データのいくつかのセグメントをロードすることが可能である。
【０１００】
別の実施例では、鍵メモリ２３などの鍵メモリに記憶される鍵データは、後に続く鍵の数を明示する。この実施例の変形例では、鍵データは、その鍵に先行する鍵の数も明示する。もし攻撃者が、設計者が意図した最初の鍵アドレスと異なる鍵アドレスを与えるならば、構成が中止されてもよい。さらに、鍵内に明示される数の鍵が使用されてしまうまで、暗号化が行われる。
【０１０１】
別の実施例では、鍵メモリが非安全モードにあるとき鍵がリードバックされることを可能にする代わりに、鍵は、パリティビットまたはＣＲＣチェックビットを含み、これらのビットのみをリードバックして鍵が正しくロードされたかことを確認することができる。この実施例は、ある設計者に知られている鍵を別の設計者に秘密にすることができ、ＰＬＤが異なった設計をロードするために複数回に分けて使用されるときに有用である。
【０１０２】
上述のＣＲＣチェックサム計算に関し、ＣＲＣチェックサムを、設計が暗号化される前または後のいずれかに計算する実施例が提供され得る。もちろん、設計データが暗号化される前に、ビットストリームに付加されたチェックサムが計算されるならば、対応のチェックサムは、解読された後に設計データに対してＰＬＤ内で計算されなければならない。同様に、設計データが暗号化された後に、ビットストリームに付加されたチェックサムが計算されるならば、ＰＬＤは、設計データが解読される前に受信ビットストリームに対して対応のチェックサムを計算しなければならない。
【０１０３】
解読鍵をロードする処理に関し、図８に示す処理を用いる場合、デバイスプログラマを用いて解読鍵をロードする必要はない。鍵は、基板検査手続の一部としてロードされればよい。
【０１０４】
２つ以上のＰＬＤをプログラムするために上述の構造および方法を用いることも可能である。いくつかのデバイスをデイジーチェーン接続に構成しビットストリームをデバイスに直列に通過させるか、またはデバイスを直列にアドレスすることにより、２つ以上のＰＬＤまたはＦＰＧＡをプログラムするために単一のビットストリームを用いることは周知である。デバイスのうち１つ以上が暗号化された設計データを受信するものである場合いくつかのＰＬＤをそのような構成に配置することが可能である。
【０１０５】
さらに別の実施例として、暗号化された設計データを有するビットストリームに対して単一のアドレスのみが特定されてもよい実施例が記載されたが、別の実施例では、好ましくは暗号化されたいくつかのアドレスが、設計の別々の部分をロードするために特定されてもよい。さらに、これらの別々の部分は同じ暗号化鍵を用いてもよく、またはこれらの別々の部分は、異なった暗号化鍵および鍵の異なった組を用いてもよい。
【０１０６】
以上の説明から明らかとなる変形はこの発明の範囲に含まれるものとする。
【図面の簡単な説明】
【図１】先行技術のＦＰＧＡにおける機能的関係の図である。
【図２ａ】先行技術のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドの図である。
【図２ｂ】先行技術のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドの図である。
【図２ｃ】先行技術のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドの図である。
【図２ｄ】先行技術のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドの図である。
【図３】この発明のある実施例に従うＦＰＧＡにおける機能的関係の図である。
【図４ａ】この発明のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドの図である。
【図４ｂ】この発明のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドの図である。
【図４ｃ】この発明のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドの図である。
【図４ｄ】この発明のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドの図である。
【図５ａ】例示の暗号化されていないビットストリームおよび暗号化されたビットストリームの図である。
【図５ｂ】例示の暗号化されていないビットストリームおよび暗号化されたビットストリームの図である。
【図６】構成ロジック２９ならびに解読器２４に至るバス２７およびバス２８における線の図である。
【図７ａ】この発明のある実施例に用いられる三重暗号化での外部暗号ブロック連鎖のための修正された開始値の図である。
【図７ｂ】図７ａで使用される対応の開始値および解読処理の図である。
【図８】ビットストリームを処理するための操作の図である。
【図９】鍵の順序を評価するために解読器２４によって実現される状態マシンの図である。
【図１０ａ】図３の鍵メモリ２３の構造の図である。
【図１０ｂ】図１０ａのメモリセルの構造の図である。
【図１１】非安全とされたときに鍵を消去するために図１０ａの制御ロジック２３ａによって行なわれるステップの図である。
【図１２】図１０ａの電池供給スイッチを詳細に示す図である。
【図１３】図１２の電池供給スイッチのレベルシフト回路および電圧検出回路の図である。
【図１４】図１２の電池供給スイッチのレベルシフト回路および電圧検出回路の図である。
【図１５】安全モードから抜けたとき設計を消去するための状態マシンの図である。
【図１６】暗号化が存在するとき不能化される線を含む、構成メモリをロードし構成をリードバックするための要素のブロック図である。
【図１】
2004515001.tif 000003
【図２ａ】
2004515001.tif 000004
【図２ｂ】
2004515001.tif 000005
【図２ｃ】
2004515001.tif 000006
【図２ｄ】
2004515001.tif 000007
【図３】
2004515001.tif 000008
【図４ａ】
2004515001.tif 000009
【図４ｂ】
2004515001.tif 000010
【図４ｃ】
2004515001.tif 000011
【図４ｄ】
2004515001.tif 000012
【図５ａ】
2004515001.tif 000013
【図５ｂ】
2004515001.tif 000014
【図６】
2004515001.tif 000015
【図７ａ】
2004515001.tif 000016
【図７ｂ】
2004515001.tif 000017
【図８】
2004515001.tif 000018
【図９】
2004515001.tif 000019
【図１０ａ】
2004515001.tif 000020
【図１０ｂ】
2004515001.tif 000021
【図１１】
2004515001.tif 000022
【図１２】
2004515001.tif 000023
【図１３】
2004515001.tif 000024
【図１４】
2004515001.tif 000025
【図１５】
2004515001.tif 000026
【図１６】
2004515001.tif 000027
【国際公開パンフレット】
2004515001.tif 000028
2004515001.tif 000029
2004515001.tif 000030
2004515001.tif 000031
2004515001.tif 000032
2004515001.tif 000033
2004515001.tif 000034
2004515001.tif 000035
2004515001.tif 000036
2004515001.tif 000037
2004515001.tif 000038
2004515001.tif 000039
2004515001.tif 000040
2004515001.tif 000041
2004515001.tif 000042
2004515001.tif 000043
2004515001.tif 000044
2004515001.tif 000045
2004515001.tif 000046
2004515001.tif 000047
2004515001.tif 000048
2004515001.tif 000049
2004515001.tif 000050
2004515001.tif 000051
2004515001.tif 000052
2004515001.tif 000053
2004515001.tif 000054
2004515001.tif 000055
2004515001.tif 000056
2004515001.tif 000057
2004515001.tif 000058
2004515001.tif 000059
2004515001.tif 000060
2004515001.tif 000061
2004515001.tif 000062
2004515001.tif 000063
2004515001.tif 000064
2004515001.tif 000065
2004515001.tif 000066
2004515001.tif 000067
2004515001.tif 000068
2004515001.tif 000069
2004515001.tif 000070
2004515001.tif 000071
2004515001.tif 000072
2004515001.tif 000073
2004515001.tif 000074
2004515001.tif 000075
2004515001.tif 000076
2004515001.tif 000077
2004515001.tif 000078
2004515001.tif 000079
2004515001.tif 000080
2004515001.tif 000081
2004515001.tif 000082
2004515001.tif 000083
【国際公開パンフレット（コレクトバージョン）】
2004515001.tif 000084
【国際調査報告】
2004515001.tif 000085
2004515001.tif 000086
2004515001.tif 000087