JP2004515180A - リードバックを防止する方法を備えたプログラマブルロジックデバイス - Google Patents
リードバックを防止する方法を備えたプログラマブルロジックデバイス Download PDFInfo
- Publication number
- JP2004515180A JP2004515180A JP2002546975A JP2002546975A JP2004515180A JP 2004515180 A JP2004515180 A JP 2004515180A JP 2002546975 A JP2002546975 A JP 2002546975A JP 2002546975 A JP2002546975 A JP 2002546975A JP 2004515180 A JP2004515180 A JP 2004515180A
- Authority
- JP
- Japan
- Prior art keywords
- key
- data
- pld
- configuration
- design
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000013461 design Methods 0.000 claims abstract description 124
- 230000002401 inhibitory effect Effects 0.000 claims 3
- 230000015654 memory Effects 0.000 abstract description 92
- 238000004549 pulsed laser deposition Methods 0.000 abstract description 20
- 230000008569 process Effects 0.000 description 24
- 238000013478 data encryption standard Methods 0.000 description 15
- 230000006870 function Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 11
- 230000008859 change Effects 0.000 description 8
- 125000004122 cyclic group Chemical group 0.000 description 8
- 238000012360 testing method Methods 0.000 description 7
- 230000036961 partial effect Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 230000001010 compromised effect Effects 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000002441 reversible effect Effects 0.000 description 3
- 239000007858 starting material Substances 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- ZXQYGBMAQZUVMI-GCMPRSNUSA-N gamma-cyhalothrin Chemical compound CC1(C)[C@@H](\C=C(/Cl)C(F)(F)F)[C@H]1C(=O)O[C@H](C#N)C1=CC=CC(OC=2C=CC=CC=2)=C1 ZXQYGBMAQZUVMI-GCMPRSNUSA-N 0.000 description 2
- PWPJGUXAGUPAHP-UHFFFAOYSA-N lufenuron Chemical compound C1=C(Cl)C(OC(F)(F)C(C(F)(F)F)F)=CC(Cl)=C1NC(=O)NC(=O)C1=C(F)C=CC=C1F PWPJGUXAGUPAHP-UHFFFAOYSA-N 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000003071 parasitic effect Effects 0.000 description 2
- 230000002265 prevention Effects 0.000 description 2
- 230000008707 rearrangement Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000007257 malfunction Effects 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000000523 sample Substances 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/23—Processing of content or additional data; Elementary server operations; Server middleware
- H04N21/234—Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs
- H04N21/2347—Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving video stream encryption
- H04N21/23476—Processing of video elementary streams, e.g. splicing of video streams or manipulating encoded video stream scene graphs involving video stream encryption by partially encrypting, e.g. encrypting the ending portion of a movie
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/76—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in application-specific integrated circuits [ASIC] or field-programmable devices, e.g. field-programmable gate arrays [FPGA] or programmable logic devices [PLD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Storage Device Security (AREA)
- Logic Circuits (AREA)
Abstract
PLD内で使用される設計をコピーされないように保護することがしばしば望まれている。設計がPLDとは異なるデバイスに記憶され、ビットストリームを通じてPLD内に読込まれる場合、設計はPLD内に読込まれる際に暗号化され、PLD内で復号されてから構成メモリセル内にロードされてPLDを構成することがある。この発明に従うと、このようなデバイスにおいて、設計がPLD内へのロードの際に暗号化された場合、設計がその復号された状態でPLDからリードバックされることを防止するための方法が提供される。
Description
【0001】
【発明の分野】
この発明はPLDに関し、より特定的に、ビットストリームを介してPLD内にロードされる設計の保護に関する。
【0002】
【発明の背景】
PLD(プログラマブルロジックデバイス)とは、設計者が選択したデジタル論理関数を実行する集積回路構造である。PLDはロジックブロックと相互接続線とを含み、典型的にロジックブロックおよび相互接続はともにプログラム可能である。1つの一般的な種類のPLDがFPGA(フィールドプログラマブルロジックデバイス)であり、ここでロジックブロックは典型的にルックアップ表およびフリップフロップを含み、典型的にその入力信号のあらゆる関数を生成および記憶できる。別の種類はCPLD(コンプレックスプログラマブルロジックデバイス)であり、ここではロジックブロックはAND関数、およびOR関数を実行し、入力信号の選択はプログラム可能である。
【0003】
PLDの外部でのビットストリームの記憶に関する問題
PLD内で実現される設計は複雑化しており、PLD内で実現すべき設計を完成させデバッグするにはしばしば数ヵ月を要する。PLDが一部をなすシステム内に設計が入れられ、利益のため販売される際、設計者にとって誰か他の者がこの設計努力をコピーするという結果は望ましいものではない。設計者はしばしば設計を企業秘密にしておこうと望む。多くのPLD、特にFPGAは揮発性構成メモリを使用し、これにはPLDに電源が投入されるたびにPROMなど外部のデバイスからロードされることになる。構成データはPLDの外部に記憶され、構成アクセスポートを通じて伝送されることになるため、攻撃者、すなわち構成アクセスポート上のデータをたとえばボードトレース上にプローブを置くことにより監視する者によって、設計の機密は容易に侵される恐れがある。
【0004】
現在の解決策およびその欠点
設計を暗号化する試みがなされてきているが、設計を攻撃者に対して安全にし、かつ正規のユーザによる使用を容易にすることは困難である。暗号化アルゴリズムは問題ではない。データブロックを暗号化するためには、いくつかの暗号化アルゴリズム、たとえば標準的なデータ暗号規格(DES)およびより安全な高度暗号規格(AES)のアルゴリズムなどが公知である。暗号ブロック連鎖(CBC)のプロセスでは、暗号化されていないデータワードと次の暗号化されたデータワードとのXORをとってから復号が行なわれ、これによってDESまたはAESはデータのシリアルストリームを暗号化できるので、PLDを構成するためのビットストリームを暗号化するのに好適である。設計を暗号化するのに用いる鍵は何らかの形で、PLDと、設計を復号する構造との間で安全なやり方で通信されることになり、こうして設計がPLDにより復号され、PLDを構成するのに用いられ得る。次に、暗号化されていない設計を用いてPLDが一旦構成されると、設計を無認可で発見されないよう保護し続けなければならない。
【0005】
「構成に関する問題:電源投入、揮発性、安全性、電池のバックアップ(Configuration Issues : Power−up, Volatility, Security, Battery Back−up)」と題された、ザイリンクス・インコーポレイテッド(Xilinx, Inc.)のピーター・アルフキー(Peter Alfke)による1997年11月24日の刊行物には、設計を保護するために、FPGA内に特定のアーキテクチャ上の特徴を有さない、既存のFPGAデバイスでの設計を保護するためにとられ得る、いくつかのステップが記載されている。1つの方法は、FPGA内に設計構成データをロードしてから構成データのソースを外すが、電池を用いてFPGAに対して連続的に電力を維持し、一方でFPGAを待機非動作モードに保つことである。しかし電池に対する電力の要件のため、この方法は大規模なFPGAデバイスにとって非実用的なものとなっている。
【0006】
別の可能性は不揮発性構成メモリである。デバイスの販売前に設計が工場でロードされる場合、構成されたPLDデバイスの購入者にとって、設計がどのようなものであるかを判断することは困難である。しかし逆行分析によって、プログラムされたデバイスの覆いを取去り、金属層を除去し、不揮発性メモリセルに化学処理を施すと、どのメモリセルが充電されたかが明らかとなる可能性があり、こうして攻撃者は設計を知ることができる恐れがある。さらに不揮発性メモリには、標準的なCMOSプロセス技術よりも複雑で経費のかかるプロセス技術が必要であり、市場に出るまでにより多くの時間がかかってしまう。
【0007】
PLDの不揮発性メモリ内に復号鍵を記憶させ、暗号化されたビットストリームをPLD内にロードし、PLD内の鍵を用いてビットストリームを復号することもまた公知である。こうすれば、攻撃者がビットストリームをPLD内へのロード中に読出すことが防止され、かつ、電力がPLDから外されても鍵が維持される。このような機構は、オースティン(Austin)による米国特許第5,388,157号に記載されている。しかしこの構造はユーザの設計をあらゆる態様の攻撃から保護するわけではない。
【0008】
設計保護に加え、ユーザによってはデータ保護もまた必要である。PLDが電力を失っても失われてはならないデータを、ユーザがPLD内に生成することがある。このようなデータは保護されることが望ましい。
【0009】
したがって、便利で信頼性が高く、かつ安全な設計保護方法に対する必要性がなお存在している。
【0010】
【発明の概要】
この発明は、PLDを無認可の使用およびデータの紛失から保護するためのいくつかの構造および方法を提供する。
【0011】
電源投入の際にロードされなければならない静的RAMメモリによってPLDが構成される場合、構成データはデバイスへのロードの際に保護されなければならない。先行技術においてこれは、構成データを暗号化して集積回路デバイスの外部にあるメモリに記憶させ、1つ以上の復号鍵をPLD内にロードして電源切断時に鍵をPLD内に維持し、鍵を用いて構成データを復号する復号回路をPLD内に含め、復号された構成データをPLD内で生成し、復号された構成データを用いてPLDを構成することによって達成される。
【0012】
さらなる安全性のために、不揮発性メモリを用いて鍵を保存する代わりに、この発明は好ましくはPLDに接続された電池を用いて、PLDから電力が外される際に鍵を保存する。不揮発性メモリ内に鍵を記憶させたPLDを取外し、PLDの覆いを外し、不揮発性ビットのうちどれが論理1にプログラムされどれが論理0にプログラムされているかを観察することは可能であるが、静的メモリセルにのみ記憶された鍵の内容を判断することは極めて困難であり、なぜなら、鍵を記憶させるためだけでも鍵を記憶するメモリセルには電力が維持されなければならず、連続的にPLDに対し動作電力がある間にPLDの覆いを外し、層を取除き、プローブをかけなければならないであろうからである。
【0013】
一旦PLD内にロードされた設計を攻撃者が盗み得るやり方
鍵が十分な安全性を提供していなければ、攻撃者は暗号化コードを破って鍵の値を判断する可能性がある。周知のデータ暗号規格DESが用いていた暗号鍵は56ビットのものであり、鍵解読用の高性能のコンピュータによって数時間で破られてしまった。DESはブルース・シュナイヤー(Bruce Schneier)によって、ブルース・シュナイヤー著、ジョン・ワイリー&サンズ・インコーポレイテッド(John Wiley & Sons, Inc.)刊行の「応用暗号技術第2版:プロトコル、アルゴリズム、およびCにおけるソースコード(Applied Cryptography Second Edition : protocols, algorithms, and source code in C)」著作権1996年の265〜278頁で説明されている。このような周知の暗号規格を用いることが所望であれば、安全性を増大させるために構成データは数度、各回につき異なった鍵を用いて暗号化され、こうして暗号化を繰返すたびに約256だけ暗号化コードを強化することがある。または構成データを、一番目の鍵を用いて暗号化し、2番目の鍵を用いて復号し、3番目の鍵を用いて暗号化することがあり、この組合せは三重DES規格の一部である。その他の暗号化アルゴリズムを用いることもできるが、安全性は鍵に存するためアルゴリズムを秘密にしておく必要はない。暗号化の方法が対称であれば、暗号化に用いた同じ鍵がPLD内に記憶され、復号では逆の順序で用いられる。
【0014】
多数の鍵を提供するPLDでは、用いるべき鍵の数とあらゆる鍵のアドレスとが、暗号化されていないビットストリームで提供される場合、攻撃者は1回につき1つずつ鍵に攻撃をかけて鍵の値をより容易に判断できる可能性がある。このような攻撃を回避するため、いくつの鍵を用いるのか、および、鍵がセット内の最後の鍵か、またはさらなる鍵が続くのかについての指示を、ビットストリーム内でなく鍵内に記憶することによって追加の安全性を達成する。
【0015】
ビットストリームがPLD内にロードされた後にビットストリームをリードバックする選択肢をPLDが提供する場合、攻撃者が用い得る別の方法はこのビットストリームをリードバックすることである。設計を攻撃するこの方法を回避するため、一実施例で、リードバックを提供しかつ暗号化も提供するPLDは、暗号化が使用された場合にはリードバックのフィーチャを禁止する能力を含む。別の実施例では、リードバックの能力を提供するPLDは構成データをそのリードバック前に暗号化する。
【0016】
加えていくつかのPLDは、部分的構成(いくつかの構成アドレスを特定して設計におけるいくつかの部分をロードする)および部分的再構成(既存の設計が消去されずに新たな設計データがロードされる)の選択肢を提供する。PLDがこれらの選択肢を提供する場合、攻撃者はPLDを部分的に再構成し、連続する設計部分を可視にして、おそらくは設計全体を知る可能性がある。このような攻撃を回避するため、一実施例では、暗号化された設計がロードされたPLDの部分的な構成および再構成は却下される。別の実施例では、いくつかの構成アドレスが特定され得るが、アドレスは暗号化される。
【0017】
さらに別の攻撃態様は、PLDの安全性状態を示すビットを反転させようとする試みである。動作電圧を低下または上昇させる、温度を変化させる、および或るポートに雑音を加えることが考えられる。このようなビット反転から保護するため、安全にされたビットストリームでPLDが動作しているときには安全モードのフラグをセットし、一実施例では、このフラグが非セットされるとすべての構成データが消去される。デバイスがまだ動作している間に再構成を許さない別の実施例では、構成データはビットストリームのいずれかが送信される前に消去される。
【0018】
別の攻撃態様は、暗号化されたビットストリームの或る部分を再配置することによって、暗号化されていないときにこれら部分が、設計者の意図していないPLDの可視部分に置かれるようにすることである。この再配置を防ぐため、暗号化および復号のプロセスでアドレス情報を使用することによって、設計者が意図したPLD場所とは異なるPLD場所に暗号化されたビットストリームの一部を送ると、意味のないデータへの異なる復号が行なわれるようにする。暗号ブロック連鎖(CBC)は、この結果を達成する1つの有効な手段である。暗号ブロック連鎖では、復号されたデータパケット(ブロック)が次のデータブロックとXOR関数を用いて組合されてから次のブロックが復号され、こうして各データブロックについての暗号化されたデータは、これに先行するあらゆるブロックと、これらブロックの順序とに依存する。同一のデータブロックは、これに先行するデータブロックの値に依存して異なった値へ暗号化される。こうして、ブロックの順序が変えられるとビットストリームは正しく復号しないが、それは暗号化されたビットストリームが再配列されるところがその後のデータをスクランブルするからである。さらに、初期CBC値に変更を加えてデータのアドレスを組込ませ、復号されたデータが、正しく復号するための特定の場所に置かれるよう強制することができる。
【0019】
これに代えて、設計の一部が暗号化されかつ別の部分が暗号化されないことをPLDが許す場合、攻撃者は暗号化されていない部分を暗号化された部分に加えることができ、これは設計の暗号化された部分についての情報を読出すことになる。したがって、設計すべてが暗号化されているか、または設計がいずれも暗号化されていないかのいずれかを可能にし、混合をなくすことによって、追加の安全性が達成される。これに加えて一実施例では、データ暗号化の際に、構成データについての単一の開始アドレスに続く単一のフルチップ構成のみを許すことによって、追加の安全性がもたらされる。
【0020】
さらに、試験およびデバッグを手頃にし、かつPLD製造業者とその顧客(すなわちPLDを構成するための設計を生産する設計者)との自由な通信を可能にするために、PLDは暗号化される動作モードと暗号化されない動作モードとの両方を有し、暗号化されるモードで動作する際、PLD内への構成データのロードを制御する構成ビットストリームの部分はまだ暗号化されていない。
【0021】
別の攻撃態様として、PLD製造業者が、構成データをロードするためのアドレスおよびヘッダ情報を含む構成ビットストリームフォーマットについて自由に情報を提供、および使用される暗号化方法についての情報を提供する場合、この周知の情報を暗号化すると、暗号鍵があり得る発見に対して暴露されてしまうことになるだろう。このような暴露は、実際の構成データのみを暗号化し、制御情報を暗号化されないままにすることによって回避される。
【0022】
PLD製造業者が安全モードおよび非安全モードの両方で鍵メモリを用いることを許す場合、攻撃者は単に鍵メモリを非安全モードに置いて鍵を読出すことによって鍵を知ることができるであろう。このような攻撃を回避するため、PLD製造業者は、回路であって、鍵メモリが非安全モードへ動かされた際、すべての鍵と、PLD内にロードされたあらゆる構成データとの消去を引起こす回路を含める。
【0023】
[詳細な説明]
図1は先行技術のFPGA10の構造を示す。FPGAはプログラマブルロジック11を含み、これは典型的に(1)ルックアップ表の組合せ論理関数生成器を伴ったロジックブロックと、ルックアップ表出力およびその他の値を記憶するためのフリップフロップと、プログラマブルロジックの論理能力を増大させるための論理ゲートおよびマルチプレクサとを含み、さらに(2)FPGAのまわりに信号を経路付けするための経路付け線およびプログラム可能相互接続点と、(3)FPGAの外部ピンおよび経路付け線間で信号を駆動するための入出力ブロックとを含む。
【0024】
FPGAはさらに構成メモリ12を含み、これは経路付けトランジスタをオンにし、マルチプレクサを制御し、ルックアップ表を記憶し、さらに入出力ブロックを制御するが、これらすべてはFPGAを構成して開発者の所望の関数を実行することを目的としたものである。バス16は構成メモリ12をプログラマブルロジック11に接続し、典型的にFPGA全体にわたって位置付けられた分散した1組の制御線である。いくつかのザイリンクス製品(たとえばXC6200)はバス17を含んでおり、これによってプログラマブルロジック11は、構成ロジック14がプログラミング情報を構成メモリ12に送ることを引起こす。このような構造はキーン(Kean)による米国特許第5,705,938号で説明されている。
【0025】
FPGA10はさらに、JTAGポート20とインターフェイスするためのJTAGロジックブロック13を含み、これは特に、FPGAが置かれることになるボードの試験を意図したものである。JTAGロジックブロック13はIEEE規格1532を満たすが、これはIEEE規格1149.1の上位セットである。JTAGはボードレベルでの設計のデバッグを可能にする。
【0026】
最後に、FPGA10は構成ロジック14を含み、これは構成アクセスポート21上の、外部ソース15からの構成ビットストリームに応答し、さらにJTAGロジックブロック13にインターフェイスする。構成アクセスポート21上のビットストリームはワード、一実施例では32ビットワードとして扱われる。通常はビットストリームの初めまたはその近くにあるワードのいくつかは構成プロセスを準備するために用いられ、たとえば構成メモリフレームの長さ、および構成データについての開始アドレスを含む。バス19は構成ロジック14とJTAGロジックブロック13との間の通信を可能にし、こうしてJTAGポートはもう1つの構成アクセスポートして使用可能である。バス18は構成ロジックブロック14と構成メモリ12との間の通信を可能にする。具体的には、メモリ12内で構成フレームを選択するためのアドレスと、読み書き動作を行なうための制御信号と、構成メモリ12内にロードまたは構成メモリ12からリードバックするためのデータとを伝える。
【0027】
構成ロジックブロック14は命令およびデータを受取り、命令に従ってデータを処理する。これら命令はビットストリームとして構成ロジック14に入る。命令、またはヘッダには通常、処理を受けることになるデータが続く。図2aは例示的なビットストリーム構造を示す。ヘッダAはアクションを特定し、単一のワード、すなわちデータAが続くことを特定する。ヘッダBはアクションを特定し、この場合は4ワードのデータが続いて処理を受けることを特定する。
【0028】
図2bは、ザイリンクス・インコーポレイテッドから入手可能なバーテックス(R)(Virtex)デバイスで用いられるビットストリーム内の32ビットヘッダワードについてのデフォルトフォーマット(フォーマットタイプ001)を示す(バーテックスは、この発明の譲受人であるザイリンクス・インコーポレイテッドの登録商標である)。このフォーマットは、フォーマットタイプ(001)を示すための3つのビットと、オペコードを特定するための2つのビットと、構成ロジックレジスタアドレスのための16ビットと、ワードカウントのための11ビットとを含む。オペコードは読出動作、書込動作または動作なしを指定し得る。たとえば00は動作なしを指定し、01は読出を指定し、10は書込を指定することがあり得る。ワードカウントのための11ビットは211ワードまたは2048ワードを特定し得る。図2cに示すように、ワードカウントがこれよりも大きければ、フォーマットタイプ001におけるワードカウントビットは00000000000に設定され、フォーマットタイプ001のヘッダにはフォーマットタイプ2のヘッダが続く。フォーマットタイプ2はワードカウントを特定するために27ビットを使用し、こうして227ワードまたは268万ワードを特定し得る。
【0029】
図2dは、バーテックスのビットストリームについてのヘッダにより構成ロジック14のレジスタ内にロードされ得るような制御情報を示す。たとえば、構成ロジックレジスタアドレス0000を有する(フォーマット001の)ヘッダは、次の32ビットデータワードが巡回冗長検査(CRC)レジスタ内にロードされるべきであることを特定する。(バーテックスのデバイスは16ビット巡回冗長検査値を用いるため、いくつかのビットは0で埋められる。)ヘッダがアドレス0001を含む場合、次のデータはフレームアドレスレジスタ内にロードされて構成メモリ12内でフレーム(列)を特定し、こうしてデータが受取られるまたは供給されることになる。
【0030】
図2bに示す構成ロジックレジスタアドレス(16ビット)は、図2dの左の列に示す4ビットの値を与え、これら値は、次の32ビットデータワードを置くべき構成ロジック14(図1)内のレジスタの1つを選択する。フレーム長レジスタ(アドレス1011)は、構成データをロードすることになるフレームの長さを特定する。(フレーム長または列の高さはPLDのサイズに依存する。通常、より大きいPLDはより高い列またはより長いフレームを有する。PLD内に異なる構造を設けてデータワードをフレーム内に置く代わりに、ビットストリーム内でフレーム長を特定しレジスタ内でフレーム長を記憶することにより、異なったサイズのPLDについて内部構成ロジックが同一となることができる。)
【0031】
リードバックのためには、読出コマンドがオペコードフィールド内に置かれ、フレームデータ出力レジスタがアドレス指定され、これに(必要であればコマンドヘッダフォーマット2を用いた)ワードカウントが続く。特定された数のワードは、フレームアドレスレジスタ内で特定されたアドレスから始まって構成メモリ12からリードバックされ、構成アクセスポート21またはJTAGポート20へシフトされる(リードバックデータは、リードバック命令を発行したポートへ戻される)。
【0032】
ビットストリームヘッダまたはヘッダ対(図2bおよび図2c)でワードカウントが特定されるとカウンタがセットされ、これはデータワードがロードされるのに伴ってカウントダウンする。多くの構成ロジックレジスタアドレスではワードカウントは1である。しかし、構成データがロードまたはリードバックされていることを示すための0010または0011の構成ロジックアドレスをビットストリームヘッダが有する場合、ワードカウントははるかに大きくなるであろう。これは図2cのヘッダフォーマット2を使用する場合である。フレームデータ入力レジスタ(アドレス0010)を通じて構成メモリ12内にロードされたデータ、またはフレームデータ出力レジスタ(アドレス0011)を通じてリードアウトされたデータは設計データと呼ばれるが、それはこのデータがFPGAに設計を実現させる、または設計の状態を示すからである。他のレジスタデータは制御データであるが、それはこれらデータによって、ロジックの構成またはリードバック中に構成ロジックがどう振舞うかが制御されるからである。
【0033】
バーテックスのデバイスの構成についてのさらなる詳細は、ザイリンクス・インコーポレイテッド(この発明の譲受人)、95124 カリフォルニア州、サン・ノゼ、ロジック・ドライブ(Logic Drive, San Jose, CA)、2100による、2000年10月9日刊行の「バーテックス構成ガイド(Virtex Configuration Guide)」に記載されている。
【0034】
構成ロジック14は典型的に、入って来る構成ビットストリームに対して巡回冗長検査(エリクソン(Erickson)による米国特許第5,321,704号を参照、または先に参照したバーテックス構成ガイドの39頁から40頁を参照)を行ない、構成されている部分のフレーム長と構成データのワードカウントとを示すヘッダビットを読出し、どこに構成データをロードすべきかを同定するアドレス命令を読出し、構成データのフレームを収集し、アドレスに示された構成メモリ12の列にこれらフレームをロードする。構成ロジック14はさらに構成メモリ12から外部の場所への構成データおよびフリップフロップ値のリードバックを制御する。ザイリンクス・インコーポレイテッドから入手可能なバーテックスFPGAでは、JTAGポート20または構成アクセスポート21を通じてリードバックが行なわれ得る。
【0035】
構成ロジック14はさらにプログラマブルロジック11から構成データを受取り得る。FPGAの或る部分がFPGAの別の部分を構成する先行技術のFPGA構造についてのさらなる情報は、キーンによる米国特許第5,705,938号に記載されている。バーテックスのアーキテクチャに類似のFPGAアーキテクチャについてのさらなる情報は、ヤング(Young)他による米国特許第5,914,616号に記載されている。この発明の譲受人であるザイリンクス・インコーポレイテッドから入手可能なバーテックス製品で用いられるビットストリームのフォーマットは、ザイリンクス・インコーポレイテッド、95124 カリフォルニア州、サン・ノゼ、ロジックドライブ、2100から入手可能である、2000年10月4日刊行の「バーテックスFPGAシリーズ構成およびリードバック(Virtex FPGA Series Configuration and Readback)」と題された出願ノートXAPP138に記載されている。
【0036】
復号を伴うPLD
図3は、この発明の一実施例に従うFPGA(PLDの1種)のブロック図を示す。いくつかの要素は図1に示すものと同じであり、これらには同じ参照番号を付し、もはや説明は行なわない。これに加えて図3は、拡張された構成ロジックユニット29、復号器24および鍵メモリ23を含む。図3は、鍵メモリ23がJTAGアクセスポート20からバス25によってロードされる実施例を示す。実施例によっては、鍵メモリ23には別のポートを通じてロードされる。バス25は、データ、アドレス、および読み書き動作を行なうための制御信号を伝え、JTAGポート20からの復号鍵のプログラミングを可能にする。一実施例では、バス26が構成ポートからの鍵のプログラミングを可能にする。別の実施例ではバス26はなくされる。さらに別の実施例では、バス26はあり、バス25はなくされる。ここでさらに説明する実施例では、バス26は安全性に関するデータを鍵メモリ23から構成ロジック29に伝える。一実施例では、バス27は暗号化された構成データを構成ロジック29から復号器24に伝え、復号された構成データを構成ロジック29に戻す。バス28は復号器24がデータの復号のために鍵にアクセスすることを可能にする。暗号化されたデータが図3の構造にロードされる際、ロード中のビットストリームを監視する攻撃者は暗号化されたビットストリームのみを受取るため、この方法でユーザの設計を知ることはできない。
【0037】
部分的に暗号化されたビットストリーム
この発明の別の局面に従うと、ビットストリームは2つの部分、すなわち暗号化され得るまたはされ得ないユーザの設計を表現するデータ部分と、ビットストリームのロードを制御する制御部分とを含む(たとえば連続するビットストリーム部分がロードされるべきPLD内の列アドレスを与え、ロード動作の信頼性を調べるための巡回冗長検査(CRC)コードと、暗号ブロック連鎖(CBC)のためのスタータ数とを提供するが、この技術は、暗号化されたデータの発生の頻度から復号データが推理され得る「辞書攻撃」を防止する)。この発明の好ましい実施例では、データ部分は暗号化され得るが、制御部分は暗号化されない。これによって追加の安全性がもたらされるが、それはPLD製造業者はビットストリームの制御フィーチャを自由に記述する必要があり、もしこの比較的よく知られた制御情報が暗号化されれば、攻撃者はこの情報を解読し、この情報を用いてビットストリーム全体を解読できるというおそれがあるからである。さらに、ビットストリームの制御部分を暗号化されないままにしておくことによって、PLDによる情報の使用がより容易となる。
【0038】
構成データがロードされるアドレスの順序が攻撃者にとって設計の分析に有用となり得る場合に用いられる別の実施例では、構成データのアドレスもまた暗号化されるが、構成ビットストリームにある他の制御情報は暗号化されないままである。
【0039】
ビットストリームフォーマット
図4a〜4dは、図2a〜2dに示す先行技術の製品の構成ロジック14のレジスタおよびビットストリームフォーマットと比較した場合の、構成ロジック29のレジスタおよびビットストリームフォーマットにおける違いを例示する。図4aに示すように、ビットストリームはやはりヘッダワードを含み、これにデータワードが続く。典型的な構成では、いくつかの制御データワードは、暗号化された構成データが始まる前にレジスタ内にロードされる。図4aは、3つのヘッダワード、すなわちヘッダA、ヘッダBおよびヘッダCに各々3つの暗号化されない制御データワード、すなわちデータA、データBおよびデータCが続く例を示す。(実際の構成では、3つを上回る制御データワードが与えられるであろう。)次にヘッダDは、暗号化された構成データが続くであろうことを特定し、多数のワード、すなわち暗号化された構成データであるデータ1D、データ2D、データ3Dなどが続く。図4aではこれらワードに影をつけ、このデータが暗号化されていることを強調する。
【0040】
図4bおよび図4cに示すように、第4のオペコードが追加されている。動作なしについての値00、復号のない読み書きについての01および10に追加された新たな値11は、書込が復号を伴うべきであることを特定する。復号を用いるべきであることを特定するのにどのコードまたはどの方法を用いるかは重要ではなく、またそれをオペコードで特定することすら重要ではない。重要なのは、任意の暗号化および復号が許されかつ示され、このため設計者がこの選択肢を利用できることのみである。図4dの実施例では2つの新たな構成ロジックレジスタが追加されている。アドレス1100および1101では、暗号ブロック連鎖(CBC)のスタータ値、および初期暗号鍵のためのアドレスを保持するためのレジスタが示される。
【0041】
任意の暗号化
この発明の別の局面に従うと、PLDはビットストリームの暗号化されたデータ部分および暗号化されていないデータ部分の両方を受入れることができる。ビットストリームの制御部分は、ビットストリームのデータ部分が暗号化されているかどうかを示す。ビットストリームのデータ部分が暗号化されていれば、これはPLD内で復号器へ迂回させられ、復号の後にPLDを構成する。データ部分が暗号化されていなければ、これは迂回させられず、PLDを構成するために直接用いられる。
【0042】
ビットストリームを暗号化しないことが好ましい場合がある。設計のデバッグ中に用いられる或る試験作業では、構成情報をリードバックすることが必須である。構成上の問題の診断は、(特に暗号化が問題と関わりを有しているかどうかを設計者が判断しようとする場合)暗号化のステップがまだ行なわれていない方がより単純となる。また、数人の設計者がPLDの複数部分で実現されるべきコードを書いており、PLDの異なった部分が異なったときに構成されるべきである場合、ビットストリームの部分すべてを可視にして、PLDを部分的に再構成可能にすることが必要であろう。
【0043】
図5aおよび図5bは、この発明の一実施例における暗号化されていないビットストリームと暗号化されたビットストリームとの違いを例示するために、まず暗号化されていない、次に暗号化された、同じ設計を表わす例示のビットストリーム部分を示す。実際のビットストリームは図の右に0および1を含み、左のテキストは含まない。左にあるテキストは右にあるビットの意味を説明するために入れたものである。これらビットストリーム部分は図4b〜4dで例示したコマンドを用いる。図5aの暗号化されていないバージョンと、図5bの暗号化されたバージョンとの違いを強調するため、相違箇所を太字で示す。
【0044】
図5aを参照して、ダミーワード(すべて1として解釈される一定のハイの信号)および1と0との特定のパターンを有する同期ワード(sync word)の後、次のワードはタイプ001のものであり、10のオペコードを有し、0000000000010000のアドレスと、00000000001のワードカウントとを有する。したがってこのワードはコマンドレジスタCMDをアドレス指定し、1つのワードがここに書込まれるであろうことを特定する。図5aではビットストリームの左に注が付され、このワードがタイプ(Type)1であり、1つのワード(word)のCMDへの書込を指示することが示される。続くワード111はコマンドレジスタCMDに置かれるべきデータであり、CRC(巡回冗長検査)レジスタをリセットする。(好ましい実施例でPLDは、ビットストリームがロードされるのに伴いビットストリームからCRC値を算出するための、エリクソンによる米国特許第5,598,424号に記載のものなど図には示さない回路を含み、誤ったビットのロードを引起こしかねないビットストリーム電圧の不調から保護する。)次に、ヘッダワードによって、フォーマットはやはりタイプ1であり、フレーム長レジスタFLRに1ワードを書込むべきことを特定することが特定される。続くデータワード11001はフレーム長(25ワード)を特定する。同様に、いくつかの追加のヘッダおよびデータワードが続くが、ここにはフレームアドレスレジスタFARに書込むべきワードを特定するヘッダが含まれる。この場合、続くデータワードはデータがアドレス0で始まることを示す。最後に、これらレジスタがロードされた後、フレームデータ入力レジスタFDRIにデータを書込むためのコマンドが来るが、かなりのデータが書込まれることになるため、ワードカウントは00000000000として与えられ、タイプ2のヘッダによって、10530ワードがFDRIレジスタに書込まれることが特定される。これはPLDの構成を引起こす実際の設計データである。したがってビットストリーム内の次の10530ワードは設計データである。最後に、データが正しくロードされたことを確かにするために、構成データの出所であるデバイスが算出したCRC値がロードされ、PLDの算出したCRC値と比較される。追加のコマンドおよびデータがロードされ、こうして構成が完了したこと、およびPLDを動作モードに動かすべきことを示す。
【0045】
図5bは図5aと類似するが、データおよび注が太字で示されているところのみが異なる。図5bではデータは暗号化され、追加のコマンドを用いて初期鍵アドレスを与え、2つのワード(64ビット)をCBC(暗号化ブロック連鎖)レジスタに書込む。次に、タイプ1のヘッダはオペコード11を含み、データがフレームデータ入力レジスタFDRIに書込まれる前に復号されるであろうことを示す。タイプ2ヘッダが続いてやはりオペコード11を有し、10530ワードが復号されデータ入力レジスタFDRIに書込まれるべきであるという命令を与える。次に10530個の暗号化されたデータワードが続く。次に、(暗号化された)データが正しくロードされたことを確認するためのCRCワードが続く。最後に、追加のコマンドおよびデータが送られ、すべてが正しければPLDを動作モードに置く。
【0046】
復号プロセス
図6は、一実施例で任意の復号がどのように達成されるかを示す。図6は、構成ロジック29と、復号器24内に入るバス27,28とを詳細に示す。バス27は以下のものを含む。
・構成ロジック29内のレジスタアドレス1101(図4d)から取られる3ビットの初期復号鍵アドレス“Init_key_addr”、
・64ビットの、変更を加えられた暗号ブロック連鎖値“modCBC”。この値は、構成ロジック29内のレジスタアドレス1100(図4d)から取られる64ビットCBC値のより低いオーダのビットを、レジスタ0001で特定される22ビットフレームアドレス値と取替えることによってもたらされる。
・ビットストリームから取られる、暗号化されたデータをロードするための64線“Encrypted_data”、
・復号器24が生成する復号されたデータを構成ロジック29に戻すための64線“Decrypted_data”、
・データが“Encrypted_data”線上にあり、復号器24が復号を始めることができることを復号器24に告げる信号“Enc_data_rdy”用の線、
・64ビットワードに対する復号が完了して“Decrypted_data”線上で利用可能であることを構成ロジック29に告げる信号“Dec_data_rdy”用の線、および
・たとえば鍵が或るセットの最初、中間または最後にあるべきかを指定する鍵メモリ内のビットによって特定される通りに鍵が用いられていない場合、構成ロジック29に構成を中断させてこれに従い状態レジスタをセットさせるために、復号器24により用いられるBad_key_set線。図4dに示す実施例では、状態レジスタはアドレス0111にあり、ビットのうち1つに論理1を記憶することによってBad_key_setエラーが示される。
【0047】
バス28は以下のものを含む。
・鍵アドレス用の3線。鍵アドレスは最初はバス27から与えられるものであるが、新たな鍵が用いられるたびに更新される。
【0048】
・復号鍵用の56線、および
・復号鍵が最初、中間、最後、または用いる唯一の鍵であるかを示すための2線。
【0049】
設計再配置の防止
暗号化されたビットストリーム内の設計に対する1つの考えられる攻撃は、暗号化されたビットストリーム内でフレームアドレスレジスタ(開始アドレス)を変えることによって、これが復号されると、FPGAの使用中には可視であるFPGA部分へロードされるようにすることである。設計によってはブロックRAMの内容は可視である。入出力ポートの構成はあらゆる設計で可視であり、このため構成ビットは判断可能である。したがって、連続する設計部分がFPGAの可視部分へ動かされれば、FPGAが正しく機能しなかったとしても、攻撃者は再配置を繰返すことで、暗号化されていないビットストリームの内容を知ることができるであろう。
【0050】
設計再配置を防止するため、一実施例では、DES規格で用いられる暗号ブロック連鎖方法で使用される初期値に対して変更を加える。図7aおよび図7bはそれぞれこの発明に従い変更を加えられる三重DESアルゴリズムの暗号化部分および復号部分を示す。標準的な暗号ブロック連鎖方法は、開始数(これは設計者が与えるものであっても、またはランダムに生成されるものであってもよい)と、暗号化すべきデータの1番目のワードとのXORを取って暗号化プロセスを始める。この発明に従い、ランダムな数の一部はアドレス情報、すなわちこの例では、データが構成メモリ12にロードされることになる1番目のフレームの22ビットアドレスと取替えられる。64ビットの数であるスタータCBC値におけるxのラベルを付した最下位ビットは、yのラベルを付したフレームアドレスと取替えられ、こうして変更を加えられた64ビット値がもたらされるが、これはデータがロードされるアドレスに依存する。この変更を加えられたCBC値と、構成情報の1番目のワードであるワード1とのXORが取られる。次に暗号化アルゴリズムを用いて1番目の暗号化されたワードである暗号化ワード1をもたらし、これはビットストリーム内に置かれる。図7aは外部暗号ブロック連鎖を伴った三重暗号化アルゴリズムを示し、これは1番目の鍵を用いた暗号化ステップenc1を含み、これに2番目の鍵を用いた復号ステップdec2が続き、これに3番目の鍵を用いた暗号化ステップenc3が続く。この1番目の暗号化されたワードである暗号化ワード1と、2番目の、暗号化されていないワードであるワード2とのXORが取られ、暗号化プロセスを繰返して暗号化されたワード2をもたらす。すべての構成データが暗号化されるまでXOR連鎖を継続する。
【0051】
図7bに示すように、PLDは逆のプロセスを行なって、復号されたワードを導くことになる。上記の暗号化の順番の場合、復号の順番は鍵3を用いた復号ステップdec1、そして鍵2を用いた暗号化ステップenc2、そして鍵1を用いた復号ステップdec3となるであろう。重要なことに、復号ワード1を生成するための初期値の一部は暗号化および復号の両方に同じフレームアドレスを用いることになる。ビットストリームでなくPLDが、フレームアドレスレジスタに記憶されたフレームアドレスから、変更を加えられたCBC値を生成し、これはまた、構成データをロードすべき構成メモリ12のフレームを特定するためにも用いられる。したがって攻撃者が、データをロードすべきフレームアドレスを変えた場合、変更を加えられたCBC値はこれに従って変わり、構成データは正しく復号されない。
【0052】
XORステップは、暗号化の前に設計者のビットストリーム内にあった元のデータを生成する。たとえば元のデータ1=復号ワード1となる。この復号された構成データはバス27(図3)で構成ロジック29へ送られる。
【0053】
構成ロジック29
構成ロジック29は、任意の暗号化をサポートするための構造と、設計再配置および単一の鍵攻撃を防ぐための構造とを含む。図6に示すように、構成ロジック29は保持レジスタ292、制御ロジック291、構成レジスタ(FDRI、FAR、CRC、およびinitCBCを図示する)、復号器24とのインターフェイス用マルチプレクサ294,295、64ビットのアセンブリレジスタ297、およびレジスタ298,299(構成アクセスポート21とのインターフェイス用)を含む。64ビットシフトレジスタ299はデータを構成アクセスポート21から受取り、このポートは1ビット幅のデータ用の単一のピンであっても、または8ビット幅のデータ用の8本のピンであってもよい。このデータは64ビットのシフトレジスタ299内にロードされ、これはレジスタ299が一杯になるまで行なわれる。次に、好ましくはこれら64ビットは64ビット転送レジスタ298内に並列にシフトされる。ここからマルチプレクサ296bは右および左の32ビットワードを交替で選択し、マルチプレクサ296aは制御線Mに制御されるのに応じて、一回につきデータの32ビットを、保持レジスタ292か、またはこれに代えてアセンブリレジスタ297のハイおよびローの部分のいずれかに送る。ビットストリームのロードが始まると、線Mおよび図示しないクロック信号は、マルチプレクサ296aおよび296bが64ビット転送レジスタ298から保持レジスタ292へデータを送ることを引起こす。ここからこれらワードは制御ロジック291に与えられる。ワードがヘッダであれば、制御ロジック291はワードを解釈する。続くデータが暗号されずに書込まれるべきであることをオペコードが示していれば、制御ロジック291はアドレスをバスGに置いてレジスタを選択し、線L上に信号を置いてマルチプレクサ294がバスBをバスDに接続することを引起こし、続くワードをバスBに与える。次のクロック信号(クロック信号は図示せず)の際、バスD上のデータはアドレス指定されたレジスタにロードされる。図4dに示すレジスタすべてはこのようにロードされ得る。初期暗号ブロック連鎖値をロードするためのinitCBCレジスタは64ビットレジスタであり、図5bに示し先に論じたように2つの連続する32ビットワードを受取る。
【0054】
(1)initCBCレジスタに記憶された元のCBC値と、(2)FARレジスタに記憶された初期フレームアドレスとから得られる、変更を加えられたCBC値は復号器24に利用可能である。一実施例では、FARレジスタにある初期フレームアドレスが使用するのはせいぜい32ビットであるのに対し、initCBC値は64ビットを使用する。図6の実施例では、変更を加えられたCBC値を与える64ビットバスは、フレームアドレスレジスタFARからの22ビットと、初期CBCレジスタからの42ビットとを含む。この発明が提供する安全性にとっては重要なことであるが、この値は構成データをロードするところに依存することに注目されたい。もし攻撃者がFARレジスタの内容を変えることによって、暗号化されたデータを異なる場所にロードしようとすれば、復号器24に送り込まれるmodCBC値もまた変わることになる。
【0055】
或る数の構成データワードを復号するためのオペコードコマンドを制御ロジック291が受取ると、復号プロセスが始まる。制御線Mは、マルチプレクサ296aがデータを転送レジスタ298から、アセンブリレジスタ297へと通じるバスAに与えることを引起こす。制御バスHは、暗号化されたデータのレジスタ297のハイ[31:0]およびロー[31:0]の部分にバスAを交替で接続し、こうして復号すべき64ビットワードが得られる。次に制御ロジック291はEnc_data_rdy信号をアサートし、この信号は、復号器24がレジスタ297内のデータを復号することを引起こす。
【0056】
復号器24は復号を行なうために、鍵アドレスkeyAddrをバス28によって鍵メモリ23(図3)に与える。これは、鍵メモリ23が、このアドレスにある56ビット鍵を56ビットKey線上に返すことを引起こす。これはまた、鍵メモリ23が、やはりこのアドレスで鍵データに記憶されている2つの追加のビット“Order”を返すことを引起こす。1番目の復号鍵の場合、これら2つのビットはこれが1番目の鍵である、または唯一の鍵であることを示すことになる。もしそうでなければ、復号器24はBad_key_set信号をアサートし、この信号は制御ロジック29による構成動作の中断を引起こす。もしこれら2つのビットによって、鍵が1番目の鍵または唯一の鍵であることが示されている場合、復号器24は、たとえば(シュナイヤーの同書に記載の)周知のDESアルゴリズムを用いて復号を行なう。鍵が唯一の鍵でなければ、次に復号器24は鍵メモリ23における次のアドレスで鍵を得て、これが中間または最後の鍵であることを2つのOrderビットが示しているかどうかを調べる。もしそうでなければBad_key_set信号がアサートされ、構成は中断される。もしそうであれば復号が行なわれる。もしこれが中間の鍵であれば次の復号作業が行なわれる。もしこれが最後の鍵であれば、復号器24は、復号されたワードと値modCBCとのXOR関数をもたらす。次に復号器24は結果として得られた値を64ビットDecrypted_dataバスに置き、Dec_data_rdy信号をアサートする。この信号は制御ロジック291が信号を制御線Kに置くことを引起こし、こうしてマルチプレクサ295が64ビットワードを2つのシーケンシャルな32ビットワードに分割することを引起こす。制御ロジック291は信号を線Lに置いて、マルチプレクサ294が、復号されたデータの32ビットワードをバスDへ送ることを引起こす。制御ロジック291はさらにバスG上にアドレス信号を置いてフレームデータ入力レジスタFDRIをアドレス指定する。次のクロック信号は復号されたデータをバスEに移し、ここでこれはフレームレジスタにロードされ、フレームレジスタが一杯であれば最終的に構成メモリ12内へ、FARレジスタで示されたアドレスにシフトされる。
【0057】
modCBC値は復号動作中ただ1回だけ用いられる。暗号化されたデータの後続の64ビットワードは、復号されてから、XOR演算のため先に復号されたデータを用いて連鎖される。(FARレジスタに記憶された値もまた、一度だけフレームアドレスの選択に用いられる。この後、フレームアドレスはフレームが一杯になるごとに単に増分される。)
【0058】
動作の流れ
図8は、構成ロジック29および復号器24により行なわれる動作の流れを示す。最初にステップ70において、構成ロジック29はビットストリームヘッダをロードし、対応するデータを図4bに示す構成ロジックレジスタに置き、これにはビットストリーム長の判断も含まれる。ステップ71で、準備シーケンスのさらなる部分として、構成ロジック29は1番目の構成メモリアドレスを読出す。ビットストリームフォーマットは、暗号化が用いられているかどうかを示すオペコードを含んでいることを想起されたい。ステップ72はオペコードの値による分岐である。暗号化が用いられていなければ、プロセスは図8の左部分に示されたものとなる。暗号化が用いられていれば、プロセスは図8の右に示されたものとなる。暗号化がない場合、ステップ73で、構成ロジック29はカウンタをビットストリームワードカウント(図4cを参照)に等しく設定する。ステップ74で、構成データの32ビット(1ワード)が構成メモリ12のアドレス指定されたフレームへ送られる。ステップ75で、カウンタが終了していないことが示されれば、ステップ76でカウンタは減分され、構成データにおける次の1ワードが構成メモリ12に送られる。カウンタが終了していれば、構成ロジック29はクリーンアップ作業を行なうが、これには、最終的な循環冗長値を読出してビットストリームの終わりにある値と比較することによって、ビットストリームのロードにエラーがあったかどうかを判断することが含まれる。
【0059】
ステップ72で、ビットストリームが暗号化されていることが示されれば、カウンタにはワードカウントがロードされ、プロセスのステップ81で、鍵アドレスレジスタ293(図6)からの初期鍵アドレスが復号器24にロードされる。
【0060】
ステップ82で、暗号化された構成データの2つのワード(64ビット)が復号器24にロードされる。ステップ83で、アドレス指定された鍵が復号器24にロードされる。一実施例では、64ビットの数が復号器24にロードされる。この64ビットの数は、56ビットの鍵と、これが最初、中間、最後、または唯一の鍵であるかを示す2つのビットと、その他のビットとを含み、その他のビットは使用されないことも、パリティに使用されることも、または別の目的に使用されることもある。別の実施例では、64ビット鍵データは、これが最後の鍵であるかどうかを示す単一のビットを含む。さらに別の実施例では、64ビット鍵データは次の鍵についてのアドレスを含み、このため鍵を逐次的な順序で用いる必要はない。別の実施例では、付加的なビットがなく、鍵データが使用するビットは64個を下回る。さらに別の実施例では、鍵でなくビットストリームがいくつの鍵を用いるべきかを示すが、これは安全性がより低いと考えられており、なぜなら攻撃者はいくつの鍵が用いられているかを知って、一回につき1つの鍵を破る単一の鍵攻撃を行なうことができるからであり、これに対し、いくつの鍵を用いるべきかを示すために鍵を用いれば、この情報が攻撃者に漏れることはない。
【0061】
ステップ84で、復号器24はたとえばDESアルゴリズムを用いて64ビットデータを56ビット鍵で復号する。DESアルゴリズムはブルース・シュナイヤーによる上述の書の265頁から278頁に記載されている。他の暗号化アルゴリズム、たとえば高度暗号規格AESを用いることもできる。他のアルゴリズムはより多くの鍵ビットを必要とすることがあり得る。たとえばAESは128ビットから256ビットの鍵を必要とする。
【0062】
ステップ85で、より多くの鍵を用いるべきかどうかが判断される。鍵が最初、中間、最後、または唯一の鍵であるかを示す2つのビットを調べて、これが最後の鍵であるかどうかを判断し、もしそうでなければ鍵アドレスは増分され、復号器24はメモリ23内で次の鍵をアドレス指定する。
【0063】
最後の鍵が用いられた後、ステップ87で、レジスタFARおよびinitCBCを組合わせて得られた64ビット値として図6に示した、変更を加えられたCBC値と、ステップ87で入手された復号された値とのXORが取られる。一実施例では、CBCレジスタ内にロードされた64ビットランダム数のうち22ビットは、ビットストリームの始めのフレームアドレスと交換される。暗号化プロセスの目的は、64ビットの暗号化された値におけるあらゆる2進数を、すべての先行のビットおよび鍵の関数にすることである。CBC値を1番目のアドレスと組合わせる目的は、意図された開始アドレスとは異なるアドレスにビットストリームがロードされると、暗号化された値が変わるようにすることである。ステップ87はこれら両方の目的を達成する。次に新たなCBCが記憶される。記憶は図6に示すFARおよびinitCBCレジスタであっても、または復号器24内に位置する別のレジスタであってもよい。
【0064】
ステップ88で、この復号された構成データはバス27(図3)で構成ロジック29へ送られる。構成ロジック29は更新された巡回冗長検査値を算出し、これはロードのプロセスの終わりにCRCレジスタに記憶された巡回冗長値と比較される。構成ロジック29が暗号化を使用するように設定されていれば、構成ロジック29内のマルチプレクサは、この復号された構成データを構成メモリ12のアドレス指定された列へ送る。
【0065】
ステップ89でカウンタが調べられ、もし終了していなければステップ96でカウンタは減分され、プロセスはステップ82へ戻り、ここで次の64ビット(2ワード)がビットストリームからロードされる。
【0066】
最後に、ステップ89でカウンタが終了したことが示されれば、ステップ90で、ビットストリーム内のCRC(巡回冗長検査)値が、ビットストリームのロードの際に算出されるCRC値と比較される。値が一致すれば、構成は完了しており、FPGAは動作へ移る。値が一致しなければ、ロードにエラーが発生しており、構成プロセス全体が中断される。
【0067】
鍵順序の評価−単一の鍵攻撃の防止
図9は、鍵順序を評価するために復号器24により実現される状態機械を示す。Enc_data_ready信号が活性化されるまで状態機械は状態S1に留まる。この信号は復号を始めてもよいことを示し、判断状態Q1へ移らせ、ここで復号器24は、バス27上のアドレスInit_key_addrにより特定されるアドレスをバス28に与え、鍵および鍵順序をリードバックし、さらに鍵順序データの2ビットから、鍵が1番目の鍵または唯一の鍵であるかどうかを判断する。もしそうでなければ、復号器24はBad_key_set信号を制御ロジック291に送り、構成ロジック29に構成を中断させる。アドレスが1番目または唯一であれば、復号器24は状態S3に移り、ここでデータが復号される。次に状態機械は判断状態Q2に移り、ここで鍵が最後または唯一であるかどうかが判断される。もしそうであれば、復号は完了しており、状態S4で復号器24は復号されたデータを構成ロジック29に返す。もしそうでなければ、状態S5で、復号器24は鍵アドレスを増分して新たな鍵を得る。状態機械は質問Q3を問い、次の鍵が中間の鍵または最後の鍵であるかどうかを判断する。もしそうでなければ、S2は構成を中断させる。鍵が中間または最後であれば、状態機械は状態S3に戻り、データを再び復号する。別の実施例では、状態S4で復号器24はさらに、復号されたデータとCBC値とのXORをとるステップを行なう。
【0068】
鍵順序を鍵内で記憶する利点は、攻撃者が単一の鍵攻撃を実行できないことであり、それは、復号器24が復号を行なう際に(設計者が意図したように)鍵メモリ23で特定された鍵すべてを使用することを、攻撃者は妨げることができないからである。単一の鍵攻撃を用いている攻撃者から保護するためには、2番目および3番目の質問Q2およびQ3を問う必要はないが、それは鍵順序がPLDの内部にある鍵データ内に記憶されるからである。しかし、各々の鍵がロードの際に正しくラベル付けされたことを確かめるために、設計者、または鍵をロードするボードの検査員がこれら3つの質問を問うことは有益である。
【0069】
一実施例で復号器24は、復号−暗号化−復号の順番をとる三重DES規格を用い、別の鍵が用いられるたびにアルゴリズムを(僅かだけ)交替させる。このような組合せは、ANSI X9.52 1998三重DES規格に準拠する。別の実施例ではその都度復号が用いられる。
【0070】
鍵メモリ23
図10aに示す回路は3つの構成要素、すなわち電池電源スイッチ22、制御ロジック23aおよび鍵レジスタ23bを含む。制御ロジック回路23aおよび鍵レジスタ23bは図3の鍵メモリ23を成す。図10aの実施例では、鍵レジスタ23bは6つの64ビットワードを含む。当然のことながら、これに代えて他の鍵メモリサイズを用いてもよい。実施例によっては、鍵メモリ23には6個をはるかに上回る鍵が記憶され、使用すべき鍵のアドレスを与えるためには4ビット以上が必要である。鍵レジスタ23b用の電源は電池電源スイッチ22から線VSWITCHを通って来る。鍵メモリ電源電圧VCCIが不十分、またはない場合、電池電源スイッチ22は電池バックアップ電圧VBATTをVSWITCH線に印加し、こうしてVSWITCHは正の電圧を伝える。
【0071】
この実施例では、各々の鍵レジスタは64個のメモリセルを有する。各セルは書込イネーブル信号WEを受取り、この信号はハイであればセルへのデータの書込を引起こし、ローであればセル内のデータの保持を引起こす。書込イネーブル信号WEは1レジスタ内のセルに共通である。PLD電源電圧(VCCIとは異なる)がなくWE信号が活性状態に駆動されない場合、T1などの弱いプルダウントランジスタがWE信号をプルダウンし、こうして鍵メモリレジスタをいずれもアドレス指定不可能にし、メモリセルのいずれも乱されないようにする。
【0072】
一実施例では、復号鍵をPLD内にロードするためにPLDのJTAGポートを用いる。メモリセル電源電圧は通常の動作時にはVCCIのデバイス電圧レベルにあり、一実施例でこのレベルは3.0ボルトから3.6ボルトの間である。JTAGポートに与えられる信号はいくつかの異なった電圧であり得る。また、いくつかの異なった内部電圧があり得る。したがって電圧変位が必要とされる。この電圧変位はメモリセルで行なわれる。メモリセルの詳細を図10bで示す。インバータI1およびI2を含むラッチには、VSWITCHで電力が与えられるため、デバイス電源電圧VCCIがあるかないかにかかわらず電力が与えられる。WE信号および反転されたデータ信号data_bの両方は1.5ボルトのレベルで動作する。これら信号はNMOSトランジスタT4、T5およびT6を駆動し、さらにインバータI3を通じて(やはり1.5ボルトの電源電圧を用いて)トランジスタT7を駆動する。図10bは、WEがローであれば、トランジスタT4およびT5がオフであり、インバータI1およびI2を含むラッチの内容が維持されることを示している。WEがハイであれば、インバータI1およびI2のいずれかがローにされ、こうして新たなデータをラッチ内にロードする。
【0073】
制御ロジック回路23aはJTAGバス25(図3にも示す)から信号を受取る。JTAGバス25は、書込、読出、安全モードの設定のための制御信号、ならびにデータおよびアドレスバスを含む。このインターフェイスはIEEE1532JTAG規格に準拠する。鍵メモリ23がJTAGバス25によってアクセスされ得る前に、安全性状態(バス26)が非安全モードに置かれるが、これはISC_PROGRAM_SECURITY命令(図10aを参照)を用い、鍵データバスのビット0に論理1を与えることによって行なわれ得る。鍵メモリ23は、IEEE1532規格のISC_PROGRAMおよびISC_READ命令を用いて、JTAGバス25に書込まれ、およびここから(検証のために)読出される。制御ロジック23aは、JTAGバス25からの3ビットアドレス信号ADDRをデコードするためのデコーダを含み、JTAGバス25にISC_PROGRAM命令が現われれば書込ストローブ線ws_b[5:0]のうちアドレス指定された線上にローへのパルスを生成、またはISC_READ命令がJTAGバス25上に現われれば読出選択線rsel[5:0]のうちアドレス指定された線上にハイの信号を生成する。6つの64ビットワードのうち1つの読出は、6本の読出選択線rsel[5:0]のうち1本にハイの信号を与えることで可能であり、これは読出マルチプレクサ23dが、64本の出力線q[63:0]上に選択されたワードを置くことを引起こす。書込選択線または読出選択線のうち1本のみが一度に選択される。読出選択線がアサートされなければ、ハイのpark_low信号は、64個のトランジスタ23eが64線q[63:0]をプルダウンし、これら線のフローティングを防ぐことを引起こす。
【0074】
鍵メモリ23が非安全モードで動作していれば、64ビットワードは鍵レジスタ23bからJTAGバス25へ読出され、ここで値はFPGAの外部で調べられ得る。FPGAはこの非安全モードにおいて、DES復号のための56ビット鍵としてレジスタ23b内の選択された64ビットワードのうち56ビットを用いることによって試験され得る。一実施例で、鍵メモリ23が非安全モードにあれば、設計がロード前に暗号化されていてもユーザの設計のリードバックは可能である。これによって設計者は、暗号化された設計も試験およびデバッグできる。鍵の安全性状態の通信はバス26(図3も参照)を通じて行なわれる。
【0075】
値が鍵レジスタ23b内に書込まれ、バス25からの読出動作で検証された後、ISC_PROGRAM_SECURITY命令を用いて、IEEE1532規格の一部である64ビット鍵データバスのビット0に論理0を与えることによって、制御ロジック23を安全モードに置く。この安全モードでは、鍵に対するアクセスは認められない。
【0076】
図11に示すように、攻撃者がISC_PROGRAM_SECURITY命令を用いてから鍵を読出すことによって非安全モードに戻ることを確実に防ぐために、安全性がなくなると(すなわちISC_PROGRAM_SECURITY信号が非安全論理レベルに移ると)制御ロジック23a内の状態機械は0を6つのワードすべてに、一回につき1ワードずつ書込むことで、すべての鍵を消去する。これは以下のステップ110からステップ119によって行なわれる。ステップ110で、0をwdata[63:0]バスに置き、ステップ111でws_b[0]信号を(論理0値で)アサートし、次にステップ112〜117で、ws_b[0:0]からws_b[5:0]までの信号を一回につき1つずつ逐次的にストローブし、この後ステップ118で安全性状態を変えて非安全モードに入り、最後にステップ119でwdata[63:0]論理0値を解放する。このように、電池でバックアップされるメモリ23を非安全モードに置くあらゆる試みは、鍵レジスタ23b内の値すべての消去を引起こす。
【0077】
鍵メモリ23が安全モードにあるかどうかを通信するため、制御ロジック23aはバス26(これは単一の線であり得る)上で安全モード信号を構成ロジック29に送り、鍵メモリ23が安全モードで動作していることを示す。この信号が非安全モードに切換わると、構成ロジック29は設計を構成メモリ12からクリアする。鍵が鍵レジスタ23bに記憶され、かつ鍵メモリ23が安全モードにあっても、暗号化されていないビットストリームが構成ロジック29により構成メモリ12内にロードされ得ることに注目されたい。
【0078】
鍵のロード、多数の暗号鍵
ユーザが設計の詳細を知ることができない安全モードにPLDが置かれる前に、復号鍵をPLD内にロードする必要がある。図3に示す実施例では、鍵はJTAGポート20を通じてロードされる。
【0079】
この発明の特徴として、暗号鍵はこのJTAGポート20を通じてロードされる。JTAGプログラマがボード試験中に暗号鍵をロードすることが予測される。鍵を記憶するためのRAMが非安全モードにあれば、ユーザはこれに対する完全なアクセスを有し、設計が暗号化されていたとしても鍵および設計の両方を読出すことができる。このことは鍵と鍵の使用とを試験している設計者にとって有用である。次に設計者は動作に一旦満足すると、JTAGポートを通じ別の命令を送って鍵メモリを安全モードに置くことができる。鍵メモリが一旦安全モードに置かれると、鍵を読出すことはできない。さらに、鍵メモリを安全モードから非安全モードに移すと、メモリ初期化プロセスを開始する回路が活性化され鍵は消去される。(後に論じる図15で、この機能を行なうための状態機械を示す。)
【0080】
この発明の一局面に従うと、設計を暗号化するために2つ以上の鍵が用いられ得る。たとえば3つの鍵を用いる場合、ビットストリームはまず1番目の鍵を用いて暗号化され、次に結果として得られる暗号化されたビットストリームが2番目の鍵を用いて再び暗号化され、最後に、結果として得られる二重に暗号化されたビットストリームが3番目の鍵を用いてさらに暗号化される。この三重に暗号化されたビットストリームは、たとえばPLDを保持するプリント回路基板上のPROMまたはフラッシュメモリで記憶される。
【0081】
復号では、これら鍵を(逆の順序で)連続的に用いて、暗号化されたビットストリームを反復的に復号する。これに加え、特定の設計を復号するのに用いられるよりも多くの鍵がPLDに記憶されていれば、暗号化されたビットストリームは暗号化されていない部分の中に、いくつの鍵を用いるべきかの指示と1番目の鍵のアドレスとを含み得る。このような実施例では攻撃者によるビットストリームの解読が容易となり得るが、それは攻撃者が一度に1つの鍵に対処するだけでよいからである。これに代えて、鍵自体が、最初、中間、最後、または唯一の鍵であるかを示すこともある。こうして、同じPLDが異なったときにプログラムされて、(異なった設計で構成される)異なった機能を行なうことが可能となり、異なった鍵の値についての情報を、設計者のうちただ一人または数人にとってのみ利用可能とできる。こうして第1の設計者は第2の設計について、両方の設計が同じPLDで(異なったときに)実現されたとしても知らないことがあり得る。
【0082】
図3を参照して、構成ロジック29は図1の構成ロジック14の他に追加のロジックを含む。図1の構造では、構成アクセスポート21上のビットストリームはワード、一実施例では32ビットワードとして扱われる。これらワードのうち、通常はビットストリームの初めまたはその近くにあるいくつかのワードは、たとえばビットストリームの長さ、構成データについての開始アドレスなどのヘッダ情報を含む。この発明のビットストリームで新規な点は、ビットストリームが暗号化されているかどうかについての指示、およびビットストリーム内の構成データを復号するための鍵のアドレスである。
【0083】
電池でバックアップされるメモリ
鍵メモリ23に記憶される値は、FPGAへの電力が外されたときには電池によって維持されることが好ましい。
【0084】
さらに、スイッチ22などの電池電源スイッチを用いて、暗号鍵以外のメモリもまたバックアップできる。具体的に、PLDの電源切断時にPLDの生成したデータを保存することが目的であれば、PLD内のフリップフロップすべてにVSWITCH電圧供給が経路付けられるPLDを製造することができる。さらに、PLDの電源切断時にPLDの構成を保存することもまた目的であれば、構成メモリ12(図3)は代替的にVSWITCHから電力を与えられ得るが、このような実施例では、単にPLD内のフリップフロップに電力を与えるよりもかなり多くの電池電力が必要となり、さらにフリップフロップに電力を与えるには、数個の暗号鍵を記憶するための極めて小型のメモリに電力を与えるよりも多くの電池電力が必要となる。
【0085】
図12は電池電源スイッチ22の構造を示す。この実施例では、VBATTレベルシフト回路31によって、PLDが電池および主電源につき異なった電圧を用いることができる。さらに、当然のことであるが、この回路の目的はさまざまな電圧レベルに対処することである。一実施例で電池電源スイッチ22は最大3.6ボルトのVCCI電圧を扱うことができ、VCCIが約1ボルト未満に落ちると電池電力へ切換わる。電池電圧は1.0ボルトから3.6ボルトの間であり得る。
【0086】
電池電源スイッチ22は4個の出力駆動PチャネルトランジスタP0〜P3を含む。トランジスタP0およびP1は一緒にオンおよびオフになり、トランジスタP2およびP3も同様である。この回路は、VCCIおよびVBATTが相互に接続されてしまうあらゆる可能性を回避するために、各々の脚につき1個でなく2個のトランジスタを含む。トランジスタP0は寄生ダイオード(ドレインと基板とのp−n接合)を含み、これはトランジスタがオフである際にも図で上方向へ電流を伝導するおそれがある。このような電流の流れを防ぐためにトランジスタP1が追加され、その基板はそのドレインに接続されるため、寄生ダイオードの伝導は下方向でのみ可能である。同様の仕組みをトランジスタP2およびP3にも設ける。したがって、電流がVBATTからVCCIへ、またはVCCIからVBATTへ伝導する可能性はない。インバータ33および34はVSWITCH電圧から電力を与えられるため、VCCIがオフであっても常に動作している。トランジスタP4は常にオンの抵抗器であり、静電放電に対する保護を提供する。ほとんどの時間、トランジスタP4により制御されるこれら構造は電流を引込まず、通常トランジスタP4にわたって電圧の降下はない。
【0087】
図13はVBATTレベルシフト回路31の一実施例を示す。端子OUTにおける出力電圧は信号INおよびINBにより制御される。これら信号はインバータ33および34により生成され、これらインバータはVSWITCHノードから自分の電源電圧を得る。したがって、VSWITCHがVBATTにより供給される場合、信号INおよびINBのうち一方は電圧VBATTにあり、他方は接地される。しかし、もしVSWITCHがVCCIにより供給される場合、INおよびINBのうち一方はVCCIの電圧レベルにあることになる。INがVCCIにあり、かつINBが接地されている場合、トランジスタ45はオンであり、トランジスタ46はオフである。Pチャネルトランジスタ43のゲートはローであり、トランジスタ43はオンであり、こうしてインバータ47の入力をVBATTにする。トランジスタ48の出力もまたVBATTにある。再び図12を参照して、トランジスタP0のゲートでの電圧レベルVBATTはトランジスタP0を正にオフにする。
【0088】
図14はVCCI検出回路32を示す。VCCI検出回路32は、線VSWITCHでの電圧がいつ電池に切換えられ、いつ再びVCCIに切換えられるのかを判断する。回路32のこの実施例は本質的に一続きになった5個のインバータ段I1からI5である。スイッチング電圧の制御は主にインバータ段I1で行なわれる。トランジスタ52および53はCMOSインバータを形成する。このCMOSインバータへの電力はPチャネルトランジスタ51を通じて流れることになり、トランジスタ51は、VCCIがトランジスタ51のしきい値電圧、典型的に0.7〜0.8ボルトに達するまでオンにならない。VCCIのスイッチングが遅く、一杯の電圧に達するまで数ミリ秒かかる場合、トランジスタ51は回路I1の活性化を遅らせる。トランジスタ51がオンになると、トランジスタ52のソース(上の端子)はVCCIになる。Nチャネルトランジスタ53は典型的に、やはり約0.7〜0.8ボルトのしきい値電圧を有するが、トランジスタ52に対して弱いトランジスタとしてのサイズにされる。一実施例でトランジスタ53の幅/長さ比は1/18であるのに対し、トランジスタ52の幅/長さ比は3/2である。したがってトランジスタ53は、トランジスタ52がオンになるまでインバータI2の入力をローにするにすぎない。一実施例で回路I1は、VCCIが約1.0ボルトにあるときにインバータ段I2の入力をハイにする。したがってインバータ54の出力はローになる。インバータ段I3はシュミットトリガである。インバータ段I3への0ボルトの入力はトランジスタ56および57をオフにし、トランジスタ55をオンにし、ノードN3をVCCIにし、トランジスタ58をオンにし、これはノードN4を引上げ、こうして、トランジスタ56がオンになる電圧を上昇させ、VCCIの小さな変動がノードN3での電圧を切換えることを防ぐ。インバータ59および60は任意であり、出力信号usebattおよびusebattbのより鋭いエッジをもたらし、これにより図12の電池電源スイッチ22がVBATTからVCCIに切換わることを引起こす。VBATT′信号が制御するトランジスタ61は弱いプルダウンのトランジスタであり、VCCIがなくインバータ60から出力信号をもたらさないときにusebattb線を確実にローにする。
【0089】
構成されたPLDを含む製品の購入者に利用可能でない鍵
PLDを構成するのに用いられた設計を攻撃者が知ることを防ぐため、いくつかの追加のステップをとることがある。
【0090】
別の局面に従うと、PLDを組込んだシステムの販売前に鍵がPLD内にロードされ、これにより、PLDを含むシステムの販売後、設計をPLD内にロードして使用できるが、攻撃者は鍵に記憶された値を知ることはできない。したがって、暗号化されていない設計は読出またはコピーされ得ない。この安全性を達成するためにいくつかのステップがとられる。
【0091】
安全モード保存(改ざん防止)
一実施例で、PLDの構成ロジック29には安全性に関する2つのフラグがある。一方は、復号鍵が安全にされているかどうかを示し、他方は、設計が復号された設計であり、したがって保護されなければならないことを示す。JTAGロジック13(図3)がISC_PROGRAM_SECURITY命令で安全モードを選択すると、制御ロジック23a(図10a)にあるsecure_keyフラグがセットされる。ビットストリーム内の設計データが暗号化されているということを、PLD内にロードされたビットストリームが示している場合、構成ロジック29(図示せず)にあるsecure_designフラグがセットされる。いずれかのフラグが後に非セットにされると構成メモリ全体がクリアされ、復号された設計がなくされる。secure_keyフラグが(ISC_PROGRAM_SECURITY命令により)リセットされると、鍵もまた消去される。
【0092】
図15は、設計クリア機能を行なう状態機械を示す。secure_designフラグがセットされると、状態機械は状態S1に入る。この状態は、secure_designフラグの安全モードから非安全モードへの変化を監視する。設計安全(secure−design)モードが継続する限り状態機械は状態S1に留まる。変化が一旦生じると、状態機械は状態S2に入り、データを構成メモリ12内にシフトするためのデータシフトレジスタはリセットされ、こうして構成メモリビットについてのデータ線すべてに0を置く。次に状態機械は状態S3に移り、アドレス指定されたフレームのワード線がアサートされる。この結果、データシフトレジスタ線上の0は、アドレス指定されたフレームにあるメモリビット内に書込まれる。質問Q1で、アドレス指定すべきフレームがまだあることが示されると、状態機械は状態S4に移り、ここでフレームアドレスが進められ、状態機械は状態S3に戻る。質問Q1で、アドレス指定すべきフレームがもうないことが示されると、プロセスは終了し構成メモリはクリアされる。
【0093】
鍵を攻撃者によるアクセスから保護することもまた必要である。鍵のロードは、設計を含むシステムが最終顧客にとって利用可能となる前に行なわれる。設計者は設計の開発中、PLDをデバッグのために非安全モードで動作させたいと望むことがある。このデバッグ動作を可能にし、かつ鍵の安全性を保存するため、鍵レジスタすべてのクリアで、鍵ロードのプロセスが非安全モードで始まる。鍵のロード中、および鍵が検証のためリードバックされる間、安全な鍵のフラグが非安全モードに保たれることになる。この安全鍵フラグはまた、構成ビットストリームがロードおよび復号される間も非安全モードに保たれる得る。しかし安全鍵フラグが一旦セットされると、安全鍵フラグを非安全モードに戻せばすべての鍵がクリアされ、さらに図15の状態機械の動作が開始される。したがって鍵がクリアされるばかりでなく、構成もまたクリアされる。
【0094】
リードバック攻撃、およびリードバックの禁止
いくつかのFPGAはFPGAからのビットストリームのリードバックを許しており、このためユーザは設計をデバッグしたり、またはFPGA内のフリップフロップから状態機械情報を入手できる。設計がリードバック動作用に再暗号化されない限り、ビットストリームをリードバックする行為によって、暗号化されていないビットストリームが可視となるよう暴露されてしまう恐れがある。
【0095】
設計のさらなる安全性は、暗号化された設計がFPGAにロードされる際にリードバックを禁止することで提供される。一実施例でリードバックは、復号鍵もまた安全にされる場合にのみ禁止される。
【0096】
図16は、構成メモリをロードおよびリードバックするための構造のブロック図を示す。一実施例で構成ロジック29は以下の2つの条件が揃っている場合にリードバックを防止する。すなわち、(1)データバス26(図3および図10を参照)上の安全性状態線によって、鍵が安全モードにあることが示されている、および(2)ビットストリームが暗号化されていることを示す構成ビットストリーム内のオペコードに構成ロジック29が応答したことがある、の2つの条件である。したがって、鍵が安全にされていない、またはビットストリームが暗号化されていない場合、リードバックは許可され得る。別の実施例では、異なる条件によって、リードバックが許可され得るかどうかが制御される。
【0097】
構成ロジック29は、リードバックが行なわれるであろうことを示すヘッダをビットストリーム内で受取ると、そのフレームアドレスレジスタに記憶されたフレームアドレスを線107上に送り、このフレームアドレスはアドレスデコーダ110によってデコードされてバス109のアドレス指定された線を選択する。次に、線108上のワード線イネーブル信号がアサートされ、この信号はバス109の選択されたワード線をアサートし、こうして、選択されたワード線によりアドレス指定されたメモリセルは、その値をn本のデータ線102上に置く(nはフレーム長であり、構成ロジック29内に記憶される)。次に構成ロジック29は線104上でロード信号をアサートし、データのフレームを(並列に)データシフトレジスタ101内にロードする。次に構成ロジック29は線105上でシフト信号をアサートし、データシフトレジスタ101が32ビットワードのデータのフレームをバス103上でフレームデータ出力レジスタ(図4dを参照)へ、さらにそこから構成アクセスポート21(図3)上で出ていくビットストリームへシフトすることを引起こす。
【0098】
ビットストリームに復号が示されている場合、構成ロジック29は内部フラグをセットしてこれを示す。これらフラグがセットされ、かつバス26上の安全性状態信号により示されるように鍵メモリ23が安全モードにあれば、構成ロジック29は、線108上のワード線イネーブル信号を非活性に保ち、かつ線104および105上のロードおよびシフト信号を非活性に保つことで、ビットストリーム内のリードバックコマンドに応答してリードバックを防ぐ。しかし鍵メモリ23が安全モードになければ、設計が暗号化されているかもしれないにもかかわらず、リードバックが許され、試験およびデバッグが可能となる。
【0099】
部分的再構成攻撃およびその防止
いくつかのFPGAはFPGAの部分的再構成を許すか、または、別個の開始アドレスおよび別個の書込命令を用いてFPGAの異なった部分に設計の異なった部分をロードすることを許している。攻撃者は設計を知る試みとして設計を部分的に再構成し、ブロックRAMまたはフリップフロップの内容を出力ポートに直接読出したり、または既存の設計に或るセクションを追加して、設計を知るのに用いられ得る情報を読出すことがあり得る。たとえば攻撃者は、暗号化されていない設計であって、その唯一の目的は暗号化された設計についての情報を抜き出すことである、暗号化されていない設計によって部分的にPLDを再構成することがあり得る。このようなトロイの木馬設計は別のビットストリームでPLD内にロードされたり、または既存の暗号化されたビットストリームに加えられたりする。たとえばFPGAのブロックRAM内にロードされた状態機械設計を知ることが攻撃者の関心であれば、トロイの木馬設計はブロックRAMのアドレスを通じて巡回し、ブロックRAMデータ内容をパッケージのピンに送るためのロジックを含み得る。
【0100】
攻撃者がこのような変化を加えることを防ぐため、元の設計が暗号化される場合、復号を伴う構成が一旦始まると構成ロジック29は部分的な再構成を却下する。構成ロジック29は、復号オペコードを有するヘッダが一旦処理されるとさらなる書込命令を却下する。さらに構成ロジック29は、暗号化を伴わない構成が一旦行なわれると、復号を伴う構成を却下する。構成ロジック29はこれらの制限を達成するために、復号命令が受取られた後に構成メモリに書込を行なうヘッダを無視し、さらに設計の暗号化されていない部分がロードされた場合に復号コマンドを有するヘッダを無視する。こうして、復号を伴う書込が用いられていることをオペコードのうちいずれかが示すと、PLDは単一の書込命令のみを受入れることになる。
【0101】
さらなる実施例
これら図面に関する以上の記載はいくつかの実施例についての詳細を与えている。しかし多くの追加的な実施例もまた可能である。たとえば、上述の暗号ブロック連鎖アルゴリズムの代わりに、たとえば一回につき1つの8ビットバイトなどの、ブロックサイズよりも小さなユニットでデータが暗号化され得る、暗号フィードバックモードと呼ばれる暗号化方法を用いることが可能である。この暗号フィードバックモードはシュナイダーの同書200頁から203頁に記載されている。
【0102】
さらに別の実施例では、暗号化が用いられると、あらゆるビットストリームはアドレス0で始まってロードされなければならない。この実施例の一実現例では、暗号化を特定するオペコードを受取ると、開始フレームアドレスレジスタFAR(図6)にロードされるアドレスをいずれもアドレス0と取替える。
【0103】
さらに別の実施例では、開始アドレスおよび設計データは両方とも暗号化される。この実施例では、暗号化されていない設計データで可能であるのと同様、異なったフレームアドレスで始まる暗号化された設計データのうちいくつかのセグメントをロードすることが可能である。
【0104】
別の実施例では、鍵メモリ23などの鍵メモリに記憶される鍵データは、続く鍵の数を特定する。この実施例を変形したものでは、鍵データはさらにこの鍵に先行する鍵の数も特定する。設計者が意図した1番目の鍵アドレスとは違う鍵アドレスを攻撃者が与えると、構成は中断され得る。さらに、鍵内で特定された数の鍵が用いられるまで暗号化が進行する。
【0105】
別の実施例では、鍵メモリが非安全モードにある際に鍵をリードバック可能にする代わりに、鍵はパリティビットまたはCRCチェックビットを含み、これらビットのみが、鍵が正しくロードされたことを検証するためにリードバックされ得る。この実施例では、1人の設計者が知っている鍵を別の設計者から秘密にしておくことができ、異なったときにPLDを用いて異なった設計をロードする際にこの実施例は有用である。
【0106】
上述のCRCチェックサム算出に関し、CRCチェックサムが設計の暗号化の前または後のいずれかに算出される実施例が提供され得る。当然のことながら、ビットストリームに追加されるチェックサムが設計データの暗号化前に算出される場合、その復号後に対応するチェックサムが設計データ上のPLD内で算出されることになる。同様に、ビットストリームに追加されるチェックサムが設計データの暗号化後に算出される場合、PLDは設計データの復号前に、受取ったビットストリーム上で対応するチェックサムを算出することになる。
【0107】
復号鍵をロードするプロセスに関するさらなる注としては、図8に例示したプロセスを用いる場合、復号鍵をロードするためにデバイスプログラマを用いる必要はない。鍵は単にボード試験手順の一部としてロードされ得る。
【0108】
さらに、上述の構造および方法を用いて2つ以上のPLDをプログラムすることも可能である。いくつかのデバイスをデイジーチェーンに配置してこれら直列のデバイスを通じビットストリームを通過させるか、または直列のデバイスをアドレス指定することによって、単一のビットストリームを用いて2つ以上のPLDまたはFPGAをプログラムすることが周知である。デバイスのうち1つまたはそれ以上が暗号化された設計データを受取る際、いくつかのPLDをこのような配置に配置することが可能である。
【0109】
さらに別の実施例としては、暗号化された設計データを有するビットストリームにつき単一のアドレスのみが特定され得る一実施例を記載したが、別の実施例で、好ましくは暗号化されるいくつかのアドレスが、設計の別個の部分をロードするために特定され得る。さらにこれら別個の部分は同じ暗号鍵を用いても、異なった暗号鍵または異なった鍵の組を用いてもよい。
【0110】
以上の説明から明白となった変形例は、この発明の範囲内に含まれると意図されている。
【図面の簡単な説明】
【図1】先行技術のFPGAにおける機能関係を示す図である。
【図2】先行技術のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドを示す図である。
【図3】この発明の一実施例に従うFPGAでの機能関係を示す図である。
【図4】この発明のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドを示す図である。
【図5a】暗号化されていないビットストリームの例を示す図である。
【図5b】暗号化されたビットストリームの例を示す図である。
【図6】構成ロジック29と、復号器24に通じるバス27およびバス28の線とを示す図である。
【図7a】この発明の一実施例で用いられる三重暗号化を伴う外部暗号ブロック連鎖における、変更を加えられた開始値を示す図である。
【図7b】図7aとともに用いられる、対応する開始値および復号プロセスを示す図である。
【図8】ビットストリームを処理するための動作を示すフローチャートである。
【図9】鍵順序を評価するために復号器24により実現される状態機械を示す図である。
【図10a】図3の鍵メモリ23の構造を示す図である。
【図10b】図10aのメモリセルの構造を示す図である。
【図11】非安全にされると鍵を消去するために図10aの制御ロジック23aが実行するステップを示す図である。
【図12】図10aの電池電源スイッチをより詳細に示す図である。
【図13】図12の電池電源スイッチのレベルシフト回路を示す図である。
【図14】図12の電池電源スイッチの電圧検出回路を示す図である。
【図15】安全モードから出ると設計を消去するための状態機械を示す図である。
【図16】構成メモリをロードし構成をリードバックするための要素を示すブロック図であって、暗号化があるときにディセーブルされる線を含む図である。
【発明の分野】
この発明はPLDに関し、より特定的に、ビットストリームを介してPLD内にロードされる設計の保護に関する。
【0002】
【発明の背景】
PLD(プログラマブルロジックデバイス)とは、設計者が選択したデジタル論理関数を実行する集積回路構造である。PLDはロジックブロックと相互接続線とを含み、典型的にロジックブロックおよび相互接続はともにプログラム可能である。1つの一般的な種類のPLDがFPGA(フィールドプログラマブルロジックデバイス)であり、ここでロジックブロックは典型的にルックアップ表およびフリップフロップを含み、典型的にその入力信号のあらゆる関数を生成および記憶できる。別の種類はCPLD(コンプレックスプログラマブルロジックデバイス)であり、ここではロジックブロックはAND関数、およびOR関数を実行し、入力信号の選択はプログラム可能である。
【0003】
PLDの外部でのビットストリームの記憶に関する問題
PLD内で実現される設計は複雑化しており、PLD内で実現すべき設計を完成させデバッグするにはしばしば数ヵ月を要する。PLDが一部をなすシステム内に設計が入れられ、利益のため販売される際、設計者にとって誰か他の者がこの設計努力をコピーするという結果は望ましいものではない。設計者はしばしば設計を企業秘密にしておこうと望む。多くのPLD、特にFPGAは揮発性構成メモリを使用し、これにはPLDに電源が投入されるたびにPROMなど外部のデバイスからロードされることになる。構成データはPLDの外部に記憶され、構成アクセスポートを通じて伝送されることになるため、攻撃者、すなわち構成アクセスポート上のデータをたとえばボードトレース上にプローブを置くことにより監視する者によって、設計の機密は容易に侵される恐れがある。
【0004】
現在の解決策およびその欠点
設計を暗号化する試みがなされてきているが、設計を攻撃者に対して安全にし、かつ正規のユーザによる使用を容易にすることは困難である。暗号化アルゴリズムは問題ではない。データブロックを暗号化するためには、いくつかの暗号化アルゴリズム、たとえば標準的なデータ暗号規格(DES)およびより安全な高度暗号規格(AES)のアルゴリズムなどが公知である。暗号ブロック連鎖(CBC)のプロセスでは、暗号化されていないデータワードと次の暗号化されたデータワードとのXORをとってから復号が行なわれ、これによってDESまたはAESはデータのシリアルストリームを暗号化できるので、PLDを構成するためのビットストリームを暗号化するのに好適である。設計を暗号化するのに用いる鍵は何らかの形で、PLDと、設計を復号する構造との間で安全なやり方で通信されることになり、こうして設計がPLDにより復号され、PLDを構成するのに用いられ得る。次に、暗号化されていない設計を用いてPLDが一旦構成されると、設計を無認可で発見されないよう保護し続けなければならない。
【0005】
「構成に関する問題:電源投入、揮発性、安全性、電池のバックアップ(Configuration Issues : Power−up, Volatility, Security, Battery Back−up)」と題された、ザイリンクス・インコーポレイテッド(Xilinx, Inc.)のピーター・アルフキー(Peter Alfke)による1997年11月24日の刊行物には、設計を保護するために、FPGA内に特定のアーキテクチャ上の特徴を有さない、既存のFPGAデバイスでの設計を保護するためにとられ得る、いくつかのステップが記載されている。1つの方法は、FPGA内に設計構成データをロードしてから構成データのソースを外すが、電池を用いてFPGAに対して連続的に電力を維持し、一方でFPGAを待機非動作モードに保つことである。しかし電池に対する電力の要件のため、この方法は大規模なFPGAデバイスにとって非実用的なものとなっている。
【0006】
別の可能性は不揮発性構成メモリである。デバイスの販売前に設計が工場でロードされる場合、構成されたPLDデバイスの購入者にとって、設計がどのようなものであるかを判断することは困難である。しかし逆行分析によって、プログラムされたデバイスの覆いを取去り、金属層を除去し、不揮発性メモリセルに化学処理を施すと、どのメモリセルが充電されたかが明らかとなる可能性があり、こうして攻撃者は設計を知ることができる恐れがある。さらに不揮発性メモリには、標準的なCMOSプロセス技術よりも複雑で経費のかかるプロセス技術が必要であり、市場に出るまでにより多くの時間がかかってしまう。
【0007】
PLDの不揮発性メモリ内に復号鍵を記憶させ、暗号化されたビットストリームをPLD内にロードし、PLD内の鍵を用いてビットストリームを復号することもまた公知である。こうすれば、攻撃者がビットストリームをPLD内へのロード中に読出すことが防止され、かつ、電力がPLDから外されても鍵が維持される。このような機構は、オースティン(Austin)による米国特許第5,388,157号に記載されている。しかしこの構造はユーザの設計をあらゆる態様の攻撃から保護するわけではない。
【0008】
設計保護に加え、ユーザによってはデータ保護もまた必要である。PLDが電力を失っても失われてはならないデータを、ユーザがPLD内に生成することがある。このようなデータは保護されることが望ましい。
【0009】
したがって、便利で信頼性が高く、かつ安全な設計保護方法に対する必要性がなお存在している。
【0010】
【発明の概要】
この発明は、PLDを無認可の使用およびデータの紛失から保護するためのいくつかの構造および方法を提供する。
【0011】
電源投入の際にロードされなければならない静的RAMメモリによってPLDが構成される場合、構成データはデバイスへのロードの際に保護されなければならない。先行技術においてこれは、構成データを暗号化して集積回路デバイスの外部にあるメモリに記憶させ、1つ以上の復号鍵をPLD内にロードして電源切断時に鍵をPLD内に維持し、鍵を用いて構成データを復号する復号回路をPLD内に含め、復号された構成データをPLD内で生成し、復号された構成データを用いてPLDを構成することによって達成される。
【0012】
さらなる安全性のために、不揮発性メモリを用いて鍵を保存する代わりに、この発明は好ましくはPLDに接続された電池を用いて、PLDから電力が外される際に鍵を保存する。不揮発性メモリ内に鍵を記憶させたPLDを取外し、PLDの覆いを外し、不揮発性ビットのうちどれが論理1にプログラムされどれが論理0にプログラムされているかを観察することは可能であるが、静的メモリセルにのみ記憶された鍵の内容を判断することは極めて困難であり、なぜなら、鍵を記憶させるためだけでも鍵を記憶するメモリセルには電力が維持されなければならず、連続的にPLDに対し動作電力がある間にPLDの覆いを外し、層を取除き、プローブをかけなければならないであろうからである。
【0013】
一旦PLD内にロードされた設計を攻撃者が盗み得るやり方
鍵が十分な安全性を提供していなければ、攻撃者は暗号化コードを破って鍵の値を判断する可能性がある。周知のデータ暗号規格DESが用いていた暗号鍵は56ビットのものであり、鍵解読用の高性能のコンピュータによって数時間で破られてしまった。DESはブルース・シュナイヤー(Bruce Schneier)によって、ブルース・シュナイヤー著、ジョン・ワイリー&サンズ・インコーポレイテッド(John Wiley & Sons, Inc.)刊行の「応用暗号技術第2版:プロトコル、アルゴリズム、およびCにおけるソースコード(Applied Cryptography Second Edition : protocols, algorithms, and source code in C)」著作権1996年の265〜278頁で説明されている。このような周知の暗号規格を用いることが所望であれば、安全性を増大させるために構成データは数度、各回につき異なった鍵を用いて暗号化され、こうして暗号化を繰返すたびに約256だけ暗号化コードを強化することがある。または構成データを、一番目の鍵を用いて暗号化し、2番目の鍵を用いて復号し、3番目の鍵を用いて暗号化することがあり、この組合せは三重DES規格の一部である。その他の暗号化アルゴリズムを用いることもできるが、安全性は鍵に存するためアルゴリズムを秘密にしておく必要はない。暗号化の方法が対称であれば、暗号化に用いた同じ鍵がPLD内に記憶され、復号では逆の順序で用いられる。
【0014】
多数の鍵を提供するPLDでは、用いるべき鍵の数とあらゆる鍵のアドレスとが、暗号化されていないビットストリームで提供される場合、攻撃者は1回につき1つずつ鍵に攻撃をかけて鍵の値をより容易に判断できる可能性がある。このような攻撃を回避するため、いくつの鍵を用いるのか、および、鍵がセット内の最後の鍵か、またはさらなる鍵が続くのかについての指示を、ビットストリーム内でなく鍵内に記憶することによって追加の安全性を達成する。
【0015】
ビットストリームがPLD内にロードされた後にビットストリームをリードバックする選択肢をPLDが提供する場合、攻撃者が用い得る別の方法はこのビットストリームをリードバックすることである。設計を攻撃するこの方法を回避するため、一実施例で、リードバックを提供しかつ暗号化も提供するPLDは、暗号化が使用された場合にはリードバックのフィーチャを禁止する能力を含む。別の実施例では、リードバックの能力を提供するPLDは構成データをそのリードバック前に暗号化する。
【0016】
加えていくつかのPLDは、部分的構成(いくつかの構成アドレスを特定して設計におけるいくつかの部分をロードする)および部分的再構成(既存の設計が消去されずに新たな設計データがロードされる)の選択肢を提供する。PLDがこれらの選択肢を提供する場合、攻撃者はPLDを部分的に再構成し、連続する設計部分を可視にして、おそらくは設計全体を知る可能性がある。このような攻撃を回避するため、一実施例では、暗号化された設計がロードされたPLDの部分的な構成および再構成は却下される。別の実施例では、いくつかの構成アドレスが特定され得るが、アドレスは暗号化される。
【0017】
さらに別の攻撃態様は、PLDの安全性状態を示すビットを反転させようとする試みである。動作電圧を低下または上昇させる、温度を変化させる、および或るポートに雑音を加えることが考えられる。このようなビット反転から保護するため、安全にされたビットストリームでPLDが動作しているときには安全モードのフラグをセットし、一実施例では、このフラグが非セットされるとすべての構成データが消去される。デバイスがまだ動作している間に再構成を許さない別の実施例では、構成データはビットストリームのいずれかが送信される前に消去される。
【0018】
別の攻撃態様は、暗号化されたビットストリームの或る部分を再配置することによって、暗号化されていないときにこれら部分が、設計者の意図していないPLDの可視部分に置かれるようにすることである。この再配置を防ぐため、暗号化および復号のプロセスでアドレス情報を使用することによって、設計者が意図したPLD場所とは異なるPLD場所に暗号化されたビットストリームの一部を送ると、意味のないデータへの異なる復号が行なわれるようにする。暗号ブロック連鎖(CBC)は、この結果を達成する1つの有効な手段である。暗号ブロック連鎖では、復号されたデータパケット(ブロック)が次のデータブロックとXOR関数を用いて組合されてから次のブロックが復号され、こうして各データブロックについての暗号化されたデータは、これに先行するあらゆるブロックと、これらブロックの順序とに依存する。同一のデータブロックは、これに先行するデータブロックの値に依存して異なった値へ暗号化される。こうして、ブロックの順序が変えられるとビットストリームは正しく復号しないが、それは暗号化されたビットストリームが再配列されるところがその後のデータをスクランブルするからである。さらに、初期CBC値に変更を加えてデータのアドレスを組込ませ、復号されたデータが、正しく復号するための特定の場所に置かれるよう強制することができる。
【0019】
これに代えて、設計の一部が暗号化されかつ別の部分が暗号化されないことをPLDが許す場合、攻撃者は暗号化されていない部分を暗号化された部分に加えることができ、これは設計の暗号化された部分についての情報を読出すことになる。したがって、設計すべてが暗号化されているか、または設計がいずれも暗号化されていないかのいずれかを可能にし、混合をなくすことによって、追加の安全性が達成される。これに加えて一実施例では、データ暗号化の際に、構成データについての単一の開始アドレスに続く単一のフルチップ構成のみを許すことによって、追加の安全性がもたらされる。
【0020】
さらに、試験およびデバッグを手頃にし、かつPLD製造業者とその顧客(すなわちPLDを構成するための設計を生産する設計者)との自由な通信を可能にするために、PLDは暗号化される動作モードと暗号化されない動作モードとの両方を有し、暗号化されるモードで動作する際、PLD内への構成データのロードを制御する構成ビットストリームの部分はまだ暗号化されていない。
【0021】
別の攻撃態様として、PLD製造業者が、構成データをロードするためのアドレスおよびヘッダ情報を含む構成ビットストリームフォーマットについて自由に情報を提供、および使用される暗号化方法についての情報を提供する場合、この周知の情報を暗号化すると、暗号鍵があり得る発見に対して暴露されてしまうことになるだろう。このような暴露は、実際の構成データのみを暗号化し、制御情報を暗号化されないままにすることによって回避される。
【0022】
PLD製造業者が安全モードおよび非安全モードの両方で鍵メモリを用いることを許す場合、攻撃者は単に鍵メモリを非安全モードに置いて鍵を読出すことによって鍵を知ることができるであろう。このような攻撃を回避するため、PLD製造業者は、回路であって、鍵メモリが非安全モードへ動かされた際、すべての鍵と、PLD内にロードされたあらゆる構成データとの消去を引起こす回路を含める。
【0023】
[詳細な説明]
図1は先行技術のFPGA10の構造を示す。FPGAはプログラマブルロジック11を含み、これは典型的に(1)ルックアップ表の組合せ論理関数生成器を伴ったロジックブロックと、ルックアップ表出力およびその他の値を記憶するためのフリップフロップと、プログラマブルロジックの論理能力を増大させるための論理ゲートおよびマルチプレクサとを含み、さらに(2)FPGAのまわりに信号を経路付けするための経路付け線およびプログラム可能相互接続点と、(3)FPGAの外部ピンおよび経路付け線間で信号を駆動するための入出力ブロックとを含む。
【0024】
FPGAはさらに構成メモリ12を含み、これは経路付けトランジスタをオンにし、マルチプレクサを制御し、ルックアップ表を記憶し、さらに入出力ブロックを制御するが、これらすべてはFPGAを構成して開発者の所望の関数を実行することを目的としたものである。バス16は構成メモリ12をプログラマブルロジック11に接続し、典型的にFPGA全体にわたって位置付けられた分散した1組の制御線である。いくつかのザイリンクス製品(たとえばXC6200)はバス17を含んでおり、これによってプログラマブルロジック11は、構成ロジック14がプログラミング情報を構成メモリ12に送ることを引起こす。このような構造はキーン(Kean)による米国特許第5,705,938号で説明されている。
【0025】
FPGA10はさらに、JTAGポート20とインターフェイスするためのJTAGロジックブロック13を含み、これは特に、FPGAが置かれることになるボードの試験を意図したものである。JTAGロジックブロック13はIEEE規格1532を満たすが、これはIEEE規格1149.1の上位セットである。JTAGはボードレベルでの設計のデバッグを可能にする。
【0026】
最後に、FPGA10は構成ロジック14を含み、これは構成アクセスポート21上の、外部ソース15からの構成ビットストリームに応答し、さらにJTAGロジックブロック13にインターフェイスする。構成アクセスポート21上のビットストリームはワード、一実施例では32ビットワードとして扱われる。通常はビットストリームの初めまたはその近くにあるワードのいくつかは構成プロセスを準備するために用いられ、たとえば構成メモリフレームの長さ、および構成データについての開始アドレスを含む。バス19は構成ロジック14とJTAGロジックブロック13との間の通信を可能にし、こうしてJTAGポートはもう1つの構成アクセスポートして使用可能である。バス18は構成ロジックブロック14と構成メモリ12との間の通信を可能にする。具体的には、メモリ12内で構成フレームを選択するためのアドレスと、読み書き動作を行なうための制御信号と、構成メモリ12内にロードまたは構成メモリ12からリードバックするためのデータとを伝える。
【0027】
構成ロジックブロック14は命令およびデータを受取り、命令に従ってデータを処理する。これら命令はビットストリームとして構成ロジック14に入る。命令、またはヘッダには通常、処理を受けることになるデータが続く。図2aは例示的なビットストリーム構造を示す。ヘッダAはアクションを特定し、単一のワード、すなわちデータAが続くことを特定する。ヘッダBはアクションを特定し、この場合は4ワードのデータが続いて処理を受けることを特定する。
【0028】
図2bは、ザイリンクス・インコーポレイテッドから入手可能なバーテックス(R)(Virtex)デバイスで用いられるビットストリーム内の32ビットヘッダワードについてのデフォルトフォーマット(フォーマットタイプ001)を示す(バーテックスは、この発明の譲受人であるザイリンクス・インコーポレイテッドの登録商標である)。このフォーマットは、フォーマットタイプ(001)を示すための3つのビットと、オペコードを特定するための2つのビットと、構成ロジックレジスタアドレスのための16ビットと、ワードカウントのための11ビットとを含む。オペコードは読出動作、書込動作または動作なしを指定し得る。たとえば00は動作なしを指定し、01は読出を指定し、10は書込を指定することがあり得る。ワードカウントのための11ビットは211ワードまたは2048ワードを特定し得る。図2cに示すように、ワードカウントがこれよりも大きければ、フォーマットタイプ001におけるワードカウントビットは00000000000に設定され、フォーマットタイプ001のヘッダにはフォーマットタイプ2のヘッダが続く。フォーマットタイプ2はワードカウントを特定するために27ビットを使用し、こうして227ワードまたは268万ワードを特定し得る。
【0029】
図2dは、バーテックスのビットストリームについてのヘッダにより構成ロジック14のレジスタ内にロードされ得るような制御情報を示す。たとえば、構成ロジックレジスタアドレス0000を有する(フォーマット001の)ヘッダは、次の32ビットデータワードが巡回冗長検査(CRC)レジスタ内にロードされるべきであることを特定する。(バーテックスのデバイスは16ビット巡回冗長検査値を用いるため、いくつかのビットは0で埋められる。)ヘッダがアドレス0001を含む場合、次のデータはフレームアドレスレジスタ内にロードされて構成メモリ12内でフレーム(列)を特定し、こうしてデータが受取られるまたは供給されることになる。
【0030】
図2bに示す構成ロジックレジスタアドレス(16ビット)は、図2dの左の列に示す4ビットの値を与え、これら値は、次の32ビットデータワードを置くべき構成ロジック14(図1)内のレジスタの1つを選択する。フレーム長レジスタ(アドレス1011)は、構成データをロードすることになるフレームの長さを特定する。(フレーム長または列の高さはPLDのサイズに依存する。通常、より大きいPLDはより高い列またはより長いフレームを有する。PLD内に異なる構造を設けてデータワードをフレーム内に置く代わりに、ビットストリーム内でフレーム長を特定しレジスタ内でフレーム長を記憶することにより、異なったサイズのPLDについて内部構成ロジックが同一となることができる。)
【0031】
リードバックのためには、読出コマンドがオペコードフィールド内に置かれ、フレームデータ出力レジスタがアドレス指定され、これに(必要であればコマンドヘッダフォーマット2を用いた)ワードカウントが続く。特定された数のワードは、フレームアドレスレジスタ内で特定されたアドレスから始まって構成メモリ12からリードバックされ、構成アクセスポート21またはJTAGポート20へシフトされる(リードバックデータは、リードバック命令を発行したポートへ戻される)。
【0032】
ビットストリームヘッダまたはヘッダ対(図2bおよび図2c)でワードカウントが特定されるとカウンタがセットされ、これはデータワードがロードされるのに伴ってカウントダウンする。多くの構成ロジックレジスタアドレスではワードカウントは1である。しかし、構成データがロードまたはリードバックされていることを示すための0010または0011の構成ロジックアドレスをビットストリームヘッダが有する場合、ワードカウントははるかに大きくなるであろう。これは図2cのヘッダフォーマット2を使用する場合である。フレームデータ入力レジスタ(アドレス0010)を通じて構成メモリ12内にロードされたデータ、またはフレームデータ出力レジスタ(アドレス0011)を通じてリードアウトされたデータは設計データと呼ばれるが、それはこのデータがFPGAに設計を実現させる、または設計の状態を示すからである。他のレジスタデータは制御データであるが、それはこれらデータによって、ロジックの構成またはリードバック中に構成ロジックがどう振舞うかが制御されるからである。
【0033】
バーテックスのデバイスの構成についてのさらなる詳細は、ザイリンクス・インコーポレイテッド(この発明の譲受人)、95124 カリフォルニア州、サン・ノゼ、ロジック・ドライブ(Logic Drive, San Jose, CA)、2100による、2000年10月9日刊行の「バーテックス構成ガイド(Virtex Configuration Guide)」に記載されている。
【0034】
構成ロジック14は典型的に、入って来る構成ビットストリームに対して巡回冗長検査(エリクソン(Erickson)による米国特許第5,321,704号を参照、または先に参照したバーテックス構成ガイドの39頁から40頁を参照)を行ない、構成されている部分のフレーム長と構成データのワードカウントとを示すヘッダビットを読出し、どこに構成データをロードすべきかを同定するアドレス命令を読出し、構成データのフレームを収集し、アドレスに示された構成メモリ12の列にこれらフレームをロードする。構成ロジック14はさらに構成メモリ12から外部の場所への構成データおよびフリップフロップ値のリードバックを制御する。ザイリンクス・インコーポレイテッドから入手可能なバーテックスFPGAでは、JTAGポート20または構成アクセスポート21を通じてリードバックが行なわれ得る。
【0035】
構成ロジック14はさらにプログラマブルロジック11から構成データを受取り得る。FPGAの或る部分がFPGAの別の部分を構成する先行技術のFPGA構造についてのさらなる情報は、キーンによる米国特許第5,705,938号に記載されている。バーテックスのアーキテクチャに類似のFPGAアーキテクチャについてのさらなる情報は、ヤング(Young)他による米国特許第5,914,616号に記載されている。この発明の譲受人であるザイリンクス・インコーポレイテッドから入手可能なバーテックス製品で用いられるビットストリームのフォーマットは、ザイリンクス・インコーポレイテッド、95124 カリフォルニア州、サン・ノゼ、ロジックドライブ、2100から入手可能である、2000年10月4日刊行の「バーテックスFPGAシリーズ構成およびリードバック(Virtex FPGA Series Configuration and Readback)」と題された出願ノートXAPP138に記載されている。
【0036】
復号を伴うPLD
図3は、この発明の一実施例に従うFPGA(PLDの1種)のブロック図を示す。いくつかの要素は図1に示すものと同じであり、これらには同じ参照番号を付し、もはや説明は行なわない。これに加えて図3は、拡張された構成ロジックユニット29、復号器24および鍵メモリ23を含む。図3は、鍵メモリ23がJTAGアクセスポート20からバス25によってロードされる実施例を示す。実施例によっては、鍵メモリ23には別のポートを通じてロードされる。バス25は、データ、アドレス、および読み書き動作を行なうための制御信号を伝え、JTAGポート20からの復号鍵のプログラミングを可能にする。一実施例では、バス26が構成ポートからの鍵のプログラミングを可能にする。別の実施例ではバス26はなくされる。さらに別の実施例では、バス26はあり、バス25はなくされる。ここでさらに説明する実施例では、バス26は安全性に関するデータを鍵メモリ23から構成ロジック29に伝える。一実施例では、バス27は暗号化された構成データを構成ロジック29から復号器24に伝え、復号された構成データを構成ロジック29に戻す。バス28は復号器24がデータの復号のために鍵にアクセスすることを可能にする。暗号化されたデータが図3の構造にロードされる際、ロード中のビットストリームを監視する攻撃者は暗号化されたビットストリームのみを受取るため、この方法でユーザの設計を知ることはできない。
【0037】
部分的に暗号化されたビットストリーム
この発明の別の局面に従うと、ビットストリームは2つの部分、すなわち暗号化され得るまたはされ得ないユーザの設計を表現するデータ部分と、ビットストリームのロードを制御する制御部分とを含む(たとえば連続するビットストリーム部分がロードされるべきPLD内の列アドレスを与え、ロード動作の信頼性を調べるための巡回冗長検査(CRC)コードと、暗号ブロック連鎖(CBC)のためのスタータ数とを提供するが、この技術は、暗号化されたデータの発生の頻度から復号データが推理され得る「辞書攻撃」を防止する)。この発明の好ましい実施例では、データ部分は暗号化され得るが、制御部分は暗号化されない。これによって追加の安全性がもたらされるが、それはPLD製造業者はビットストリームの制御フィーチャを自由に記述する必要があり、もしこの比較的よく知られた制御情報が暗号化されれば、攻撃者はこの情報を解読し、この情報を用いてビットストリーム全体を解読できるというおそれがあるからである。さらに、ビットストリームの制御部分を暗号化されないままにしておくことによって、PLDによる情報の使用がより容易となる。
【0038】
構成データがロードされるアドレスの順序が攻撃者にとって設計の分析に有用となり得る場合に用いられる別の実施例では、構成データのアドレスもまた暗号化されるが、構成ビットストリームにある他の制御情報は暗号化されないままである。
【0039】
ビットストリームフォーマット
図4a〜4dは、図2a〜2dに示す先行技術の製品の構成ロジック14のレジスタおよびビットストリームフォーマットと比較した場合の、構成ロジック29のレジスタおよびビットストリームフォーマットにおける違いを例示する。図4aに示すように、ビットストリームはやはりヘッダワードを含み、これにデータワードが続く。典型的な構成では、いくつかの制御データワードは、暗号化された構成データが始まる前にレジスタ内にロードされる。図4aは、3つのヘッダワード、すなわちヘッダA、ヘッダBおよびヘッダCに各々3つの暗号化されない制御データワード、すなわちデータA、データBおよびデータCが続く例を示す。(実際の構成では、3つを上回る制御データワードが与えられるであろう。)次にヘッダDは、暗号化された構成データが続くであろうことを特定し、多数のワード、すなわち暗号化された構成データであるデータ1D、データ2D、データ3Dなどが続く。図4aではこれらワードに影をつけ、このデータが暗号化されていることを強調する。
【0040】
図4bおよび図4cに示すように、第4のオペコードが追加されている。動作なしについての値00、復号のない読み書きについての01および10に追加された新たな値11は、書込が復号を伴うべきであることを特定する。復号を用いるべきであることを特定するのにどのコードまたはどの方法を用いるかは重要ではなく、またそれをオペコードで特定することすら重要ではない。重要なのは、任意の暗号化および復号が許されかつ示され、このため設計者がこの選択肢を利用できることのみである。図4dの実施例では2つの新たな構成ロジックレジスタが追加されている。アドレス1100および1101では、暗号ブロック連鎖(CBC)のスタータ値、および初期暗号鍵のためのアドレスを保持するためのレジスタが示される。
【0041】
任意の暗号化
この発明の別の局面に従うと、PLDはビットストリームの暗号化されたデータ部分および暗号化されていないデータ部分の両方を受入れることができる。ビットストリームの制御部分は、ビットストリームのデータ部分が暗号化されているかどうかを示す。ビットストリームのデータ部分が暗号化されていれば、これはPLD内で復号器へ迂回させられ、復号の後にPLDを構成する。データ部分が暗号化されていなければ、これは迂回させられず、PLDを構成するために直接用いられる。
【0042】
ビットストリームを暗号化しないことが好ましい場合がある。設計のデバッグ中に用いられる或る試験作業では、構成情報をリードバックすることが必須である。構成上の問題の診断は、(特に暗号化が問題と関わりを有しているかどうかを設計者が判断しようとする場合)暗号化のステップがまだ行なわれていない方がより単純となる。また、数人の設計者がPLDの複数部分で実現されるべきコードを書いており、PLDの異なった部分が異なったときに構成されるべきである場合、ビットストリームの部分すべてを可視にして、PLDを部分的に再構成可能にすることが必要であろう。
【0043】
図5aおよび図5bは、この発明の一実施例における暗号化されていないビットストリームと暗号化されたビットストリームとの違いを例示するために、まず暗号化されていない、次に暗号化された、同じ設計を表わす例示のビットストリーム部分を示す。実際のビットストリームは図の右に0および1を含み、左のテキストは含まない。左にあるテキストは右にあるビットの意味を説明するために入れたものである。これらビットストリーム部分は図4b〜4dで例示したコマンドを用いる。図5aの暗号化されていないバージョンと、図5bの暗号化されたバージョンとの違いを強調するため、相違箇所を太字で示す。
【0044】
図5aを参照して、ダミーワード(すべて1として解釈される一定のハイの信号)および1と0との特定のパターンを有する同期ワード(sync word)の後、次のワードはタイプ001のものであり、10のオペコードを有し、0000000000010000のアドレスと、00000000001のワードカウントとを有する。したがってこのワードはコマンドレジスタCMDをアドレス指定し、1つのワードがここに書込まれるであろうことを特定する。図5aではビットストリームの左に注が付され、このワードがタイプ(Type)1であり、1つのワード(word)のCMDへの書込を指示することが示される。続くワード111はコマンドレジスタCMDに置かれるべきデータであり、CRC(巡回冗長検査)レジスタをリセットする。(好ましい実施例でPLDは、ビットストリームがロードされるのに伴いビットストリームからCRC値を算出するための、エリクソンによる米国特許第5,598,424号に記載のものなど図には示さない回路を含み、誤ったビットのロードを引起こしかねないビットストリーム電圧の不調から保護する。)次に、ヘッダワードによって、フォーマットはやはりタイプ1であり、フレーム長レジスタFLRに1ワードを書込むべきことを特定することが特定される。続くデータワード11001はフレーム長(25ワード)を特定する。同様に、いくつかの追加のヘッダおよびデータワードが続くが、ここにはフレームアドレスレジスタFARに書込むべきワードを特定するヘッダが含まれる。この場合、続くデータワードはデータがアドレス0で始まることを示す。最後に、これらレジスタがロードされた後、フレームデータ入力レジスタFDRIにデータを書込むためのコマンドが来るが、かなりのデータが書込まれることになるため、ワードカウントは00000000000として与えられ、タイプ2のヘッダによって、10530ワードがFDRIレジスタに書込まれることが特定される。これはPLDの構成を引起こす実際の設計データである。したがってビットストリーム内の次の10530ワードは設計データである。最後に、データが正しくロードされたことを確かにするために、構成データの出所であるデバイスが算出したCRC値がロードされ、PLDの算出したCRC値と比較される。追加のコマンドおよびデータがロードされ、こうして構成が完了したこと、およびPLDを動作モードに動かすべきことを示す。
【0045】
図5bは図5aと類似するが、データおよび注が太字で示されているところのみが異なる。図5bではデータは暗号化され、追加のコマンドを用いて初期鍵アドレスを与え、2つのワード(64ビット)をCBC(暗号化ブロック連鎖)レジスタに書込む。次に、タイプ1のヘッダはオペコード11を含み、データがフレームデータ入力レジスタFDRIに書込まれる前に復号されるであろうことを示す。タイプ2ヘッダが続いてやはりオペコード11を有し、10530ワードが復号されデータ入力レジスタFDRIに書込まれるべきであるという命令を与える。次に10530個の暗号化されたデータワードが続く。次に、(暗号化された)データが正しくロードされたことを確認するためのCRCワードが続く。最後に、追加のコマンドおよびデータが送られ、すべてが正しければPLDを動作モードに置く。
【0046】
復号プロセス
図6は、一実施例で任意の復号がどのように達成されるかを示す。図6は、構成ロジック29と、復号器24内に入るバス27,28とを詳細に示す。バス27は以下のものを含む。
・構成ロジック29内のレジスタアドレス1101(図4d)から取られる3ビットの初期復号鍵アドレス“Init_key_addr”、
・64ビットの、変更を加えられた暗号ブロック連鎖値“modCBC”。この値は、構成ロジック29内のレジスタアドレス1100(図4d)から取られる64ビットCBC値のより低いオーダのビットを、レジスタ0001で特定される22ビットフレームアドレス値と取替えることによってもたらされる。
・ビットストリームから取られる、暗号化されたデータをロードするための64線“Encrypted_data”、
・復号器24が生成する復号されたデータを構成ロジック29に戻すための64線“Decrypted_data”、
・データが“Encrypted_data”線上にあり、復号器24が復号を始めることができることを復号器24に告げる信号“Enc_data_rdy”用の線、
・64ビットワードに対する復号が完了して“Decrypted_data”線上で利用可能であることを構成ロジック29に告げる信号“Dec_data_rdy”用の線、および
・たとえば鍵が或るセットの最初、中間または最後にあるべきかを指定する鍵メモリ内のビットによって特定される通りに鍵が用いられていない場合、構成ロジック29に構成を中断させてこれに従い状態レジスタをセットさせるために、復号器24により用いられるBad_key_set線。図4dに示す実施例では、状態レジスタはアドレス0111にあり、ビットのうち1つに論理1を記憶することによってBad_key_setエラーが示される。
【0047】
バス28は以下のものを含む。
・鍵アドレス用の3線。鍵アドレスは最初はバス27から与えられるものであるが、新たな鍵が用いられるたびに更新される。
【0048】
・復号鍵用の56線、および
・復号鍵が最初、中間、最後、または用いる唯一の鍵であるかを示すための2線。
【0049】
設計再配置の防止
暗号化されたビットストリーム内の設計に対する1つの考えられる攻撃は、暗号化されたビットストリーム内でフレームアドレスレジスタ(開始アドレス)を変えることによって、これが復号されると、FPGAの使用中には可視であるFPGA部分へロードされるようにすることである。設計によってはブロックRAMの内容は可視である。入出力ポートの構成はあらゆる設計で可視であり、このため構成ビットは判断可能である。したがって、連続する設計部分がFPGAの可視部分へ動かされれば、FPGAが正しく機能しなかったとしても、攻撃者は再配置を繰返すことで、暗号化されていないビットストリームの内容を知ることができるであろう。
【0050】
設計再配置を防止するため、一実施例では、DES規格で用いられる暗号ブロック連鎖方法で使用される初期値に対して変更を加える。図7aおよび図7bはそれぞれこの発明に従い変更を加えられる三重DESアルゴリズムの暗号化部分および復号部分を示す。標準的な暗号ブロック連鎖方法は、開始数(これは設計者が与えるものであっても、またはランダムに生成されるものであってもよい)と、暗号化すべきデータの1番目のワードとのXORを取って暗号化プロセスを始める。この発明に従い、ランダムな数の一部はアドレス情報、すなわちこの例では、データが構成メモリ12にロードされることになる1番目のフレームの22ビットアドレスと取替えられる。64ビットの数であるスタータCBC値におけるxのラベルを付した最下位ビットは、yのラベルを付したフレームアドレスと取替えられ、こうして変更を加えられた64ビット値がもたらされるが、これはデータがロードされるアドレスに依存する。この変更を加えられたCBC値と、構成情報の1番目のワードであるワード1とのXORが取られる。次に暗号化アルゴリズムを用いて1番目の暗号化されたワードである暗号化ワード1をもたらし、これはビットストリーム内に置かれる。図7aは外部暗号ブロック連鎖を伴った三重暗号化アルゴリズムを示し、これは1番目の鍵を用いた暗号化ステップenc1を含み、これに2番目の鍵を用いた復号ステップdec2が続き、これに3番目の鍵を用いた暗号化ステップenc3が続く。この1番目の暗号化されたワードである暗号化ワード1と、2番目の、暗号化されていないワードであるワード2とのXORが取られ、暗号化プロセスを繰返して暗号化されたワード2をもたらす。すべての構成データが暗号化されるまでXOR連鎖を継続する。
【0051】
図7bに示すように、PLDは逆のプロセスを行なって、復号されたワードを導くことになる。上記の暗号化の順番の場合、復号の順番は鍵3を用いた復号ステップdec1、そして鍵2を用いた暗号化ステップenc2、そして鍵1を用いた復号ステップdec3となるであろう。重要なことに、復号ワード1を生成するための初期値の一部は暗号化および復号の両方に同じフレームアドレスを用いることになる。ビットストリームでなくPLDが、フレームアドレスレジスタに記憶されたフレームアドレスから、変更を加えられたCBC値を生成し、これはまた、構成データをロードすべき構成メモリ12のフレームを特定するためにも用いられる。したがって攻撃者が、データをロードすべきフレームアドレスを変えた場合、変更を加えられたCBC値はこれに従って変わり、構成データは正しく復号されない。
【0052】
XORステップは、暗号化の前に設計者のビットストリーム内にあった元のデータを生成する。たとえば元のデータ1=復号ワード1となる。この復号された構成データはバス27(図3)で構成ロジック29へ送られる。
【0053】
構成ロジック29
構成ロジック29は、任意の暗号化をサポートするための構造と、設計再配置および単一の鍵攻撃を防ぐための構造とを含む。図6に示すように、構成ロジック29は保持レジスタ292、制御ロジック291、構成レジスタ(FDRI、FAR、CRC、およびinitCBCを図示する)、復号器24とのインターフェイス用マルチプレクサ294,295、64ビットのアセンブリレジスタ297、およびレジスタ298,299(構成アクセスポート21とのインターフェイス用)を含む。64ビットシフトレジスタ299はデータを構成アクセスポート21から受取り、このポートは1ビット幅のデータ用の単一のピンであっても、または8ビット幅のデータ用の8本のピンであってもよい。このデータは64ビットのシフトレジスタ299内にロードされ、これはレジスタ299が一杯になるまで行なわれる。次に、好ましくはこれら64ビットは64ビット転送レジスタ298内に並列にシフトされる。ここからマルチプレクサ296bは右および左の32ビットワードを交替で選択し、マルチプレクサ296aは制御線Mに制御されるのに応じて、一回につきデータの32ビットを、保持レジスタ292か、またはこれに代えてアセンブリレジスタ297のハイおよびローの部分のいずれかに送る。ビットストリームのロードが始まると、線Mおよび図示しないクロック信号は、マルチプレクサ296aおよび296bが64ビット転送レジスタ298から保持レジスタ292へデータを送ることを引起こす。ここからこれらワードは制御ロジック291に与えられる。ワードがヘッダであれば、制御ロジック291はワードを解釈する。続くデータが暗号されずに書込まれるべきであることをオペコードが示していれば、制御ロジック291はアドレスをバスGに置いてレジスタを選択し、線L上に信号を置いてマルチプレクサ294がバスBをバスDに接続することを引起こし、続くワードをバスBに与える。次のクロック信号(クロック信号は図示せず)の際、バスD上のデータはアドレス指定されたレジスタにロードされる。図4dに示すレジスタすべてはこのようにロードされ得る。初期暗号ブロック連鎖値をロードするためのinitCBCレジスタは64ビットレジスタであり、図5bに示し先に論じたように2つの連続する32ビットワードを受取る。
【0054】
(1)initCBCレジスタに記憶された元のCBC値と、(2)FARレジスタに記憶された初期フレームアドレスとから得られる、変更を加えられたCBC値は復号器24に利用可能である。一実施例では、FARレジスタにある初期フレームアドレスが使用するのはせいぜい32ビットであるのに対し、initCBC値は64ビットを使用する。図6の実施例では、変更を加えられたCBC値を与える64ビットバスは、フレームアドレスレジスタFARからの22ビットと、初期CBCレジスタからの42ビットとを含む。この発明が提供する安全性にとっては重要なことであるが、この値は構成データをロードするところに依存することに注目されたい。もし攻撃者がFARレジスタの内容を変えることによって、暗号化されたデータを異なる場所にロードしようとすれば、復号器24に送り込まれるmodCBC値もまた変わることになる。
【0055】
或る数の構成データワードを復号するためのオペコードコマンドを制御ロジック291が受取ると、復号プロセスが始まる。制御線Mは、マルチプレクサ296aがデータを転送レジスタ298から、アセンブリレジスタ297へと通じるバスAに与えることを引起こす。制御バスHは、暗号化されたデータのレジスタ297のハイ[31:0]およびロー[31:0]の部分にバスAを交替で接続し、こうして復号すべき64ビットワードが得られる。次に制御ロジック291はEnc_data_rdy信号をアサートし、この信号は、復号器24がレジスタ297内のデータを復号することを引起こす。
【0056】
復号器24は復号を行なうために、鍵アドレスkeyAddrをバス28によって鍵メモリ23(図3)に与える。これは、鍵メモリ23が、このアドレスにある56ビット鍵を56ビットKey線上に返すことを引起こす。これはまた、鍵メモリ23が、やはりこのアドレスで鍵データに記憶されている2つの追加のビット“Order”を返すことを引起こす。1番目の復号鍵の場合、これら2つのビットはこれが1番目の鍵である、または唯一の鍵であることを示すことになる。もしそうでなければ、復号器24はBad_key_set信号をアサートし、この信号は制御ロジック29による構成動作の中断を引起こす。もしこれら2つのビットによって、鍵が1番目の鍵または唯一の鍵であることが示されている場合、復号器24は、たとえば(シュナイヤーの同書に記載の)周知のDESアルゴリズムを用いて復号を行なう。鍵が唯一の鍵でなければ、次に復号器24は鍵メモリ23における次のアドレスで鍵を得て、これが中間または最後の鍵であることを2つのOrderビットが示しているかどうかを調べる。もしそうでなければBad_key_set信号がアサートされ、構成は中断される。もしそうであれば復号が行なわれる。もしこれが中間の鍵であれば次の復号作業が行なわれる。もしこれが最後の鍵であれば、復号器24は、復号されたワードと値modCBCとのXOR関数をもたらす。次に復号器24は結果として得られた値を64ビットDecrypted_dataバスに置き、Dec_data_rdy信号をアサートする。この信号は制御ロジック291が信号を制御線Kに置くことを引起こし、こうしてマルチプレクサ295が64ビットワードを2つのシーケンシャルな32ビットワードに分割することを引起こす。制御ロジック291は信号を線Lに置いて、マルチプレクサ294が、復号されたデータの32ビットワードをバスDへ送ることを引起こす。制御ロジック291はさらにバスG上にアドレス信号を置いてフレームデータ入力レジスタFDRIをアドレス指定する。次のクロック信号は復号されたデータをバスEに移し、ここでこれはフレームレジスタにロードされ、フレームレジスタが一杯であれば最終的に構成メモリ12内へ、FARレジスタで示されたアドレスにシフトされる。
【0057】
modCBC値は復号動作中ただ1回だけ用いられる。暗号化されたデータの後続の64ビットワードは、復号されてから、XOR演算のため先に復号されたデータを用いて連鎖される。(FARレジスタに記憶された値もまた、一度だけフレームアドレスの選択に用いられる。この後、フレームアドレスはフレームが一杯になるごとに単に増分される。)
【0058】
動作の流れ
図8は、構成ロジック29および復号器24により行なわれる動作の流れを示す。最初にステップ70において、構成ロジック29はビットストリームヘッダをロードし、対応するデータを図4bに示す構成ロジックレジスタに置き、これにはビットストリーム長の判断も含まれる。ステップ71で、準備シーケンスのさらなる部分として、構成ロジック29は1番目の構成メモリアドレスを読出す。ビットストリームフォーマットは、暗号化が用いられているかどうかを示すオペコードを含んでいることを想起されたい。ステップ72はオペコードの値による分岐である。暗号化が用いられていなければ、プロセスは図8の左部分に示されたものとなる。暗号化が用いられていれば、プロセスは図8の右に示されたものとなる。暗号化がない場合、ステップ73で、構成ロジック29はカウンタをビットストリームワードカウント(図4cを参照)に等しく設定する。ステップ74で、構成データの32ビット(1ワード)が構成メモリ12のアドレス指定されたフレームへ送られる。ステップ75で、カウンタが終了していないことが示されれば、ステップ76でカウンタは減分され、構成データにおける次の1ワードが構成メモリ12に送られる。カウンタが終了していれば、構成ロジック29はクリーンアップ作業を行なうが、これには、最終的な循環冗長値を読出してビットストリームの終わりにある値と比較することによって、ビットストリームのロードにエラーがあったかどうかを判断することが含まれる。
【0059】
ステップ72で、ビットストリームが暗号化されていることが示されれば、カウンタにはワードカウントがロードされ、プロセスのステップ81で、鍵アドレスレジスタ293(図6)からの初期鍵アドレスが復号器24にロードされる。
【0060】
ステップ82で、暗号化された構成データの2つのワード(64ビット)が復号器24にロードされる。ステップ83で、アドレス指定された鍵が復号器24にロードされる。一実施例では、64ビットの数が復号器24にロードされる。この64ビットの数は、56ビットの鍵と、これが最初、中間、最後、または唯一の鍵であるかを示す2つのビットと、その他のビットとを含み、その他のビットは使用されないことも、パリティに使用されることも、または別の目的に使用されることもある。別の実施例では、64ビット鍵データは、これが最後の鍵であるかどうかを示す単一のビットを含む。さらに別の実施例では、64ビット鍵データは次の鍵についてのアドレスを含み、このため鍵を逐次的な順序で用いる必要はない。別の実施例では、付加的なビットがなく、鍵データが使用するビットは64個を下回る。さらに別の実施例では、鍵でなくビットストリームがいくつの鍵を用いるべきかを示すが、これは安全性がより低いと考えられており、なぜなら攻撃者はいくつの鍵が用いられているかを知って、一回につき1つの鍵を破る単一の鍵攻撃を行なうことができるからであり、これに対し、いくつの鍵を用いるべきかを示すために鍵を用いれば、この情報が攻撃者に漏れることはない。
【0061】
ステップ84で、復号器24はたとえばDESアルゴリズムを用いて64ビットデータを56ビット鍵で復号する。DESアルゴリズムはブルース・シュナイヤーによる上述の書の265頁から278頁に記載されている。他の暗号化アルゴリズム、たとえば高度暗号規格AESを用いることもできる。他のアルゴリズムはより多くの鍵ビットを必要とすることがあり得る。たとえばAESは128ビットから256ビットの鍵を必要とする。
【0062】
ステップ85で、より多くの鍵を用いるべきかどうかが判断される。鍵が最初、中間、最後、または唯一の鍵であるかを示す2つのビットを調べて、これが最後の鍵であるかどうかを判断し、もしそうでなければ鍵アドレスは増分され、復号器24はメモリ23内で次の鍵をアドレス指定する。
【0063】
最後の鍵が用いられた後、ステップ87で、レジスタFARおよびinitCBCを組合わせて得られた64ビット値として図6に示した、変更を加えられたCBC値と、ステップ87で入手された復号された値とのXORが取られる。一実施例では、CBCレジスタ内にロードされた64ビットランダム数のうち22ビットは、ビットストリームの始めのフレームアドレスと交換される。暗号化プロセスの目的は、64ビットの暗号化された値におけるあらゆる2進数を、すべての先行のビットおよび鍵の関数にすることである。CBC値を1番目のアドレスと組合わせる目的は、意図された開始アドレスとは異なるアドレスにビットストリームがロードされると、暗号化された値が変わるようにすることである。ステップ87はこれら両方の目的を達成する。次に新たなCBCが記憶される。記憶は図6に示すFARおよびinitCBCレジスタであっても、または復号器24内に位置する別のレジスタであってもよい。
【0064】
ステップ88で、この復号された構成データはバス27(図3)で構成ロジック29へ送られる。構成ロジック29は更新された巡回冗長検査値を算出し、これはロードのプロセスの終わりにCRCレジスタに記憶された巡回冗長値と比較される。構成ロジック29が暗号化を使用するように設定されていれば、構成ロジック29内のマルチプレクサは、この復号された構成データを構成メモリ12のアドレス指定された列へ送る。
【0065】
ステップ89でカウンタが調べられ、もし終了していなければステップ96でカウンタは減分され、プロセスはステップ82へ戻り、ここで次の64ビット(2ワード)がビットストリームからロードされる。
【0066】
最後に、ステップ89でカウンタが終了したことが示されれば、ステップ90で、ビットストリーム内のCRC(巡回冗長検査)値が、ビットストリームのロードの際に算出されるCRC値と比較される。値が一致すれば、構成は完了しており、FPGAは動作へ移る。値が一致しなければ、ロードにエラーが発生しており、構成プロセス全体が中断される。
【0067】
鍵順序の評価−単一の鍵攻撃の防止
図9は、鍵順序を評価するために復号器24により実現される状態機械を示す。Enc_data_ready信号が活性化されるまで状態機械は状態S1に留まる。この信号は復号を始めてもよいことを示し、判断状態Q1へ移らせ、ここで復号器24は、バス27上のアドレスInit_key_addrにより特定されるアドレスをバス28に与え、鍵および鍵順序をリードバックし、さらに鍵順序データの2ビットから、鍵が1番目の鍵または唯一の鍵であるかどうかを判断する。もしそうでなければ、復号器24はBad_key_set信号を制御ロジック291に送り、構成ロジック29に構成を中断させる。アドレスが1番目または唯一であれば、復号器24は状態S3に移り、ここでデータが復号される。次に状態機械は判断状態Q2に移り、ここで鍵が最後または唯一であるかどうかが判断される。もしそうであれば、復号は完了しており、状態S4で復号器24は復号されたデータを構成ロジック29に返す。もしそうでなければ、状態S5で、復号器24は鍵アドレスを増分して新たな鍵を得る。状態機械は質問Q3を問い、次の鍵が中間の鍵または最後の鍵であるかどうかを判断する。もしそうでなければ、S2は構成を中断させる。鍵が中間または最後であれば、状態機械は状態S3に戻り、データを再び復号する。別の実施例では、状態S4で復号器24はさらに、復号されたデータとCBC値とのXORをとるステップを行なう。
【0068】
鍵順序を鍵内で記憶する利点は、攻撃者が単一の鍵攻撃を実行できないことであり、それは、復号器24が復号を行なう際に(設計者が意図したように)鍵メモリ23で特定された鍵すべてを使用することを、攻撃者は妨げることができないからである。単一の鍵攻撃を用いている攻撃者から保護するためには、2番目および3番目の質問Q2およびQ3を問う必要はないが、それは鍵順序がPLDの内部にある鍵データ内に記憶されるからである。しかし、各々の鍵がロードの際に正しくラベル付けされたことを確かめるために、設計者、または鍵をロードするボードの検査員がこれら3つの質問を問うことは有益である。
【0069】
一実施例で復号器24は、復号−暗号化−復号の順番をとる三重DES規格を用い、別の鍵が用いられるたびにアルゴリズムを(僅かだけ)交替させる。このような組合せは、ANSI X9.52 1998三重DES規格に準拠する。別の実施例ではその都度復号が用いられる。
【0070】
鍵メモリ23
図10aに示す回路は3つの構成要素、すなわち電池電源スイッチ22、制御ロジック23aおよび鍵レジスタ23bを含む。制御ロジック回路23aおよび鍵レジスタ23bは図3の鍵メモリ23を成す。図10aの実施例では、鍵レジスタ23bは6つの64ビットワードを含む。当然のことながら、これに代えて他の鍵メモリサイズを用いてもよい。実施例によっては、鍵メモリ23には6個をはるかに上回る鍵が記憶され、使用すべき鍵のアドレスを与えるためには4ビット以上が必要である。鍵レジスタ23b用の電源は電池電源スイッチ22から線VSWITCHを通って来る。鍵メモリ電源電圧VCCIが不十分、またはない場合、電池電源スイッチ22は電池バックアップ電圧VBATTをVSWITCH線に印加し、こうしてVSWITCHは正の電圧を伝える。
【0071】
この実施例では、各々の鍵レジスタは64個のメモリセルを有する。各セルは書込イネーブル信号WEを受取り、この信号はハイであればセルへのデータの書込を引起こし、ローであればセル内のデータの保持を引起こす。書込イネーブル信号WEは1レジスタ内のセルに共通である。PLD電源電圧(VCCIとは異なる)がなくWE信号が活性状態に駆動されない場合、T1などの弱いプルダウントランジスタがWE信号をプルダウンし、こうして鍵メモリレジスタをいずれもアドレス指定不可能にし、メモリセルのいずれも乱されないようにする。
【0072】
一実施例では、復号鍵をPLD内にロードするためにPLDのJTAGポートを用いる。メモリセル電源電圧は通常の動作時にはVCCIのデバイス電圧レベルにあり、一実施例でこのレベルは3.0ボルトから3.6ボルトの間である。JTAGポートに与えられる信号はいくつかの異なった電圧であり得る。また、いくつかの異なった内部電圧があり得る。したがって電圧変位が必要とされる。この電圧変位はメモリセルで行なわれる。メモリセルの詳細を図10bで示す。インバータI1およびI2を含むラッチには、VSWITCHで電力が与えられるため、デバイス電源電圧VCCIがあるかないかにかかわらず電力が与えられる。WE信号および反転されたデータ信号data_bの両方は1.5ボルトのレベルで動作する。これら信号はNMOSトランジスタT4、T5およびT6を駆動し、さらにインバータI3を通じて(やはり1.5ボルトの電源電圧を用いて)トランジスタT7を駆動する。図10bは、WEがローであれば、トランジスタT4およびT5がオフであり、インバータI1およびI2を含むラッチの内容が維持されることを示している。WEがハイであれば、インバータI1およびI2のいずれかがローにされ、こうして新たなデータをラッチ内にロードする。
【0073】
制御ロジック回路23aはJTAGバス25(図3にも示す)から信号を受取る。JTAGバス25は、書込、読出、安全モードの設定のための制御信号、ならびにデータおよびアドレスバスを含む。このインターフェイスはIEEE1532JTAG規格に準拠する。鍵メモリ23がJTAGバス25によってアクセスされ得る前に、安全性状態(バス26)が非安全モードに置かれるが、これはISC_PROGRAM_SECURITY命令(図10aを参照)を用い、鍵データバスのビット0に論理1を与えることによって行なわれ得る。鍵メモリ23は、IEEE1532規格のISC_PROGRAMおよびISC_READ命令を用いて、JTAGバス25に書込まれ、およびここから(検証のために)読出される。制御ロジック23aは、JTAGバス25からの3ビットアドレス信号ADDRをデコードするためのデコーダを含み、JTAGバス25にISC_PROGRAM命令が現われれば書込ストローブ線ws_b[5:0]のうちアドレス指定された線上にローへのパルスを生成、またはISC_READ命令がJTAGバス25上に現われれば読出選択線rsel[5:0]のうちアドレス指定された線上にハイの信号を生成する。6つの64ビットワードのうち1つの読出は、6本の読出選択線rsel[5:0]のうち1本にハイの信号を与えることで可能であり、これは読出マルチプレクサ23dが、64本の出力線q[63:0]上に選択されたワードを置くことを引起こす。書込選択線または読出選択線のうち1本のみが一度に選択される。読出選択線がアサートされなければ、ハイのpark_low信号は、64個のトランジスタ23eが64線q[63:0]をプルダウンし、これら線のフローティングを防ぐことを引起こす。
【0074】
鍵メモリ23が非安全モードで動作していれば、64ビットワードは鍵レジスタ23bからJTAGバス25へ読出され、ここで値はFPGAの外部で調べられ得る。FPGAはこの非安全モードにおいて、DES復号のための56ビット鍵としてレジスタ23b内の選択された64ビットワードのうち56ビットを用いることによって試験され得る。一実施例で、鍵メモリ23が非安全モードにあれば、設計がロード前に暗号化されていてもユーザの設計のリードバックは可能である。これによって設計者は、暗号化された設計も試験およびデバッグできる。鍵の安全性状態の通信はバス26(図3も参照)を通じて行なわれる。
【0075】
値が鍵レジスタ23b内に書込まれ、バス25からの読出動作で検証された後、ISC_PROGRAM_SECURITY命令を用いて、IEEE1532規格の一部である64ビット鍵データバスのビット0に論理0を与えることによって、制御ロジック23を安全モードに置く。この安全モードでは、鍵に対するアクセスは認められない。
【0076】
図11に示すように、攻撃者がISC_PROGRAM_SECURITY命令を用いてから鍵を読出すことによって非安全モードに戻ることを確実に防ぐために、安全性がなくなると(すなわちISC_PROGRAM_SECURITY信号が非安全論理レベルに移ると)制御ロジック23a内の状態機械は0を6つのワードすべてに、一回につき1ワードずつ書込むことで、すべての鍵を消去する。これは以下のステップ110からステップ119によって行なわれる。ステップ110で、0をwdata[63:0]バスに置き、ステップ111でws_b[0]信号を(論理0値で)アサートし、次にステップ112〜117で、ws_b[0:0]からws_b[5:0]までの信号を一回につき1つずつ逐次的にストローブし、この後ステップ118で安全性状態を変えて非安全モードに入り、最後にステップ119でwdata[63:0]論理0値を解放する。このように、電池でバックアップされるメモリ23を非安全モードに置くあらゆる試みは、鍵レジスタ23b内の値すべての消去を引起こす。
【0077】
鍵メモリ23が安全モードにあるかどうかを通信するため、制御ロジック23aはバス26(これは単一の線であり得る)上で安全モード信号を構成ロジック29に送り、鍵メモリ23が安全モードで動作していることを示す。この信号が非安全モードに切換わると、構成ロジック29は設計を構成メモリ12からクリアする。鍵が鍵レジスタ23bに記憶され、かつ鍵メモリ23が安全モードにあっても、暗号化されていないビットストリームが構成ロジック29により構成メモリ12内にロードされ得ることに注目されたい。
【0078】
鍵のロード、多数の暗号鍵
ユーザが設計の詳細を知ることができない安全モードにPLDが置かれる前に、復号鍵をPLD内にロードする必要がある。図3に示す実施例では、鍵はJTAGポート20を通じてロードされる。
【0079】
この発明の特徴として、暗号鍵はこのJTAGポート20を通じてロードされる。JTAGプログラマがボード試験中に暗号鍵をロードすることが予測される。鍵を記憶するためのRAMが非安全モードにあれば、ユーザはこれに対する完全なアクセスを有し、設計が暗号化されていたとしても鍵および設計の両方を読出すことができる。このことは鍵と鍵の使用とを試験している設計者にとって有用である。次に設計者は動作に一旦満足すると、JTAGポートを通じ別の命令を送って鍵メモリを安全モードに置くことができる。鍵メモリが一旦安全モードに置かれると、鍵を読出すことはできない。さらに、鍵メモリを安全モードから非安全モードに移すと、メモリ初期化プロセスを開始する回路が活性化され鍵は消去される。(後に論じる図15で、この機能を行なうための状態機械を示す。)
【0080】
この発明の一局面に従うと、設計を暗号化するために2つ以上の鍵が用いられ得る。たとえば3つの鍵を用いる場合、ビットストリームはまず1番目の鍵を用いて暗号化され、次に結果として得られる暗号化されたビットストリームが2番目の鍵を用いて再び暗号化され、最後に、結果として得られる二重に暗号化されたビットストリームが3番目の鍵を用いてさらに暗号化される。この三重に暗号化されたビットストリームは、たとえばPLDを保持するプリント回路基板上のPROMまたはフラッシュメモリで記憶される。
【0081】
復号では、これら鍵を(逆の順序で)連続的に用いて、暗号化されたビットストリームを反復的に復号する。これに加え、特定の設計を復号するのに用いられるよりも多くの鍵がPLDに記憶されていれば、暗号化されたビットストリームは暗号化されていない部分の中に、いくつの鍵を用いるべきかの指示と1番目の鍵のアドレスとを含み得る。このような実施例では攻撃者によるビットストリームの解読が容易となり得るが、それは攻撃者が一度に1つの鍵に対処するだけでよいからである。これに代えて、鍵自体が、最初、中間、最後、または唯一の鍵であるかを示すこともある。こうして、同じPLDが異なったときにプログラムされて、(異なった設計で構成される)異なった機能を行なうことが可能となり、異なった鍵の値についての情報を、設計者のうちただ一人または数人にとってのみ利用可能とできる。こうして第1の設計者は第2の設計について、両方の設計が同じPLDで(異なったときに)実現されたとしても知らないことがあり得る。
【0082】
図3を参照して、構成ロジック29は図1の構成ロジック14の他に追加のロジックを含む。図1の構造では、構成アクセスポート21上のビットストリームはワード、一実施例では32ビットワードとして扱われる。これらワードのうち、通常はビットストリームの初めまたはその近くにあるいくつかのワードは、たとえばビットストリームの長さ、構成データについての開始アドレスなどのヘッダ情報を含む。この発明のビットストリームで新規な点は、ビットストリームが暗号化されているかどうかについての指示、およびビットストリーム内の構成データを復号するための鍵のアドレスである。
【0083】
電池でバックアップされるメモリ
鍵メモリ23に記憶される値は、FPGAへの電力が外されたときには電池によって維持されることが好ましい。
【0084】
さらに、スイッチ22などの電池電源スイッチを用いて、暗号鍵以外のメモリもまたバックアップできる。具体的に、PLDの電源切断時にPLDの生成したデータを保存することが目的であれば、PLD内のフリップフロップすべてにVSWITCH電圧供給が経路付けられるPLDを製造することができる。さらに、PLDの電源切断時にPLDの構成を保存することもまた目的であれば、構成メモリ12(図3)は代替的にVSWITCHから電力を与えられ得るが、このような実施例では、単にPLD内のフリップフロップに電力を与えるよりもかなり多くの電池電力が必要となり、さらにフリップフロップに電力を与えるには、数個の暗号鍵を記憶するための極めて小型のメモリに電力を与えるよりも多くの電池電力が必要となる。
【0085】
図12は電池電源スイッチ22の構造を示す。この実施例では、VBATTレベルシフト回路31によって、PLDが電池および主電源につき異なった電圧を用いることができる。さらに、当然のことであるが、この回路の目的はさまざまな電圧レベルに対処することである。一実施例で電池電源スイッチ22は最大3.6ボルトのVCCI電圧を扱うことができ、VCCIが約1ボルト未満に落ちると電池電力へ切換わる。電池電圧は1.0ボルトから3.6ボルトの間であり得る。
【0086】
電池電源スイッチ22は4個の出力駆動PチャネルトランジスタP0〜P3を含む。トランジスタP0およびP1は一緒にオンおよびオフになり、トランジスタP2およびP3も同様である。この回路は、VCCIおよびVBATTが相互に接続されてしまうあらゆる可能性を回避するために、各々の脚につき1個でなく2個のトランジスタを含む。トランジスタP0は寄生ダイオード(ドレインと基板とのp−n接合)を含み、これはトランジスタがオフである際にも図で上方向へ電流を伝導するおそれがある。このような電流の流れを防ぐためにトランジスタP1が追加され、その基板はそのドレインに接続されるため、寄生ダイオードの伝導は下方向でのみ可能である。同様の仕組みをトランジスタP2およびP3にも設ける。したがって、電流がVBATTからVCCIへ、またはVCCIからVBATTへ伝導する可能性はない。インバータ33および34はVSWITCH電圧から電力を与えられるため、VCCIがオフであっても常に動作している。トランジスタP4は常にオンの抵抗器であり、静電放電に対する保護を提供する。ほとんどの時間、トランジスタP4により制御されるこれら構造は電流を引込まず、通常トランジスタP4にわたって電圧の降下はない。
【0087】
図13はVBATTレベルシフト回路31の一実施例を示す。端子OUTにおける出力電圧は信号INおよびINBにより制御される。これら信号はインバータ33および34により生成され、これらインバータはVSWITCHノードから自分の電源電圧を得る。したがって、VSWITCHがVBATTにより供給される場合、信号INおよびINBのうち一方は電圧VBATTにあり、他方は接地される。しかし、もしVSWITCHがVCCIにより供給される場合、INおよびINBのうち一方はVCCIの電圧レベルにあることになる。INがVCCIにあり、かつINBが接地されている場合、トランジスタ45はオンであり、トランジスタ46はオフである。Pチャネルトランジスタ43のゲートはローであり、トランジスタ43はオンであり、こうしてインバータ47の入力をVBATTにする。トランジスタ48の出力もまたVBATTにある。再び図12を参照して、トランジスタP0のゲートでの電圧レベルVBATTはトランジスタP0を正にオフにする。
【0088】
図14はVCCI検出回路32を示す。VCCI検出回路32は、線VSWITCHでの電圧がいつ電池に切換えられ、いつ再びVCCIに切換えられるのかを判断する。回路32のこの実施例は本質的に一続きになった5個のインバータ段I1からI5である。スイッチング電圧の制御は主にインバータ段I1で行なわれる。トランジスタ52および53はCMOSインバータを形成する。このCMOSインバータへの電力はPチャネルトランジスタ51を通じて流れることになり、トランジスタ51は、VCCIがトランジスタ51のしきい値電圧、典型的に0.7〜0.8ボルトに達するまでオンにならない。VCCIのスイッチングが遅く、一杯の電圧に達するまで数ミリ秒かかる場合、トランジスタ51は回路I1の活性化を遅らせる。トランジスタ51がオンになると、トランジスタ52のソース(上の端子)はVCCIになる。Nチャネルトランジスタ53は典型的に、やはり約0.7〜0.8ボルトのしきい値電圧を有するが、トランジスタ52に対して弱いトランジスタとしてのサイズにされる。一実施例でトランジスタ53の幅/長さ比は1/18であるのに対し、トランジスタ52の幅/長さ比は3/2である。したがってトランジスタ53は、トランジスタ52がオンになるまでインバータI2の入力をローにするにすぎない。一実施例で回路I1は、VCCIが約1.0ボルトにあるときにインバータ段I2の入力をハイにする。したがってインバータ54の出力はローになる。インバータ段I3はシュミットトリガである。インバータ段I3への0ボルトの入力はトランジスタ56および57をオフにし、トランジスタ55をオンにし、ノードN3をVCCIにし、トランジスタ58をオンにし、これはノードN4を引上げ、こうして、トランジスタ56がオンになる電圧を上昇させ、VCCIの小さな変動がノードN3での電圧を切換えることを防ぐ。インバータ59および60は任意であり、出力信号usebattおよびusebattbのより鋭いエッジをもたらし、これにより図12の電池電源スイッチ22がVBATTからVCCIに切換わることを引起こす。VBATT′信号が制御するトランジスタ61は弱いプルダウンのトランジスタであり、VCCIがなくインバータ60から出力信号をもたらさないときにusebattb線を確実にローにする。
【0089】
構成されたPLDを含む製品の購入者に利用可能でない鍵
PLDを構成するのに用いられた設計を攻撃者が知ることを防ぐため、いくつかの追加のステップをとることがある。
【0090】
別の局面に従うと、PLDを組込んだシステムの販売前に鍵がPLD内にロードされ、これにより、PLDを含むシステムの販売後、設計をPLD内にロードして使用できるが、攻撃者は鍵に記憶された値を知ることはできない。したがって、暗号化されていない設計は読出またはコピーされ得ない。この安全性を達成するためにいくつかのステップがとられる。
【0091】
安全モード保存(改ざん防止)
一実施例で、PLDの構成ロジック29には安全性に関する2つのフラグがある。一方は、復号鍵が安全にされているかどうかを示し、他方は、設計が復号された設計であり、したがって保護されなければならないことを示す。JTAGロジック13(図3)がISC_PROGRAM_SECURITY命令で安全モードを選択すると、制御ロジック23a(図10a)にあるsecure_keyフラグがセットされる。ビットストリーム内の設計データが暗号化されているということを、PLD内にロードされたビットストリームが示している場合、構成ロジック29(図示せず)にあるsecure_designフラグがセットされる。いずれかのフラグが後に非セットにされると構成メモリ全体がクリアされ、復号された設計がなくされる。secure_keyフラグが(ISC_PROGRAM_SECURITY命令により)リセットされると、鍵もまた消去される。
【0092】
図15は、設計クリア機能を行なう状態機械を示す。secure_designフラグがセットされると、状態機械は状態S1に入る。この状態は、secure_designフラグの安全モードから非安全モードへの変化を監視する。設計安全(secure−design)モードが継続する限り状態機械は状態S1に留まる。変化が一旦生じると、状態機械は状態S2に入り、データを構成メモリ12内にシフトするためのデータシフトレジスタはリセットされ、こうして構成メモリビットについてのデータ線すべてに0を置く。次に状態機械は状態S3に移り、アドレス指定されたフレームのワード線がアサートされる。この結果、データシフトレジスタ線上の0は、アドレス指定されたフレームにあるメモリビット内に書込まれる。質問Q1で、アドレス指定すべきフレームがまだあることが示されると、状態機械は状態S4に移り、ここでフレームアドレスが進められ、状態機械は状態S3に戻る。質問Q1で、アドレス指定すべきフレームがもうないことが示されると、プロセスは終了し構成メモリはクリアされる。
【0093】
鍵を攻撃者によるアクセスから保護することもまた必要である。鍵のロードは、設計を含むシステムが最終顧客にとって利用可能となる前に行なわれる。設計者は設計の開発中、PLDをデバッグのために非安全モードで動作させたいと望むことがある。このデバッグ動作を可能にし、かつ鍵の安全性を保存するため、鍵レジスタすべてのクリアで、鍵ロードのプロセスが非安全モードで始まる。鍵のロード中、および鍵が検証のためリードバックされる間、安全な鍵のフラグが非安全モードに保たれることになる。この安全鍵フラグはまた、構成ビットストリームがロードおよび復号される間も非安全モードに保たれる得る。しかし安全鍵フラグが一旦セットされると、安全鍵フラグを非安全モードに戻せばすべての鍵がクリアされ、さらに図15の状態機械の動作が開始される。したがって鍵がクリアされるばかりでなく、構成もまたクリアされる。
【0094】
リードバック攻撃、およびリードバックの禁止
いくつかのFPGAはFPGAからのビットストリームのリードバックを許しており、このためユーザは設計をデバッグしたり、またはFPGA内のフリップフロップから状態機械情報を入手できる。設計がリードバック動作用に再暗号化されない限り、ビットストリームをリードバックする行為によって、暗号化されていないビットストリームが可視となるよう暴露されてしまう恐れがある。
【0095】
設計のさらなる安全性は、暗号化された設計がFPGAにロードされる際にリードバックを禁止することで提供される。一実施例でリードバックは、復号鍵もまた安全にされる場合にのみ禁止される。
【0096】
図16は、構成メモリをロードおよびリードバックするための構造のブロック図を示す。一実施例で構成ロジック29は以下の2つの条件が揃っている場合にリードバックを防止する。すなわち、(1)データバス26(図3および図10を参照)上の安全性状態線によって、鍵が安全モードにあることが示されている、および(2)ビットストリームが暗号化されていることを示す構成ビットストリーム内のオペコードに構成ロジック29が応答したことがある、の2つの条件である。したがって、鍵が安全にされていない、またはビットストリームが暗号化されていない場合、リードバックは許可され得る。別の実施例では、異なる条件によって、リードバックが許可され得るかどうかが制御される。
【0097】
構成ロジック29は、リードバックが行なわれるであろうことを示すヘッダをビットストリーム内で受取ると、そのフレームアドレスレジスタに記憶されたフレームアドレスを線107上に送り、このフレームアドレスはアドレスデコーダ110によってデコードされてバス109のアドレス指定された線を選択する。次に、線108上のワード線イネーブル信号がアサートされ、この信号はバス109の選択されたワード線をアサートし、こうして、選択されたワード線によりアドレス指定されたメモリセルは、その値をn本のデータ線102上に置く(nはフレーム長であり、構成ロジック29内に記憶される)。次に構成ロジック29は線104上でロード信号をアサートし、データのフレームを(並列に)データシフトレジスタ101内にロードする。次に構成ロジック29は線105上でシフト信号をアサートし、データシフトレジスタ101が32ビットワードのデータのフレームをバス103上でフレームデータ出力レジスタ(図4dを参照)へ、さらにそこから構成アクセスポート21(図3)上で出ていくビットストリームへシフトすることを引起こす。
【0098】
ビットストリームに復号が示されている場合、構成ロジック29は内部フラグをセットしてこれを示す。これらフラグがセットされ、かつバス26上の安全性状態信号により示されるように鍵メモリ23が安全モードにあれば、構成ロジック29は、線108上のワード線イネーブル信号を非活性に保ち、かつ線104および105上のロードおよびシフト信号を非活性に保つことで、ビットストリーム内のリードバックコマンドに応答してリードバックを防ぐ。しかし鍵メモリ23が安全モードになければ、設計が暗号化されているかもしれないにもかかわらず、リードバックが許され、試験およびデバッグが可能となる。
【0099】
部分的再構成攻撃およびその防止
いくつかのFPGAはFPGAの部分的再構成を許すか、または、別個の開始アドレスおよび別個の書込命令を用いてFPGAの異なった部分に設計の異なった部分をロードすることを許している。攻撃者は設計を知る試みとして設計を部分的に再構成し、ブロックRAMまたはフリップフロップの内容を出力ポートに直接読出したり、または既存の設計に或るセクションを追加して、設計を知るのに用いられ得る情報を読出すことがあり得る。たとえば攻撃者は、暗号化されていない設計であって、その唯一の目的は暗号化された設計についての情報を抜き出すことである、暗号化されていない設計によって部分的にPLDを再構成することがあり得る。このようなトロイの木馬設計は別のビットストリームでPLD内にロードされたり、または既存の暗号化されたビットストリームに加えられたりする。たとえばFPGAのブロックRAM内にロードされた状態機械設計を知ることが攻撃者の関心であれば、トロイの木馬設計はブロックRAMのアドレスを通じて巡回し、ブロックRAMデータ内容をパッケージのピンに送るためのロジックを含み得る。
【0100】
攻撃者がこのような変化を加えることを防ぐため、元の設計が暗号化される場合、復号を伴う構成が一旦始まると構成ロジック29は部分的な再構成を却下する。構成ロジック29は、復号オペコードを有するヘッダが一旦処理されるとさらなる書込命令を却下する。さらに構成ロジック29は、暗号化を伴わない構成が一旦行なわれると、復号を伴う構成を却下する。構成ロジック29はこれらの制限を達成するために、復号命令が受取られた後に構成メモリに書込を行なうヘッダを無視し、さらに設計の暗号化されていない部分がロードされた場合に復号コマンドを有するヘッダを無視する。こうして、復号を伴う書込が用いられていることをオペコードのうちいずれかが示すと、PLDは単一の書込命令のみを受入れることになる。
【0101】
さらなる実施例
これら図面に関する以上の記載はいくつかの実施例についての詳細を与えている。しかし多くの追加的な実施例もまた可能である。たとえば、上述の暗号ブロック連鎖アルゴリズムの代わりに、たとえば一回につき1つの8ビットバイトなどの、ブロックサイズよりも小さなユニットでデータが暗号化され得る、暗号フィードバックモードと呼ばれる暗号化方法を用いることが可能である。この暗号フィードバックモードはシュナイダーの同書200頁から203頁に記載されている。
【0102】
さらに別の実施例では、暗号化が用いられると、あらゆるビットストリームはアドレス0で始まってロードされなければならない。この実施例の一実現例では、暗号化を特定するオペコードを受取ると、開始フレームアドレスレジスタFAR(図6)にロードされるアドレスをいずれもアドレス0と取替える。
【0103】
さらに別の実施例では、開始アドレスおよび設計データは両方とも暗号化される。この実施例では、暗号化されていない設計データで可能であるのと同様、異なったフレームアドレスで始まる暗号化された設計データのうちいくつかのセグメントをロードすることが可能である。
【0104】
別の実施例では、鍵メモリ23などの鍵メモリに記憶される鍵データは、続く鍵の数を特定する。この実施例を変形したものでは、鍵データはさらにこの鍵に先行する鍵の数も特定する。設計者が意図した1番目の鍵アドレスとは違う鍵アドレスを攻撃者が与えると、構成は中断され得る。さらに、鍵内で特定された数の鍵が用いられるまで暗号化が進行する。
【0105】
別の実施例では、鍵メモリが非安全モードにある際に鍵をリードバック可能にする代わりに、鍵はパリティビットまたはCRCチェックビットを含み、これらビットのみが、鍵が正しくロードされたことを検証するためにリードバックされ得る。この実施例では、1人の設計者が知っている鍵を別の設計者から秘密にしておくことができ、異なったときにPLDを用いて異なった設計をロードする際にこの実施例は有用である。
【0106】
上述のCRCチェックサム算出に関し、CRCチェックサムが設計の暗号化の前または後のいずれかに算出される実施例が提供され得る。当然のことながら、ビットストリームに追加されるチェックサムが設計データの暗号化前に算出される場合、その復号後に対応するチェックサムが設計データ上のPLD内で算出されることになる。同様に、ビットストリームに追加されるチェックサムが設計データの暗号化後に算出される場合、PLDは設計データの復号前に、受取ったビットストリーム上で対応するチェックサムを算出することになる。
【0107】
復号鍵をロードするプロセスに関するさらなる注としては、図8に例示したプロセスを用いる場合、復号鍵をロードするためにデバイスプログラマを用いる必要はない。鍵は単にボード試験手順の一部としてロードされ得る。
【0108】
さらに、上述の構造および方法を用いて2つ以上のPLDをプログラムすることも可能である。いくつかのデバイスをデイジーチェーンに配置してこれら直列のデバイスを通じビットストリームを通過させるか、または直列のデバイスをアドレス指定することによって、単一のビットストリームを用いて2つ以上のPLDまたはFPGAをプログラムすることが周知である。デバイスのうち1つまたはそれ以上が暗号化された設計データを受取る際、いくつかのPLDをこのような配置に配置することが可能である。
【0109】
さらに別の実施例としては、暗号化された設計データを有するビットストリームにつき単一のアドレスのみが特定され得る一実施例を記載したが、別の実施例で、好ましくは暗号化されるいくつかのアドレスが、設計の別個の部分をロードするために特定され得る。さらにこれら別個の部分は同じ暗号鍵を用いても、異なった暗号鍵または異なった鍵の組を用いてもよい。
【0110】
以上の説明から明白となった変形例は、この発明の範囲内に含まれると意図されている。
【図面の簡単な説明】
【図1】先行技術のFPGAにおける機能関係を示す図である。
【図2】先行技術のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドを示す図である。
【図3】この発明の一実施例に従うFPGAでの機能関係を示す図である。
【図4】この発明のビットストリームに含まれ得るビットストリームフォーマットおよびコマンドを示す図である。
【図5a】暗号化されていないビットストリームの例を示す図である。
【図5b】暗号化されたビットストリームの例を示す図である。
【図6】構成ロジック29と、復号器24に通じるバス27およびバス28の線とを示す図である。
【図7a】この発明の一実施例で用いられる三重暗号化を伴う外部暗号ブロック連鎖における、変更を加えられた開始値を示す図である。
【図7b】図7aとともに用いられる、対応する開始値および復号プロセスを示す図である。
【図8】ビットストリームを処理するための動作を示すフローチャートである。
【図9】鍵順序を評価するために復号器24により実現される状態機械を示す図である。
【図10a】図3の鍵メモリ23の構造を示す図である。
【図10b】図10aのメモリセルの構造を示す図である。
【図11】非安全にされると鍵を消去するために図10aの制御ロジック23aが実行するステップを示す図である。
【図12】図10aの電池電源スイッチをより詳細に示す図である。
【図13】図12の電池電源スイッチのレベルシフト回路を示す図である。
【図14】図12の電池電源スイッチの電圧検出回路を示す図である。
【図15】安全モードから出ると設計を消去するための状態機械を示す図である。
【図16】構成メモリをロードし構成をリードバックするための要素を示すブロック図であって、暗号化があるときにディセーブルされる線を含む図である。
Claims (3)
- PLDを構成するための設計を保護するための方法であって、
PLD内に、設計を表現する暗号化されたビットストリームをロードするステップと、
前記PLD内のビットストリームを復号して、前記設計を表現する暗号化されていないビットストリームを生成するステップと、
暗号化されていない前記設計で前記PLDを構成するステップと、
前記暗号化されていないビットストリームのリードバックを禁止するステップとを含む、方法。 - PLDを構成するための設計を保護する方法であって、
PLD内に、設計を表現する暗号化されたビットストリームをロードするステップと、
前記PLD内のビットストリームを復号して、前記設計を表現する暗号化されていないビットストリームを生成するステップと、
前記暗号化されていないビットストリームで前記PLDを構成するステップと、
前記PLDが部分的に再構成されることを禁止するステップとを含む、方法。 - 前記PLDが部分的に再構成されることを禁止する前記ステップはさらに、ユーザの設計の或る部分が前記PLDの別の部分に再配置されることを防ぐステップを含む、請求項2に記載のPLD。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/724,975 US6981153B1 (en) | 2000-11-28 | 2000-11-28 | Programmable logic device with method of preventing readback |
PCT/US2001/045055 WO2002044875A2 (en) | 2000-11-28 | 2001-11-28 | Programmable logic device with method of preventing readback |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004515180A true JP2004515180A (ja) | 2004-05-20 |
Family
ID=24912625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002546975A Withdrawn JP2004515180A (ja) | 2000-11-28 | 2001-11-28 | リードバックを防止する方法を備えたプログラマブルロジックデバイス |
Country Status (5)
Country | Link |
---|---|
US (1) | US6981153B1 (ja) |
EP (1) | EP1358530B1 (ja) |
JP (1) | JP2004515180A (ja) |
CA (1) | CA2429597C (ja) |
WO (1) | WO2002044875A2 (ja) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004320719A (ja) * | 2003-01-15 | 2004-11-11 | Matsushita Electric Ind Co Ltd | 著作物保護システム、鍵データ生成装置及び端末装置 |
JP2006163522A (ja) * | 2004-12-02 | 2006-06-22 | Nec Electronics Corp | コピー防止回路装置およびコピー防止方法 |
US7127616B2 (en) | 2002-03-22 | 2006-10-24 | Kabushiki Kaisha Toshiba | Semiconductor integrated circuits, data transfer systems, and the method for data transfer |
WO2006115213A1 (ja) * | 2005-04-21 | 2006-11-02 | Matsushita Electric Industrial Co., Ltd. | 回路更新システム |
JP2007142591A (ja) * | 2005-11-15 | 2007-06-07 | Matsushita Electric Ind Co Ltd | 暗号管理方法 |
JP2008512909A (ja) * | 2004-09-10 | 2008-04-24 | インターナショナル・ビジネス・マシーンズ・コーポレーション | オン・チップ・ハードウェアをプログラミングするためのセキュアな機構を有する暗号化および復号化のための集積回路チップ |
US7849296B2 (en) | 2002-11-18 | 2010-12-07 | Arm Limited | Monitoring control for monitoring at least two domains of multi-domain processors |
JP2011518473A (ja) * | 2008-03-25 | 2011-06-23 | インスティテュート テレコム−テレコム パリ テック | プログラマブル暗号回路を保護する方法、およびその方法で保護される回路 |
JP2012505442A (ja) * | 2008-08-12 | 2012-03-01 | インスティテュート テレコム−テレコム パリ テック | プログラマブル論理回路の設定ファイルの解読を保護する方法およびそれを実施する論理回路 |
US8713371B2 (en) | 2011-01-28 | 2014-04-29 | Arm Limited | Controlling generation of debug exceptions |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7484081B1 (en) * | 2000-10-10 | 2009-01-27 | Altera Corporation | Method and apparatus for protecting designs in SRAM-based programmable logic devices |
FI115257B (fi) * | 2001-08-07 | 2005-03-31 | Nokia Corp | Menetelmä informaation käsittelemiseksi elektroniikkalaitteessa, järjestelmä, elektroniikkalaite ja suoritinlohko |
US20030068038A1 (en) * | 2001-09-28 | 2003-04-10 | Bedros Hanounik | Method and apparatus for encrypting data |
WO2003032159A2 (en) * | 2001-10-11 | 2003-04-17 | Altera Corporation | Error detection on programmable logic resources |
US20040034785A1 (en) * | 2002-08-15 | 2004-02-19 | Horng-Ming Tai | Hardware and firmware encryption mechanism using unique chip die identification |
US7234159B1 (en) * | 2003-01-07 | 2007-06-19 | Altera Corporation | Method and apparatus for controlling evaluation of protected intellectual property in hardware |
US7243237B2 (en) * | 2003-05-02 | 2007-07-10 | Microsoft Corporation | Secure communication with a keyboard or related device |
US7353468B2 (en) * | 2003-09-26 | 2008-04-01 | Ferguson John G | Secure exchange of information in electronic design automation |
US20060259978A1 (en) * | 2003-09-26 | 2006-11-16 | Pikus Fedor G | Secure exchange of information in electronic design automation with license-related key generation |
US7222312B2 (en) * | 2003-09-26 | 2007-05-22 | Ferguson John G | Secure exchange of information in electronic design automation |
JP2005107911A (ja) * | 2003-09-30 | 2005-04-21 | Daihen Corp | 書込情報生成用プログラム、ハードウェアへの情報書込用プログラム、これらのプログラムを記録したコンピュータ読み取り可能な記録媒体、書込情報生成装置及び情報書込装置 |
US7653820B1 (en) * | 2003-10-31 | 2010-01-26 | Xilinx, Inc. | System and method for securing using decryption keys during FPGA configuration using a microcontroller |
JP4294514B2 (ja) * | 2004-03-05 | 2009-07-15 | シャープ株式会社 | 半導体装置および電子装置 |
US8183881B1 (en) * | 2004-03-29 | 2012-05-22 | Xilinx, Inc. | Configuration memory as buffer memory for an integrated circuit |
US8656185B2 (en) * | 2004-07-30 | 2014-02-18 | Safenet, Inc. | High-assurance processor active memory content protection |
US7757294B1 (en) | 2004-08-27 | 2010-07-13 | Xilinx, Inc. | Method and system for maintaining the security of design information |
US8612772B1 (en) | 2004-09-10 | 2013-12-17 | Altera Corporation | Security core using soft key |
US8566616B1 (en) | 2004-09-10 | 2013-10-22 | Altera Corporation | Method and apparatus for protecting designs in SRAM-based programmable logic devices and the like |
US7257654B1 (en) * | 2004-11-09 | 2007-08-14 | Advanced Micro Devices, Inc. | PCI bridge device configured for using JTAG scan for writing internal control registers and outputting debug state |
US7564345B2 (en) * | 2004-11-12 | 2009-07-21 | Verayo, Inc. | Volatile device keys and applications thereof |
US7971072B1 (en) | 2005-03-10 | 2011-06-28 | Xilinx, Inc. | Secure exchange of IP cores |
US7788502B1 (en) | 2005-03-10 | 2010-08-31 | Xilinx, Inc. | Method and system for secure exchange of IP cores |
GB2424557A (en) * | 2005-03-24 | 2006-09-27 | Sony Uk Ltd | FPGA with hardware decryptor for configuration programme which adds second key to itself before re-encrypting and overwriting itself in memory when run |
US7345502B1 (en) * | 2006-01-17 | 2008-03-18 | Xilinx, Inc. | Design security for configurable devices |
US20090222927A1 (en) * | 2006-04-30 | 2009-09-03 | Pikus Fedor G | Concealment of Information in Electronic Design Automation |
CN101114903B (zh) * | 2007-03-05 | 2011-10-26 | 中兴通讯股份有限公司 | 一种吉比特无源光网络系统中高级加密标准加密装置及其实现方法 |
US7809544B1 (en) * | 2007-06-13 | 2010-10-05 | Xilinx, Inc. | Methods of detecting unwanted logic in designs for programmable logic devices |
US8896346B1 (en) | 2007-08-06 | 2014-11-25 | Lewis Innovative Technologies | Self-modifying FPGA for anti-tamper applications |
US8159259B1 (en) * | 2007-08-06 | 2012-04-17 | Lewis James M | Self-modifying FPGA for anti-tamper applications |
US8175276B2 (en) * | 2008-02-04 | 2012-05-08 | Freescale Semiconductor, Inc. | Encryption apparatus with diverse key retention schemes |
US8022724B1 (en) * | 2009-11-25 | 2011-09-20 | Xilinx, Inc. | Method and integrated circuit for secure reconfiguration of programmable logic |
EP2334005A1 (en) * | 2009-12-11 | 2011-06-15 | Nxp B.V. | Integrated circuit and method of producing same |
US8286113B1 (en) * | 2011-01-11 | 2012-10-09 | Xilinx, Inc. | Verification of logic core implementation |
US8803548B2 (en) * | 2012-04-19 | 2014-08-12 | Microsemi SoC Corporation | Apparatus and methods for a tamper resistant bus for secure lock bit transfer |
US8910102B2 (en) * | 2013-02-28 | 2014-12-09 | Altera Corporation | Configuring a programmable logic device using a configuration bit stream without phantom bits |
US8941408B2 (en) | 2013-02-28 | 2015-01-27 | Altera Corporation | Configuring data registers to program a programmable device with a configuration bit stream without phantom bits |
US9053325B2 (en) | 2013-08-22 | 2015-06-09 | Freescale Semiconductor, Inc. | Decryption key management system |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5121359A (en) | 1989-09-29 | 1992-06-09 | Sgs-Thomson Microelectronics, Inc. | Configuration memory for programmable logic device |
US5081675A (en) | 1989-11-13 | 1992-01-14 | Kitti Kittirutsunetorn | System for protection of software in memory against unauthorized use |
US5321704A (en) | 1991-01-16 | 1994-06-14 | Xilinx, Inc. | Error detection structure and method using partial polynomial check |
GB9121591D0 (en) | 1991-10-11 | 1991-11-27 | Pilkington Micro Electronics | Data security arrangement for semiconductor programmable logic devices |
US5341034A (en) | 1993-02-11 | 1994-08-23 | Benchmarq Microelectronics, Inc. | Backup battery power controller having channel regions of transistors being biased by power supply or battery |
US5615263A (en) | 1995-01-06 | 1997-03-25 | Vlsi Technology, Inc. | Dual purpose security architecture with protected internal operating system |
US5892961A (en) | 1995-02-17 | 1999-04-06 | Xilinx, Inc. | Field programmable gate array having programming instructions in the configuration bitstream |
GB9508931D0 (en) | 1995-05-02 | 1995-06-21 | Xilinx Inc | Programmable switch for FPGA input/output signals |
US5784313A (en) * | 1995-08-18 | 1998-07-21 | Xilinx, Inc. | Programmable logic device including configuration data or user data memory slices |
US5764076A (en) | 1996-06-26 | 1998-06-09 | Xilinx, Inc. | Circuit for partially reprogramming an operational programmable logic device |
US5838901A (en) | 1996-08-05 | 1998-11-17 | Xilinx, Inc. | Overridable data protection mechanism for PLDs |
US5970142A (en) | 1996-08-26 | 1999-10-19 | Xilinx, Inc. | Configuration stream encryption |
US6028939A (en) | 1997-01-03 | 2000-02-22 | Redcreek Communications, Inc. | Data security system and method |
US5914616A (en) | 1997-02-26 | 1999-06-22 | Xilinx, Inc. | FPGA repeatable interconnect structure with hierarchical interconnect lines |
US5931959A (en) | 1997-05-21 | 1999-08-03 | The United States Of America As Represented By The Secretary Of The Air Force | Dynamically reconfigurable FPGA apparatus and method for multiprocessing and fault tolerance |
US6172520B1 (en) * | 1997-12-30 | 2001-01-09 | Xilinx, Inc. | FPGA system with user-programmable configuration ports and method for reconfiguring the FPGA |
US6118869A (en) | 1998-03-11 | 2000-09-12 | Xilinx, Inc. | System and method for PLD bitstream encryption |
KR100296958B1 (ko) | 1998-05-06 | 2001-09-22 | 이석우 | 블록 데이터 암호화 장치 |
US6654889B1 (en) | 1999-02-19 | 2003-11-25 | Xilinx, Inc. | Method and apparatus for protecting proprietary configuration data for programmable logic devices |
US6560709B1 (en) | 1999-04-30 | 2003-05-06 | 3Com Corporation | Method and apparatus for the transfer of sensitive card data over an unsecure computer network |
US6323679B1 (en) | 1999-11-12 | 2001-11-27 | Sandia Corporation | Flexible programmable logic module |
US20010032318A1 (en) | 1999-12-03 | 2001-10-18 | Yip Kun Wah | Apparatus and method for protecting configuration data in a programmable device |
GB9930145D0 (en) | 1999-12-22 | 2000-02-09 | Kean Thomas A | Method and apparatus for secure configuration of a field programmable gate array |
US6326806B1 (en) * | 2000-03-29 | 2001-12-04 | Xilinx, Inc. | FPGA-based communications access point and system for reconfiguration |
US6441641B1 (en) | 2000-11-28 | 2002-08-27 | Xilinx, Inc. | Programmable logic device with partial battery backup |
US6366117B1 (en) | 2000-11-28 | 2002-04-02 | Xilinx, Inc. | Nonvolatile/battery-backed key in PLD |
US6664807B1 (en) | 2002-01-22 | 2003-12-16 | Xilinx, Inc. | Repeater for buffering a signal on a long data line of a programmable logic device |
-
2000
- 2000-11-28 US US09/724,975 patent/US6981153B1/en not_active Expired - Lifetime
-
2001
- 2001-11-28 EP EP01998883.1A patent/EP1358530B1/en not_active Expired - Lifetime
- 2001-11-28 JP JP2002546975A patent/JP2004515180A/ja not_active Withdrawn
- 2001-11-28 CA CA002429597A patent/CA2429597C/en not_active Expired - Lifetime
- 2001-11-28 WO PCT/US2001/045055 patent/WO2002044875A2/en active Application Filing
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7127616B2 (en) | 2002-03-22 | 2006-10-24 | Kabushiki Kaisha Toshiba | Semiconductor integrated circuits, data transfer systems, and the method for data transfer |
US7849296B2 (en) | 2002-11-18 | 2010-12-07 | Arm Limited | Monitoring control for monitoring at least two domains of multi-domain processors |
JP4574175B2 (ja) * | 2003-01-15 | 2010-11-04 | パナソニック株式会社 | 著作物保護システム、鍵データ生成装置及び端末装置 |
JP2004320719A (ja) * | 2003-01-15 | 2004-11-11 | Matsushita Electric Ind Co Ltd | 著作物保護システム、鍵データ生成装置及び端末装置 |
JP2008512909A (ja) * | 2004-09-10 | 2008-04-24 | インターナショナル・ビジネス・マシーンズ・コーポレーション | オン・チップ・ハードウェアをプログラミングするためのセキュアな機構を有する暗号化および復号化のための集積回路チップ |
JP2006163522A (ja) * | 2004-12-02 | 2006-06-22 | Nec Electronics Corp | コピー防止回路装置およびコピー防止方法 |
WO2006115213A1 (ja) * | 2005-04-21 | 2006-11-02 | Matsushita Electric Industrial Co., Ltd. | 回路更新システム |
JP4801054B2 (ja) * | 2005-04-21 | 2011-10-26 | パナソニック株式会社 | 回路更新システム |
US8189773B2 (en) | 2005-04-21 | 2012-05-29 | Panasonic Corporation | Circuit updating system |
JP2007142591A (ja) * | 2005-11-15 | 2007-06-07 | Matsushita Electric Ind Co Ltd | 暗号管理方法 |
JP2011518473A (ja) * | 2008-03-25 | 2011-06-23 | インスティテュート テレコム−テレコム パリ テック | プログラマブル暗号回路を保護する方法、およびその方法で保護される回路 |
KR101542280B1 (ko) | 2008-03-25 | 2015-08-06 | 앵스띠뛰 텔레콩-텔레콩 파리 테끄 | 프로그래머블 암호화 회로를 보호하는 방법, 및 그 방법에 의해 보호된 회로 |
JP2012505442A (ja) * | 2008-08-12 | 2012-03-01 | インスティテュート テレコム−テレコム パリ テック | プログラマブル論理回路の設定ファイルの解読を保護する方法およびそれを実施する論理回路 |
US8713371B2 (en) | 2011-01-28 | 2014-04-29 | Arm Limited | Controlling generation of debug exceptions |
Also Published As
Publication number | Publication date |
---|---|
EP1358530B1 (en) | 2016-02-24 |
EP1358530A2 (en) | 2003-11-05 |
WO2002044875A2 (en) | 2002-06-06 |
WO2002044875A3 (en) | 2003-09-12 |
US6981153B1 (en) | 2005-12-27 |
CA2429597A1 (en) | 2002-06-06 |
CA2429597C (en) | 2007-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6366117B1 (en) | Nonvolatile/battery-backed key in PLD | |
US6441641B1 (en) | Programmable logic device with partial battery backup | |
US6931543B1 (en) | Programmable logic device with decryption algorithm and decryption key | |
EP1358530B1 (en) | Programmable logic device with method of preventing readback | |
US7058177B1 (en) | Partially encrypted bitstream method | |
US7117373B1 (en) | Bitstream for configuring a PLD with encrypted design data | |
US6965675B1 (en) | Structure and method for loading encryption keys through a test access port | |
US6957340B1 (en) | Encryption key for multi-key encryption in programmable logic device | |
US7117372B1 (en) | Programmable logic device with decryption and structure for preventing design relocation | |
US8209545B1 (en) | FPGA configuration bitstream protection using multiple keys | |
US7162644B1 (en) | Methods and circuits for protecting proprietary configuration data for programmable logic devices | |
US7203842B2 (en) | Method and apparatus for secure configuration of a field programmable gate array | |
US7716497B1 (en) | Bitstream protection without key storage | |
US6654889B1 (en) | Method and apparatus for protecting proprietary configuration data for programmable logic devices | |
US6118869A (en) | System and method for PLD bitstream encryption | |
US20010032318A1 (en) | Apparatus and method for protecting configuration data in a programmable device | |
US9152822B2 (en) | Method and apparatus for securing programming data of a programmable device | |
JP2004519111A (ja) | プログラム暗号化を伴うフィールドプログラマブルゲートアレイ | |
US7734043B1 (en) | Encryption key obfuscation and storage | |
US7143295B1 (en) | Methods and circuits for dedicating a programmable logic device for use with specific designs | |
US8433930B1 (en) | One-time programmable memories for key storage | |
WO2001046810A1 (en) | Method and apparatus for secure configuration of a field programmable gate array |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20050201 |