将 pkcs12 上传到 yubikey piv 插槽

信息安全 加密 优比键 pkcs11 pkcs12
2021-09-12 04:43:56

我有一个 id_rsa (我用来认证和加密的私钥以及插槽 9a 上的 yubikey piv smardcart 提供程序上的证书)现在我希望使用这个密钥来创建一个 pkcs12 密钥库(私钥 + 自签名证书)来签名jar 文件(android apk)通过 yubikey piv 上的其他插槽

我以这种方式创建了 pkcs 商店:

$ openssl req -new -key id_rsa -out server.csr 
$ openssl x509 -req -days 3650 -in server.csr -signkey id_rsa -out server.crt
$ openssl pkcs12 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in server.crt -inkey id_rsa -out server.crt.p12 -name "Singnin cert"

当我尝试通过以下方式将这些 pkcs12(或作为单独的密钥/证书)上传到插槽 9c 时:

导入密钥和证书,执行以下操作之一:

  • 在插槽 9a 中导入密钥和证书(PEM 格式):

      $ yubico-piv-tool -s 9a -a import-key -i key.pem
      $ yubico-piv-tool -s 9a -a import-certificate -i cert.pem
    
  • 在插槽 9a 中导入密钥和证书(PKCS12 格式):

      $ yubico-piv-tool -s 9a -a import-key -a import-cert -i key.p12 -K PKCS12
    

我得到错误

Enter Password: 
Invalid public exponent for import (only 0x10001 supported)
Unable to import private key

附言。我使用管理密钥

我尝试将 id_rsa 转换为 pkcs8 或删除密码短语

谁能解释一下这个错误是什么?我有关于这个的谷歌,但没有运气

我的 idr_rsa

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,[some numbers I've cut]

YUBIKEY PIV 证书插槽

启用 PIV 的 YubiKey 拥有 4 个不同的证书插槽,如 PIV 标准文档中所述。这些插槽中的每一个都能够保存 X.509 证书及其随附的私钥。从技术上讲,这四个插槽非常相似,但它们用于不同的目的。

插槽 9a:PIV 身份验证 此证书及其关联的私钥用于对卡和持卡人进行身份验证。此插槽用于系统登录等操作。执行任何私钥操作都需要最终用户 PIN。成功提供 PIN 后,无需额外持卡人同意即可执行多个私钥操作。

插槽 9c:数字签名 此证书及其关联的私钥用于数字签名,以用于文档签名或签名文件和可执行文件。执行任何私钥操作都需要最终用户 PIN。每次签名操作前都必须提交 PIN,以确保持卡人参与生成的每个数字签名。

插槽 9d:密钥管理 该证书及其关联的私钥用于加密,以实现机密性。此插槽用于加密电子邮件或文件等。执行任何私钥操作都需要最终用户 PIN。成功提供 PIN 后,无需额外持卡人同意即可执行多个私钥操作。

插槽 9e:卡身份验证 此证书及其关联的私钥用于支持其他物理访问应用程序,例如通过启用 PIV 的门锁提供对建筑物的物理访问。执行此插槽的私钥操作不需要最终用户 PIN。

我读过了:

https://crypto.stackexchange.com/questions/3110/impacts-of-not-using-rsa-exponent-of-65537

https://crypto.stackexchange.com/questions/10809/openssl-rsa-how-many-public-exponents-are-possible

出于安全考虑,RSA 公共指数是否应该仅在 {3、5、17、257 或 65537} 中?

https://stackoverflow.com/questions/10736382/what-does-e-is-65537-0x10001-mean

附言。我有转储txt通过

$ openssl rsa -text -in id_rsa

并且有

publicExponent: 37 (0x25)

有没有办法将公共指数更改为 0x10001?还是我已经生成了新密钥;/和所有证书都从头开始?

ps2。

我已经挖出了这样一个关于可能性的文字,但没有进一步的解释

https://crypto.stackexchange.com/questions/30316/is-it-possible-to-correct-the-exponent-of-an-rsa-public-key-if-it-has-been-alter

1个回答

https://crypto.stackexchange.com/questions/33728/uploading-pkcs12-to-yubikey-piv-slot的交叉点,这是离题的。)理论上可以在保持 n 的同时更改公共指数,只要new e 与 p-1 和 q-1 互质,对于 F4,你很有可能做到这一点。但这比生成新的密钥对要多得多,而且它确实需要重新生成证书。

我猜你是用ssh-keygenOpenSSH 生成的 RSA 密钥对;这是我知道的唯一一个选择 e=37 的常用工具,它也默认为 filename id_rsa简单的答案是使用 OpenSSL 生成密钥对,默认为 e=65537 aka F4(在命令行中)。此外,req可以将密钥对生成与 CSR 创建结合起来,除非您需要保留 CSR 文件,否则也可以跳过 CSR 并通过添加以下内容直接生成自签名证书-x509

openssl req -newkey RSA:bits -x509 -days 3650 -keyout privatekey -out server.crt
# proceed with PKCS12 conversion etc.

如果您打算将其用于 SSH,请注意 OpenSSH 可以很好地使用e=65537 的 RSA 密钥;它根本不会产生一个。