Windows 和 Linux 上的 TPM 2.0 PKCS#11

信息安全 tpm pkcs11
2021-09-08 23:24:24

新的 Skylake 处理器内部集成了 TPM 2.0。

有什么方法可以在 Windows 和 Linux 上将 TPM 2.0 用作对称和非对称密钥的 PKCS#11 令牌?

TPM 1.2 有一个 PKCS#11 库,我正在为 TPM 2.0 寻找类似的东西来使用其新的 RSA 密钥和证书层次结构。

2个回答

- 这是一个有点老的问题,但我设法找到了一个适合我的解决方案。

那里的可用Github上,提供PKCS#11后端的TPM 2.0芯片的模块。

用法:

  1. 创建 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
      
  2. 安装 TPM2-PK11 并复制config.sample~/.tpm2/config.

  3. 创建证书(例如,使用 Certtool (GnuTLS))。

  4. 将您的应用程序配置为使用 TPM2-PK11 和创建的 TPM 密钥。

OpenSSH 客户端:

  • 创建配置文件并根据您的设置进行更改:

    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
    

火狐:

  • 转到PreferencesPrivacy & Security然后单击 按钮Security Devices
  • 按加载并选择libtpm2-pk11.so安装在您的系统上。
  • 加载后,TPM2 PKCS11 插槽现在应该列在设备管理器中,并且在您的证书下选择查看证书时应该列出您的证书。

另一种 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)。