ハードウェアセキュリティ
攻撃者がFPGAとそのビットストリームに対して何ができるか、現代のデバイスに組み込まれた防御、そして次世代を形作る研究テーマ(サイドチャネル、故障注入、PQC)を解説します。
概要
FPGAには、ASICにはない性質が1つあります。設計がファイルであり、そのファイルはコピーも読み取りも改変もできるということです。そのため、FPGAのセキュリティはビットストリームの保護から始まり、鍵の保管やセキュアブートからダイへの物理攻撃まで、ASIC設計者が気にするすべてに広がっていきます。このハブは、どのデバイス機能を有効にするか、それが何を防ぎ、何を防がないかを判断しなければならないエンジニアのためのページです。ここではデバイスを攻撃対象として扱います。FPGAを使ってセキュリティ製品(暗号アクセラレータ、ネットワークフィルタ)を作る場合も、同じ考え方に反対側から触れることになります。
攻撃者の目的は3つでほとんどの場合を網羅できます。クローン: ビットストリームを別の個体にコピーして販売する。リバースエンジニアリング: ビットストリームから設計やその中の鍵を復元する。改ざん: 現場またはサプライチェーンでデバイスの動作を変える。
重要な考え方
ビットストリームの機密性と認証
2000年代半ば以降のすべての主要ファミリーは、バッテリーバックアップRAMまたはeFuseに置いた鍵を使い、AES暗号化されたビットストリームを復号できます。暗号化はクローンと手軽なリバースエンジニアリングを防ぎます。しかし、デバイスが認証も行わない限り、改変されたビットストリームの読み込みは防げません。認証(古い部品ではHMAC、現行品ではRSAまたはECDSA署名)こそが改ざんに対して重要な機能であり、より多く無効のまま放置されている機能でもあります。AMD UltraScale+では両者は別個のオプションであり、Microchip PolarFireではデバイスがすべてのビットストリームと毎回の起動で署名を検査します。2020年のStarbleed攻撃は、AMD 7 Seriesでは暗号化だけならコンフィギュレーションロジックを通じて破れることを示しました。教訓は一般化できます。認証を有効にし、製品が許す限りバッテリーRAMではなくeFuseに鍵を保管し、鍵書き込み装置もセキュリティ境界の一部として扱うことです。
鍵: ヒューズ、バッテリー、PUF
鍵はどこかに置かなければなりません。eFuseは永続的で安価ですが、顕微鏡をもつ資金豊富な研究所なら読み取れます。バッテリーバックアップRAMはタンパー検知時に消去できますが、部品表にバッテリーが加わり、故障モードも増えます。物理複製困難関数(PUF)は、デバイスが起動するたびに製造ばらつき(SRAMの電源投入時の状態、リングオシレータの周波数)から鍵を導出するので、鍵はまったく保存されません。AMD Zynq UltraScale+とVersal、Microchip PolarFireにはPUFベースの鍵ラッピングが含まれています。PUFにはヘルパーデータと誤り訂正が必要で、その安全性はエントロピーの質に依存するため、チェック項目を埋めるためのものではなく、理解してから頼るべき機能です。
物理攻撃: サイドチャネルと故障
サイドチャネル解析は、デバイスが復号している間の消費電力や電磁放射から鍵を復元します。Kocherらによる古典的な差分電力解析はビットストリーム復号器にも適用でき、公開された研究では複数世代のFPGAのコンフィギュレーションエンジンからAES鍵が復元されています。ベンダーは鍵ローリング(ビットストリーム数キロバイトごとに鍵を変える)とマスキング実装で対応してきました。故障注入は、電圧やクロックのグリッチ、レーザー、電磁パルスによって命令をスキップさせたりビットを反転させたりして、署名検査を迂回します。防御には、冗長な検査、タイミングのランダム化、そしてほとんどのファミリーが公開しているオンチップの電圧・温度モニタがあります。ファブリック内に置く独自の暗号コアにも同じ配慮が必要です。FPGAならモニタを追加して自分のボードで攻撃を実行できるので、テストは容易です。
耐量子暗号とサプライチェーン
NISTは2024年に最初の耐量子暗号標準(ML-KEM、ML-DSA、SLH-DSA)を公開しました。格子ベース方式のFPGA実装は、数論変換がDSPスライスによく写像できるため、最初にベンチマークされたものの一つでした。ベンダーはPQC対応のブートを追加し始めており(本稿執筆時点でAMD Versal Gen 2はLMSベースの署名をサポート)、10年の稼働期間をもつ製品は今から計画しておくべきです。サプライチェーンのセキュリティはもう一つの活発な領域です。偽造品や再マーキング品、委託製造業者が読み込むビットストリーム、ベンダーIPを信頼するかどうかという問題があります。デバイス認証と個体ごとの鍵が一部に答えます。残りは調達の規律が答えます。
どこから始めるか
ビットストリームのセキュリティは、ビットストリームとは何か、どうやってデバイスに入るかを知っていることが前提なので、まず/learn/beginner/02-how-an-fpga-is-programmed/と/learn/beginner/10-from-rtl-to-board/を読んでください。次に、対象ベンダーのセキュリティユーザーガイドを最初から最後まで読んでください。デフォルト設定が安全な設定であることはめったにないからです。実践的な最初の演習は、開発ボードで暗号化と認証を有効にし、わざと署名を壊して、デバイスが起動を拒否することを確認することです。セキュリティエンジニアリングに関する上級トラックは準備中です。
ツールとベンダー
| ベンダー | ビットストリーム保護 | 鍵の保管 | 特筆すべき機能 |
|---|---|---|---|
| AMD | AES-256-GCM、RSA-4096およびECDSA認証 | eFuse、BBRAM、PUF(Zynq UltraScale+、Versal) | 鍵ローリング、タンパーモニタ、PMU/PLMでのセキュアブート、Versal Gen 2でのPQC |
| Altera | AES-256、ECDSA認証 | eFuse、BBRAM、PUF(Agilex) | Stratix 10とAgilexではSecure Device Managerがすべてのコンフィギュレーションを処理 |
| Microchip | AES-256、署名付きビットストリームを常に検証 | eFuse、PUF | フラッシュベースで電源投入時に外部ビットストリーム不要、RambusからライセンスされたDPA対策、Design Security認証 |
| Lattice | AES-256、新しい部品ではECDSA | OTP | Mach-NXとMachXO3Dはプラットフォームのルートオブトラスト部品として販売 |
| Efinix | TitaniumではAES-256と認証 | eFuse | Titaniumは認証付きビットストリームを追加、Trionは暗号化のみ |
オープンソースのツールでは主要ファミリー向けの暗号化ビットストリームを生成できないので、暗号化が必要な設計では最終ステップにベンダーツールが必要です。
よくある間違い
- 暗号化は有効にするが認証は有効にしない。これでは改ざんが可能なままです。
- 誰が鍵を見るかを管理せずに製造ラインで鍵を書き込み、全個体で単一の鍵を使い回す。
- PUFやeFuseは読み取れないと仮定する。意欲のある研究所なら保存された秘密は何でも読めると仮定し、1個体の喪失が全体を破綻させないように設計してください。
- ピンが実装されていないからJTAGは無効だと信じる。デバイス内で無効にするか、ベンダーの機構でロックしてください。
- サイドチャネル対策なしで独自のAESをRTLで書き、ユーザーがアクセスできる電源レールの隣に置く。
- ソフト側を忘れる。未署名のブートローダが読み込んだ完璧なビットストリームは、未署名です。
さらに深く
- AMD XAPP1267, Using Encryption and Authentication to Secure an UltraScale/UltraScale+ FPGA Bitstream。eFuse書き込みを含む手順の実例です。
- Ender, Moradi and Paar, The Unpatchable Silicon: A Full Break of the Bitstream Encryption of Xilinx 7-Series FPGAs, USENIX Security 2020。
- Kocher, Jaffe and Jun, Differential Power Analysis, CRYPTO 1999。サイドチャネル解析の出発点となった論文です。
- NIST耐量子暗号プロジェクト。公開済みのFIPS 203、204、205標準があります。
- CHES(Conference on Cryptographic Hardware and Embedded Systems)。FPGAのサイドチャネルと故障注入に関する研究の大半が発表される場です。