LTspiceで再現する物理複製困難関数(PUF)
半導体製造のバラつきを暗号鍵にする最新技術。
モンテカルロ解析で「同じ設計図から違う個性が生まれる」瞬間を見てみよう🐾
🛠️ LtSpiceのインストール方法は vol.1(チュア回路)の冒頭をご確認ください。
世界中の電子機器にはシリアル番号やIDが割り振られている。 しかし、ソフトウェアで書き込まれたIDはコピー・改ざんのリスクがある。 偽造チップ・クローンデバイスの問題は、IoT・自動車・医療機器など安全が重要な分野で深刻だ。
PUFが革命的なのは、IDを「書き込む」のではなく「生まれ持つ」設計を実現した点だ。 製造プロセスで必然的に生じるバラつきを、そのままデバイスの「指紋」として利用する。 どんな高精度な製造装置を使っても、まったく同じチップは2枚と作れない。
最もポピュラーなPUFの一つがSRAM(スタティックRAM)を使った方式だ。 SRAMセルは2つのインバータを背中合わせに接続した回路で、 電源が入った直後に「どちらが先に安定するか」で0か1かが決まる。
LTspiceの モンテカルロ解析(mc関数) を使うと、 部品のバラつきを統計的にシミュレートできる。 これで「同じ設計図から10個の異なる個体を作る」ことが再現できる。
インバータ2つを背中合わせに接続したSRAMセルを配置する:
nmos)× 2 と PMOSトランジスタ(pmos)× 2トランジスタの閾値電圧(Vth)または抵抗値に製造誤差を加える:
.param VTH_OFFSET = {mc(0, 0.01)}
* → 0Vを中心に ±10mV のバラつきを持つ閾値電圧オフセット
* または抵抗バラつきの場合:
R1 node1 node2 {mc(1k, 0.05)}
* → 1kΩを基準に5%の範囲でバラつかせる
mc(1k, 0.05) は「1kΩを中心に±5%の一様分布でランダムにバラつく」という指定。
実際の半導体製造では、閾値電圧のバラつきは数mV〜数十mV の範囲で生じる。
回路図に以下のシミュレーションコマンドを追記する:
.tran 100n
.step param run 1 10 1
→ Vddを0Vから立ち上げ、どちらの出力が先に1に確定するかを10パターン観察する。
.step param run によって、異なる乱数シードで10回シミュレーションが実行される。
ここにLTspice モンテカルロ解析の実際の波形
(各インスタンスが異なる安定点に収束する様子)が入る予定
PUFのすごいところは、「チップの中に鍵を保存しておく必要がない」点だ。 鍵が必要なときだけ電源を入れて「指紋」を読み取り、電源を切れば鍵は消える。 物理的に分解してメモリを読んでも、そこには何も残っていない。
IoTデバイスのIDをPUFで生成。 出荷時にサーバー側でPUF応答パターンを登録しておき、 以降の通信でデバイスを確実に認証できる。
AES鍵をPUFから生成し、使用後は消える。 フラッシュメモリに鍵を保存しないため、 物理的な解析(デキャップ攻撃)に強い。
ECU(車載コンピュータ)の真正性確認に採用例あり。 偽造部品の流通を防ぐサプライチェーンセキュリティにも応用される。
温度や電圧の変化で応答がわずかに変わる「ビットエラー」問題がある。 誤り訂正符号(ECC)との組み合わせで実用化されている。
同じ製造ラインで作っても2枚の同じチップは存在しない。量子力学的な製造誤差は再現できない。
電源オフで鍵は消える。メモリに保存しないため、デキャップ解析・フリーズ攻撃が効かない。
既存の製造プロセスの「バラつき」をそのまま利用。専用の鍵書き込み工程が不要。
チップを物理的に解析しようとすると製造バラつきが変化し、正しい指紋が出なくなる。自己破壊的セキュリティ。
{mc(中心値, 許容幅)} で製造バラつきをモデル化できる.step param run 1 10 1 で10個の個体を一度にシミュレート
数式だけでは見えてこない暗号の「手触り」を、ぜひご自身のPCでシミュレーションして体感してみてください!
質問・感想はお問い合わせページへ🐾