0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MinnowBoard TurbotのfTPMを使う

Last updated at Posted at 2017-07-21

MinnowBoard Turbot でTPMを使うには、I2CをかSPIで外部にDiscrete TPMチップを接続する方法と、fTPM(ファームウェア実装のTPM2.0、Intelの場合はPTTとも呼ぶ)を使う方法があります。UEFI BIOSではFirmwareとDiscrete選べるようだが TPMチップの方の設定(おそらくNationz製のI2C TPM)について詳細な情報は公開されていないようです。ここではfTPMを有効化する方法についてまとめます。

1. 準備

2. セットアップ

2-1. 前置き

  • 購入したボードのUEFIのVersion 0.95でした。
    • BIOSの設定画面でTPMの選択が可能。
    • ただし、BIOSでせってしてもOSからはTPMが認識できない状態。
    • どうも付いてくるBIOSではFTPMをサポートしていないにもかかわらずメニューだけサポートしているフリをする困ったやつの可能性が高いです。そのため、OSでTPMを認識できない場合は、(どこにも書いてませんが)最新のFTPM対応のUEFIイメージにファームウェアをアップデートしておくひつようがありそうです。
  • UEFIをアップデートすると設定をすべて消すので、UEFIをアップデートしてからOSをインストールしたほうが良いでしょう。
  • ファームウェアは8種類(32/64BIT, Debug/Release、FTPMの有無)あります。Debugのファームウェアは動作がかなり遅いので64-bit/Release/FTPMを利用するのがココでは無難だと思われます。
  • SDカードにOSインストールすると、動作が非常に遅いです。M.2 SSDなどを使ったほうがよいかもしれません(未確認)。

2-1. UEFI の更新

TeddyさんのBlog[1]にFTPMの有効化の方法が書かれていますが、最新のファームウェアではFTPMに対応済みのようです。インテルのファームウェアのサイト[2]から最新版ダウンロードしてアップデートします。

  • https://firmware.intel.com/projects/minnowboard-max から最新UEFIファームウェアをダウンロード(これを書いた時点では 0.96が最新)。
  • 解凍し、下記の2つをUSBドライブにコピー
    • MinnowBoard.MAX.FirmwareUpdateX64.efi
    • FTPM/MNW2MAX1.X64.0096.R01.1707030938.bin
  • ボード起動、しばらくしてUEFIシェル起動
    • "fs0:" でUSBドライブ選択
    • "MinnowBoard.MAX.FirmwareUpdateX64.efi MNW2MAX1.X64.0096.R01.1707030938.bin" でアップデート実行
    • 勝手に再起動

2-3. UEFIのメニューでTPMの有効化

  • ボード起動、F2もしくはDELでメニューに
  • Device Manager
    • System Setop
      • Security Configulation
        • PTT ->
        • Discrete TPM
        • Measured Boot
          − 以上でPTT(=fTPM)が有効化される

2-4. OSの設定、確認

以下は Ubuntu16.04 をインストールしたあとの作業です。 ftPM(PTT)は自動で認識されるため設定作業は不要です。以下は動作確認のメモです。

$ lsmod | grep tpm
tpm_crb                16384  0

CRBが読み込み済み。(のはず)

$ stat /dev/tpm0
  File: '/dev/tpm0'
  Size: 0           Blocks: 0          IO Block: 4096   character special file
Device: 6h/6d Inode: 417         Links: 1     Device type: a,e0
Access: (0600/crw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-07-22 07:27:09.062223303 +0900
Modify: 2017-07-22 07:27:09.062223303 +0900
Change: 2017-07-22 07:27:09.062223303 +0900
 Birth: -

デバイスファイルも作成済み(のはず)

$ sudo  acpidump -s
[sudo] password for sage: 
ACPI: APIC 0x0000000000000000 000084 (v03 INTEL  EDK2     00000003 VLV2 0100000D)
ACPI: CSRT 0x0000000000000000 00014C (v00 INTEL  EDK2     00000005 INTL 20120624)
ACPI: DSDT 0x0000000000000000 007B07 (v02 INTEL  EDK2     00000003 VLV2 0100000D)
ACPI: FACP 0x0000000000000000 00010C (v05 INTEL  EDK2     00000003 VLV2 0100000D)
ACPI: FACS 0x0000000000000000 000040
ACPI: FPDT 0x0000000000000000 000044 (v01 INTEL  EDK2     00000002      01000013)
ACPI: HPET 0x0000000000000000 000038 (v01 INTEL  EDK2     00000003 VLV2 0100000D)
ACPI: MCFG 0x0000000000000000 00003C (v01 INTEL  EDK2     00000003 VLV2 0100000D)
ACPI: LPIT 0x0000000000000000 000104 (v01 INTEL  EDK2     00000003 VLV2 0100000D)
ACPI: TCPA 0x0000000000000000 000032 (v02 INTEL  EDK2     00000002      01000013)
ACPI: UEFI 0x0000000000000000 000042 (v01 INTEL  EDK2     00000002      01000013)
ACPI: TPM2 0x0000000000000000 000034 (v03                 00000000      00000000)
ACPI: SSDT 0x0000000000000000 0004AC (v01 INTEL  RHPROXY  00000003 VLV2 0100000D)
ACPI: SSDT 0x0000000000000000 00043A (v01 Intel_ Tpm2Tabl 00001000 INTL 20120518)
ACPI: SSDT 0x0000000000000000 000763 (v01 PmRef  CpuPm    00003000 INTL 20141107)
ACPI: SSDT 0x0000000000000000 000261 (v01 PmRef  Cpu0Tst  00003000 INTL 20141107)
ACPI: SSDT 0x0000000000000000 00017A (v01 PmRef  ApTst    00003000 INTL 20141107)
ACPI: SSDT 0x0000000000000000 000395 (v01 PmRef  Cpu0Ist  00003000 INTL 20141107)
ACPI: SSDT 0x0000000000000000 000233 (v01 PmRef  Cpu0Cst  00003001 INTL 20141107)
ACPI: SSDT 0x0000000000000000 00015F (v01 PmRef  ApIst    00003000 INTL 20141107)
ACPI: SSDT 0x0000000000000000 00008D (v01 PmRef  ApCst    00003000 INTL 20141107)

ACPIテーブルにエントリがある(のはず)

$ dmesg | grep TPM
[    0.000000] ACPI: TPM2 0x0000000078679000 000034 (v03                 00000000      00000000)
[    0.189472] ACPI Error: [TPME] Namespace lookup failure, AE_NOT_FOUND (20150930/psargs-359)
[    0.189483] ACPI Error: Method parse/execution failed [\_SB.TPM._STA] (Node ffff880076cb95f0), AE_NOT_FOUND (20150930/psparse-542)
[    0.189521] ACPI Error: [TPME] Namespace lookup failure, AE_NOT_FOUND (20150930/psargs-359)
[    0.189530] ACPI Error: Method parse/execution failed [\_SB.TPM._STA] (Node ffff880076cb95f0), AE_NOT_FOUND (20150930/psparse-542)
[    0.218213] ACPI Error: [TPME] Namespace lookup failure, AE_NOT_FOUND (20150930/psargs-359)
[    0.218225] ACPI Error: Method parse/execution failed [\_SB.TPM._STA] (Node ffff880076cb95f0), AE_NOT_FOUND (20150930/psparse-542)
[    0.237639] ACPI Error: [TPME] Namespace lookup failure, AE_NOT_FOUND (20150930/psargs-359)
[    0.237650] ACPI Error: Method parse/execution failed [\_SB.TPM._STA] (Node ffff880076cb95f0), AE_NOT_FOUND (20150930/psparse-542)
[    2.422114] ima: No TPM chip found, activating TPM-bypass!
[    7.378722] ACPI Error: [TPME] Namespace lookup failure, AE_NOT_FOUND (20150930/psargs-359)
[    7.378736] ACPI Error: Method parse/execution failed [\_SB.TPM._STA] (Node ffff880076cb95f0), AE_NOT_FOUND (20150930/psparse-542)
[    7.389216] ACPI Error: [TPME] Namespace lookup failure, AE_NOT_FOUND (20150930/psargs-359)
[    7.389231] ACPI Error: Method parse/execution failed [\_SB.TPM._STA] (Node ffff880076cb95f0), AE_NOT_FOUND (20150930/psparse-542)

このボードに限らずPTTの場合は、IMAの初期化時にTPMの動作確認が出来ないため IMAがTPM-bypassモードになるようです。

2-5. IBM TSS2.0 での動作確認

(ざっくり)インストール

$ sudo apt-get install -y libssl-dev
$ mkdir -p sandbox/ibmtpm20tss
$ cd sandbox/ibmtpm20tss
$ wget https://sourceforge.net/projects/ibmtpm20tss/files/ibmtss996.tar.gz
$ tar xvfz ibmtss996.tar.gz
$ cd utils
$ make
$ export TPM_INTERFACE_TYPE=dev
$ sudo chmod a+rwx /dev/tpm0
$ ./getcapability -cap 6
TPM_PT 00000100 value 322e3000 TPM_PT_FAMILY_INDICATOR - a 4-octet character string containing the TPM Family value (TPM_SPEC_FAMILY)
<SNIP>
TPM_PT 00000105 value 494e5443 TPM_PT_MANUFACTURER - the vendor ID unique to each TPM manufacturer 
<SNIP>
TPM_PT 0000010b value 00010000 TPM_PT_FIRMWARE_VERSION_1 - the most-significant 32 bits of a TPM vendor-specific value indicating the version number of the firmware
TPM_PT 0000010c value 0003048c TPM_PT_FIRMWARE_VERSION_2 - the least-significant 32 bits of a TPM vendor-specific value indicating the version number of the firmware
<SNIP>
$ ./pcrread -ha 0 -halg sha1 -ns
dfaa319c2ee33b4efc4edb4eb9ec057801bec1bb

PCR0-7に値が書き込まれているので、Trusted Boot (Measured Boot)も動作している模様。

以上で MinnowBoard Turbot(MAXも同じはず)でfTPMが使えるようになりました。

3. 参照

その他(ググッてみつけた)関連情報

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?