1.実験の目的:
- データとハードウェアをバインドする方法に精通していること。
- データバインディングに対するキー入力の影響を理解します。
- ハードウェア関連のプログラミングプロセスと実装手順を習得します。
2.実験的な内容、手順、結論
1.実験的な内容
- データバインディング構造、キータイプ、キー長、キーフィルタイプなどに従ってデータとハードウェアバインディングプログラムを設計し、TPMに基づいてデバッグする
2.実験手順
1.関連モジュールを起動します
(1)TPMを起動します
sudo su
modprobe tpmd_dev
tpmd -f -d //-d 进入debug 模式 -f 使应用在前台运行
(2)tcsdを起動する
sudo su
tcsd -e -f
(3)所有者とSRKパスワードを設定する
tpm_takeownership -u
(4)コードの
記述コードの記述の流れは以下のとおりです。
コンテキストオブジェクトの
作成... TPMオブジェクトの作成...
SRKキーのロード...
SRKキーオブジェクトの取得... SRKポリシー認証の設定...バインドキーの作成...
TPMキーの生成前、フィルタイプの設定... …
PCRにバインドされていないキーを生成します。
バインドキーをUUIDにロードします...
データバインドを実行します...
コードによって呼び出されるインターフェイスの順序は次のとおりです
- Tspi_Context_Create(&hContext):コンテキストオブジェクトを作成します
- Tspi_Context_Connect(hContext、NULL):接続コンテキスト
- Tspi_Context_GetTpmObject(hContext、&hTPM):暗黙的に作成されたTPMオブジェクトのハンドルを取得します
- Tspi_GetPolicyObject(hTPM、TSS_POLICY_USAGE、およびhownerpolicy):TSPによって暗黙的に作成されたポリシーオブジェクトを取得します
- Tspi_Policy_SetSecret(hownerpolicy、TSS_SECRET_MODE_POPUP、0、NULL):シークレットを設定します
- Tspi_Context_LoadKeyByUUID(hContext、TSS_PS_TYPE_SYSTEM、SRK_UUID、およびhSRK):UUIDに従ってSRKキーをロードします
- Tspi_GetPolicyObject(hSRK、TSS_POLICY_USAGE、およびhSRKPolicy):SRKポリシーオブジェクトを取得します
- Tspi_Policy_SetSecret(hSRKPolicy、TSS_SECRET_MODE_POPUP、0、NULL):SRKポリシー認証を設定します
- Tspi_Context_CreateObject(hContext、TSS_OBJECT_TYPE_RSAKEY、initFlags、&hkey):キーフラグinitFlagsを設定してバインディングキーを作成し、hkeyは暗号化されたデータブロックを保存します
- Tspi_SetAttribUint32(hkey、TSS_TSPATTRIB_KEY_INFO、TSS_TSPATTRIB_KEYINFO_ENCSCHEME、T SS_ES_RSAESPKCSV15):TPMがキーを生成する前にパディングタイプを設定します
- Tspi_Key_CreateKey(hkey、hSRK、0):PCRにバインドされていないキーを生成します
- Tspi_Context_RegisterKey(hContext、hkey、TSS_PS_TYPE_USER、bindkeyUUID、TSS_PS_TYPE_SY STEM、SRK_UUID):バインディングキーをUUIDにロードします
- Tspi_Context_CreateObject(hContext、TSS_OBJECT_TYPE_ENCDATA、TSS_ENCDATA_BIND、およびhEncD ata):暗号化されたデータオブジェクトを作成します
- Tspi_GetAttribUint32(hkey、TSS_TSPATTRIB_KEY_INFO、TSS_TSPATTRIB_KEYINFO_SIZE、およびkeyssi ze):この手順を実行した後、暗号化されるデータの長さをキーサイズ-16のサイズと比較して、暗号化されたデータが大きくなりすぎないようにする必要があります
- Tspi_Data_Bind(hEncData、hkey、strlen(in)、in):バインドデータ
- Tspi_GetAttribData(hEncData、TSS_TSPATTRIB_ENCDATA_BLOB、TSS_TSPATTRIB_ENCDATABLOB_B LOB、&blobLen、&blob):この手順の後、暗号化されたblobが大きすぎる場合は、blobLenと* blobのサイズを比較する必要があります
- Tspi_Context_Close(hContext):コンテキストを閉じます
(5)コードをコンパイルして実行する
sudo su
gcc -o 20175318exp3 20175318exp3.c -ltspi
./20175318exp3
ダウンロード:20175318exp3.c
3.実験的結論
sb