ASUS Z170系の一部のマザーボードでは、通常のBIOSメニューでは外付けTPMモジュール (dTPM) しか有効化できません。しかし、実際にはPTT (Platform Trust Technology) に対応しており、マザーボード・CPUともに対応しているため、NVRAM内の変数を書き換えることで隠し設定を有効化できます。
実行環境
| マザーボード | ASUS Z170-A |
| BIOSバージョン | 3802 |
| CPU | i7 6700K |
同じマザーボードとBIOSを使用している場合、BIOS設定変数の確認ステップは省略可能です。
BIOSファイルの準備と更新
まずマザーボードの公式サイトから最新のBIOSファイルをダウンロードし、マザーボードをそのBIOSに更新します。更新後も、このBIOSファイルは次のステップで使用するため、削除せずに保管してください。
BIOS設定変数の確認
BIOS内の隠し設定を操作するために、UBU (Universal BIOS Updater) に含まれるAMI Setup IFR Extractorを使用します。このツールを使うと、BIOS設定画面に存在する各項目が内部的にどの変数 (VarOffset) に保存されているかを調べることができます。
UBUはWin-Raid Forumからダウンロードリンクを探してください。ダウンロード元の確認やダウンロードしたファイルはウイルススキャンをするなどして自己責任で使用してください。今回使用したのは、UBU_v1_80_b1になります。
こちらのツールの実行には、Microsoft Visual C++ 2013 再頒布パッケージが必要です。こちらからVisual Studio 2013 (VC++ 12.0) (サポートされなくなりました)にあるvcredist_x86.extとvcredist_x64.exeをダウンロードしてインストールしてください。
ダウンロードしたUBUを解凍し、先ほど用意したBIOSファイルを同じフォルダに保存します。そして、そのフォルダ内にあるUBU.cmd (Windowsコマンドスクリプト)を実行してください。

S – AMI Setup IFR Extractorを実行します。

BIOS設定内容が_Setup_bios.bin/setup_extr.txtに出力されました。
setup_extr.txtをテキストエディタで開きます。

Ctrl+Fで「TPM Device Selection」を検索します。
- VarStoreInfo (VarOffset/VarName): 0x6A6
- dTPM, Value (8 bit): 0x0
- PTT, Value (8 bit): 0x1
表示される内容から、VarOffsetが0x6A6であり、dTPMが0x0、PTTが0x1であることを確認します。この変数を書き換えることで、PTTを有効化できます。
GRUBシェル起動用USBの作成
BIOSやUEFIの設定変数を書き換えるため、USBからGRUBシェルを起動できる環境を作ります。まず、modGRUBShell.efiをダウンロードし、ファイル名をmodGRUBShell.efiからbootx64.efiにリネームします。
USBメモリをFAT32でフォーマットし、以下の階層にフォルダとファイルを配置します。
efi
└─ boot
└─bootx64.efi
GRUBシェルの起動と変数の書き換え
BIOSでセキュアブートを無効化し、作成したUSBを起動します。

GRUBシェルが立ち上がったら、以下のコマンドを入力してVarOffset 0x6A6 の値を0x1に変更します。
setup_var 0x6A6 0x1
値が変更されたか現在の設定値を確認してください。
setup_var 0x6A6
操作が終わったらexitでGRUBシェルを終了し、BIOSに戻ります。その後一度シャットダウンします。


BIOSを確認すると、Trusted Computingの項目が出てきてTPM2.0がオンになりました。
PTTを有効にするとdTPMは同時に利用できません。両者は排他的に動作するため、切り替えたい場合は再度setup_varで値を書き換える必要があります。また、この設定はBIOSのリセットやBIOSアップデートで初期化される可能性があります。本手順はZ170系ASUSマザーボードを前提としており、他のマザーボードではVarOffsetや手順が異なる場合があります。


