如何使用 Linux 管理 TPM2 中的 RSA 密钥对

如何使用 Linux 管理 TPM2 中的 RSA 密钥对

我正在尝试使用笔记本电脑中的 TPM 2.0 芯片来管理新的 RSA 密钥对并在新的私钥之上创建 CSR,但是当我列出由我的 TPM 管理的证书时,我只得到了标记为公共的密钥,并且不知道如何获取我想要用于生成 CSR 的私钥的 URL。

我使用了以下步骤:

#generate rsa key:
p11tool --login --so-login --generate-rsa --bits=2048 --label=dave4 "$token"```

#list my certificates:
p11tool --list-all ""

但是,当我尝试列出所有证书时,它们所获得的 URL 都被标记为公开:

pkcs11:model=NPCT75x;manufacturer=Nuvoton;serial=0000000000000000;token=dave4;id=%34%39%30%66%65%35%65%34%30%30%34%64%65%33%65%30;object=myfirstkey;type=public

并且列出私钥不返回任何对象:

p11tool --list-privkeys pkcs11:model=NPCT75x;manufacturer=Nuvoton;serial=0000000000000000;token=dave4
No matching objects found

您是否知道如何获取私钥 URL 列表或其他方法如何生成新的 rsa 密钥对以便随后创建 CSR?

谢谢。

答案1

通常这些对象是用 CKA_PRIVATE 属性创建的,表示它们在正常列表中是隐藏的——您必须指定--login并提供令牌 PIN 才能查看它们。

p11tool --login --list-privkeys 'pkcs11:model=NPCT75x;manufacturer=Nuvoton;token=dave4'

但是如果 PKCS#11 模块存储了私钥,那么公钥和私钥部分的 URI 几乎总是具有完全相同的id=,因此您可以手动编辑 URI。私钥可能具有不同的object=标签(因此删除该参数),并且它当然会具有type=private

例如,这应该是一个有效的 URL:

pkcs11:model=NPCT75x;manufacturer=Nuvoton;serial=0000000000000000;token=dave4;id=%34%39%30%66%65%35%65%34%30%30%34%64%65%33%65%30;object=myfirstkey;type=private

甚至:

pkcs11:model=NPCT75x;token=dave4;id=%34%39%30%66%65%35%65%34%30%30%34%64%65%33%65%30;type=private
pkcs11:model=NPCT75x;token=dave4;object=myfirstkey;type=private

注意tpm-pkcs11还远未完成。最近有很多与 API 相关的错误修复(其中一些昨天就合并了)。

相关内容