Hoja de referencia de claves SSH protegidas con TPM2.0

Cómo instalar los paquetes

Para cada computadora:

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

Cómo habilitar acceso para un usuario específico

Como cada usuario que debería tener acceso:

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

o, si el usuario no puede usar sudo:

tpm2_ptool_init.sh
sudo usermod -a -G tss USERNAME

Cómo inicializar el driver TPM-SSH

Ejecuta esto una vez en cada computadora:

tpm2_ptool_addtoken_ecc.sh
tpm2_ptool init

Ejemplo de salida:

ssh_key_display_command.sh
action: Created
id: 1

Cómo crear una clave

Primero, añade un token:

  • Se recomienda que la etiqueta sea ssh, pero puedes usar cualquier etiqueta que quieras.
  • Elige un userpin que es la contraseña para la clave. Necesitarás introducir esta contraseña al usar la clave.
  • Elige un sopin que es como la contraseña de administrador para ese token. Necesitarás introducir esta contraseña cuando necesites restablecer la contraseña del usuario.

Recomiendo elegir ambas contraseñas usando un gestor de contraseñas.

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

Si tiene éxito, este comando no devuelve ninguna salida.

Ahora podemos crear una clave para ese token:

Necesitas usar la contraseña de usuario que usaste antes

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

Si necesitas una clave RSA (¡no recomendado!), usa --algorithm=rsa4096 en su lugar. ¡No recomiendo usar claves RSA más cortas que 4096 bits!

Para una lista de algoritmos potencialmente soportados (no todos los TPMs soportan cada curva elíptica, por ejemplo), ver ¿Qué algoritmos de clave soportan TPM2.0 / tpm2_ptool?.

Si tiene éxito, este comando te mostrará una salida como

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

Cómo mostrar la clave pública

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

Cómo usar la clave

En ~/.ssh/config, añade:

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

Después de eso, simplemente puedes

ssh_example.sh
ssh server

Si necesitas usarlo en un comando SSH sin usar ~/.ssh/config, puedes 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 (temas avanzados o peligrosos)


Echa un vistazo a artículos similares por categoría: Linux