適用於 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_DEVioctl 的引數結構
定義:
struct vtpm_proxy_new_dev {
__u32 flags;
__u32 tpm_num;
__u32 fd;
__u32 major;
__u32 minor;
};
成員
flags代理 TPM 的標誌
tpm_numTPM 裝置的索引
fd代理 TPM 使用的檔案描述符
majorTPM 裝置的主編號
minorTPM 裝置的次編號
-
long vtpmx_ioc_new_dev(struct file *file, unsigned int ioctl, unsigned long arg)¶
VTPM_PROXY_IOC_NEW_DEVioctl 的處理程式
引數
struct file *file/dev/vtpmx
unsigned int ioctlioctl 編號
unsigned long arg指向 struct vtpmx_proxy_new_dev 的指標
描述
建立一個匿名檔案,該檔案被充當 TPM 的程序用於與客戶端程序通訊。該函式還將新增一個新的 TPM 裝置,透過該裝置將資料代理到此充當程序的 TPM。呼叫者將獲得一個檔案描述符,用於與客戶端通訊,以及 TPM 裝置的主次編號。