英語

適用於 Linux 容器的虛擬 TPM 代理驅動程式

作者

本文件介紹了適用於 Linux 容器的虛擬可信平臺模組 (vTPM) 代理裝置驅動程式。

簡介

這項工作的目標是為每個 Linux 容器提供 TPM 功能。這使得程式能夠以與它們在物理系統上與 TPM 互動相同的方式在容器中與 TPM 互動。每個容器都有自己唯一的、模擬的、軟體 TPM。

設計

為了使模擬軟體 TPM 可用於每個容器,容器管理堆疊需要建立裝置對,包括客戶端 TPM 字元裝置 /dev/tpmX (其中 X=0,1,2...) 和“伺服器端”檔案描述符。前者透過建立具有適當主次編號的字元裝置來移動到容器中,而檔案描述符傳遞給 TPM 模擬器。容器內的軟體然後可以使用字元裝置傳送 TPM 命令,模擬器將透過檔案描述符接收命令並使用它來發送回響應。

為了支援這一點,虛擬 TPM 代理驅動程式提供了一個裝置 /dev/vtpmx,用於使用 ioctl 建立裝置對。ioctl 將配置裝置的標誌作為輸入。例如,這些標誌指示 TPM 模擬器是否支援 TPM 1.2 或 TPM 2 功能。ioctl 的結果是“伺服器端”的檔案描述符以及已建立的字元裝置的主次編號。除此之外,還會返回 TPM 字元裝置的編號。例如,如果建立了 /dev/tpm10,則返回編號 (dev_num) 10。

一旦建立了裝置,驅動程式將立即嘗試與 TPM 通訊。來自驅動程式的所有命令都可以從 ioctl 返回的檔案描述符中讀取。應該立即響應這些命令。

UAPI

enum vtpm_proxy_flags

代理 TPM 的標誌

常量

VTPM_PROXY_FLAG_TPM2

代理 TPM 使用 TPM 2.0 協議

struct vtpm_proxy_new_dev

VTPM_PROXY_IOC_NEW_DEV ioctl 的引數結構

定義:

struct vtpm_proxy_new_dev {
    __u32 flags;
    __u32 tpm_num;
    __u32 fd;
    __u32 major;
    __u32 minor;
};

成員

flags

代理 TPM 的標誌

tpm_num

TPM 裝置的索引

fd

代理 TPM 使用的檔案描述符

major

TPM 裝置的主編號

minor

TPM 裝置的次編號

long vtpmx_ioc_new_dev(struct file *file, unsigned int ioctl, unsigned long arg)

VTPM_PROXY_IOC_NEW_DEV ioctl 的處理程式

引數

struct file *file

/dev/vtpmx

unsigned int ioctl

ioctl 編號

unsigned long arg

指向 struct vtpmx_proxy_new_dev 的指標

描述

建立一個匿名檔案,該檔案被充當 TPM 的程序用於與客戶端程序通訊。該函式還將新增一個新的 TPM 裝置,透過該裝置將資料代理到此充當程序的 TPM。呼叫者將獲得一個檔案描述符,用於與客戶端通訊,以及 TPM 裝置的主次編號。