Estou tentando importar um par de chaves RSA para uma versão mais antiga do Cisco IOS (16.6.4). Essa versão antiga parece aceitar apenas chaves privadas codificadas em PEM que são criptografadas com DES ou 3DES. Pelo menos, essas cifras são as únicas opções ao exportar um par de chaves gerado no IOS:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,AD1E5D9E9F639C34
5Mjt+X9hZ6UCEi12axx6YTf4tvrf4xs61+90/YaGAZPPcL+Tyk2AKtq8jY5kzQxf
...
8K0+Fl8xKFtTdnaiyuN1jKgBg7WcwkmlBAmh3UxrmQ5awuuZUETuiA==
-----END RSA PRIVATE KEY-----
Este é um arquivo criptografado PKCS#1 e codificado em PEM.
Quero importar um par de chaves gerado da minha caixa Linux. Acho que preciso que o arquivo se pareça com a exportação mostrada acima, que é criptografada com DES ou 3DES. Aqui está minha tentativa fracassada.
Primeiro, gero um par de chaves RSA não criptografadas usando o OpenSSL 3.4.0:
$ openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:1024 \
-out key.pem -outpubkey pub.pem
$ cat key.pem
-----BEGIN PRIVATE KEY-----
MIICdAIBADANBgkqhkiG9w0BAQEFAASCAl4wggJaAgEAAoGBAOC7vNjQatCODHKq
...
ImgXjyNR9xs=
-----END PRIVATE KEY-----
Parece que esta é uma chave privada codificada em PKCS#8 ( BEGIN PRIVATE KEY
vs BEGIN RSA PRIVATE KEY
; também openssl asn1parse
mostra uma estrutura que a identifica como rsaEncryption
e, em seguida, um blob binário em vez de apenas um despejo do material da chave privada).
Li que ssh-keygen
é possível converter PKCS#8 em PKCS#1 e criptografá-lo.
Minha versão do OpenSSH (9.9p1) aparece em ssh-keygen(1)
:
-Z cifra
Especifica a cifra a ser usada para criptografia ao escrever um arquivo de chave privada no formato OpenSSH. A lista de cifras disponíveis pode ser obtida usando "ssh -Q cipher". O padrão é “aes256-ctr”.
Então listo todas as cifras que o SSH conhece:
$ssh -Q cipher
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
aes128-ctr
aes192-ctr
aes256-ctr
[email protected]
[email protected]
[email protected]
Então eu tento:
$ ssh-keygen -Z 3des-cbc -f key.pem -m pem -p -N foobarbaz
Your identification has been saved with the new passphrase.
No entanto:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,40F4524E862B346BC384C20AEEC89C1C
VhjXes5OMDEfIkSiGWI89v2jZlxiPJ3KpBfhI0fr3d1ffVXvATK6F3K86SFfvikY
...
7K6eCoJ1+LE/e71Nrsm/SW3qcPJIEP3I8+DtwGerw5TYIH2wnFv/J6X6zfnLJjDn
-----END RSA PRIVATE KEY-----
Ele diz que criptografou com AES-128-CBC, apesar de ter sido instruído a usar
3des-cbc
(e apesar do manual dizer que aes-256-ctr
é o padrão). Qualquer cifra disponível que eu coloquei de ssh -Q cipher
, ele sempre produzirá um arquivo com AES-128-CBC.
Onde estou errando ou o que estou esquecendo?
Editar
Lendo mais de perto, acabei de perceber que o manual diz
Especifica a cifra a ser usada para criptografia ao gravar um arquivo de chave privada no formato OpenSSH .
E de fato:
$ ssh-keygen -Z 3des-cbc -p -N foobarbaz -f priv.key
$ tail -n +2 priv.key | head -n -1 | base64 -d | xxd -l 32
00000000: 6f70 656e 7373 682d 6b65 792d 7631 0000 openssh-key-v1..
00000010: 0000 0833 6465 732d 6362 6300 0000 0662 ...3des-cbc....b
Portanto, ele usa AES-128-CBC ao converter para PEM, mas respeita a -Z
troca ao usar seu próprio formato.
Nova pergunta
Então a questão é: qual ferramenta posso usar para criptografar minha chave RSA privada com 3DES?