新的 Skylake 处理器内部集成了 TPM 2.0。
有什么方法可以在 Windows 和 Linux 上将 TPM 2.0 用作对称和非对称密钥的 PKCS#11 令牌?
TPM 1.2 有一个 PKCS#11 库,我正在为 TPM 2.0 寻找类似的东西来使用其新的 RSA 密钥和证书层次结构。
新的 Skylake 处理器内部集成了 TPM 2.0。
有什么方法可以在 Windows 和 Linux 上将 TPM 2.0 用作对称和非对称密钥的 PKCS#11 令牌?
TPM 1.2 有一个 PKCS#11 库,我正在为 TPM 2.0 寻找类似的东西来使用其新的 RSA 密钥和证书层次结构。
- 这是一个有点老的问题,但我设法找到了一个适合我的解决方案。
那里的可用Github上,提供PKCS#11后端的TPM 2.0芯片的模块。
创建 TPM 密钥
使用散列算法 sha256 和密钥算法 rsa 创建主键,并将对象上下文存储在文件中 ( po.ctx
)。
tpm2_createprimary -H o -g sha256 -G rsa -C po.ctx
现在po.ctx
使用散列算法 SHA256 和密钥算法 RSA 将公钥和私钥从文件 ( ) 中创建一个可以加载到 TPM 中的对象,并将公钥和私钥输出到key.pub|priv
.
tpm2_create -c po.ctx -g sha256 -G rsa -u key.pub -r key.priv
将私钥和公钥加载到 TPM 的临时内存中。
tpm2_load -c po.ctx -u key.pub -r key.priv -C obj.ctx
使对象持久化,指定一个有效的句柄。
tpm2_evictcontrol -A o -c obj.ctx -H 0x81010010
现在您可以删除所有临时文件。
rm key.name *.ctx
安装 TPM2-PK11 并复制config.sample
到~/.tpm2/config
.
创建证书(例如,使用 Certtool (GnuTLS))。
将您的应用程序配置为使用 TPM2-PK11 和创建的 TPM 密钥。
创建配置文件并根据您的设置进行更改:
cp config.sample ~/.tpm2/config
提取公钥:
ssh-keygen -D libtpm2-pk11.so
使用您的 TPM 密钥:
ssh -I libtpm2-pk11.so ssh.example.com
或将 PKCS#11 模块添加到您的 ssh 配置中~/.ssh/config
:
Host *
PKCS11Provider libtpm2-pk11.so
Preferences
,Privacy & Security
然后单击 按钮Security Devices
。libtpm2-pk11.so
安装在您的系统上。另一种 TPM2 PKCS#11 实现是https://github.com/tpm2-software/tpm2-pkcs11。这是 TCG(可信计算集团)TSS2(TPM2 软件堆栈)的一部分,我相信它是“官方”TPM2 软件。因此,我猜“你应该”使用它而不是可能较旧的 tpm2-pk11。事实上,我看过一个演示文稿(https://events19.linuxfoundation.org/wp-content/uploads/2017/12/TPM-Software-Stack-2018-10-25-final_Peter-Huewe.pdf) tpm2-pkcs11 是“基于 irtimmer 的 PKCS#11 TPM2.0 工作”(幻灯片 25)。