Cheat sheet de chaves SSH protegidas por TPM2.0

Como instalar os pacotes

Para cada computador:

install_tpm2_pkcs11.sh
sudo apt install libtpm2-pkcs11-tools libtpm2-pkcs11-1

Como habilitar o acesso para um usuário específico

Como cada usuário que deve ter acesso:

usermod_add_tss_group.sh
sudo usermod -a -G tss "$(id -nu)"

ou, se o usuário não puder usar sudo:

tpm2_ptool_init.sh
sudo usermod -a -G tss USERNAME

Como inicializar o driver TPM-SSH

Execute isto uma vez em cada computador:

tpm2_ptool_addtoken_ecc.sh
tpm2_ptool init

Saída de exemplo:

ssh_key_display_command.sh
action: Created
id: 1

Como criar uma chave

Primeiro, adicione um token:

  • Recomenda-se que o label seja ssh, mas você pode usar qualquer rótulo que desejar.
  • Escolha um userpin que será a senha da chave. Você precisará digitar essa senha ao usar a chave.
  • Escolha um sopin que é como a senha de administrador daquele token. Você precisará digitar essa senha quando precisar redefinir a senha do usuário.

Recomendo escolher ambas as senhas usando um gerenciador de senhas.

tpm2_ptool_addtoken.sh
tpm2_ptool addtoken --pid=1 --label=ssh --userpin=aefu9Haqua --sopin=be4eeneela1iegh3BeeT9aighohC8k

Se bem-sucedido, este comando não retorna nenhuma saída.

Agora podemos criar uma chave para esse token:

Você precisa usar a senha de usuário que usou antes

tpm2_ptool_addkey.sh
tpm2_ptool addkey --label=ssh --userpin=MySecretPassword --algorithm=ecc256

Se você precisar de uma chave RSA (não recomendado!), use --algorithm=rsa4096 em vez disso. Não recomendo usar chaves RSA menores que 4096 bits!

Para uma lista de algoritmos potencialmente suportados (nem todo TPM suporta todas as curvas elípticas, por exemplo), consulte Quais algoritmos de chave o TPM2.0 / tpm2_ptool suporta?.

Em caso de sucesso, este comando mostrará uma saída como

tpm2_addkey_output.txt
action: add
private:
  CKA_ID: '73982040827406721063241421723261'
public:
  CKA_ID: '73982040827406721063241421723261'

Como exibir a chave pública

ssh_key_display_command.sh
ssh-keygen -D /usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so

Como usar a chave

Em ~/.ssh/config, adicione:

ssh_config_example
Host myserver
  PKCS11Provider /usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so
  PasswordAuthentication no

Depois disso, você pode simplesmente

ssh_example.sh
ssh server

Se você precisar usá-la em um comando SSH sem usar o ~/.ssh/config, você pode especificar:

ssh_direct_with_pkcs11.sh
ssh -o PKCS11Provider=/usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so -o PasswordAuthentication=no user@server

Posts relacionados (tópicos avançados ou perigosos)


Check out similar posts by category: Linux