非常に困難でした。以前、yum を使って直接 trousers をインストールしようとしたところ、TPM_E_NOAUTH の問題が発生しましたが、現在 trousers-0.3.15 をコンパイルしたところ、正常に実験が行えるようになりました。どのパッケージが問題だったのかはまだ不明なので、システムが完全に新しいことを確認する必要があります。
基本環境の準備#
実験環境は CentOS7 に基づいており、システムが完全に新しいことを確認してください。そうでない場合、不明なパッケージの依存関係や競合の問題が発生する可能性があります。
-
カーネルの更新
yum update -y
-
基本的な開発グループ関連パッケージのインストール
yum groupinstall "Development Tools"
-
依存するソフトウェアパッケージのインストール
yum install -y automake autoconf pkgconfig libtool gtk2-devel openssl-devel glibc-devel gmp-devel cmake psmisc
-
まず tc.tgz をアップロードし、解凍して tc ディレクトリに入ります。
[root@localhost ~]# ls anaconda-ks.cfg tc.tgz [root@localhost ~]# tar -xzf tc.tgz [root@localhost ~]# ls anaconda-ks.cfg tc tc.tgz [root@localhost ~]# cd tc [root@localhost tc]# ls tpm-emulator trousers-0.3.15 trusted-computing-projectv0.3
tpm-emulator のコンパイル#
-
tpm-emulator のディレクトリ構造は以下の通りです。
[root@localhost tc]# cd tpm-emulator/ [root@localhost tpm-emulator]# ls AUTHORS build.bat build.sh ChangeLog CMakeLists.txt config.h.in crypto mtm README tddl tpm tpmd tpmd_dev
-
build を新規作成し、ディレクトリに入って CMake で Makefile を生成します。
[root@localhost tpm-emulator]# cd build [root@localhost build]# ls [root@localhost build]# cmake .. -- Cコンパイラの識別はGNU 4.8.5です -- 動作するCコンパイラのチェック: /usr/bin/cc -- 動作するCコンパイラのチェック: /usr/bin/cc -- 動作します -- CコンパイラABI情報の検出 -- CコンパイラABI情報の検出 - 完了 -- 設定が完了しました -- 生成が完了しました -- ビルドファイルは次の場所に書き込まれました: /root/tc/tpm-emulator/build
-
tpm-emulator のコンパイルとインストール
[root@localhost build]# make -j ここでは出力を省略します。。。 [root@localhost build]# make install [ 58%] ターゲットtpmをビルドしました [ 80%] ターゲットmtmをビルドしました [ 90%] ターゲットtpm_cryptoをビルドしました [ 92%] ターゲットtddlをビルドしました [ 94%] ターゲットtddl_staticをビルドしました [ 96%] ターゲットtest_tddlをビルドしました [ 98%] ターゲットtpmd_devをビルドしました [100%] ターゲットtpmdをビルドしました プロジェクトをインストールしています... -- インストール設定: "" -- インストール中: /usr/local/lib/libtddl.so.1.2.0.7 -- インストール中: /usr/local/lib/libtddl.so.1.2 -- インストール中: /usr/local/lib/libtddl.so -- インストール中: /usr/local/lib/libtddl.a -- インストール中: /usr/local/include/tddl.h プライベートキーを読み取れません -- インストール中: /usr/local/bin/tpmd "/usr/local/bin/tpmd"からランタイムパスを削除しました [root@localhost build]# modprobe tpmd_dev
-
tpm-emulator を起動します。
[root@localhost build]# tpmd -f tpmd.c:390: 情報: TPMエミュレータデーモンを起動中 (1.2.0.7-475) tpmd.c:93: 情報: オプションを解析中 tpmd.c:164: 情報: スタートアップモードが指定されていません; 'clear'を仮定します tpmd.c:198: 情報: シグナルハンドラをインストール中 tpmd.c:295: 情報: メインループを開始中 tpmd.c:265: 情報: ソケット/var/run/tpm/tpmd_socket:0を初期化中 tpm_emulator_extern.c:101: 情報: _tpm_extern_init() tpm_data.c:120: 情報: TPMデータをデフォルト値に初期化中 tpm_startup.c:29: 情報: TPM_Init() tpm_testing.c:243: 情報: TPM_SelfTestFull() tpm_testing.c:261: 情報: セルフテストに成功しました tpm_startup.c:43: 情報: TPM_Startup(1)
trousers のコンパイル#
-
新しいターミナルを開き、trousers ディレクトリに入り、
bootstrap
を使用してconfigure
を生成します。[root@localhost trousers-0.3.15]# sh bootstrap.sh + aclocal + libtoolize --force -c libtoolize: 補助ファイルを`.`に配置しています。 libtoolize: ファイル`./ltmain.sh`をコピーしています。 libtoolize: 正しいlibtoolマクロをツリー内に保持するために、`AC_CONFIG_MACRO_DIR([m4])`をconfigure.acに追加し、libtoolizeを再実行することを検討してください。 libtoolize: Makefile.amのACLOCAL_AMFLAGSに`-I m4`を追加することを検討してください。 + automake --add-missing -c --foreign + autoconf
-
configure
を使用して Makefile を生成します。[root@localhost trousers-0.3.15]# ./configure ここでは出力を省略します。。。
-
trousers のコンパイルとインストール
[root@localhost trousers-0.3.15]# make -j ここでは出力を省略します。。。 [root@localhost trousers-0.3.15]# make install ここでは出力を省略します。。。
-
インストールが成功したか確認し、
/usr/local/var/lib/tpm/
ディレクトリが存在するかチェックします。[root@localhost trousers-0.3.15]# ls /usr/local/var/lib/tpm/
-
trousers を起動します。
[root@localhost trousers-0.3.15]# tcsd -e -f TCSD TDDL ioctl: (25) デバイスに対して不適切なioctl TCSD TDDL 読み書きデバイスサポートにフォールバックします。 TCSD trousers 0.3.15: TCSDが起動しました。
同時に、前のターミナルで tpm-emulator は以下のような出力があるはずです。
tpm_startup.c:43: 情報: TPM_Startup(1) tpm_capability.c:697: 情報: TPM_GetCapability() tpm_cmd_handler.c:4084: 情報: TPMコマンドが成功しました tpm_capability.c:697: 情報: TPM_GetCapability() tpm_cmd_handler.c:4084: 情報: TPMコマンドが成功しました tpm_capability.c:697: 情報: TPM_GetCapability() tpm_cmd_handler.c:4084: 情報: TPMコマンドが成功しました tpm_capability.c:697: 情報: TPM_GetCapability() tpm_cmd_handler.c:4084: 情報: TPMコマンドが成功しました tpm_capability.c:697: 情報: TPM_GetCapability() tpm_cmd_handler.c:4084: 情報: TPMコマンドが成功しました tpm_capability.c:697: 情報: TPM_GetCapability() tpm_cmd_handler.c:4084: 情報: TPMコマンドが成功しました tpm_capability.c:697: 情報: TPM_GetCapability() tpm_cmd_handler.c:4084: 情報: TPMコマンドが成功しました
インストール環境の確認#
-
新しいターミナルを開き、trusted-computing-projectv0.3 ディレクトリに入り、make clean で以前のビルドをクリアし、その後コンパイルします。警告が出るのは正常で、エラーではありません。
[root@localhost trusted-computing-projectv0.3]# make clean ここでは出力を省略します。。。 [root@localhost trusted-computing-projectv0.3]# make ここでは出力を省略します。。。
-
init に移動し、take ownership と mig_key を作成します。
[root@localhost trusted-computing-projectv0.3]# cd init/ [root@localhost init]# ls create_mig_key create_mig_key.c Makefile Tspi_TPM_TakeOwnership01 Tspi_TPM_TakeOwnership01.c [root@localhost init]# ./Tspi_TPM_TakeOwnership01 -v 1.2 <<<test_start>>> Tspi_TPM_TakeOwnership01のテスト TESTSUITE_OWNER_SECRET:(null) TESTSUITE_SRK_SECRET:(null) 1 PASS : Tspi_TPM_TakeOwnership01 が(0) TSS_SUCCESSを返しました Tspi_TPM_TakeOwnership01のクリーンアップ <<<end_test>>> [root@localhost init]# ./create_mig_key -v 1.2 移行可能なキーの移行秘密を入力してください PINを入力してください: 確認中 - PINを確認しています: 成功
-
SealUnseal ディレクトリに移動し、seal と unseal をテストします。unseal できれば、環境に問題がないことを示します。
[root@localhost init]# cd ../SealUnseal/ [root@localhost SealUnseal]# ls extend extend.c hex-out.h Makefile seal seal.c sealedData seal_file seal_file.c test test.c unseal unseal.c [root@localhost SealUnseal]# ./seal -v 1.2 1 2 3 4 5 6 7 EncDataBlob: 00000000| 01 01 00 00 00 00 00 2c 00 02 00 80 c6 58 2c 81 .......,.....X,. 00000010| 00 7f 85 4e d3 87 3c 59 63 7a 01 8a 44 19 63 97 ...N..<Ycz..D.c. 00000020| c6 58 2c 81 00 7f 85 4e d3 87 3c 59 63 7a 01 8a .X,....N..<Ycz.. 00000030| 44 19 63 97 00 00 01 00 5d ee a6 34 cd e3 b2 e8 D.c.....]..4.... 00000040| a1 be ed 5f a6 20 67 86 17 ee fb 7c 40 2e 63 9a ..._. g....|@.c. 00000050| 76 12 6b d3 2e e6 7c bb 2f 77 3d af 07 c8 19 36 v.k...|./w=....6 00000060| d5 ef c6 74 5d 8e f0 8a 98 f2 5e 8c 22 f8 70 02 ...t].....^.".p. 00000070| 4c ca a3 4a 54 cd bf 39 1a 92 a9 2c c7 2b 96 28 L..JT..9...,.+.( 00000080| de 6e 7a f9 b3 36 62 e0 f5 c3 42 4b 74 0c 6d 6d .nz..6b...BKt.mm 00000090| 4f 65 33 1f 99 56 8e 5b 76 97 56 6e 68 17 f9 c1 Oe3..V.[v.Vnh... 000000a0| 0b 6a 81 7e dc 10 58 ed 8a 9a 03 5e e7 28 dc 87 .j.~..X....^.(.. 000000b0| c7 ba d3 95 d1 26 2c fe 8b 71 73 5b 27 23 5c b7 .....&,..qs['#\. 000000c0| 8b c9 1e f1 b8 52 ac 2b b9 a3 08 2c f8 c5 e4 95 .....R.+...,.... 000000d0| ba f2 20 ee 49 ee a7 6a 34 8d a1 b9 a9 e7 25 d8 .. .I..j4.....%. 000000e0| 28 14 58 d8 ab 47 4e dd 0a 8a 25 a4 b4 b7 69 f8 (.X..GN...%...i. 000000f0| 85 70 4c 7d af 10 12 56 42 2a e3 1d be 05 8f ff .pL}...VB*...... 00000100| 41 7c 2b 53 0c d6 f5 0f 61 6a c8 65 33 5b 02 3e A|+S....aj.e3[.> 00000110| d4 b0 30 7d 03 b0 b4 0a 09 12 18 ad 10 73 bd 83 ..0}.........s.. 00000120| 9f 2d 5e 46 57 37 1c 00 29 16 4b 44 68 e4 f2 95 .-^FW7..).KDh... 00000130| 9b 53 fe 0b 32 f1 48 78 .S..2.Hx 成功 [root@localhost SealUnseal]# ./unseal -v 1.2 シールされたデータ: 00000000| 01 01 00 00 00 00 00 2c 00 02 00 80 c6 58 2c 81 .......,.....X,. 00000010| 00 7f 85 4e d3 87 3c 59 63 7a 01 8a 44 19 63 97 ...N..<Ycz..D.c. 00000020| c6 58 2c 81 00 7f 85 4e d3 87 3c 59 63 7a 01 8a .X,....N..<Ycz.. 00000030| 44 19 63 97 00 00 01 00 5d ee a6 34 cd e3 b2 e8 D.c.....]..4.... 00000040| a1 be ed 5f a6 20 67 86 17 ee fb 7c 40 2e 63 9a ..._. g....|@.c. 00000050| 76 12 6b d3 2e e6 7c bb 2f 77 3d af 07 c8 19 36 v.k...|./w=....6 00000060| d5 ef c6 74 5d 8e f0 8a 98 f2 5e 8c 22 f8 70 02 ...t].....^.".p. 00000070| 4c ca a3 4a 54 cd bf 39 1a 92 a9 2c c7 2b 96 28 L..JT..9...,.+.( 00000080| de 6e 7a f9 b3 36 62 e0 f5 c3 42 4b 74 0c 6d 6d .nz..6b...BKt.mm 00000090| 4f 65 33 1f 99 56 8e 5b 76 97 56 6e 68 17 f9 c1 Oe3..V.[v.Vnh... 000000a0| 0b 6a 81 7e dc 10 58 ed 8a 9a 03 5e e7 28 dc 87 .j.~..X....^.(.. 000000b0| c7 ba d3 95 d1 26 2c fe 8b 71 73 5b 27 23 5c b7 .....&,..qs['#\. 000000c0| 8b c9 1e f1 b8 52 ac 2b b9 a3 08 2c f8 c5 e4 95 .....R.+...,.... 000000d0| ba f2 20 ee 49 ee a7 6a 34 8d a1 b9 a9 e7 25 d8 .. .I..j4.....%. 000000e0| 28 14 58 d8 ab 47 4e dd 0a 8a 25 a4 b4 b7 69 f8 (.X..GN...%...i. 000000f0| 85 70 4c 7d af 10 12 56 42 2a e3 1d be 05 8f ff .pL}...VB*...... 00000100| 41 7c 2b 53 0c d6 f5 0f 61 6a c8 65 33 5b 02 3e A|+S....aj.e3[.> 00000110| d4 b0 30 7d 03 b0 b4 0a 09 12 18 ad 10 73 bd 83 ..0}.........s.. 00000120| 9f 2d 5e 46 57 37 1c 00 29 16 4b 44 68 e4 f2 95 .-^FW7..).KDh... 00000130| 9b 53 fe 0b 32 f1 48 78 .S..2.Hx アンシールされたデータ: 00000000| 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 0123456789ABCDEF 00000010| 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 0123456789ABCDEF 成功
その他#
tpmd と tcsd に関する一連の問題は、一般的に tpmd がきれいにクリアされていないことが原因です。以下の手順で解決できることが多いです。
[root@localhost build]# tpmd deactivated
[root@localhost build]# killall tpmd
[root@localhost build]# tpmd clear
[root@localhost build]# tpmd deactivated
私のブログは近日中に Tencent Cloud + Community に同期される予定です。皆さんもぜひ参加してください:https://cloud.tencent.com/developer/support-plan?invite_code=owdvmxq0iwh9